summaryrefslogtreecommitdiff
path: root/frontend-old/node_modules/@grpc
diff options
context:
space:
mode:
Diffstat (limited to 'frontend-old/node_modules/@grpc')
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/LICENSE201
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/README.md79
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/admin.d.ts11
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js31
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts90
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js174
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts56
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js153
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.d.ts86
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js84
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.d.ts1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js25
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call.d.ts83
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call.js136
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/call.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts83
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js177
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.d.ts72
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js69
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel.d.ts76
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js68
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.d.ts109
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js637
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts120
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js428
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/client.d.ts75
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/client.js431
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/client.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts5
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js26
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.d.ts28
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js288
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts7
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js28
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/constants.d.ts38
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js64
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.d.ts5
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js43
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.d.ts14
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js98
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/duration.d.ts7
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js35
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/error.d.ts2
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/error.js41
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/error.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/events.d.ts9
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/events.js19
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/events.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.d.ts16
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js39
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts22
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js82
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/filter.d.ts26
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js38
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.d.ts72
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js3
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.d.ts6
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.d.ts7
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.d.ts6
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.d.ts9
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.d.ts6
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.d.ts6
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts7
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.d.ts6
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts9
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.d.ts6
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.d.ts7
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts80
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts64
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts24
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js14
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts72
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts27
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts41
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts74
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js15
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts159
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts15
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts15
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts35
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts29
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts33
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts29
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts25
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts15
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts15
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts33
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts29
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts80
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts41
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts53
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts27
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts66
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts146
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts43
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.d.ts29
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.d.ts70
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.d.ts15
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts27
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts66
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts27
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js4
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.d.ts17
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js260
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/index.d.ts77
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/index.js140
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/index.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.d.ts118
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js533
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts24
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js151
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts61
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js608
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.d.ts97
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js393
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.d.ts21
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js174
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts97
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js103
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.d.ts45
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js269
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/logging.d.ts8
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js114
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.d.ts72
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js144
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.d.ts87
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js249
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.d.ts28
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js19
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/picker.d.ts91
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js78
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.d.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js328
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.d.ts1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js105
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.d.ts1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js51
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.d.ts105
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js88
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.d.ts45
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js273
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.d.ts67
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js304
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.d.ts95
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js639
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.d.ts162
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js695
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js81
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server.d.ts56
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server.js892
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/server.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.d.ts56
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js417
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.d.ts28
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js68
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.d.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js100
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts18
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js66
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.d.ts63
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js470
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts49
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js59
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.d.ts40
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js137
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.d.ts119
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js353
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.d.ts3
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js34
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/transport.d.ts134
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js644
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts12
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js111
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/package.json85
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/proto/channelz.proto564
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/admin.ts45
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/backoff-timeout.ts196
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/call-credentials.ts226
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/call-interface.ts173
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/call-number.ts22
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/call.ts200
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/channel-credentials.ts267
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/channel-options.ts119
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/channel.ts174
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/channelz.ts886
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/client-interceptors.ts577
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/client.ts715
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/compression-algorithms.ts22
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/compression-filter.ts350
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/connectivity-state.ts24
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/constants.ts66
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/control-plane-status.ts43
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/deadline.ts95
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/duration.ts36
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/error.ts37
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/events.ts26
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/experimental.ts48
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/filter-stack.ts100
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/filter.ts63
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/channelz.ts73
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Any.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BoolValue.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BytesValue.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/DoubleValue.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Duration.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/FloatValue.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int32Value.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int64Value.ts11
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/StringValue.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Timestamp.ts13
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt32Value.ts10
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt64Value.ts11
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Address.ts89
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channel.ts68
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelConnectivityState.ts45
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelData.ts76
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelRef.ts31
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTrace.ts45
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTraceEvent.ts91
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channelz.ts178
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelRequest.ts17
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelResponse.ts19
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerRequest.ts17
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerResponse.ts19
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsRequest.ts39
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsResponse.ts33
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersRequest.ts37
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersResponse.ts33
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketRequest.ts29
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketResponse.ts19
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelRequest.ts17
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelResponse.ts19
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsRequest.ts37
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsResponse.ts33
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Security.ts87
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Server.ts45
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerData.ts57
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerRef.ts31
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Socket.ts70
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketData.ts150
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOption.ts47
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionLinger.ts33
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.ts74
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTimeout.ts19
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketRef.ts31
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Subchannel.ts70
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SubchannelRef.ts31
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/http_proxy.ts311
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/index.ts284
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/internal-channel.ts830
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-child-handler.ts169
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-outlier-detection.ts882
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-pick-first.ts487
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-round-robin.ts249
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/load-balancer.ts230
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/load-balancing-call.ts351
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/logging.ts123
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/make-client.ts238
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/metadata.ts298
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/object-stream.ts66
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/picker.ts146
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/resolver-dns.ts412
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/resolver-ip.ts120
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/resolver-uds.ts63
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/resolver.ts180
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/resolving-call.ts331
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/resolving-load-balancer.ts403
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/retrying-call.ts821
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/server-call.ts1022
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/server-credentials.ts108
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/server.ts1300
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/service-config.ts542
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/status-builder.ts80
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/stream-decoder.ts110
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/subchannel-address.ts88
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/subchannel-call.ts547
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/subchannel-interface.ts97
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/subchannel-pool.ts176
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/subchannel.ts482
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/tls-helpers.ts35
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/transport.ts829
-rw-r--r--frontend-old/node_modules/@grpc/grpc-js/src/uri-parser.ts114
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/LICENSE201
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/README.md140
-rwxr-xr-xfrontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js913
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/build/src/index.d.ts160
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/build/src/index.js244
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/build/src/index.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/build/src/util.d.ts27
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/build/src/util.js89
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/build/src/util.js.map1
-rw-r--r--frontend-old/node_modules/@grpc/proto-loader/package.json69
443 files changed, 39109 insertions, 0 deletions
diff --git a/frontend-old/node_modules/@grpc/grpc-js/LICENSE b/frontend-old/node_modules/@grpc/grpc-js/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/frontend-old/node_modules/@grpc/grpc-js/README.md b/frontend-old/node_modules/@grpc/grpc-js/README.md
new file mode 100644
index 0000000..eb04ece
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/README.md
@@ -0,0 +1,79 @@
+# Pure JavaScript gRPC Client
+
+## Installation
+
+Node 12 is recommended. The exact set of compatible Node versions can be found in the `engines` field of the `package.json` file.
+
+```sh
+npm install @grpc/grpc-js
+```
+
+## Documentation
+
+Documentation specifically for the `@grpc/grpc-js` package is currently not available. However, [documentation is available for the `grpc` package](https://grpc.github.io/grpc/node/grpc.html), and the two packages contain mostly the same interface. There are a few notable differences, however, and these differences are noted in the "Migrating from grpc" section below.
+
+## Features
+
+- Clients
+- Automatic reconnection
+- Servers
+- Streaming
+- Metadata
+- Partial compression support: clients can compress and decompress messages, and servers can decompress request messages
+- Pick first and round robin load balancing policies
+- Client Interceptors
+- Connection Keepalives
+- HTTP Connect support (proxies)
+
+If you need a feature from the `grpc` package that is not provided by the `@grpc/grpc-js`, please file a feature request with that information.
+
+This library does not directly handle `.proto` files. To use `.proto` files with this library we recommend using the `@grpc/proto-loader` package.
+
+## Migrating from [`grpc`](https://www.npmjs.com/package/grpc)
+
+`@grpc/grpc-js` is almost a drop-in replacement for `grpc`, but you may need to make a few code changes to use it:
+
+- If you are currently loading `.proto` files using `grpc.load`, that function is not available in this library. You should instead load your `.proto` files using `@grpc/proto-loader` and load the resulting package definition objects into `@grpc/grpc-js` using `grpc.loadPackageDefinition`.
+- If you are currently loading packages generated by `grpc-tools`, you should instead generate your files using the `generate_package_definition` option in `grpc-tools`, then load the object exported by the generated file into `@grpc/grpc-js` using `grpc.loadPackageDefinition`.
+- If you have a server and you are using `Server#bind` to bind ports, you will need to use `Server#bindAsync` instead.
+- If you are using any channel options supported in `grpc` but not supported in `@grpc/grpc-js`, you may need to adjust your code to handle the different behavior. Refer to [the list of supported options](#supported-channel-options) below.
+- Refer to the [detailed package comparison](https://github.com/grpc/grpc-node/blob/master/PACKAGE-COMPARISON.md) for more details on the differences between `grpc` and `@grpc/grpc-js`.
+
+## Supported Channel Options
+Many channel arguments supported in `grpc` are not supported in `@grpc/grpc-js`. The channel arguments supported by `@grpc/grpc-js` are:
+ - `grpc.ssl_target_name_override`
+ - `grpc.primary_user_agent`
+ - `grpc.secondary_user_agent`
+ - `grpc.default_authority`
+ - `grpc.keepalive_time_ms`
+ - `grpc.keepalive_timeout_ms`
+ - `grpc.keepalive_permit_without_calls`
+ - `grpc.service_config`
+ - `grpc.max_concurrent_streams`
+ - `grpc.initial_reconnect_backoff_ms`
+ - `grpc.max_reconnect_backoff_ms`
+ - `grpc.use_local_subchannel_pool`
+ - `grpc.max_send_message_length`
+ - `grpc.max_receive_message_length`
+ - `grpc.enable_http_proxy`
+ - `grpc.default_compression_algorithm`
+ - `grpc.enable_channelz`
+ - `grpc.dns_min_time_between_resolutions_ms`
+ - `grpc.enable_retries`
+ - `grpc.per_rpc_retry_buffer_size`
+ - `grpc.retry_buffer_size`
+ - `grpc.service_config_disable_resolution`
+ - `grpc.client_idle_timeout_ms`
+ - `grpc-node.max_session_memory`
+ - `grpc-node.tls_enable_trace`
+ - `channelOverride`
+ - `channelFactoryOverride`
+
+## Some Notes on API Guarantees
+
+The public API of this library follows semantic versioning, with some caveats:
+
+- Some methods are prefixed with an underscore. These methods are internal and should not be considered part of the public API.
+- The class `Call` is only exposed due to limitations of TypeScript. It should not be considered part of the public API.
+- In general, any API that is exposed by this library but is not exposed by the `grpc` library is likely an error and should not be considered part of the public API.
+- The `grpc.experimental` namespace contains APIs that have not stabilized. Any API in that namespace may break in any minor version update.
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.d.ts
new file mode 100644
index 0000000..92b9bba
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.d.ts
@@ -0,0 +1,11 @@
+import { ServiceDefinition } from './make-client';
+import { Server, UntypedServiceImplementation } from './server';
+interface GetServiceDefinition {
+ (): ServiceDefinition;
+}
+interface GetHandlers {
+ (): UntypedServiceImplementation;
+}
+export declare function registerAdminService(getServiceDefinition: GetServiceDefinition, getHandlers: GetHandlers): void;
+export declare function addAdminServicesToServer(server: Server): void;
+export {};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js
new file mode 100644
index 0000000..9fd8e64
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js
@@ -0,0 +1,31 @@
+"use strict";
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.addAdminServicesToServer = exports.registerAdminService = void 0;
+const registeredAdminServices = [];
+function registerAdminService(getServiceDefinition, getHandlers) {
+ registeredAdminServices.push({ getServiceDefinition, getHandlers });
+}
+exports.registerAdminService = registerAdminService;
+function addAdminServicesToServer(server) {
+ for (const { getServiceDefinition, getHandlers } of registeredAdminServices) {
+ server.addService(getServiceDefinition(), getHandlers());
+ }
+}
+exports.addAdminServicesToServer = addAdminServicesToServer;
+//# sourceMappingURL=admin.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js.map
new file mode 100644
index 0000000..e6e801a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/admin.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/admin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAaH,MAAM,uBAAuB,GAGvB,EAAE,CAAC;AAET,SAAgB,oBAAoB,CAClC,oBAA0C,EAC1C,WAAwB;IAExB,uBAAuB,CAAC,IAAI,CAAC,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC,CAAC;AACtE,CAAC;AALD,oDAKC;AAED,SAAgB,wBAAwB,CAAC,MAAc;IACrD,KAAK,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,IAAI,uBAAuB,EAAE,CAAC;QAC5E,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAJD,4DAIC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts
new file mode 100644
index 0000000..c98e3a0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts
@@ -0,0 +1,90 @@
+export interface BackoffOptions {
+ initialDelay?: number;
+ multiplier?: number;
+ jitter?: number;
+ maxDelay?: number;
+}
+export declare class BackoffTimeout {
+ private callback;
+ /**
+ * The delay time at the start, and after each reset.
+ */
+ private readonly initialDelay;
+ /**
+ * The exponential backoff multiplier.
+ */
+ private readonly multiplier;
+ /**
+ * The maximum delay time
+ */
+ private readonly maxDelay;
+ /**
+ * The maximum fraction by which the delay time can randomly vary after
+ * applying the multiplier.
+ */
+ private readonly jitter;
+ /**
+ * The delay time for the next time the timer runs.
+ */
+ private nextDelay;
+ /**
+ * The handle of the underlying timer. If running is false, this value refers
+ * to an object representing a timer that has ended, but it can still be
+ * interacted with without error.
+ */
+ private timerId;
+ /**
+ * Indicates whether the timer is currently running.
+ */
+ private running;
+ /**
+ * Indicates whether the timer should keep the Node process running if no
+ * other async operation is doing so.
+ */
+ private hasRef;
+ /**
+ * The time that the currently running timer was started. Only valid if
+ * running is true.
+ */
+ private startTime;
+ /**
+ * The approximate time that the currently running timer will end. Only valid
+ * if running is true.
+ */
+ private endTime;
+ constructor(callback: () => void, options?: BackoffOptions);
+ private runTimer;
+ /**
+ * Call the callback after the current amount of delay time
+ */
+ runOnce(): void;
+ /**
+ * Stop the timer. The callback will not be called until `runOnce` is called
+ * again.
+ */
+ stop(): void;
+ /**
+ * Reset the delay time to its initial value. If the timer is still running,
+ * retroactively apply that reset to the current timer.
+ */
+ reset(): void;
+ /**
+ * Check whether the timer is currently running.
+ */
+ isRunning(): boolean;
+ /**
+ * Set that while the timer is running, it should keep the Node process
+ * running.
+ */
+ ref(): void;
+ /**
+ * Set that while the timer is running, it should not keep the Node process
+ * running.
+ */
+ unref(): void;
+ /**
+ * Get the approximate timestamp of when the timer will fire. Only valid if
+ * this.isRunning() is true.
+ */
+ getEndTime(): Date;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js
new file mode 100644
index 0000000..02762d5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js
@@ -0,0 +1,174 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BackoffTimeout = void 0;
+const INITIAL_BACKOFF_MS = 1000;
+const BACKOFF_MULTIPLIER = 1.6;
+const MAX_BACKOFF_MS = 120000;
+const BACKOFF_JITTER = 0.2;
+/**
+ * Get a number uniformly at random in the range [min, max)
+ * @param min
+ * @param max
+ */
+function uniformRandom(min, max) {
+ return Math.random() * (max - min) + min;
+}
+class BackoffTimeout {
+ constructor(callback, options) {
+ this.callback = callback;
+ /**
+ * The delay time at the start, and after each reset.
+ */
+ this.initialDelay = INITIAL_BACKOFF_MS;
+ /**
+ * The exponential backoff multiplier.
+ */
+ this.multiplier = BACKOFF_MULTIPLIER;
+ /**
+ * The maximum delay time
+ */
+ this.maxDelay = MAX_BACKOFF_MS;
+ /**
+ * The maximum fraction by which the delay time can randomly vary after
+ * applying the multiplier.
+ */
+ this.jitter = BACKOFF_JITTER;
+ /**
+ * Indicates whether the timer is currently running.
+ */
+ this.running = false;
+ /**
+ * Indicates whether the timer should keep the Node process running if no
+ * other async operation is doing so.
+ */
+ this.hasRef = true;
+ /**
+ * The time that the currently running timer was started. Only valid if
+ * running is true.
+ */
+ this.startTime = new Date();
+ /**
+ * The approximate time that the currently running timer will end. Only valid
+ * if running is true.
+ */
+ this.endTime = new Date();
+ if (options) {
+ if (options.initialDelay) {
+ this.initialDelay = options.initialDelay;
+ }
+ if (options.multiplier) {
+ this.multiplier = options.multiplier;
+ }
+ if (options.jitter) {
+ this.jitter = options.jitter;
+ }
+ if (options.maxDelay) {
+ this.maxDelay = options.maxDelay;
+ }
+ }
+ this.nextDelay = this.initialDelay;
+ this.timerId = setTimeout(() => { }, 0);
+ clearTimeout(this.timerId);
+ }
+ runTimer(delay) {
+ var _a, _b;
+ this.endTime = this.startTime;
+ this.endTime.setMilliseconds(this.endTime.getMilliseconds() + this.nextDelay);
+ clearTimeout(this.timerId);
+ this.timerId = setTimeout(() => {
+ this.callback();
+ this.running = false;
+ }, delay);
+ if (!this.hasRef) {
+ (_b = (_a = this.timerId).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ }
+ /**
+ * Call the callback after the current amount of delay time
+ */
+ runOnce() {
+ this.running = true;
+ this.startTime = new Date();
+ this.runTimer(this.nextDelay);
+ const nextBackoff = Math.min(this.nextDelay * this.multiplier, this.maxDelay);
+ const jitterMagnitude = nextBackoff * this.jitter;
+ this.nextDelay =
+ nextBackoff + uniformRandom(-jitterMagnitude, jitterMagnitude);
+ }
+ /**
+ * Stop the timer. The callback will not be called until `runOnce` is called
+ * again.
+ */
+ stop() {
+ clearTimeout(this.timerId);
+ this.running = false;
+ }
+ /**
+ * Reset the delay time to its initial value. If the timer is still running,
+ * retroactively apply that reset to the current timer.
+ */
+ reset() {
+ this.nextDelay = this.initialDelay;
+ if (this.running) {
+ const now = new Date();
+ const newEndTime = this.startTime;
+ newEndTime.setMilliseconds(newEndTime.getMilliseconds() + this.nextDelay);
+ clearTimeout(this.timerId);
+ if (now < newEndTime) {
+ this.runTimer(newEndTime.getTime() - now.getTime());
+ }
+ else {
+ this.running = false;
+ }
+ }
+ }
+ /**
+ * Check whether the timer is currently running.
+ */
+ isRunning() {
+ return this.running;
+ }
+ /**
+ * Set that while the timer is running, it should keep the Node process
+ * running.
+ */
+ ref() {
+ var _a, _b;
+ this.hasRef = true;
+ (_b = (_a = this.timerId).ref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ /**
+ * Set that while the timer is running, it should not keep the Node process
+ * running.
+ */
+ unref() {
+ var _a, _b;
+ this.hasRef = false;
+ (_b = (_a = this.timerId).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ /**
+ * Get the approximate timestamp of when the timer will fire. Only valid if
+ * this.isRunning() is true.
+ */
+ getEndTime() {
+ return this.endTime;
+ }
+}
+exports.BackoffTimeout = BackoffTimeout;
+//# sourceMappingURL=backoff-timeout.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js.map
new file mode 100644
index 0000000..e3462d7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"backoff-timeout.js","sourceRoot":"","sources":["../../src/backoff-timeout.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts
new file mode 100644
index 0000000..1564eac
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts
@@ -0,0 +1,56 @@
+import { Metadata } from './metadata';
+export interface CallMetadataOptions {
+ service_url: string;
+}
+export type CallMetadataGenerator = (options: CallMetadataOptions, cb: (err: Error | null, metadata?: Metadata) => void) => void;
+export interface OldOAuth2Client {
+ getRequestMetadata: (url: string, callback: (err: Error | null, headers?: {
+ [index: string]: string;
+ }) => void) => void;
+}
+export interface CurrentOAuth2Client {
+ getRequestHeaders: (url?: string) => Promise<{
+ [index: string]: string;
+ }>;
+}
+export type OAuth2Client = OldOAuth2Client | CurrentOAuth2Client;
+/**
+ * A class that represents a generic method of adding authentication-related
+ * metadata on a per-request basis.
+ */
+export declare abstract class CallCredentials {
+ /**
+ * Asynchronously generates a new Metadata object.
+ * @param options Options used in generating the Metadata object.
+ */
+ abstract generateMetadata(options: CallMetadataOptions): Promise<Metadata>;
+ /**
+ * Creates a new CallCredentials object from properties of both this and
+ * another CallCredentials object. This object's metadata generator will be
+ * called first.
+ * @param callCredentials The other CallCredentials object.
+ */
+ abstract compose(callCredentials: CallCredentials): CallCredentials;
+ /**
+ * Check whether two call credentials objects are equal. Separate
+ * SingleCallCredentials with identical metadata generator functions are
+ * equal.
+ * @param other The other CallCredentials object to compare with.
+ */
+ abstract _equals(other: CallCredentials): boolean;
+ /**
+ * Creates a new CallCredentials object from a given function that generates
+ * Metadata objects.
+ * @param metadataGenerator A function that accepts a set of options, and
+ * generates a Metadata object based on these options, which is passed back
+ * to the caller via a supplied (err, metadata) callback.
+ */
+ static createFromMetadataGenerator(metadataGenerator: CallMetadataGenerator): CallCredentials;
+ /**
+ * Create a gRPC credential from a Google credential object.
+ * @param googleCredentials The authentication client to use.
+ * @return The resulting CallCredentials object.
+ */
+ static createFromGoogleCredential(googleCredentials: OAuth2Client): CallCredentials;
+ static createEmpty(): CallCredentials;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js
new file mode 100644
index 0000000..67b9266
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js
@@ -0,0 +1,153 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CallCredentials = void 0;
+const metadata_1 = require("./metadata");
+function isCurrentOauth2Client(client) {
+ return ('getRequestHeaders' in client &&
+ typeof client.getRequestHeaders === 'function');
+}
+/**
+ * A class that represents a generic method of adding authentication-related
+ * metadata on a per-request basis.
+ */
+class CallCredentials {
+ /**
+ * Creates a new CallCredentials object from a given function that generates
+ * Metadata objects.
+ * @param metadataGenerator A function that accepts a set of options, and
+ * generates a Metadata object based on these options, which is passed back
+ * to the caller via a supplied (err, metadata) callback.
+ */
+ static createFromMetadataGenerator(metadataGenerator) {
+ return new SingleCallCredentials(metadataGenerator);
+ }
+ /**
+ * Create a gRPC credential from a Google credential object.
+ * @param googleCredentials The authentication client to use.
+ * @return The resulting CallCredentials object.
+ */
+ static createFromGoogleCredential(googleCredentials) {
+ return CallCredentials.createFromMetadataGenerator((options, callback) => {
+ let getHeaders;
+ if (isCurrentOauth2Client(googleCredentials)) {
+ getHeaders = googleCredentials.getRequestHeaders(options.service_url);
+ }
+ else {
+ getHeaders = new Promise((resolve, reject) => {
+ googleCredentials.getRequestMetadata(options.service_url, (err, headers) => {
+ if (err) {
+ reject(err);
+ return;
+ }
+ if (!headers) {
+ reject(new Error('Headers not set by metadata plugin'));
+ return;
+ }
+ resolve(headers);
+ });
+ });
+ }
+ getHeaders.then(headers => {
+ const metadata = new metadata_1.Metadata();
+ for (const key of Object.keys(headers)) {
+ metadata.add(key, headers[key]);
+ }
+ callback(null, metadata);
+ }, err => {
+ callback(err);
+ });
+ });
+ }
+ static createEmpty() {
+ return new EmptyCallCredentials();
+ }
+}
+exports.CallCredentials = CallCredentials;
+class ComposedCallCredentials extends CallCredentials {
+ constructor(creds) {
+ super();
+ this.creds = creds;
+ }
+ async generateMetadata(options) {
+ const base = new metadata_1.Metadata();
+ const generated = await Promise.all(this.creds.map(cred => cred.generateMetadata(options)));
+ for (const gen of generated) {
+ base.merge(gen);
+ }
+ return base;
+ }
+ compose(other) {
+ return new ComposedCallCredentials(this.creds.concat([other]));
+ }
+ _equals(other) {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof ComposedCallCredentials) {
+ return this.creds.every((value, index) => value._equals(other.creds[index]));
+ }
+ else {
+ return false;
+ }
+ }
+}
+class SingleCallCredentials extends CallCredentials {
+ constructor(metadataGenerator) {
+ super();
+ this.metadataGenerator = metadataGenerator;
+ }
+ generateMetadata(options) {
+ return new Promise((resolve, reject) => {
+ this.metadataGenerator(options, (err, metadata) => {
+ if (metadata !== undefined) {
+ resolve(metadata);
+ }
+ else {
+ reject(err);
+ }
+ });
+ });
+ }
+ compose(other) {
+ return new ComposedCallCredentials([this, other]);
+ }
+ _equals(other) {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof SingleCallCredentials) {
+ return this.metadataGenerator === other.metadataGenerator;
+ }
+ else {
+ return false;
+ }
+ }
+}
+class EmptyCallCredentials extends CallCredentials {
+ generateMetadata(options) {
+ return Promise.resolve(new metadata_1.Metadata());
+ }
+ compose(other) {
+ return other;
+ }
+ _equals(other) {
+ return other instanceof EmptyCallCredentials;
+ }
+}
+//# sourceMappingURL=call-credentials.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js.map
new file mode 100644
index 0000000..8a4e9d6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-credentials.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"call-credentials.js","sourceRoot":"","sources":["../../src/call-credentials.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.d.ts
new file mode 100644
index 0000000..bbb098c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.d.ts
@@ -0,0 +1,86 @@
+/// <reference types="node" />
+import { CallCredentials } from './call-credentials';
+import { Status } from './constants';
+import { Deadline } from './deadline';
+import { Metadata } from './metadata';
+import { ServerSurfaceCall } from './server-call';
+export interface CallStreamOptions {
+ deadline: Deadline;
+ flags: number;
+ host: string;
+ parentCall: ServerSurfaceCall | null;
+}
+export type PartialCallStreamOptions = Partial<CallStreamOptions>;
+export interface StatusObject {
+ code: Status;
+ details: string;
+ metadata: Metadata;
+}
+export type PartialStatusObject = Pick<StatusObject, 'code' | 'details'> & {
+ metadata: Metadata | null;
+};
+export declare const enum WriteFlags {
+ BufferHint = 1,
+ NoCompress = 2,
+ WriteThrough = 4
+}
+export interface WriteObject {
+ message: Buffer;
+ flags?: number;
+}
+export interface MetadataListener {
+ (metadata: Metadata, next: (metadata: Metadata) => void): void;
+}
+export interface MessageListener {
+ (message: any, next: (message: any) => void): void;
+}
+export interface StatusListener {
+ (status: StatusObject, next: (status: StatusObject) => void): void;
+}
+export interface FullListener {
+ onReceiveMetadata: MetadataListener;
+ onReceiveMessage: MessageListener;
+ onReceiveStatus: StatusListener;
+}
+export type Listener = Partial<FullListener>;
+/**
+ * An object with methods for handling the responses to a call.
+ */
+export interface InterceptingListener {
+ onReceiveMetadata(metadata: Metadata): void;
+ onReceiveMessage(message: any): void;
+ onReceiveStatus(status: StatusObject): void;
+}
+export declare function isInterceptingListener(listener: Listener | InterceptingListener): listener is InterceptingListener;
+export declare class InterceptingListenerImpl implements InterceptingListener {
+ private listener;
+ private nextListener;
+ private processingMetadata;
+ private hasPendingMessage;
+ private pendingMessage;
+ private processingMessage;
+ private pendingStatus;
+ constructor(listener: FullListener, nextListener: InterceptingListener);
+ private processPendingMessage;
+ private processPendingStatus;
+ onReceiveMetadata(metadata: Metadata): void;
+ onReceiveMessage(message: any): void;
+ onReceiveStatus(status: StatusObject): void;
+}
+export interface WriteCallback {
+ (error?: Error | null): void;
+}
+export interface MessageContext {
+ callback?: WriteCallback;
+ flags?: number;
+}
+export interface Call {
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ start(metadata: Metadata, listener: InterceptingListener): void;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ startRead(): void;
+ halfClose(): void;
+ getCallNumber(): number;
+ setCredentials(credentials: CallCredentials): void;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js
new file mode 100644
index 0000000..cdef46f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js
@@ -0,0 +1,84 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.InterceptingListenerImpl = exports.isInterceptingListener = void 0;
+function isInterceptingListener(listener) {
+ return (listener.onReceiveMetadata !== undefined &&
+ listener.onReceiveMetadata.length === 1);
+}
+exports.isInterceptingListener = isInterceptingListener;
+class InterceptingListenerImpl {
+ constructor(listener, nextListener) {
+ this.listener = listener;
+ this.nextListener = nextListener;
+ this.processingMetadata = false;
+ this.hasPendingMessage = false;
+ this.processingMessage = false;
+ this.pendingStatus = null;
+ }
+ processPendingMessage() {
+ if (this.hasPendingMessage) {
+ this.nextListener.onReceiveMessage(this.pendingMessage);
+ this.pendingMessage = null;
+ this.hasPendingMessage = false;
+ }
+ }
+ processPendingStatus() {
+ if (this.pendingStatus) {
+ this.nextListener.onReceiveStatus(this.pendingStatus);
+ }
+ }
+ onReceiveMetadata(metadata) {
+ this.processingMetadata = true;
+ this.listener.onReceiveMetadata(metadata, metadata => {
+ this.processingMetadata = false;
+ this.nextListener.onReceiveMetadata(metadata);
+ this.processPendingMessage();
+ this.processPendingStatus();
+ });
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message) {
+ /* If this listener processes messages asynchronously, the last message may
+ * be reordered with respect to the status */
+ this.processingMessage = true;
+ this.listener.onReceiveMessage(message, msg => {
+ this.processingMessage = false;
+ if (this.processingMetadata) {
+ this.pendingMessage = msg;
+ this.hasPendingMessage = true;
+ }
+ else {
+ this.nextListener.onReceiveMessage(msg);
+ this.processPendingStatus();
+ }
+ });
+ }
+ onReceiveStatus(status) {
+ this.listener.onReceiveStatus(status, processedStatus => {
+ if (this.processingMetadata || this.processingMessage) {
+ this.pendingStatus = processedStatus;
+ }
+ else {
+ this.nextListener.onReceiveStatus(processedStatus);
+ }
+ });
+ }
+}
+exports.InterceptingListenerImpl = InterceptingListenerImpl;
+//# sourceMappingURL=call-interface.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js.map
new file mode 100644
index 0000000..9cb4c7e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-interface.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"call-interface.js","sourceRoot":"","sources":["../../src/call-interface.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAqEH,SAAgB,sBAAsB,CACpC,QAAyC;IAEzC,OAAO,CACL,QAAQ,CAAC,iBAAiB,KAAK,SAAS;QACxC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,CACxC,CAAC;AACJ,CAAC;AAPD,wDAOC;AAED,MAAa,wBAAwB;IAMnC,YACU,QAAsB,EACtB,YAAkC;QADlC,aAAQ,GAAR,QAAQ,CAAc;QACtB,iBAAY,GAAZ,YAAY,CAAsB;QAPpC,uBAAkB,GAAG,KAAK,CAAC;QAC3B,sBAAiB,GAAG,KAAK,CAAC;QAE1B,sBAAiB,GAAG,KAAK,CAAC;QAC1B,kBAAa,GAAwB,IAAI,CAAC;IAI/C,CAAC;IAEI,qBAAqB;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,QAAkB;QAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACnD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,8DAA8D;IAC9D,gBAAgB,CAAC,OAAY;QAC3B;qDAC6C;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAC5C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,eAAe,CAAC,MAAoB;QAClC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE;YACtD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACtD,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA3DD,4DA2DC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.d.ts
new file mode 100644
index 0000000..a679ff6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.d.ts
@@ -0,0 +1 @@
+export declare function getNextCallNumber(): number;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js
new file mode 100644
index 0000000..a694f0f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js
@@ -0,0 +1,25 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getNextCallNumber = void 0;
+let nextCallNumber = 0;
+function getNextCallNumber() {
+ return nextCallNumber++;
+}
+exports.getNextCallNumber = getNextCallNumber;
+//# sourceMappingURL=call-number.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js.map
new file mode 100644
index 0000000..9a77ba9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call-number.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"call-number.js","sourceRoot":"","sources":["../../src/call-number.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAFD,8CAEC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/call.d.ts
new file mode 100644
index 0000000..d223aa3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call.d.ts
@@ -0,0 +1,83 @@
+/// <reference types="node" />
+/// <reference types="node" />
+/// <reference types="node" />
+import { EventEmitter } from 'events';
+import { Duplex, Readable, Writable } from 'stream';
+import { StatusObject } from './call-interface';
+import { EmitterAugmentation1 } from './events';
+import { Metadata } from './metadata';
+import { ObjectReadable, ObjectWritable, WriteCallback } from './object-stream';
+import { InterceptingCallInterface } from './client-interceptors';
+/**
+ * A type extending the built-in Error object with additional fields.
+ */
+export type ServiceError = StatusObject & Error;
+/**
+ * A base type for all user-facing values returned by client-side method calls.
+ */
+export type SurfaceCall = {
+ call?: InterceptingCallInterface;
+ cancel(): void;
+ getPeer(): string;
+} & EmitterAugmentation1<'metadata', Metadata> & EmitterAugmentation1<'status', StatusObject> & EventEmitter;
+/**
+ * A type representing the return value of a unary method call.
+ */
+export type ClientUnaryCall = SurfaceCall;
+/**
+ * A type representing the return value of a server stream method call.
+ */
+export type ClientReadableStream<ResponseType> = {
+ deserialize: (chunk: Buffer) => ResponseType;
+} & SurfaceCall & ObjectReadable<ResponseType>;
+/**
+ * A type representing the return value of a client stream method call.
+ */
+export type ClientWritableStream<RequestType> = {
+ serialize: (value: RequestType) => Buffer;
+} & SurfaceCall & ObjectWritable<RequestType>;
+/**
+ * A type representing the return value of a bidirectional stream method call.
+ */
+export type ClientDuplexStream<RequestType, ResponseType> = ClientWritableStream<RequestType> & ClientReadableStream<ResponseType>;
+/**
+ * Construct a ServiceError from a StatusObject. This function exists primarily
+ * as an attempt to make the error stack trace clearly communicate that the
+ * error is not necessarily a problem in gRPC itself.
+ * @param status
+ */
+export declare function callErrorFromStatus(status: StatusObject, callerStack: string): ServiceError;
+export declare class ClientUnaryCallImpl extends EventEmitter implements ClientUnaryCall {
+ call?: InterceptingCallInterface;
+ constructor();
+ cancel(): void;
+ getPeer(): string;
+}
+export declare class ClientReadableStreamImpl<ResponseType> extends Readable implements ClientReadableStream<ResponseType> {
+ readonly deserialize: (chunk: Buffer) => ResponseType;
+ call?: InterceptingCallInterface;
+ constructor(deserialize: (chunk: Buffer) => ResponseType);
+ cancel(): void;
+ getPeer(): string;
+ _read(_size: number): void;
+}
+export declare class ClientWritableStreamImpl<RequestType> extends Writable implements ClientWritableStream<RequestType> {
+ readonly serialize: (value: RequestType) => Buffer;
+ call?: InterceptingCallInterface;
+ constructor(serialize: (value: RequestType) => Buffer);
+ cancel(): void;
+ getPeer(): string;
+ _write(chunk: RequestType, encoding: string, cb: WriteCallback): void;
+ _final(cb: Function): void;
+}
+export declare class ClientDuplexStreamImpl<RequestType, ResponseType> extends Duplex implements ClientDuplexStream<RequestType, ResponseType> {
+ readonly serialize: (value: RequestType) => Buffer;
+ readonly deserialize: (chunk: Buffer) => ResponseType;
+ call?: InterceptingCallInterface;
+ constructor(serialize: (value: RequestType) => Buffer, deserialize: (chunk: Buffer) => ResponseType);
+ cancel(): void;
+ getPeer(): string;
+ _read(_size: number): void;
+ _write(chunk: RequestType, encoding: string, cb: WriteCallback): void;
+ _final(cb: Function): void;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/call.js
new file mode 100644
index 0000000..029f679
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call.js
@@ -0,0 +1,136 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ClientDuplexStreamImpl = exports.ClientWritableStreamImpl = exports.ClientReadableStreamImpl = exports.ClientUnaryCallImpl = exports.callErrorFromStatus = void 0;
+const events_1 = require("events");
+const stream_1 = require("stream");
+const constants_1 = require("./constants");
+/**
+ * Construct a ServiceError from a StatusObject. This function exists primarily
+ * as an attempt to make the error stack trace clearly communicate that the
+ * error is not necessarily a problem in gRPC itself.
+ * @param status
+ */
+function callErrorFromStatus(status, callerStack) {
+ const message = `${status.code} ${constants_1.Status[status.code]}: ${status.details}`;
+ const error = new Error(message);
+ const stack = `${error.stack}\nfor call at\n${callerStack}`;
+ return Object.assign(new Error(message), status, { stack });
+}
+exports.callErrorFromStatus = callErrorFromStatus;
+class ClientUnaryCallImpl extends events_1.EventEmitter {
+ constructor() {
+ super();
+ }
+ cancel() {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.cancelWithStatus(constants_1.Status.CANCELLED, 'Cancelled on client');
+ }
+ getPeer() {
+ var _a, _b;
+ return (_b = (_a = this.call) === null || _a === void 0 ? void 0 : _a.getPeer()) !== null && _b !== void 0 ? _b : 'unknown';
+ }
+}
+exports.ClientUnaryCallImpl = ClientUnaryCallImpl;
+class ClientReadableStreamImpl extends stream_1.Readable {
+ constructor(deserialize) {
+ super({ objectMode: true });
+ this.deserialize = deserialize;
+ }
+ cancel() {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.cancelWithStatus(constants_1.Status.CANCELLED, 'Cancelled on client');
+ }
+ getPeer() {
+ var _a, _b;
+ return (_b = (_a = this.call) === null || _a === void 0 ? void 0 : _a.getPeer()) !== null && _b !== void 0 ? _b : 'unknown';
+ }
+ _read(_size) {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.startRead();
+ }
+}
+exports.ClientReadableStreamImpl = ClientReadableStreamImpl;
+class ClientWritableStreamImpl extends stream_1.Writable {
+ constructor(serialize) {
+ super({ objectMode: true });
+ this.serialize = serialize;
+ }
+ cancel() {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.cancelWithStatus(constants_1.Status.CANCELLED, 'Cancelled on client');
+ }
+ getPeer() {
+ var _a, _b;
+ return (_b = (_a = this.call) === null || _a === void 0 ? void 0 : _a.getPeer()) !== null && _b !== void 0 ? _b : 'unknown';
+ }
+ _write(chunk, encoding, cb) {
+ var _a;
+ const context = {
+ callback: cb,
+ };
+ const flags = Number(encoding);
+ if (!Number.isNaN(flags)) {
+ context.flags = flags;
+ }
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.sendMessageWithContext(context, chunk);
+ }
+ _final(cb) {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.halfClose();
+ cb();
+ }
+}
+exports.ClientWritableStreamImpl = ClientWritableStreamImpl;
+class ClientDuplexStreamImpl extends stream_1.Duplex {
+ constructor(serialize, deserialize) {
+ super({ objectMode: true });
+ this.serialize = serialize;
+ this.deserialize = deserialize;
+ }
+ cancel() {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.cancelWithStatus(constants_1.Status.CANCELLED, 'Cancelled on client');
+ }
+ getPeer() {
+ var _a, _b;
+ return (_b = (_a = this.call) === null || _a === void 0 ? void 0 : _a.getPeer()) !== null && _b !== void 0 ? _b : 'unknown';
+ }
+ _read(_size) {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.startRead();
+ }
+ _write(chunk, encoding, cb) {
+ var _a;
+ const context = {
+ callback: cb,
+ };
+ const flags = Number(encoding);
+ if (!Number.isNaN(flags)) {
+ context.flags = flags;
+ }
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.sendMessageWithContext(context, chunk);
+ }
+ _final(cb) {
+ var _a;
+ (_a = this.call) === null || _a === void 0 ? void 0 : _a.halfClose();
+ cb();
+ }
+}
+exports.ClientDuplexStreamImpl = ClientDuplexStreamImpl;
+//# sourceMappingURL=call.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/call.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/call.js.map
new file mode 100644
index 0000000..ed4d096
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/call.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/call.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts
new file mode 100644
index 0000000..75b0312
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts
@@ -0,0 +1,83 @@
+/// <reference types="node" />
+/// <reference types="node" />
+import { ConnectionOptions, PeerCertificate, SecureContext } from 'tls';
+import { CallCredentials } from './call-credentials';
+/**
+ * A callback that will receive the expected hostname and presented peer
+ * certificate as parameters. The callback should return an error to
+ * indicate that the presented certificate is considered invalid and
+ * otherwise returned undefined.
+ */
+export type CheckServerIdentityCallback = (hostname: string, cert: PeerCertificate) => Error | undefined;
+/**
+ * Additional peer verification options that can be set when creating
+ * SSL credentials.
+ */
+export interface VerifyOptions {
+ /**
+ * If set, this callback will be invoked after the usual hostname verification
+ * has been performed on the peer certificate.
+ */
+ checkServerIdentity?: CheckServerIdentityCallback;
+}
+/**
+ * A class that contains credentials for communicating over a channel, as well
+ * as a set of per-call credentials, which are applied to every method call made
+ * over a channel initialized with an instance of this class.
+ */
+export declare abstract class ChannelCredentials {
+ protected callCredentials: CallCredentials;
+ protected constructor(callCredentials?: CallCredentials);
+ /**
+ * Returns a copy of this object with the included set of per-call credentials
+ * expanded to include callCredentials.
+ * @param callCredentials A CallCredentials object to associate with this
+ * instance.
+ */
+ abstract compose(callCredentials: CallCredentials): ChannelCredentials;
+ /**
+ * Gets the set of per-call credentials associated with this instance.
+ */
+ _getCallCredentials(): CallCredentials;
+ /**
+ * Gets a SecureContext object generated from input parameters if this
+ * instance was created with createSsl, or null if this instance was created
+ * with createInsecure.
+ */
+ abstract _getConnectionOptions(): ConnectionOptions | null;
+ /**
+ * Indicates whether this credentials object creates a secure channel.
+ */
+ abstract _isSecure(): boolean;
+ /**
+ * Check whether two channel credentials objects are equal. Two secure
+ * credentials are equal if they were constructed with the same parameters.
+ * @param other The other ChannelCredentials Object
+ */
+ abstract _equals(other: ChannelCredentials): boolean;
+ /**
+ * Return a new ChannelCredentials instance with a given set of credentials.
+ * The resulting instance can be used to construct a Channel that communicates
+ * over TLS.
+ * @param rootCerts The root certificate data.
+ * @param privateKey The client certificate private key, if available.
+ * @param certChain The client certificate key chain, if available.
+ * @param verifyOptions Additional options to modify certificate verification
+ */
+ static createSsl(rootCerts?: Buffer | null, privateKey?: Buffer | null, certChain?: Buffer | null, verifyOptions?: VerifyOptions): ChannelCredentials;
+ /**
+ * Return a new ChannelCredentials instance with credentials created using
+ * the provided secureContext. The resulting instances can be used to
+ * construct a Channel that communicates over TLS. gRPC will not override
+ * anything in the provided secureContext, so the environment variables
+ * GRPC_SSL_CIPHER_SUITES and GRPC_DEFAULT_SSL_ROOTS_FILE_PATH will
+ * not be applied.
+ * @param secureContext The return value of tls.createSecureContext()
+ * @param verifyOptions Additional options to modify certificate verification
+ */
+ static createFromSecureContext(secureContext: SecureContext, verifyOptions?: VerifyOptions): ChannelCredentials;
+ /**
+ * Return a new ChannelCredentials instance with no credentials.
+ */
+ static createInsecure(): ChannelCredentials;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js
new file mode 100644
index 0000000..9e00e0b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js
@@ -0,0 +1,177 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ChannelCredentials = void 0;
+const tls_1 = require("tls");
+const call_credentials_1 = require("./call-credentials");
+const tls_helpers_1 = require("./tls-helpers");
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function verifyIsBufferOrNull(obj, friendlyName) {
+ if (obj && !(obj instanceof Buffer)) {
+ throw new TypeError(`${friendlyName}, if provided, must be a Buffer.`);
+ }
+}
+/**
+ * A class that contains credentials for communicating over a channel, as well
+ * as a set of per-call credentials, which are applied to every method call made
+ * over a channel initialized with an instance of this class.
+ */
+class ChannelCredentials {
+ constructor(callCredentials) {
+ this.callCredentials = callCredentials || call_credentials_1.CallCredentials.createEmpty();
+ }
+ /**
+ * Gets the set of per-call credentials associated with this instance.
+ */
+ _getCallCredentials() {
+ return this.callCredentials;
+ }
+ /**
+ * Return a new ChannelCredentials instance with a given set of credentials.
+ * The resulting instance can be used to construct a Channel that communicates
+ * over TLS.
+ * @param rootCerts The root certificate data.
+ * @param privateKey The client certificate private key, if available.
+ * @param certChain The client certificate key chain, if available.
+ * @param verifyOptions Additional options to modify certificate verification
+ */
+ static createSsl(rootCerts, privateKey, certChain, verifyOptions) {
+ var _a;
+ verifyIsBufferOrNull(rootCerts, 'Root certificate');
+ verifyIsBufferOrNull(privateKey, 'Private key');
+ verifyIsBufferOrNull(certChain, 'Certificate chain');
+ if (privateKey && !certChain) {
+ throw new Error('Private key must be given with accompanying certificate chain');
+ }
+ if (!privateKey && certChain) {
+ throw new Error('Certificate chain must be given with accompanying private key');
+ }
+ const secureContext = (0, tls_1.createSecureContext)({
+ ca: (_a = rootCerts !== null && rootCerts !== void 0 ? rootCerts : (0, tls_helpers_1.getDefaultRootsData)()) !== null && _a !== void 0 ? _a : undefined,
+ key: privateKey !== null && privateKey !== void 0 ? privateKey : undefined,
+ cert: certChain !== null && certChain !== void 0 ? certChain : undefined,
+ ciphers: tls_helpers_1.CIPHER_SUITES,
+ });
+ return new SecureChannelCredentialsImpl(secureContext, verifyOptions !== null && verifyOptions !== void 0 ? verifyOptions : {});
+ }
+ /**
+ * Return a new ChannelCredentials instance with credentials created using
+ * the provided secureContext. The resulting instances can be used to
+ * construct a Channel that communicates over TLS. gRPC will not override
+ * anything in the provided secureContext, so the environment variables
+ * GRPC_SSL_CIPHER_SUITES and GRPC_DEFAULT_SSL_ROOTS_FILE_PATH will
+ * not be applied.
+ * @param secureContext The return value of tls.createSecureContext()
+ * @param verifyOptions Additional options to modify certificate verification
+ */
+ static createFromSecureContext(secureContext, verifyOptions) {
+ return new SecureChannelCredentialsImpl(secureContext, verifyOptions !== null && verifyOptions !== void 0 ? verifyOptions : {});
+ }
+ /**
+ * Return a new ChannelCredentials instance with no credentials.
+ */
+ static createInsecure() {
+ return new InsecureChannelCredentialsImpl();
+ }
+}
+exports.ChannelCredentials = ChannelCredentials;
+class InsecureChannelCredentialsImpl extends ChannelCredentials {
+ constructor(callCredentials) {
+ super(callCredentials);
+ }
+ compose(callCredentials) {
+ throw new Error('Cannot compose insecure credentials');
+ }
+ _getConnectionOptions() {
+ return null;
+ }
+ _isSecure() {
+ return false;
+ }
+ _equals(other) {
+ return other instanceof InsecureChannelCredentialsImpl;
+ }
+}
+class SecureChannelCredentialsImpl extends ChannelCredentials {
+ constructor(secureContext, verifyOptions) {
+ super();
+ this.secureContext = secureContext;
+ this.verifyOptions = verifyOptions;
+ this.connectionOptions = {
+ secureContext,
+ };
+ // Node asserts that this option is a function, so we cannot pass undefined
+ if (verifyOptions === null || verifyOptions === void 0 ? void 0 : verifyOptions.checkServerIdentity) {
+ this.connectionOptions.checkServerIdentity =
+ verifyOptions.checkServerIdentity;
+ }
+ }
+ compose(callCredentials) {
+ const combinedCallCredentials = this.callCredentials.compose(callCredentials);
+ return new ComposedChannelCredentialsImpl(this, combinedCallCredentials);
+ }
+ _getConnectionOptions() {
+ // Copy to prevent callers from mutating this.connectionOptions
+ return Object.assign({}, this.connectionOptions);
+ }
+ _isSecure() {
+ return true;
+ }
+ _equals(other) {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof SecureChannelCredentialsImpl) {
+ return (this.secureContext === other.secureContext &&
+ this.verifyOptions.checkServerIdentity ===
+ other.verifyOptions.checkServerIdentity);
+ }
+ else {
+ return false;
+ }
+ }
+}
+class ComposedChannelCredentialsImpl extends ChannelCredentials {
+ constructor(channelCredentials, callCreds) {
+ super(callCreds);
+ this.channelCredentials = channelCredentials;
+ }
+ compose(callCredentials) {
+ const combinedCallCredentials = this.callCredentials.compose(callCredentials);
+ return new ComposedChannelCredentialsImpl(this.channelCredentials, combinedCallCredentials);
+ }
+ _getConnectionOptions() {
+ return this.channelCredentials._getConnectionOptions();
+ }
+ _isSecure() {
+ return true;
+ }
+ _equals(other) {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof ComposedChannelCredentialsImpl) {
+ return (this.channelCredentials._equals(other.channelCredentials) &&
+ this.callCredentials._equals(other.callCredentials));
+ }
+ else {
+ return false;
+ }
+ }
+}
+//# sourceMappingURL=channel-credentials.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js.map
new file mode 100644
index 0000000..f512cba
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-credentials.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"channel-credentials.js","sourceRoot":"","sources":["../../src/channel-credentials.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.d.ts
new file mode 100644
index 0000000..8fdb06d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.d.ts
@@ -0,0 +1,72 @@
+import { CompressionAlgorithms } from './compression-algorithms';
+/**
+ * An interface that contains options used when initializing a Channel instance.
+ */
+export interface ChannelOptions {
+ 'grpc.ssl_target_name_override'?: string;
+ 'grpc.primary_user_agent'?: string;
+ 'grpc.secondary_user_agent'?: string;
+ 'grpc.default_authority'?: string;
+ 'grpc.keepalive_time_ms'?: number;
+ 'grpc.keepalive_timeout_ms'?: number;
+ 'grpc.keepalive_permit_without_calls'?: number;
+ 'grpc.service_config'?: string;
+ 'grpc.max_concurrent_streams'?: number;
+ 'grpc.initial_reconnect_backoff_ms'?: number;
+ 'grpc.max_reconnect_backoff_ms'?: number;
+ 'grpc.use_local_subchannel_pool'?: number;
+ 'grpc.max_send_message_length'?: number;
+ 'grpc.max_receive_message_length'?: number;
+ 'grpc.enable_http_proxy'?: number;
+ 'grpc.http_connect_target'?: string;
+ 'grpc.http_connect_creds'?: string;
+ 'grpc.default_compression_algorithm'?: CompressionAlgorithms;
+ 'grpc.enable_channelz'?: number;
+ 'grpc.dns_min_time_between_resolutions_ms'?: number;
+ 'grpc.enable_retries'?: number;
+ 'grpc.per_rpc_retry_buffer_size'?: number;
+ 'grpc.retry_buffer_size'?: number;
+ 'grpc.max_connection_age_ms'?: number;
+ 'grpc.max_connection_age_grace_ms'?: number;
+ 'grpc-node.max_session_memory'?: number;
+ 'grpc.service_config_disable_resolution'?: number;
+ 'grpc.client_idle_timeout_ms'?: number;
+ /**
+ * Set the enableTrace option in TLS clients and servers
+ */
+ 'grpc-node.tls_enable_trace'?: number;
+ [key: string]: any;
+}
+/**
+ * This is for checking provided options at runtime. This is an object for
+ * easier membership checking.
+ */
+export declare const recognizedOptions: {
+ 'grpc.ssl_target_name_override': boolean;
+ 'grpc.primary_user_agent': boolean;
+ 'grpc.secondary_user_agent': boolean;
+ 'grpc.default_authority': boolean;
+ 'grpc.keepalive_time_ms': boolean;
+ 'grpc.keepalive_timeout_ms': boolean;
+ 'grpc.keepalive_permit_without_calls': boolean;
+ 'grpc.service_config': boolean;
+ 'grpc.max_concurrent_streams': boolean;
+ 'grpc.initial_reconnect_backoff_ms': boolean;
+ 'grpc.max_reconnect_backoff_ms': boolean;
+ 'grpc.use_local_subchannel_pool': boolean;
+ 'grpc.max_send_message_length': boolean;
+ 'grpc.max_receive_message_length': boolean;
+ 'grpc.enable_http_proxy': boolean;
+ 'grpc.enable_channelz': boolean;
+ 'grpc.dns_min_time_between_resolutions_ms': boolean;
+ 'grpc.enable_retries': boolean;
+ 'grpc.per_rpc_retry_buffer_size': boolean;
+ 'grpc.retry_buffer_size': boolean;
+ 'grpc.max_connection_age_ms': boolean;
+ 'grpc.max_connection_age_grace_ms': boolean;
+ 'grpc-node.max_session_memory': boolean;
+ 'grpc.service_config_disable_resolution': boolean;
+ 'grpc.client_idle_timeout_ms': boolean;
+ 'grpc-node.tls_enable_trace': boolean;
+};
+export declare function channelOptionsEqual(options1: ChannelOptions, options2: ChannelOptions): boolean;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js
new file mode 100644
index 0000000..9e3bb75
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js
@@ -0,0 +1,69 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.channelOptionsEqual = exports.recognizedOptions = void 0;
+/**
+ * This is for checking provided options at runtime. This is an object for
+ * easier membership checking.
+ */
+exports.recognizedOptions = {
+ 'grpc.ssl_target_name_override': true,
+ 'grpc.primary_user_agent': true,
+ 'grpc.secondary_user_agent': true,
+ 'grpc.default_authority': true,
+ 'grpc.keepalive_time_ms': true,
+ 'grpc.keepalive_timeout_ms': true,
+ 'grpc.keepalive_permit_without_calls': true,
+ 'grpc.service_config': true,
+ 'grpc.max_concurrent_streams': true,
+ 'grpc.initial_reconnect_backoff_ms': true,
+ 'grpc.max_reconnect_backoff_ms': true,
+ 'grpc.use_local_subchannel_pool': true,
+ 'grpc.max_send_message_length': true,
+ 'grpc.max_receive_message_length': true,
+ 'grpc.enable_http_proxy': true,
+ 'grpc.enable_channelz': true,
+ 'grpc.dns_min_time_between_resolutions_ms': true,
+ 'grpc.enable_retries': true,
+ 'grpc.per_rpc_retry_buffer_size': true,
+ 'grpc.retry_buffer_size': true,
+ 'grpc.max_connection_age_ms': true,
+ 'grpc.max_connection_age_grace_ms': true,
+ 'grpc-node.max_session_memory': true,
+ 'grpc.service_config_disable_resolution': true,
+ 'grpc.client_idle_timeout_ms': true,
+ 'grpc-node.tls_enable_trace': true,
+};
+function channelOptionsEqual(options1, options2) {
+ const keys1 = Object.keys(options1).sort();
+ const keys2 = Object.keys(options2).sort();
+ if (keys1.length !== keys2.length) {
+ return false;
+ }
+ for (let i = 0; i < keys1.length; i += 1) {
+ if (keys1[i] !== keys2[i]) {
+ return false;
+ }
+ if (options1[keys1[i]] !== options2[keys2[i]]) {
+ return false;
+ }
+ }
+ return true;
+}
+exports.channelOptionsEqual = channelOptionsEqual;
+//# sourceMappingURL=channel-options.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js.map
new file mode 100644
index 0000000..aa3bb6b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel-options.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"channel-options.js","sourceRoot":"","sources":["../../src/channel-options.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAoDH;;;GAGG;AACU,QAAA,iBAAiB,GAAG;IAC/B,+BAA+B,EAAE,IAAI;IACrC,yBAAyB,EAAE,IAAI;IAC/B,2BAA2B,EAAE,IAAI;IACjC,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAC9B,2BAA2B,EAAE,IAAI;IACjC,qCAAqC,EAAE,IAAI;IAC3C,qBAAqB,EAAE,IAAI;IAC3B,6BAA6B,EAAE,IAAI;IACnC,mCAAmC,EAAE,IAAI;IACzC,+BAA+B,EAAE,IAAI;IACrC,gCAAgC,EAAE,IAAI;IACtC,8BAA8B,EAAE,IAAI;IACpC,iCAAiC,EAAE,IAAI;IACvC,wBAAwB,EAAE,IAAI;IAC9B,sBAAsB,EAAE,IAAI;IAC5B,0CAA0C,EAAE,IAAI;IAChD,qBAAqB,EAAE,IAAI;IAC3B,gCAAgC,EAAE,IAAI;IACtC,wBAAwB,EAAE,IAAI;IAC9B,4BAA4B,EAAE,IAAI;IAClC,kCAAkC,EAAE,IAAI;IACxC,8BAA8B,EAAE,IAAI;IACpC,wCAAwC,EAAE,IAAI;IAC9C,6BAA6B,EAAE,IAAI;IACnC,4BAA4B,EAAE,IAAI;CACnC,CAAC;AAEF,SAAgB,mBAAmB,CACjC,QAAwB,EACxB,QAAwB;IAExB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAlBD,kDAkBC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.d.ts
new file mode 100644
index 0000000..62b43e7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.d.ts
@@ -0,0 +1,76 @@
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { ServerSurfaceCall } from './server-call';
+import { ConnectivityState } from './connectivity-state';
+import { ChannelRef } from './channelz';
+import { Call } from './call-interface';
+import { Deadline } from './deadline';
+/**
+ * An interface that represents a communication channel to a server specified
+ * by a given address.
+ */
+export interface Channel {
+ /**
+ * Close the channel. This has the same functionality as the existing
+ * grpc.Client.prototype.close
+ */
+ close(): void;
+ /**
+ * Return the target that this channel connects to
+ */
+ getTarget(): string;
+ /**
+ * Get the channel's current connectivity state. This method is here mainly
+ * because it is in the existing internal Channel class, and there isn't
+ * another good place to put it.
+ * @param tryToConnect If true, the channel will start connecting if it is
+ * idle. Otherwise, idle channels will only start connecting when a
+ * call starts.
+ */
+ getConnectivityState(tryToConnect: boolean): ConnectivityState;
+ /**
+ * Watch for connectivity state changes. This is also here mainly because
+ * it is in the existing external Channel class.
+ * @param currentState The state to watch for transitions from. This should
+ * always be populated by calling getConnectivityState immediately
+ * before.
+ * @param deadline A deadline for waiting for a state change
+ * @param callback Called with no error when a state change, or with an
+ * error if the deadline passes without a state change.
+ */
+ watchConnectivityState(currentState: ConnectivityState, deadline: Date | number, callback: (error?: Error) => void): void;
+ /**
+ * Get the channelz reference object for this channel. A request to the
+ * channelz service for the id in this object will provide information
+ * about this channel.
+ */
+ getChannelzRef(): ChannelRef;
+ /**
+ * Create a call object. Call is an opaque type that is used by the Client
+ * class. This function is called by the gRPC library when starting a
+ * request. Implementers should return an instance of Call that is returned
+ * from calling createCall on an instance of the provided Channel class.
+ * @param method The full method string to request.
+ * @param deadline The call deadline
+ * @param host A host string override for making the request
+ * @param parentCall A server call to propagate some information from
+ * @param propagateFlags A bitwise combination of elements of grpc.propagate
+ * that indicates what information to propagate from parentCall.
+ */
+ createCall(method: string, deadline: Deadline, host: string | null | undefined, parentCall: ServerSurfaceCall | null, propagateFlags: number | null | undefined): Call;
+}
+export declare class ChannelImplementation implements Channel {
+ private internalChannel;
+ constructor(target: string, credentials: ChannelCredentials, options: ChannelOptions);
+ close(): void;
+ getTarget(): string;
+ getConnectivityState(tryToConnect: boolean): ConnectivityState;
+ watchConnectivityState(currentState: ConnectivityState, deadline: Date | number, callback: (error?: Error) => void): void;
+ /**
+ * Get the channelz reference object for this channel. The returned value is
+ * garbage if channelz is disabled for this channel.
+ * @returns
+ */
+ getChannelzRef(): ChannelRef;
+ createCall(method: string, deadline: Deadline, host: string | null | undefined, parentCall: ServerSurfaceCall | null, propagateFlags: number | null | undefined): Call;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js
new file mode 100644
index 0000000..49e8639
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js
@@ -0,0 +1,68 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ChannelImplementation = void 0;
+const channel_credentials_1 = require("./channel-credentials");
+const internal_channel_1 = require("./internal-channel");
+class ChannelImplementation {
+ constructor(target, credentials, options) {
+ if (typeof target !== 'string') {
+ throw new TypeError('Channel target must be a string');
+ }
+ if (!(credentials instanceof channel_credentials_1.ChannelCredentials)) {
+ throw new TypeError('Channel credentials must be a ChannelCredentials object');
+ }
+ if (options) {
+ if (typeof options !== 'object') {
+ throw new TypeError('Channel options must be an object');
+ }
+ }
+ this.internalChannel = new internal_channel_1.InternalChannel(target, credentials, options);
+ }
+ close() {
+ this.internalChannel.close();
+ }
+ getTarget() {
+ return this.internalChannel.getTarget();
+ }
+ getConnectivityState(tryToConnect) {
+ return this.internalChannel.getConnectivityState(tryToConnect);
+ }
+ watchConnectivityState(currentState, deadline, callback) {
+ this.internalChannel.watchConnectivityState(currentState, deadline, callback);
+ }
+ /**
+ * Get the channelz reference object for this channel. The returned value is
+ * garbage if channelz is disabled for this channel.
+ * @returns
+ */
+ getChannelzRef() {
+ return this.internalChannel.getChannelzRef();
+ }
+ createCall(method, deadline, host, parentCall, propagateFlags) {
+ if (typeof method !== 'string') {
+ throw new TypeError('Channel#createCall: method must be a string');
+ }
+ if (!(typeof deadline === 'number' || deadline instanceof Date)) {
+ throw new TypeError('Channel#createCall: deadline must be a number or Date');
+ }
+ return this.internalChannel.createCall(method, deadline, host, parentCall, propagateFlags);
+ }
+}
+exports.ChannelImplementation = ChannelImplementation;
+//# sourceMappingURL=channel.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js.map
new file mode 100644
index 0000000..8758e84
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channel.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,+DAA2D;AAO3D,yDAAqD;AAoErD,MAAa,qBAAqB;IAGhC,YACE,MAAc,EACd,WAA+B,EAC/B,OAAuB;QAEvB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,YAAY,wCAAkB,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,SAAS,CACjB,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,kCAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK;QACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED,oBAAoB,CAAC,YAAqB;QACxC,OAAO,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAED,sBAAsB,CACpB,YAA+B,EAC/B,QAAuB,EACvB,QAAiC;QAEjC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CACzC,YAAY,EACZ,QAAQ,EACR,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;IAC/C,CAAC;IAED,UAAU,CACR,MAAc,EACd,QAAkB,EAClB,IAA+B,EAC/B,UAAoC,EACpC,cAAyC;QAEzC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,YAAY,IAAI,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,SAAS,CACjB,uDAAuD,CACxD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CACpC,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,cAAc,CACf,CAAC;IACJ,CAAC;CACF;AAjFD,sDAiFC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.d.ts
new file mode 100644
index 0000000..388ef2d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.d.ts
@@ -0,0 +1,109 @@
+/// <reference types="node" />
+import { ConnectivityState } from './connectivity-state';
+import { ChannelTrace } from './generated/grpc/channelz/v1/ChannelTrace';
+import { SubchannelAddress } from './subchannel-address';
+import { ChannelzDefinition, ChannelzHandlers } from './generated/grpc/channelz/v1/Channelz';
+export type TraceSeverity = 'CT_UNKNOWN' | 'CT_INFO' | 'CT_WARNING' | 'CT_ERROR';
+export interface ChannelRef {
+ kind: 'channel';
+ id: number;
+ name: string;
+}
+export interface SubchannelRef {
+ kind: 'subchannel';
+ id: number;
+ name: string;
+}
+export interface ServerRef {
+ kind: 'server';
+ id: number;
+}
+export interface SocketRef {
+ kind: 'socket';
+ id: number;
+ name: string;
+}
+interface TraceEvent {
+ description: string;
+ severity: TraceSeverity;
+ timestamp: Date;
+ childChannel?: ChannelRef;
+ childSubchannel?: SubchannelRef;
+}
+export declare class ChannelzTrace {
+ events: TraceEvent[];
+ creationTimestamp: Date;
+ eventsLogged: number;
+ constructor();
+ addTrace(severity: TraceSeverity, description: string, child?: ChannelRef | SubchannelRef): void;
+ getTraceMessage(): ChannelTrace;
+}
+export declare class ChannelzChildrenTracker {
+ private channelChildren;
+ private subchannelChildren;
+ private socketChildren;
+ refChild(child: ChannelRef | SubchannelRef | SocketRef): void;
+ unrefChild(child: ChannelRef | SubchannelRef | SocketRef): void;
+ getChildLists(): ChannelzChildren;
+}
+export declare class ChannelzCallTracker {
+ callsStarted: number;
+ callsSucceeded: number;
+ callsFailed: number;
+ lastCallStartedTimestamp: Date | null;
+ addCallStarted(): void;
+ addCallSucceeded(): void;
+ addCallFailed(): void;
+}
+export interface ChannelzChildren {
+ channels: ChannelRef[];
+ subchannels: SubchannelRef[];
+ sockets: SocketRef[];
+}
+export interface ChannelInfo {
+ target: string;
+ state: ConnectivityState;
+ trace: ChannelzTrace;
+ callTracker: ChannelzCallTracker;
+ children: ChannelzChildren;
+}
+export type SubchannelInfo = ChannelInfo;
+export interface ServerInfo {
+ trace: ChannelzTrace;
+ callTracker: ChannelzCallTracker;
+ listenerChildren: ChannelzChildren;
+ sessionChildren: ChannelzChildren;
+}
+export interface TlsInfo {
+ cipherSuiteStandardName: string | null;
+ cipherSuiteOtherName: string | null;
+ localCertificate: Buffer | null;
+ remoteCertificate: Buffer | null;
+}
+export interface SocketInfo {
+ localAddress: SubchannelAddress | null;
+ remoteAddress: SubchannelAddress | null;
+ security: TlsInfo | null;
+ remoteName: string | null;
+ streamsStarted: number;
+ streamsSucceeded: number;
+ streamsFailed: number;
+ messagesSent: number;
+ messagesReceived: number;
+ keepAlivesSent: number;
+ lastLocalStreamCreatedTimestamp: Date | null;
+ lastRemoteStreamCreatedTimestamp: Date | null;
+ lastMessageSentTimestamp: Date | null;
+ lastMessageReceivedTimestamp: Date | null;
+ localFlowControlWindow: number | null;
+ remoteFlowControlWindow: number | null;
+}
+export declare function registerChannelzChannel(name: string, getInfo: () => ChannelInfo, channelzEnabled: boolean): ChannelRef;
+export declare function registerChannelzSubchannel(name: string, getInfo: () => SubchannelInfo, channelzEnabled: boolean): SubchannelRef;
+export declare function registerChannelzServer(getInfo: () => ServerInfo, channelzEnabled: boolean): ServerRef;
+export declare function registerChannelzSocket(name: string, getInfo: () => SocketInfo, channelzEnabled: boolean): SocketRef;
+export declare function unregisterChannelzRef(ref: ChannelRef | SubchannelRef | ServerRef | SocketRef): void;
+export declare function getChannelzHandlers(): ChannelzHandlers;
+export declare function getChannelzServiceDefinition(): ChannelzDefinition;
+export declare function setup(): void;
+export {};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js
new file mode 100644
index 0000000..9a8fc30
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js
@@ -0,0 +1,637 @@
+"use strict";
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setup = exports.getChannelzServiceDefinition = exports.getChannelzHandlers = exports.unregisterChannelzRef = exports.registerChannelzSocket = exports.registerChannelzServer = exports.registerChannelzSubchannel = exports.registerChannelzChannel = exports.ChannelzCallTracker = exports.ChannelzChildrenTracker = exports.ChannelzTrace = void 0;
+const net_1 = require("net");
+const connectivity_state_1 = require("./connectivity-state");
+const constants_1 = require("./constants");
+const subchannel_address_1 = require("./subchannel-address");
+const admin_1 = require("./admin");
+const make_client_1 = require("./make-client");
+function channelRefToMessage(ref) {
+ return {
+ channel_id: ref.id,
+ name: ref.name,
+ };
+}
+function subchannelRefToMessage(ref) {
+ return {
+ subchannel_id: ref.id,
+ name: ref.name,
+ };
+}
+function serverRefToMessage(ref) {
+ return {
+ server_id: ref.id,
+ };
+}
+function socketRefToMessage(ref) {
+ return {
+ socket_id: ref.id,
+ name: ref.name,
+ };
+}
+/**
+ * The loose upper bound on the number of events that should be retained in a
+ * trace. This may be exceeded by up to a factor of 2. Arbitrarily chosen as a
+ * number that should be large enough to contain the recent relevant
+ * information, but small enough to not use excessive memory.
+ */
+const TARGET_RETAINED_TRACES = 32;
+class ChannelzTrace {
+ constructor() {
+ this.events = [];
+ this.eventsLogged = 0;
+ this.creationTimestamp = new Date();
+ }
+ addTrace(severity, description, child) {
+ const timestamp = new Date();
+ this.events.push({
+ description: description,
+ severity: severity,
+ timestamp: timestamp,
+ childChannel: (child === null || child === void 0 ? void 0 : child.kind) === 'channel' ? child : undefined,
+ childSubchannel: (child === null || child === void 0 ? void 0 : child.kind) === 'subchannel' ? child : undefined,
+ });
+ // Whenever the trace array gets too large, discard the first half
+ if (this.events.length >= TARGET_RETAINED_TRACES * 2) {
+ this.events = this.events.slice(TARGET_RETAINED_TRACES);
+ }
+ this.eventsLogged += 1;
+ }
+ getTraceMessage() {
+ return {
+ creation_timestamp: dateToProtoTimestamp(this.creationTimestamp),
+ num_events_logged: this.eventsLogged,
+ events: this.events.map(event => {
+ return {
+ description: event.description,
+ severity: event.severity,
+ timestamp: dateToProtoTimestamp(event.timestamp),
+ channel_ref: event.childChannel
+ ? channelRefToMessage(event.childChannel)
+ : null,
+ subchannel_ref: event.childSubchannel
+ ? subchannelRefToMessage(event.childSubchannel)
+ : null,
+ };
+ }),
+ };
+ }
+}
+exports.ChannelzTrace = ChannelzTrace;
+class ChannelzChildrenTracker {
+ constructor() {
+ this.channelChildren = new Map();
+ this.subchannelChildren = new Map();
+ this.socketChildren = new Map();
+ }
+ refChild(child) {
+ var _a, _b, _c;
+ switch (child.kind) {
+ case 'channel': {
+ const trackedChild = (_a = this.channelChildren.get(child.id)) !== null && _a !== void 0 ? _a : {
+ ref: child,
+ count: 0,
+ };
+ trackedChild.count += 1;
+ this.channelChildren.set(child.id, trackedChild);
+ break;
+ }
+ case 'subchannel': {
+ const trackedChild = (_b = this.subchannelChildren.get(child.id)) !== null && _b !== void 0 ? _b : {
+ ref: child,
+ count: 0,
+ };
+ trackedChild.count += 1;
+ this.subchannelChildren.set(child.id, trackedChild);
+ break;
+ }
+ case 'socket': {
+ const trackedChild = (_c = this.socketChildren.get(child.id)) !== null && _c !== void 0 ? _c : {
+ ref: child,
+ count: 0,
+ };
+ trackedChild.count += 1;
+ this.socketChildren.set(child.id, trackedChild);
+ break;
+ }
+ }
+ }
+ unrefChild(child) {
+ switch (child.kind) {
+ case 'channel': {
+ const trackedChild = this.channelChildren.get(child.id);
+ if (trackedChild !== undefined) {
+ trackedChild.count -= 1;
+ if (trackedChild.count === 0) {
+ this.channelChildren.delete(child.id);
+ }
+ else {
+ this.channelChildren.set(child.id, trackedChild);
+ }
+ }
+ break;
+ }
+ case 'subchannel': {
+ const trackedChild = this.subchannelChildren.get(child.id);
+ if (trackedChild !== undefined) {
+ trackedChild.count -= 1;
+ if (trackedChild.count === 0) {
+ this.subchannelChildren.delete(child.id);
+ }
+ else {
+ this.subchannelChildren.set(child.id, trackedChild);
+ }
+ }
+ break;
+ }
+ case 'socket': {
+ const trackedChild = this.socketChildren.get(child.id);
+ if (trackedChild !== undefined) {
+ trackedChild.count -= 1;
+ if (trackedChild.count === 0) {
+ this.socketChildren.delete(child.id);
+ }
+ else {
+ this.socketChildren.set(child.id, trackedChild);
+ }
+ }
+ break;
+ }
+ }
+ }
+ getChildLists() {
+ const channels = [];
+ for (const { ref } of this.channelChildren.values()) {
+ channels.push(ref);
+ }
+ const subchannels = [];
+ for (const { ref } of this.subchannelChildren.values()) {
+ subchannels.push(ref);
+ }
+ const sockets = [];
+ for (const { ref } of this.socketChildren.values()) {
+ sockets.push(ref);
+ }
+ return { channels, subchannels, sockets };
+ }
+}
+exports.ChannelzChildrenTracker = ChannelzChildrenTracker;
+class ChannelzCallTracker {
+ constructor() {
+ this.callsStarted = 0;
+ this.callsSucceeded = 0;
+ this.callsFailed = 0;
+ this.lastCallStartedTimestamp = null;
+ }
+ addCallStarted() {
+ this.callsStarted += 1;
+ this.lastCallStartedTimestamp = new Date();
+ }
+ addCallSucceeded() {
+ this.callsSucceeded += 1;
+ }
+ addCallFailed() {
+ this.callsFailed += 1;
+ }
+}
+exports.ChannelzCallTracker = ChannelzCallTracker;
+let nextId = 1;
+function getNextId() {
+ return nextId++;
+}
+const channels = [];
+const subchannels = [];
+const servers = [];
+const sockets = [];
+function registerChannelzChannel(name, getInfo, channelzEnabled) {
+ const id = getNextId();
+ const ref = { id, name, kind: 'channel' };
+ if (channelzEnabled) {
+ channels[id] = { ref, getInfo };
+ }
+ return ref;
+}
+exports.registerChannelzChannel = registerChannelzChannel;
+function registerChannelzSubchannel(name, getInfo, channelzEnabled) {
+ const id = getNextId();
+ const ref = { id, name, kind: 'subchannel' };
+ if (channelzEnabled) {
+ subchannels[id] = { ref, getInfo };
+ }
+ return ref;
+}
+exports.registerChannelzSubchannel = registerChannelzSubchannel;
+function registerChannelzServer(getInfo, channelzEnabled) {
+ const id = getNextId();
+ const ref = { id, kind: 'server' };
+ if (channelzEnabled) {
+ servers[id] = { ref, getInfo };
+ }
+ return ref;
+}
+exports.registerChannelzServer = registerChannelzServer;
+function registerChannelzSocket(name, getInfo, channelzEnabled) {
+ const id = getNextId();
+ const ref = { id, name, kind: 'socket' };
+ if (channelzEnabled) {
+ sockets[id] = { ref, getInfo };
+ }
+ return ref;
+}
+exports.registerChannelzSocket = registerChannelzSocket;
+function unregisterChannelzRef(ref) {
+ switch (ref.kind) {
+ case 'channel':
+ delete channels[ref.id];
+ return;
+ case 'subchannel':
+ delete subchannels[ref.id];
+ return;
+ case 'server':
+ delete servers[ref.id];
+ return;
+ case 'socket':
+ delete sockets[ref.id];
+ return;
+ }
+}
+exports.unregisterChannelzRef = unregisterChannelzRef;
+/**
+ * Parse a single section of an IPv6 address as two bytes
+ * @param addressSection A hexadecimal string of length up to 4
+ * @returns The pair of bytes representing this address section
+ */
+function parseIPv6Section(addressSection) {
+ const numberValue = Number.parseInt(addressSection, 16);
+ return [(numberValue / 256) | 0, numberValue % 256];
+}
+/**
+ * Parse a chunk of an IPv6 address string to some number of bytes
+ * @param addressChunk Some number of segments of up to 4 hexadecimal
+ * characters each, joined by colons.
+ * @returns The list of bytes representing this address chunk
+ */
+function parseIPv6Chunk(addressChunk) {
+ if (addressChunk === '') {
+ return [];
+ }
+ const bytePairs = addressChunk
+ .split(':')
+ .map(section => parseIPv6Section(section));
+ const result = [];
+ return result.concat(...bytePairs);
+}
+/**
+ * Converts an IPv4 or IPv6 address from string representation to binary
+ * representation
+ * @param ipAddress an IP address in standard IPv4 or IPv6 text format
+ * @returns
+ */
+function ipAddressStringToBuffer(ipAddress) {
+ if ((0, net_1.isIPv4)(ipAddress)) {
+ return Buffer.from(Uint8Array.from(ipAddress.split('.').map(segment => Number.parseInt(segment))));
+ }
+ else if ((0, net_1.isIPv6)(ipAddress)) {
+ let leftSection;
+ let rightSection;
+ const doubleColonIndex = ipAddress.indexOf('::');
+ if (doubleColonIndex === -1) {
+ leftSection = ipAddress;
+ rightSection = '';
+ }
+ else {
+ leftSection = ipAddress.substring(0, doubleColonIndex);
+ rightSection = ipAddress.substring(doubleColonIndex + 2);
+ }
+ const leftBuffer = Buffer.from(parseIPv6Chunk(leftSection));
+ const rightBuffer = Buffer.from(parseIPv6Chunk(rightSection));
+ const middleBuffer = Buffer.alloc(16 - leftBuffer.length - rightBuffer.length, 0);
+ return Buffer.concat([leftBuffer, middleBuffer, rightBuffer]);
+ }
+ else {
+ return null;
+ }
+}
+function connectivityStateToMessage(state) {
+ switch (state) {
+ case connectivity_state_1.ConnectivityState.CONNECTING:
+ return {
+ state: 'CONNECTING',
+ };
+ case connectivity_state_1.ConnectivityState.IDLE:
+ return {
+ state: 'IDLE',
+ };
+ case connectivity_state_1.ConnectivityState.READY:
+ return {
+ state: 'READY',
+ };
+ case connectivity_state_1.ConnectivityState.SHUTDOWN:
+ return {
+ state: 'SHUTDOWN',
+ };
+ case connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE:
+ return {
+ state: 'TRANSIENT_FAILURE',
+ };
+ default:
+ return {
+ state: 'UNKNOWN',
+ };
+ }
+}
+function dateToProtoTimestamp(date) {
+ if (!date) {
+ return null;
+ }
+ const millisSinceEpoch = date.getTime();
+ return {
+ seconds: (millisSinceEpoch / 1000) | 0,
+ nanos: (millisSinceEpoch % 1000) * 1000000,
+ };
+}
+function getChannelMessage(channelEntry) {
+ const resolvedInfo = channelEntry.getInfo();
+ return {
+ ref: channelRefToMessage(channelEntry.ref),
+ data: {
+ target: resolvedInfo.target,
+ state: connectivityStateToMessage(resolvedInfo.state),
+ calls_started: resolvedInfo.callTracker.callsStarted,
+ calls_succeeded: resolvedInfo.callTracker.callsSucceeded,
+ calls_failed: resolvedInfo.callTracker.callsFailed,
+ last_call_started_timestamp: dateToProtoTimestamp(resolvedInfo.callTracker.lastCallStartedTimestamp),
+ trace: resolvedInfo.trace.getTraceMessage(),
+ },
+ channel_ref: resolvedInfo.children.channels.map(ref => channelRefToMessage(ref)),
+ subchannel_ref: resolvedInfo.children.subchannels.map(ref => subchannelRefToMessage(ref)),
+ };
+}
+function GetChannel(call, callback) {
+ const channelId = Number.parseInt(call.request.channel_id);
+ const channelEntry = channels[channelId];
+ if (channelEntry === undefined) {
+ callback({
+ code: constants_1.Status.NOT_FOUND,
+ details: 'No channel data found for id ' + channelId,
+ });
+ return;
+ }
+ callback(null, { channel: getChannelMessage(channelEntry) });
+}
+function GetTopChannels(call, callback) {
+ const maxResults = Number.parseInt(call.request.max_results);
+ const resultList = [];
+ let i = Number.parseInt(call.request.start_channel_id);
+ for (; i < channels.length; i++) {
+ const channelEntry = channels[i];
+ if (channelEntry === undefined) {
+ continue;
+ }
+ resultList.push(getChannelMessage(channelEntry));
+ if (resultList.length >= maxResults) {
+ break;
+ }
+ }
+ callback(null, {
+ channel: resultList,
+ end: i >= servers.length,
+ });
+}
+function getServerMessage(serverEntry) {
+ const resolvedInfo = serverEntry.getInfo();
+ return {
+ ref: serverRefToMessage(serverEntry.ref),
+ data: {
+ calls_started: resolvedInfo.callTracker.callsStarted,
+ calls_succeeded: resolvedInfo.callTracker.callsSucceeded,
+ calls_failed: resolvedInfo.callTracker.callsFailed,
+ last_call_started_timestamp: dateToProtoTimestamp(resolvedInfo.callTracker.lastCallStartedTimestamp),
+ trace: resolvedInfo.trace.getTraceMessage(),
+ },
+ listen_socket: resolvedInfo.listenerChildren.sockets.map(ref => socketRefToMessage(ref)),
+ };
+}
+function GetServer(call, callback) {
+ const serverId = Number.parseInt(call.request.server_id);
+ const serverEntry = servers[serverId];
+ if (serverEntry === undefined) {
+ callback({
+ code: constants_1.Status.NOT_FOUND,
+ details: 'No server data found for id ' + serverId,
+ });
+ return;
+ }
+ callback(null, { server: getServerMessage(serverEntry) });
+}
+function GetServers(call, callback) {
+ const maxResults = Number.parseInt(call.request.max_results);
+ const resultList = [];
+ let i = Number.parseInt(call.request.start_server_id);
+ for (; i < servers.length; i++) {
+ const serverEntry = servers[i];
+ if (serverEntry === undefined) {
+ continue;
+ }
+ resultList.push(getServerMessage(serverEntry));
+ if (resultList.length >= maxResults) {
+ break;
+ }
+ }
+ callback(null, {
+ server: resultList,
+ end: i >= servers.length,
+ });
+}
+function GetSubchannel(call, callback) {
+ const subchannelId = Number.parseInt(call.request.subchannel_id);
+ const subchannelEntry = subchannels[subchannelId];
+ if (subchannelEntry === undefined) {
+ callback({
+ code: constants_1.Status.NOT_FOUND,
+ details: 'No subchannel data found for id ' + subchannelId,
+ });
+ return;
+ }
+ const resolvedInfo = subchannelEntry.getInfo();
+ const subchannelMessage = {
+ ref: subchannelRefToMessage(subchannelEntry.ref),
+ data: {
+ target: resolvedInfo.target,
+ state: connectivityStateToMessage(resolvedInfo.state),
+ calls_started: resolvedInfo.callTracker.callsStarted,
+ calls_succeeded: resolvedInfo.callTracker.callsSucceeded,
+ calls_failed: resolvedInfo.callTracker.callsFailed,
+ last_call_started_timestamp: dateToProtoTimestamp(resolvedInfo.callTracker.lastCallStartedTimestamp),
+ trace: resolvedInfo.trace.getTraceMessage(),
+ },
+ socket_ref: resolvedInfo.children.sockets.map(ref => socketRefToMessage(ref)),
+ };
+ callback(null, { subchannel: subchannelMessage });
+}
+function subchannelAddressToAddressMessage(subchannelAddress) {
+ var _a;
+ if ((0, subchannel_address_1.isTcpSubchannelAddress)(subchannelAddress)) {
+ return {
+ address: 'tcpip_address',
+ tcpip_address: {
+ ip_address: (_a = ipAddressStringToBuffer(subchannelAddress.host)) !== null && _a !== void 0 ? _a : undefined,
+ port: subchannelAddress.port,
+ },
+ };
+ }
+ else {
+ return {
+ address: 'uds_address',
+ uds_address: {
+ filename: subchannelAddress.path,
+ },
+ };
+ }
+}
+function GetSocket(call, callback) {
+ var _a, _b, _c, _d, _e;
+ const socketId = Number.parseInt(call.request.socket_id);
+ const socketEntry = sockets[socketId];
+ if (socketEntry === undefined) {
+ callback({
+ code: constants_1.Status.NOT_FOUND,
+ details: 'No socket data found for id ' + socketId,
+ });
+ return;
+ }
+ const resolvedInfo = socketEntry.getInfo();
+ const securityMessage = resolvedInfo.security
+ ? {
+ model: 'tls',
+ tls: {
+ cipher_suite: resolvedInfo.security.cipherSuiteStandardName
+ ? 'standard_name'
+ : 'other_name',
+ standard_name: (_a = resolvedInfo.security.cipherSuiteStandardName) !== null && _a !== void 0 ? _a : undefined,
+ other_name: (_b = resolvedInfo.security.cipherSuiteOtherName) !== null && _b !== void 0 ? _b : undefined,
+ local_certificate: (_c = resolvedInfo.security.localCertificate) !== null && _c !== void 0 ? _c : undefined,
+ remote_certificate: (_d = resolvedInfo.security.remoteCertificate) !== null && _d !== void 0 ? _d : undefined,
+ },
+ }
+ : null;
+ const socketMessage = {
+ ref: socketRefToMessage(socketEntry.ref),
+ local: resolvedInfo.localAddress
+ ? subchannelAddressToAddressMessage(resolvedInfo.localAddress)
+ : null,
+ remote: resolvedInfo.remoteAddress
+ ? subchannelAddressToAddressMessage(resolvedInfo.remoteAddress)
+ : null,
+ remote_name: (_e = resolvedInfo.remoteName) !== null && _e !== void 0 ? _e : undefined,
+ security: securityMessage,
+ data: {
+ keep_alives_sent: resolvedInfo.keepAlivesSent,
+ streams_started: resolvedInfo.streamsStarted,
+ streams_succeeded: resolvedInfo.streamsSucceeded,
+ streams_failed: resolvedInfo.streamsFailed,
+ last_local_stream_created_timestamp: dateToProtoTimestamp(resolvedInfo.lastLocalStreamCreatedTimestamp),
+ last_remote_stream_created_timestamp: dateToProtoTimestamp(resolvedInfo.lastRemoteStreamCreatedTimestamp),
+ messages_received: resolvedInfo.messagesReceived,
+ messages_sent: resolvedInfo.messagesSent,
+ last_message_received_timestamp: dateToProtoTimestamp(resolvedInfo.lastMessageReceivedTimestamp),
+ last_message_sent_timestamp: dateToProtoTimestamp(resolvedInfo.lastMessageSentTimestamp),
+ local_flow_control_window: resolvedInfo.localFlowControlWindow
+ ? { value: resolvedInfo.localFlowControlWindow }
+ : null,
+ remote_flow_control_window: resolvedInfo.remoteFlowControlWindow
+ ? { value: resolvedInfo.remoteFlowControlWindow }
+ : null,
+ },
+ };
+ callback(null, { socket: socketMessage });
+}
+function GetServerSockets(call, callback) {
+ const serverId = Number.parseInt(call.request.server_id);
+ const serverEntry = servers[serverId];
+ if (serverEntry === undefined) {
+ callback({
+ code: constants_1.Status.NOT_FOUND,
+ details: 'No server data found for id ' + serverId,
+ });
+ return;
+ }
+ const startId = Number.parseInt(call.request.start_socket_id);
+ const maxResults = Number.parseInt(call.request.max_results);
+ const resolvedInfo = serverEntry.getInfo();
+ // If we wanted to include listener sockets in the result, this line would
+ // instead say
+ // const allSockets = resolvedInfo.listenerChildren.sockets.concat(resolvedInfo.sessionChildren.sockets).sort((ref1, ref2) => ref1.id - ref2.id);
+ const allSockets = resolvedInfo.sessionChildren.sockets.sort((ref1, ref2) => ref1.id - ref2.id);
+ const resultList = [];
+ let i = 0;
+ for (; i < allSockets.length; i++) {
+ if (allSockets[i].id >= startId) {
+ resultList.push(socketRefToMessage(allSockets[i]));
+ if (resultList.length >= maxResults) {
+ break;
+ }
+ }
+ }
+ callback(null, {
+ socket_ref: resultList,
+ end: i >= allSockets.length,
+ });
+}
+function getChannelzHandlers() {
+ return {
+ GetChannel,
+ GetTopChannels,
+ GetServer,
+ GetServers,
+ GetSubchannel,
+ GetSocket,
+ GetServerSockets,
+ };
+}
+exports.getChannelzHandlers = getChannelzHandlers;
+let loadedChannelzDefinition = null;
+function getChannelzServiceDefinition() {
+ if (loadedChannelzDefinition) {
+ return loadedChannelzDefinition;
+ }
+ /* The purpose of this complexity is to avoid loading @grpc/proto-loader at
+ * runtime for users who will not use/enable channelz. */
+ const loaderLoadSync = require('@grpc/proto-loader')
+ .loadSync;
+ const loadedProto = loaderLoadSync('channelz.proto', {
+ keepCase: true,
+ longs: String,
+ enums: String,
+ defaults: true,
+ oneofs: true,
+ includeDirs: [`${__dirname}/../../proto`],
+ });
+ const channelzGrpcObject = (0, make_client_1.loadPackageDefinition)(loadedProto);
+ loadedChannelzDefinition =
+ channelzGrpcObject.grpc.channelz.v1.Channelz.service;
+ return loadedChannelzDefinition;
+}
+exports.getChannelzServiceDefinition = getChannelzServiceDefinition;
+function setup() {
+ (0, admin_1.registerAdminService)(getChannelzServiceDefinition, getChannelzHandlers);
+}
+exports.setup = setup;
+//# sourceMappingURL=channelz.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js.map
new file mode 100644
index 0000000..742d99b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/channelz.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"channelz.js","sourceRoot":"","sources":["../../src/channelz.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts
new file mode 100644
index 0000000..1ecfb34
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts
@@ -0,0 +1,120 @@
+import { Metadata } from './metadata';
+import { Listener, MetadataListener, MessageListener, StatusListener, InterceptingListener, MessageContext } from './call-interface';
+import { Status } from './constants';
+import { Channel } from './channel';
+import { CallOptions } from './client';
+import { ClientMethodDefinition } from './make-client';
+/**
+ * Error class associated with passing both interceptors and interceptor
+ * providers to a client constructor or as call options.
+ */
+export declare class InterceptorConfigurationError extends Error {
+ constructor(message: string);
+}
+export interface MetadataRequester {
+ (metadata: Metadata, listener: InterceptingListener, next: (metadata: Metadata, listener: InterceptingListener | Listener) => void): void;
+}
+export interface MessageRequester {
+ (message: any, next: (message: any) => void): void;
+}
+export interface CloseRequester {
+ (next: () => void): void;
+}
+export interface CancelRequester {
+ (next: () => void): void;
+}
+/**
+ * An object with methods for intercepting and modifying outgoing call operations.
+ */
+export interface FullRequester {
+ start: MetadataRequester;
+ sendMessage: MessageRequester;
+ halfClose: CloseRequester;
+ cancel: CancelRequester;
+}
+export type Requester = Partial<FullRequester>;
+export declare class ListenerBuilder {
+ private metadata;
+ private message;
+ private status;
+ withOnReceiveMetadata(onReceiveMetadata: MetadataListener): this;
+ withOnReceiveMessage(onReceiveMessage: MessageListener): this;
+ withOnReceiveStatus(onReceiveStatus: StatusListener): this;
+ build(): Listener;
+}
+export declare class RequesterBuilder {
+ private start;
+ private message;
+ private halfClose;
+ private cancel;
+ withStart(start: MetadataRequester): this;
+ withSendMessage(sendMessage: MessageRequester): this;
+ withHalfClose(halfClose: CloseRequester): this;
+ withCancel(cancel: CancelRequester): this;
+ build(): Requester;
+}
+export interface InterceptorOptions extends CallOptions {
+ method_definition: ClientMethodDefinition<any, any>;
+}
+export interface InterceptingCallInterface {
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ start(metadata: Metadata, listener?: Partial<InterceptingListener>): void;
+ sendMessageWithContext(context: MessageContext, message: any): void;
+ sendMessage(message: any): void;
+ startRead(): void;
+ halfClose(): void;
+}
+export declare class InterceptingCall implements InterceptingCallInterface {
+ private nextCall;
+ /**
+ * The requester that this InterceptingCall uses to modify outgoing operations
+ */
+ private requester;
+ /**
+ * Indicates that metadata has been passed to the requester's start
+ * method but it has not been passed to the corresponding next callback
+ */
+ private processingMetadata;
+ /**
+ * Message context for a pending message that is waiting for
+ */
+ private pendingMessageContext;
+ private pendingMessage;
+ /**
+ * Indicates that a message has been passed to the requester's sendMessage
+ * method but it has not been passed to the corresponding next callback
+ */
+ private processingMessage;
+ /**
+ * Indicates that a status was received but could not be propagated because
+ * a message was still being processed.
+ */
+ private pendingHalfClose;
+ constructor(nextCall: InterceptingCallInterface, requester?: Requester);
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ private processPendingMessage;
+ private processPendingHalfClose;
+ start(metadata: Metadata, interceptingListener?: Partial<InterceptingListener>): void;
+ sendMessageWithContext(context: MessageContext, message: any): void;
+ sendMessage(message: any): void;
+ startRead(): void;
+ halfClose(): void;
+}
+export interface NextCall {
+ (options: InterceptorOptions): InterceptingCallInterface;
+}
+export interface Interceptor {
+ (options: InterceptorOptions, nextCall: NextCall): InterceptingCall;
+}
+export interface InterceptorProvider {
+ (methodDefinition: ClientMethodDefinition<any, any>): Interceptor;
+}
+export interface InterceptorArguments {
+ clientInterceptors: Interceptor[];
+ clientInterceptorProviders: InterceptorProvider[];
+ callInterceptors: Interceptor[];
+ callInterceptorProviders: InterceptorProvider[];
+}
+export declare function getInterceptingCall(interceptorArgs: InterceptorArguments, methodDefinition: ClientMethodDefinition<any, any>, options: CallOptions, channel: Channel): InterceptingCallInterface;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js
new file mode 100644
index 0000000..76352e9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js
@@ -0,0 +1,428 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getInterceptingCall = exports.InterceptingCall = exports.RequesterBuilder = exports.ListenerBuilder = exports.InterceptorConfigurationError = void 0;
+const metadata_1 = require("./metadata");
+const call_interface_1 = require("./call-interface");
+const constants_1 = require("./constants");
+const error_1 = require("./error");
+/**
+ * Error class associated with passing both interceptors and interceptor
+ * providers to a client constructor or as call options.
+ */
+class InterceptorConfigurationError extends Error {
+ constructor(message) {
+ super(message);
+ this.name = 'InterceptorConfigurationError';
+ Error.captureStackTrace(this, InterceptorConfigurationError);
+ }
+}
+exports.InterceptorConfigurationError = InterceptorConfigurationError;
+class ListenerBuilder {
+ constructor() {
+ this.metadata = undefined;
+ this.message = undefined;
+ this.status = undefined;
+ }
+ withOnReceiveMetadata(onReceiveMetadata) {
+ this.metadata = onReceiveMetadata;
+ return this;
+ }
+ withOnReceiveMessage(onReceiveMessage) {
+ this.message = onReceiveMessage;
+ return this;
+ }
+ withOnReceiveStatus(onReceiveStatus) {
+ this.status = onReceiveStatus;
+ return this;
+ }
+ build() {
+ return {
+ onReceiveMetadata: this.metadata,
+ onReceiveMessage: this.message,
+ onReceiveStatus: this.status,
+ };
+ }
+}
+exports.ListenerBuilder = ListenerBuilder;
+class RequesterBuilder {
+ constructor() {
+ this.start = undefined;
+ this.message = undefined;
+ this.halfClose = undefined;
+ this.cancel = undefined;
+ }
+ withStart(start) {
+ this.start = start;
+ return this;
+ }
+ withSendMessage(sendMessage) {
+ this.message = sendMessage;
+ return this;
+ }
+ withHalfClose(halfClose) {
+ this.halfClose = halfClose;
+ return this;
+ }
+ withCancel(cancel) {
+ this.cancel = cancel;
+ return this;
+ }
+ build() {
+ return {
+ start: this.start,
+ sendMessage: this.message,
+ halfClose: this.halfClose,
+ cancel: this.cancel,
+ };
+ }
+}
+exports.RequesterBuilder = RequesterBuilder;
+/**
+ * A Listener with a default pass-through implementation of each method. Used
+ * for filling out Listeners with some methods omitted.
+ */
+const defaultListener = {
+ onReceiveMetadata: (metadata, next) => {
+ next(metadata);
+ },
+ onReceiveMessage: (message, next) => {
+ next(message);
+ },
+ onReceiveStatus: (status, next) => {
+ next(status);
+ },
+};
+/**
+ * A Requester with a default pass-through implementation of each method. Used
+ * for filling out Requesters with some methods omitted.
+ */
+const defaultRequester = {
+ start: (metadata, listener, next) => {
+ next(metadata, listener);
+ },
+ sendMessage: (message, next) => {
+ next(message);
+ },
+ halfClose: next => {
+ next();
+ },
+ cancel: next => {
+ next();
+ },
+};
+class InterceptingCall {
+ constructor(nextCall, requester) {
+ var _a, _b, _c, _d;
+ this.nextCall = nextCall;
+ /**
+ * Indicates that metadata has been passed to the requester's start
+ * method but it has not been passed to the corresponding next callback
+ */
+ this.processingMetadata = false;
+ /**
+ * Message context for a pending message that is waiting for
+ */
+ this.pendingMessageContext = null;
+ /**
+ * Indicates that a message has been passed to the requester's sendMessage
+ * method but it has not been passed to the corresponding next callback
+ */
+ this.processingMessage = false;
+ /**
+ * Indicates that a status was received but could not be propagated because
+ * a message was still being processed.
+ */
+ this.pendingHalfClose = false;
+ if (requester) {
+ this.requester = {
+ start: (_a = requester.start) !== null && _a !== void 0 ? _a : defaultRequester.start,
+ sendMessage: (_b = requester.sendMessage) !== null && _b !== void 0 ? _b : defaultRequester.sendMessage,
+ halfClose: (_c = requester.halfClose) !== null && _c !== void 0 ? _c : defaultRequester.halfClose,
+ cancel: (_d = requester.cancel) !== null && _d !== void 0 ? _d : defaultRequester.cancel,
+ };
+ }
+ else {
+ this.requester = defaultRequester;
+ }
+ }
+ cancelWithStatus(status, details) {
+ this.requester.cancel(() => {
+ this.nextCall.cancelWithStatus(status, details);
+ });
+ }
+ getPeer() {
+ return this.nextCall.getPeer();
+ }
+ processPendingMessage() {
+ if (this.pendingMessageContext) {
+ this.nextCall.sendMessageWithContext(this.pendingMessageContext, this.pendingMessage);
+ this.pendingMessageContext = null;
+ this.pendingMessage = null;
+ }
+ }
+ processPendingHalfClose() {
+ if (this.pendingHalfClose) {
+ this.nextCall.halfClose();
+ }
+ }
+ start(metadata, interceptingListener) {
+ var _a, _b, _c, _d, _e, _f;
+ const fullInterceptingListener = {
+ onReceiveMetadata: (_b = (_a = interceptingListener === null || interceptingListener === void 0 ? void 0 : interceptingListener.onReceiveMetadata) === null || _a === void 0 ? void 0 : _a.bind(interceptingListener)) !== null && _b !== void 0 ? _b : (metadata => { }),
+ onReceiveMessage: (_d = (_c = interceptingListener === null || interceptingListener === void 0 ? void 0 : interceptingListener.onReceiveMessage) === null || _c === void 0 ? void 0 : _c.bind(interceptingListener)) !== null && _d !== void 0 ? _d : (message => { }),
+ onReceiveStatus: (_f = (_e = interceptingListener === null || interceptingListener === void 0 ? void 0 : interceptingListener.onReceiveStatus) === null || _e === void 0 ? void 0 : _e.bind(interceptingListener)) !== null && _f !== void 0 ? _f : (status => { }),
+ };
+ this.processingMetadata = true;
+ this.requester.start(metadata, fullInterceptingListener, (md, listener) => {
+ var _a, _b, _c;
+ this.processingMetadata = false;
+ let finalInterceptingListener;
+ if ((0, call_interface_1.isInterceptingListener)(listener)) {
+ finalInterceptingListener = listener;
+ }
+ else {
+ const fullListener = {
+ onReceiveMetadata: (_a = listener.onReceiveMetadata) !== null && _a !== void 0 ? _a : defaultListener.onReceiveMetadata,
+ onReceiveMessage: (_b = listener.onReceiveMessage) !== null && _b !== void 0 ? _b : defaultListener.onReceiveMessage,
+ onReceiveStatus: (_c = listener.onReceiveStatus) !== null && _c !== void 0 ? _c : defaultListener.onReceiveStatus,
+ };
+ finalInterceptingListener = new call_interface_1.InterceptingListenerImpl(fullListener, fullInterceptingListener);
+ }
+ this.nextCall.start(md, finalInterceptingListener);
+ this.processPendingMessage();
+ this.processPendingHalfClose();
+ });
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessageWithContext(context, message) {
+ this.processingMessage = true;
+ this.requester.sendMessage(message, finalMessage => {
+ this.processingMessage = false;
+ if (this.processingMetadata) {
+ this.pendingMessageContext = context;
+ this.pendingMessage = message;
+ }
+ else {
+ this.nextCall.sendMessageWithContext(context, finalMessage);
+ this.processPendingHalfClose();
+ }
+ });
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessage(message) {
+ this.sendMessageWithContext({}, message);
+ }
+ startRead() {
+ this.nextCall.startRead();
+ }
+ halfClose() {
+ this.requester.halfClose(() => {
+ if (this.processingMetadata || this.processingMessage) {
+ this.pendingHalfClose = true;
+ }
+ else {
+ this.nextCall.halfClose();
+ }
+ });
+ }
+}
+exports.InterceptingCall = InterceptingCall;
+function getCall(channel, path, options) {
+ var _a, _b;
+ const deadline = (_a = options.deadline) !== null && _a !== void 0 ? _a : Infinity;
+ const host = options.host;
+ const parent = (_b = options.parent) !== null && _b !== void 0 ? _b : null;
+ const propagateFlags = options.propagate_flags;
+ const credentials = options.credentials;
+ const call = channel.createCall(path, deadline, host, parent, propagateFlags);
+ if (credentials) {
+ call.setCredentials(credentials);
+ }
+ return call;
+}
+/**
+ * InterceptingCall implementation that directly owns the underlying Call
+ * object and handles serialization and deseraizliation.
+ */
+class BaseInterceptingCall {
+ constructor(call,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ methodDefinition) {
+ this.call = call;
+ this.methodDefinition = methodDefinition;
+ }
+ cancelWithStatus(status, details) {
+ this.call.cancelWithStatus(status, details);
+ }
+ getPeer() {
+ return this.call.getPeer();
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessageWithContext(context, message) {
+ let serialized;
+ try {
+ serialized = this.methodDefinition.requestSerialize(message);
+ }
+ catch (e) {
+ this.call.cancelWithStatus(constants_1.Status.INTERNAL, `Request message serialization failure: ${(0, error_1.getErrorMessage)(e)}`);
+ return;
+ }
+ this.call.sendMessageWithContext(context, serialized);
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessage(message) {
+ this.sendMessageWithContext({}, message);
+ }
+ start(metadata, interceptingListener) {
+ let readError = null;
+ this.call.start(metadata, {
+ onReceiveMetadata: metadata => {
+ var _a;
+ (_a = interceptingListener === null || interceptingListener === void 0 ? void 0 : interceptingListener.onReceiveMetadata) === null || _a === void 0 ? void 0 : _a.call(interceptingListener, metadata);
+ },
+ onReceiveMessage: message => {
+ var _a;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ let deserialized;
+ try {
+ deserialized = this.methodDefinition.responseDeserialize(message);
+ }
+ catch (e) {
+ readError = {
+ code: constants_1.Status.INTERNAL,
+ details: `Response message parsing error: ${(0, error_1.getErrorMessage)(e)}`,
+ metadata: new metadata_1.Metadata(),
+ };
+ this.call.cancelWithStatus(readError.code, readError.details);
+ return;
+ }
+ (_a = interceptingListener === null || interceptingListener === void 0 ? void 0 : interceptingListener.onReceiveMessage) === null || _a === void 0 ? void 0 : _a.call(interceptingListener, deserialized);
+ },
+ onReceiveStatus: status => {
+ var _a, _b;
+ if (readError) {
+ (_a = interceptingListener === null || interceptingListener === void 0 ? void 0 : interceptingListener.onReceiveStatus) === null || _a === void 0 ? void 0 : _a.call(interceptingListener, readError);
+ }
+ else {
+ (_b = interceptingListener === null || interceptingListener === void 0 ? void 0 : interceptingListener.onReceiveStatus) === null || _b === void 0 ? void 0 : _b.call(interceptingListener, status);
+ }
+ },
+ });
+ }
+ startRead() {
+ this.call.startRead();
+ }
+ halfClose() {
+ this.call.halfClose();
+ }
+}
+/**
+ * BaseInterceptingCall with special-cased behavior for methods with unary
+ * responses.
+ */
+class BaseUnaryInterceptingCall extends BaseInterceptingCall {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ constructor(call, methodDefinition) {
+ super(call, methodDefinition);
+ }
+ start(metadata, listener) {
+ var _a, _b;
+ let receivedMessage = false;
+ const wrapperListener = {
+ onReceiveMetadata: (_b = (_a = listener === null || listener === void 0 ? void 0 : listener.onReceiveMetadata) === null || _a === void 0 ? void 0 : _a.bind(listener)) !== null && _b !== void 0 ? _b : (metadata => { }),
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage: (message) => {
+ var _a;
+ receivedMessage = true;
+ (_a = listener === null || listener === void 0 ? void 0 : listener.onReceiveMessage) === null || _a === void 0 ? void 0 : _a.call(listener, message);
+ },
+ onReceiveStatus: (status) => {
+ var _a, _b;
+ if (!receivedMessage) {
+ (_a = listener === null || listener === void 0 ? void 0 : listener.onReceiveMessage) === null || _a === void 0 ? void 0 : _a.call(listener, null);
+ }
+ (_b = listener === null || listener === void 0 ? void 0 : listener.onReceiveStatus) === null || _b === void 0 ? void 0 : _b.call(listener, status);
+ },
+ };
+ super.start(metadata, wrapperListener);
+ this.call.startRead();
+ }
+}
+/**
+ * BaseInterceptingCall with special-cased behavior for methods with streaming
+ * responses.
+ */
+class BaseStreamingInterceptingCall extends BaseInterceptingCall {
+}
+function getBottomInterceptingCall(channel, options,
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+methodDefinition) {
+ const call = getCall(channel, methodDefinition.path, options);
+ if (methodDefinition.responseStream) {
+ return new BaseStreamingInterceptingCall(call, methodDefinition);
+ }
+ else {
+ return new BaseUnaryInterceptingCall(call, methodDefinition);
+ }
+}
+function getInterceptingCall(interceptorArgs,
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+methodDefinition, options, channel) {
+ if (interceptorArgs.clientInterceptors.length > 0 &&
+ interceptorArgs.clientInterceptorProviders.length > 0) {
+ throw new InterceptorConfigurationError('Both interceptors and interceptor_providers were passed as options ' +
+ 'to the client constructor. Only one of these is allowed.');
+ }
+ if (interceptorArgs.callInterceptors.length > 0 &&
+ interceptorArgs.callInterceptorProviders.length > 0) {
+ throw new InterceptorConfigurationError('Both interceptors and interceptor_providers were passed as call ' +
+ 'options. Only one of these is allowed.');
+ }
+ let interceptors = [];
+ // Interceptors passed to the call override interceptors passed to the client constructor
+ if (interceptorArgs.callInterceptors.length > 0 ||
+ interceptorArgs.callInterceptorProviders.length > 0) {
+ interceptors = []
+ .concat(interceptorArgs.callInterceptors, interceptorArgs.callInterceptorProviders.map(provider => provider(methodDefinition)))
+ .filter(interceptor => interceptor);
+ // Filter out falsy values when providers return nothing
+ }
+ else {
+ interceptors = []
+ .concat(interceptorArgs.clientInterceptors, interceptorArgs.clientInterceptorProviders.map(provider => provider(methodDefinition)))
+ .filter(interceptor => interceptor);
+ // Filter out falsy values when providers return nothing
+ }
+ const interceptorOptions = Object.assign({}, options, {
+ method_definition: methodDefinition,
+ });
+ /* For each interceptor in the list, the nextCall function passed to it is
+ * based on the next interceptor in the list, using a nextCall function
+ * constructed with the following interceptor in the list, and so on. The
+ * initialValue, which is effectively at the end of the list, is a nextCall
+ * function that invokes getBottomInterceptingCall, the result of which
+ * handles (de)serialization and also gets the underlying call from the
+ * channel. */
+ const getCall = interceptors.reduceRight((nextCall, nextInterceptor) => {
+ return currentOptions => nextInterceptor(currentOptions, nextCall);
+ }, (finalOptions) => getBottomInterceptingCall(channel, finalOptions, methodDefinition));
+ return getCall(interceptorOptions);
+}
+exports.getInterceptingCall = getInterceptingCall;
+//# sourceMappingURL=client-interceptors.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js.map
new file mode 100644
index 0000000..e1dfd73
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/client-interceptors.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"client-interceptors.js","sourceRoot":"","sources":["../../src/client-interceptors.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/client.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/client.d.ts
new file mode 100644
index 0000000..a57bfb5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/client.d.ts
@@ -0,0 +1,75 @@
+/// <reference types="node" />
+import { ClientDuplexStream, ClientReadableStream, ClientUnaryCall, ClientWritableStream, ServiceError, SurfaceCall } from './call';
+import { CallCredentials } from './call-credentials';
+import { Channel } from './channel';
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { Metadata } from './metadata';
+import { ClientMethodDefinition } from './make-client';
+import { Interceptor, InterceptorProvider } from './client-interceptors';
+import { ServerUnaryCall, ServerReadableStream, ServerWritableStream, ServerDuplexStream } from './server-call';
+import { Deadline } from './deadline';
+declare const CHANNEL_SYMBOL: unique symbol;
+declare const INTERCEPTOR_SYMBOL: unique symbol;
+declare const INTERCEPTOR_PROVIDER_SYMBOL: unique symbol;
+declare const CALL_INVOCATION_TRANSFORMER_SYMBOL: unique symbol;
+export interface UnaryCallback<ResponseType> {
+ (err: ServiceError | null, value?: ResponseType): void;
+}
+export interface CallOptions {
+ deadline?: Deadline;
+ host?: string;
+ parent?: ServerUnaryCall<any, any> | ServerReadableStream<any, any> | ServerWritableStream<any, any> | ServerDuplexStream<any, any>;
+ propagate_flags?: number;
+ credentials?: CallCredentials;
+ interceptors?: Interceptor[];
+ interceptor_providers?: InterceptorProvider[];
+}
+export interface CallProperties<RequestType, ResponseType> {
+ argument?: RequestType;
+ metadata: Metadata;
+ call: SurfaceCall;
+ channel: Channel;
+ methodDefinition: ClientMethodDefinition<RequestType, ResponseType>;
+ callOptions: CallOptions;
+ callback?: UnaryCallback<ResponseType>;
+}
+export interface CallInvocationTransformer {
+ (callProperties: CallProperties<any, any>): CallProperties<any, any>;
+}
+export type ClientOptions = Partial<ChannelOptions> & {
+ channelOverride?: Channel;
+ channelFactoryOverride?: (address: string, credentials: ChannelCredentials, options: ClientOptions) => Channel;
+ interceptors?: Interceptor[];
+ interceptor_providers?: InterceptorProvider[];
+ callInvocationTransformer?: CallInvocationTransformer;
+};
+/**
+ * A generic gRPC client. Primarily useful as a base class for all generated
+ * clients.
+ */
+export declare class Client {
+ private readonly [CHANNEL_SYMBOL];
+ private readonly [INTERCEPTOR_SYMBOL];
+ private readonly [INTERCEPTOR_PROVIDER_SYMBOL];
+ private readonly [CALL_INVOCATION_TRANSFORMER_SYMBOL]?;
+ constructor(address: string, credentials: ChannelCredentials, options?: ClientOptions);
+ close(): void;
+ getChannel(): Channel;
+ waitForReady(deadline: Deadline, callback: (error?: Error) => void): void;
+ private checkOptionalUnaryResponseArguments;
+ makeUnaryRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, argument: RequestType, metadata: Metadata, options: CallOptions, callback: UnaryCallback<ResponseType>): ClientUnaryCall;
+ makeUnaryRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, argument: RequestType, metadata: Metadata, callback: UnaryCallback<ResponseType>): ClientUnaryCall;
+ makeUnaryRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, argument: RequestType, options: CallOptions, callback: UnaryCallback<ResponseType>): ClientUnaryCall;
+ makeUnaryRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, argument: RequestType, callback: UnaryCallback<ResponseType>): ClientUnaryCall;
+ makeClientStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, metadata: Metadata, options: CallOptions, callback: UnaryCallback<ResponseType>): ClientWritableStream<RequestType>;
+ makeClientStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, metadata: Metadata, callback: UnaryCallback<ResponseType>): ClientWritableStream<RequestType>;
+ makeClientStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, options: CallOptions, callback: UnaryCallback<ResponseType>): ClientWritableStream<RequestType>;
+ makeClientStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, callback: UnaryCallback<ResponseType>): ClientWritableStream<RequestType>;
+ private checkMetadataAndOptions;
+ makeServerStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, argument: RequestType, metadata: Metadata, options?: CallOptions): ClientReadableStream<ResponseType>;
+ makeServerStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, argument: RequestType, options?: CallOptions): ClientReadableStream<ResponseType>;
+ makeBidiStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, metadata: Metadata, options?: CallOptions): ClientDuplexStream<RequestType, ResponseType>;
+ makeBidiStreamRequest<RequestType, ResponseType>(method: string, serialize: (value: RequestType) => Buffer, deserialize: (value: Buffer) => ResponseType, options?: CallOptions): ClientDuplexStream<RequestType, ResponseType>;
+}
+export {};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/client.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/client.js
new file mode 100644
index 0000000..f29ced0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/client.js
@@ -0,0 +1,431 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Client = void 0;
+const call_1 = require("./call");
+const channel_1 = require("./channel");
+const connectivity_state_1 = require("./connectivity-state");
+const constants_1 = require("./constants");
+const metadata_1 = require("./metadata");
+const client_interceptors_1 = require("./client-interceptors");
+const CHANNEL_SYMBOL = Symbol();
+const INTERCEPTOR_SYMBOL = Symbol();
+const INTERCEPTOR_PROVIDER_SYMBOL = Symbol();
+const CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol();
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+function getErrorStackString(error) {
+ return error.stack.split('\n').slice(1).join('\n');
+}
+/**
+ * A generic gRPC client. Primarily useful as a base class for all generated
+ * clients.
+ */
+class Client {
+ constructor(address, credentials, options = {}) {
+ var _a, _b;
+ options = Object.assign({}, options);
+ this[INTERCEPTOR_SYMBOL] = (_a = options.interceptors) !== null && _a !== void 0 ? _a : [];
+ delete options.interceptors;
+ this[INTERCEPTOR_PROVIDER_SYMBOL] = (_b = options.interceptor_providers) !== null && _b !== void 0 ? _b : [];
+ delete options.interceptor_providers;
+ if (this[INTERCEPTOR_SYMBOL].length > 0 &&
+ this[INTERCEPTOR_PROVIDER_SYMBOL].length > 0) {
+ throw new Error('Both interceptors and interceptor_providers were passed as options ' +
+ 'to the client constructor. Only one of these is allowed.');
+ }
+ this[CALL_INVOCATION_TRANSFORMER_SYMBOL] =
+ options.callInvocationTransformer;
+ delete options.callInvocationTransformer;
+ if (options.channelOverride) {
+ this[CHANNEL_SYMBOL] = options.channelOverride;
+ }
+ else if (options.channelFactoryOverride) {
+ const channelFactoryOverride = options.channelFactoryOverride;
+ delete options.channelFactoryOverride;
+ this[CHANNEL_SYMBOL] = channelFactoryOverride(address, credentials, options);
+ }
+ else {
+ this[CHANNEL_SYMBOL] = new channel_1.ChannelImplementation(address, credentials, options);
+ }
+ }
+ close() {
+ this[CHANNEL_SYMBOL].close();
+ }
+ getChannel() {
+ return this[CHANNEL_SYMBOL];
+ }
+ waitForReady(deadline, callback) {
+ const checkState = (err) => {
+ if (err) {
+ callback(new Error('Failed to connect before the deadline'));
+ return;
+ }
+ let newState;
+ try {
+ newState = this[CHANNEL_SYMBOL].getConnectivityState(true);
+ }
+ catch (e) {
+ callback(new Error('The channel has been closed'));
+ return;
+ }
+ if (newState === connectivity_state_1.ConnectivityState.READY) {
+ callback();
+ }
+ else {
+ try {
+ this[CHANNEL_SYMBOL].watchConnectivityState(newState, deadline, checkState);
+ }
+ catch (e) {
+ callback(new Error('The channel has been closed'));
+ }
+ }
+ };
+ setImmediate(checkState);
+ }
+ checkOptionalUnaryResponseArguments(arg1, arg2, arg3) {
+ if (isFunction(arg1)) {
+ return { metadata: new metadata_1.Metadata(), options: {}, callback: arg1 };
+ }
+ else if (isFunction(arg2)) {
+ if (arg1 instanceof metadata_1.Metadata) {
+ return { metadata: arg1, options: {}, callback: arg2 };
+ }
+ else {
+ return { metadata: new metadata_1.Metadata(), options: arg1, callback: arg2 };
+ }
+ }
+ else {
+ if (!(arg1 instanceof metadata_1.Metadata &&
+ arg2 instanceof Object &&
+ isFunction(arg3))) {
+ throw new Error('Incorrect arguments passed');
+ }
+ return { metadata: arg1, options: arg2, callback: arg3 };
+ }
+ }
+ makeUnaryRequest(method, serialize, deserialize, argument, metadata, options, callback) {
+ var _a, _b;
+ const checkedArguments = this.checkOptionalUnaryResponseArguments(metadata, options, callback);
+ const methodDefinition = {
+ path: method,
+ requestStream: false,
+ responseStream: false,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties = {
+ argument: argument,
+ metadata: checkedArguments.metadata,
+ call: new call_1.ClientUnaryCallImpl(),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ callback: checkedArguments.callback,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties);
+ }
+ const emitter = callProperties.call;
+ const interceptorArgs = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: (_a = callProperties.callOptions.interceptors) !== null && _a !== void 0 ? _a : [],
+ callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== void 0 ? _b : [],
+ };
+ const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel);
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ emitter.call = call;
+ let responseMessage = null;
+ let receivedStatus = false;
+ let callerStackError = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata: metadata => {
+ emitter.emit('metadata', metadata);
+ },
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message) {
+ if (responseMessage !== null) {
+ call.cancelWithStatus(constants_1.Status.INTERNAL, 'Too many responses received');
+ }
+ responseMessage = message;
+ },
+ onReceiveStatus(status) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ if (status.code === constants_1.Status.OK) {
+ if (responseMessage === null) {
+ const callerStack = getErrorStackString(callerStackError);
+ callProperties.callback((0, call_1.callErrorFromStatus)({
+ code: constants_1.Status.INTERNAL,
+ details: 'No message received',
+ metadata: status.metadata,
+ }, callerStack));
+ }
+ else {
+ callProperties.callback(null, responseMessage);
+ }
+ }
+ else {
+ const callerStack = getErrorStackString(callerStackError);
+ callProperties.callback((0, call_1.callErrorFromStatus)(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ emitter.emit('status', status);
+ },
+ });
+ call.sendMessage(argument);
+ call.halfClose();
+ return emitter;
+ }
+ makeClientStreamRequest(method, serialize, deserialize, metadata, options, callback) {
+ var _a, _b;
+ const checkedArguments = this.checkOptionalUnaryResponseArguments(metadata, options, callback);
+ const methodDefinition = {
+ path: method,
+ requestStream: true,
+ responseStream: false,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties = {
+ metadata: checkedArguments.metadata,
+ call: new call_1.ClientWritableStreamImpl(serialize),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ callback: checkedArguments.callback,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties);
+ }
+ const emitter = callProperties.call;
+ const interceptorArgs = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: (_a = callProperties.callOptions.interceptors) !== null && _a !== void 0 ? _a : [],
+ callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== void 0 ? _b : [],
+ };
+ const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel);
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ emitter.call = call;
+ let responseMessage = null;
+ let receivedStatus = false;
+ let callerStackError = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata: metadata => {
+ emitter.emit('metadata', metadata);
+ },
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message) {
+ if (responseMessage !== null) {
+ call.cancelWithStatus(constants_1.Status.INTERNAL, 'Too many responses received');
+ }
+ responseMessage = message;
+ },
+ onReceiveStatus(status) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ if (status.code === constants_1.Status.OK) {
+ if (responseMessage === null) {
+ const callerStack = getErrorStackString(callerStackError);
+ callProperties.callback((0, call_1.callErrorFromStatus)({
+ code: constants_1.Status.INTERNAL,
+ details: 'No message received',
+ metadata: status.metadata,
+ }, callerStack));
+ }
+ else {
+ callProperties.callback(null, responseMessage);
+ }
+ }
+ else {
+ const callerStack = getErrorStackString(callerStackError);
+ callProperties.callback((0, call_1.callErrorFromStatus)(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ emitter.emit('status', status);
+ },
+ });
+ return emitter;
+ }
+ checkMetadataAndOptions(arg1, arg2) {
+ let metadata;
+ let options;
+ if (arg1 instanceof metadata_1.Metadata) {
+ metadata = arg1;
+ if (arg2) {
+ options = arg2;
+ }
+ else {
+ options = {};
+ }
+ }
+ else {
+ if (arg1) {
+ options = arg1;
+ }
+ else {
+ options = {};
+ }
+ metadata = new metadata_1.Metadata();
+ }
+ return { metadata, options };
+ }
+ makeServerStreamRequest(method, serialize, deserialize, argument, metadata, options) {
+ var _a, _b;
+ const checkedArguments = this.checkMetadataAndOptions(metadata, options);
+ const methodDefinition = {
+ path: method,
+ requestStream: false,
+ responseStream: true,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties = {
+ argument: argument,
+ metadata: checkedArguments.metadata,
+ call: new call_1.ClientReadableStreamImpl(deserialize),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties);
+ }
+ const stream = callProperties.call;
+ const interceptorArgs = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: (_a = callProperties.callOptions.interceptors) !== null && _a !== void 0 ? _a : [],
+ callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== void 0 ? _b : [],
+ };
+ const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel);
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ stream.call = call;
+ let receivedStatus = false;
+ let callerStackError = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata(metadata) {
+ stream.emit('metadata', metadata);
+ },
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message) {
+ stream.push(message);
+ },
+ onReceiveStatus(status) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ stream.push(null);
+ if (status.code !== constants_1.Status.OK) {
+ const callerStack = getErrorStackString(callerStackError);
+ stream.emit('error', (0, call_1.callErrorFromStatus)(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ stream.emit('status', status);
+ },
+ });
+ call.sendMessage(argument);
+ call.halfClose();
+ return stream;
+ }
+ makeBidiStreamRequest(method, serialize, deserialize, metadata, options) {
+ var _a, _b;
+ const checkedArguments = this.checkMetadataAndOptions(metadata, options);
+ const methodDefinition = {
+ path: method,
+ requestStream: true,
+ responseStream: true,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties = {
+ metadata: checkedArguments.metadata,
+ call: new call_1.ClientDuplexStreamImpl(serialize, deserialize),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties);
+ }
+ const stream = callProperties.call;
+ const interceptorArgs = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: (_a = callProperties.callOptions.interceptors) !== null && _a !== void 0 ? _a : [],
+ callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== void 0 ? _b : [],
+ };
+ const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel);
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ stream.call = call;
+ let receivedStatus = false;
+ let callerStackError = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata(metadata) {
+ stream.emit('metadata', metadata);
+ },
+ onReceiveMessage(message) {
+ stream.push(message);
+ },
+ onReceiveStatus(status) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ stream.push(null);
+ if (status.code !== constants_1.Status.OK) {
+ const callerStack = getErrorStackString(callerStackError);
+ stream.emit('error', (0, call_1.callErrorFromStatus)(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ stream.emit('status', status);
+ },
+ });
+ return stream;
+ }
+}
+exports.Client = Client;
+//# sourceMappingURL=client.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/client.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/client.js.map
new file mode 100644
index 0000000..3578015
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/client.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts
new file mode 100644
index 0000000..555b222
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts
@@ -0,0 +1,5 @@
+export declare enum CompressionAlgorithms {
+ identity = 0,
+ deflate = 1,
+ gzip = 2
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js
new file mode 100644
index 0000000..15a4f00
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js
@@ -0,0 +1,26 @@
+"use strict";
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CompressionAlgorithms = void 0;
+var CompressionAlgorithms;
+(function (CompressionAlgorithms) {
+ CompressionAlgorithms[CompressionAlgorithms["identity"] = 0] = "identity";
+ CompressionAlgorithms[CompressionAlgorithms["deflate"] = 1] = "deflate";
+ CompressionAlgorithms[CompressionAlgorithms["gzip"] = 2] = "gzip";
+})(CompressionAlgorithms || (exports.CompressionAlgorithms = CompressionAlgorithms = {}));
+//# sourceMappingURL=compression-algorithms.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js.map
new file mode 100644
index 0000000..760772f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"compression-algorithms.js","sourceRoot":"","sources":["../../src/compression-algorithms.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,yEAAY,CAAA;IACZ,uEAAW,CAAA;IACX,iEAAQ,CAAA;AACV,CAAC,EAJW,qBAAqB,qCAArB,qBAAqB,QAIhC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.d.ts
new file mode 100644
index 0000000..1b6b48f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.d.ts
@@ -0,0 +1,28 @@
+/// <reference types="node" />
+import { WriteObject } from './call-interface';
+import { Channel } from './channel';
+import { ChannelOptions } from './channel-options';
+import { BaseFilter, Filter, FilterFactory } from './filter';
+import { Metadata } from './metadata';
+type SharedCompressionFilterConfig = {
+ serverSupportedEncodingHeader?: string;
+};
+export declare class CompressionFilter extends BaseFilter implements Filter {
+ private sharedFilterConfig;
+ private sendCompression;
+ private receiveCompression;
+ private currentCompressionAlgorithm;
+ private maxReceiveMessageLength;
+ constructor(channelOptions: ChannelOptions, sharedFilterConfig: SharedCompressionFilterConfig);
+ sendMetadata(metadata: Promise<Metadata>): Promise<Metadata>;
+ receiveMetadata(metadata: Metadata): Metadata;
+ sendMessage(message: Promise<WriteObject>): Promise<WriteObject>;
+ receiveMessage(message: Promise<Buffer>): Promise<Buffer>;
+}
+export declare class CompressionFilterFactory implements FilterFactory<CompressionFilter> {
+ private readonly options;
+ private sharedFilterConfig;
+ constructor(channel: Channel, options: ChannelOptions);
+ createFilter(): CompressionFilter;
+}
+export {};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js
new file mode 100644
index 0000000..41c3c37
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js
@@ -0,0 +1,288 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CompressionFilterFactory = exports.CompressionFilter = void 0;
+const zlib = require("zlib");
+const compression_algorithms_1 = require("./compression-algorithms");
+const constants_1 = require("./constants");
+const filter_1 = require("./filter");
+const logging = require("./logging");
+const isCompressionAlgorithmKey = (key) => {
+ return (typeof key === 'number' && typeof compression_algorithms_1.CompressionAlgorithms[key] === 'string');
+};
+class CompressionHandler {
+ /**
+ * @param message Raw uncompressed message bytes
+ * @param compress Indicates whether the message should be compressed
+ * @return Framed message, compressed if applicable
+ */
+ async writeMessage(message, compress) {
+ let messageBuffer = message;
+ if (compress) {
+ messageBuffer = await this.compressMessage(messageBuffer);
+ }
+ const output = Buffer.allocUnsafe(messageBuffer.length + 5);
+ output.writeUInt8(compress ? 1 : 0, 0);
+ output.writeUInt32BE(messageBuffer.length, 1);
+ messageBuffer.copy(output, 5);
+ return output;
+ }
+ /**
+ * @param data Framed message, possibly compressed
+ * @return Uncompressed message
+ */
+ async readMessage(data) {
+ const compressed = data.readUInt8(0) === 1;
+ let messageBuffer = data.slice(5);
+ if (compressed) {
+ messageBuffer = await this.decompressMessage(messageBuffer);
+ }
+ return messageBuffer;
+ }
+}
+class IdentityHandler extends CompressionHandler {
+ async compressMessage(message) {
+ return message;
+ }
+ async writeMessage(message, compress) {
+ const output = Buffer.allocUnsafe(message.length + 5);
+ /* With "identity" compression, messages should always be marked as
+ * uncompressed */
+ output.writeUInt8(0, 0);
+ output.writeUInt32BE(message.length, 1);
+ message.copy(output, 5);
+ return output;
+ }
+ decompressMessage(message) {
+ return Promise.reject(new Error('Received compressed message but "grpc-encoding" header was identity'));
+ }
+}
+class DeflateHandler extends CompressionHandler {
+ constructor(maxRecvMessageLength) {
+ super();
+ this.maxRecvMessageLength = maxRecvMessageLength;
+ }
+ compressMessage(message) {
+ return new Promise((resolve, reject) => {
+ zlib.deflate(message, (err, output) => {
+ if (err) {
+ reject(err);
+ }
+ else {
+ resolve(output);
+ }
+ });
+ });
+ }
+ decompressMessage(message) {
+ return new Promise((resolve, reject) => {
+ let totalLength = 0;
+ const messageParts = [];
+ const decompresser = zlib.createInflate();
+ decompresser.on('data', (chunk) => {
+ messageParts.push(chunk);
+ totalLength += chunk.byteLength;
+ if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {
+ decompresser.destroy();
+ reject({
+ code: constants_1.Status.RESOURCE_EXHAUSTED,
+ details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`
+ });
+ }
+ });
+ decompresser.on('end', () => {
+ resolve(Buffer.concat(messageParts));
+ });
+ decompresser.write(message);
+ decompresser.end();
+ });
+ }
+}
+class GzipHandler extends CompressionHandler {
+ constructor(maxRecvMessageLength) {
+ super();
+ this.maxRecvMessageLength = maxRecvMessageLength;
+ }
+ compressMessage(message) {
+ return new Promise((resolve, reject) => {
+ zlib.gzip(message, (err, output) => {
+ if (err) {
+ reject(err);
+ }
+ else {
+ resolve(output);
+ }
+ });
+ });
+ }
+ decompressMessage(message) {
+ return new Promise((resolve, reject) => {
+ let totalLength = 0;
+ const messageParts = [];
+ const decompresser = zlib.createGunzip();
+ decompresser.on('data', (chunk) => {
+ messageParts.push(chunk);
+ totalLength += chunk.byteLength;
+ if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {
+ decompresser.destroy();
+ reject({
+ code: constants_1.Status.RESOURCE_EXHAUSTED,
+ details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`
+ });
+ }
+ });
+ decompresser.on('end', () => {
+ resolve(Buffer.concat(messageParts));
+ });
+ decompresser.write(message);
+ decompresser.end();
+ });
+ }
+}
+class UnknownHandler extends CompressionHandler {
+ constructor(compressionName) {
+ super();
+ this.compressionName = compressionName;
+ }
+ compressMessage(message) {
+ return Promise.reject(new Error(`Received message compressed with unsupported compression method ${this.compressionName}`));
+ }
+ decompressMessage(message) {
+ // This should be unreachable
+ return Promise.reject(new Error(`Compression method not supported: ${this.compressionName}`));
+ }
+}
+function getCompressionHandler(compressionName, maxReceiveMessageSize) {
+ switch (compressionName) {
+ case 'identity':
+ return new IdentityHandler();
+ case 'deflate':
+ return new DeflateHandler(maxReceiveMessageSize);
+ case 'gzip':
+ return new GzipHandler(maxReceiveMessageSize);
+ default:
+ return new UnknownHandler(compressionName);
+ }
+}
+class CompressionFilter extends filter_1.BaseFilter {
+ constructor(channelOptions, sharedFilterConfig) {
+ var _a, _b;
+ super();
+ this.sharedFilterConfig = sharedFilterConfig;
+ this.sendCompression = new IdentityHandler();
+ this.receiveCompression = new IdentityHandler();
+ this.currentCompressionAlgorithm = 'identity';
+ const compressionAlgorithmKey = channelOptions['grpc.default_compression_algorithm'];
+ this.maxReceiveMessageLength = (_a = channelOptions['grpc.max_receive_message_length']) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;
+ if (compressionAlgorithmKey !== undefined) {
+ if (isCompressionAlgorithmKey(compressionAlgorithmKey)) {
+ const clientSelectedEncoding = compression_algorithms_1.CompressionAlgorithms[compressionAlgorithmKey];
+ const serverSupportedEncodings = (_b = sharedFilterConfig.serverSupportedEncodingHeader) === null || _b === void 0 ? void 0 : _b.split(',');
+ /**
+ * There are two possible situations here:
+ * 1) We don't have any info yet from the server about what compression it supports
+ * In that case we should just use what the client tells us to use
+ * 2) We've previously received a response from the server including a grpc-accept-encoding header
+ * In that case we only want to use the encoding chosen by the client if the server supports it
+ */
+ if (!serverSupportedEncodings ||
+ serverSupportedEncodings.includes(clientSelectedEncoding)) {
+ this.currentCompressionAlgorithm = clientSelectedEncoding;
+ this.sendCompression = getCompressionHandler(this.currentCompressionAlgorithm, -1);
+ }
+ }
+ else {
+ logging.log(constants_1.LogVerbosity.ERROR, `Invalid value provided for grpc.default_compression_algorithm option: ${compressionAlgorithmKey}`);
+ }
+ }
+ }
+ async sendMetadata(metadata) {
+ const headers = await metadata;
+ headers.set('grpc-accept-encoding', 'identity,deflate,gzip');
+ headers.set('accept-encoding', 'identity');
+ // No need to send the header if it's "identity" - behavior is identical; save the bandwidth
+ if (this.currentCompressionAlgorithm === 'identity') {
+ headers.remove('grpc-encoding');
+ }
+ else {
+ headers.set('grpc-encoding', this.currentCompressionAlgorithm);
+ }
+ return headers;
+ }
+ receiveMetadata(metadata) {
+ const receiveEncoding = metadata.get('grpc-encoding');
+ if (receiveEncoding.length > 0) {
+ const encoding = receiveEncoding[0];
+ if (typeof encoding === 'string') {
+ this.receiveCompression = getCompressionHandler(encoding, this.maxReceiveMessageLength);
+ }
+ }
+ metadata.remove('grpc-encoding');
+ /* Check to see if the compression we're using to send messages is supported by the server
+ * If not, reset the sendCompression filter and have it use the default IdentityHandler */
+ const serverSupportedEncodingsHeader = metadata.get('grpc-accept-encoding')[0];
+ if (serverSupportedEncodingsHeader) {
+ this.sharedFilterConfig.serverSupportedEncodingHeader =
+ serverSupportedEncodingsHeader;
+ const serverSupportedEncodings = serverSupportedEncodingsHeader.split(',');
+ if (!serverSupportedEncodings.includes(this.currentCompressionAlgorithm)) {
+ this.sendCompression = new IdentityHandler();
+ this.currentCompressionAlgorithm = 'identity';
+ }
+ }
+ metadata.remove('grpc-accept-encoding');
+ return metadata;
+ }
+ async sendMessage(message) {
+ var _a;
+ /* This filter is special. The input message is the bare message bytes,
+ * and the output is a framed and possibly compressed message. For this
+ * reason, this filter should be at the bottom of the filter stack */
+ const resolvedMessage = await message;
+ let compress;
+ if (this.sendCompression instanceof IdentityHandler) {
+ compress = false;
+ }
+ else {
+ compress = (((_a = resolvedMessage.flags) !== null && _a !== void 0 ? _a : 0) & 2 /* WriteFlags.NoCompress */) === 0;
+ }
+ return {
+ message: await this.sendCompression.writeMessage(resolvedMessage.message, compress),
+ flags: resolvedMessage.flags,
+ };
+ }
+ async receiveMessage(message) {
+ /* This filter is also special. The input message is framed and possibly
+ * compressed, and the output message is deframed and uncompressed. So
+ * this is another reason that this filter should be at the bottom of the
+ * filter stack. */
+ return this.receiveCompression.readMessage(await message);
+ }
+}
+exports.CompressionFilter = CompressionFilter;
+class CompressionFilterFactory {
+ constructor(channel, options) {
+ this.options = options;
+ this.sharedFilterConfig = {};
+ }
+ createFilter() {
+ return new CompressionFilter(this.options, this.sharedFilterConfig);
+ }
+}
+exports.CompressionFilterFactory = CompressionFilterFactory;
+//# sourceMappingURL=compression-filter.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js.map
new file mode 100644
index 0000000..9a9b1af
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/compression-filter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"compression-filter.js","sourceRoot":"","sources":["../../src/compression-filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts
new file mode 100644
index 0000000..048ea39
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts
@@ -0,0 +1,7 @@
+export declare enum ConnectivityState {
+ IDLE = 0,
+ CONNECTING = 1,
+ READY = 2,
+ TRANSIENT_FAILURE = 3,
+ SHUTDOWN = 4
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js
new file mode 100644
index 0000000..c8540b0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js
@@ -0,0 +1,28 @@
+"use strict";
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ConnectivityState = void 0;
+var ConnectivityState;
+(function (ConnectivityState) {
+ ConnectivityState[ConnectivityState["IDLE"] = 0] = "IDLE";
+ ConnectivityState[ConnectivityState["CONNECTING"] = 1] = "CONNECTING";
+ ConnectivityState[ConnectivityState["READY"] = 2] = "READY";
+ ConnectivityState[ConnectivityState["TRANSIENT_FAILURE"] = 3] = "TRANSIENT_FAILURE";
+ ConnectivityState[ConnectivityState["SHUTDOWN"] = 4] = "SHUTDOWN";
+})(ConnectivityState || (exports.ConnectivityState = ConnectivityState = {}));
+//# sourceMappingURL=connectivity-state.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js.map
new file mode 100644
index 0000000..1afc24d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/connectivity-state.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"connectivity-state.js","sourceRoot":"","sources":["../../src/connectivity-state.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,IAAY,iBAMX;AAND,WAAY,iBAAiB;IAC3B,yDAAI,CAAA;IACJ,qEAAU,CAAA;IACV,2DAAK,CAAA;IACL,mFAAiB,CAAA;IACjB,iEAAQ,CAAA;AACV,CAAC,EANW,iBAAiB,iCAAjB,iBAAiB,QAM5B"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.d.ts
new file mode 100644
index 0000000..43ec358
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.d.ts
@@ -0,0 +1,38 @@
+export declare enum Status {
+ OK = 0,
+ CANCELLED = 1,
+ UNKNOWN = 2,
+ INVALID_ARGUMENT = 3,
+ DEADLINE_EXCEEDED = 4,
+ NOT_FOUND = 5,
+ ALREADY_EXISTS = 6,
+ PERMISSION_DENIED = 7,
+ RESOURCE_EXHAUSTED = 8,
+ FAILED_PRECONDITION = 9,
+ ABORTED = 10,
+ OUT_OF_RANGE = 11,
+ UNIMPLEMENTED = 12,
+ INTERNAL = 13,
+ UNAVAILABLE = 14,
+ DATA_LOSS = 15,
+ UNAUTHENTICATED = 16
+}
+export declare enum LogVerbosity {
+ DEBUG = 0,
+ INFO = 1,
+ ERROR = 2,
+ NONE = 3
+}
+/**
+ * NOTE: This enum is not currently used in any implemented API in this
+ * library. It is included only for type parity with the other implementation.
+ */
+export declare enum Propagate {
+ DEADLINE = 1,
+ CENSUS_STATS_CONTEXT = 2,
+ CENSUS_TRACING_CONTEXT = 4,
+ CANCELLATION = 8,
+ DEFAULTS = 65535
+}
+export declare const DEFAULT_MAX_SEND_MESSAGE_LENGTH = -1;
+export declare const DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH: number;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js
new file mode 100644
index 0000000..6e6b8ed
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js
@@ -0,0 +1,64 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH = exports.DEFAULT_MAX_SEND_MESSAGE_LENGTH = exports.Propagate = exports.LogVerbosity = exports.Status = void 0;
+var Status;
+(function (Status) {
+ Status[Status["OK"] = 0] = "OK";
+ Status[Status["CANCELLED"] = 1] = "CANCELLED";
+ Status[Status["UNKNOWN"] = 2] = "UNKNOWN";
+ Status[Status["INVALID_ARGUMENT"] = 3] = "INVALID_ARGUMENT";
+ Status[Status["DEADLINE_EXCEEDED"] = 4] = "DEADLINE_EXCEEDED";
+ Status[Status["NOT_FOUND"] = 5] = "NOT_FOUND";
+ Status[Status["ALREADY_EXISTS"] = 6] = "ALREADY_EXISTS";
+ Status[Status["PERMISSION_DENIED"] = 7] = "PERMISSION_DENIED";
+ Status[Status["RESOURCE_EXHAUSTED"] = 8] = "RESOURCE_EXHAUSTED";
+ Status[Status["FAILED_PRECONDITION"] = 9] = "FAILED_PRECONDITION";
+ Status[Status["ABORTED"] = 10] = "ABORTED";
+ Status[Status["OUT_OF_RANGE"] = 11] = "OUT_OF_RANGE";
+ Status[Status["UNIMPLEMENTED"] = 12] = "UNIMPLEMENTED";
+ Status[Status["INTERNAL"] = 13] = "INTERNAL";
+ Status[Status["UNAVAILABLE"] = 14] = "UNAVAILABLE";
+ Status[Status["DATA_LOSS"] = 15] = "DATA_LOSS";
+ Status[Status["UNAUTHENTICATED"] = 16] = "UNAUTHENTICATED";
+})(Status || (exports.Status = Status = {}));
+var LogVerbosity;
+(function (LogVerbosity) {
+ LogVerbosity[LogVerbosity["DEBUG"] = 0] = "DEBUG";
+ LogVerbosity[LogVerbosity["INFO"] = 1] = "INFO";
+ LogVerbosity[LogVerbosity["ERROR"] = 2] = "ERROR";
+ LogVerbosity[LogVerbosity["NONE"] = 3] = "NONE";
+})(LogVerbosity || (exports.LogVerbosity = LogVerbosity = {}));
+/**
+ * NOTE: This enum is not currently used in any implemented API in this
+ * library. It is included only for type parity with the other implementation.
+ */
+var Propagate;
+(function (Propagate) {
+ Propagate[Propagate["DEADLINE"] = 1] = "DEADLINE";
+ Propagate[Propagate["CENSUS_STATS_CONTEXT"] = 2] = "CENSUS_STATS_CONTEXT";
+ Propagate[Propagate["CENSUS_TRACING_CONTEXT"] = 4] = "CENSUS_TRACING_CONTEXT";
+ Propagate[Propagate["CANCELLATION"] = 8] = "CANCELLATION";
+ // https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/propagation_bits.h#L43
+ Propagate[Propagate["DEFAULTS"] = 65535] = "DEFAULTS";
+})(Propagate || (exports.Propagate = Propagate = {}));
+// -1 means unlimited
+exports.DEFAULT_MAX_SEND_MESSAGE_LENGTH = -1;
+// 4 MB default
+exports.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH = 4 * 1024 * 1024;
+//# sourceMappingURL=constants.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js.map
new file mode 100644
index 0000000..a3c5c87
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/constants.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,IAAY,MAkBX;AAlBD,WAAY,MAAM;IAChB,+BAAM,CAAA;IACN,6CAAS,CAAA;IACT,yCAAO,CAAA;IACP,2DAAgB,CAAA;IAChB,6DAAiB,CAAA;IACjB,6CAAS,CAAA;IACT,uDAAc,CAAA;IACd,6DAAiB,CAAA;IACjB,+DAAkB,CAAA;IAClB,iEAAmB,CAAA;IACnB,0CAAO,CAAA;IACP,oDAAY,CAAA;IACZ,sDAAa,CAAA;IACb,4CAAQ,CAAA;IACR,kDAAW,CAAA;IACX,8CAAS,CAAA;IACT,0DAAe,CAAA;AACjB,CAAC,EAlBW,MAAM,sBAAN,MAAM,QAkBjB;AAED,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,iDAAS,CAAA;IACT,+CAAI,CAAA;IACJ,iDAAK,CAAA;IACL,+CAAI,CAAA;AACN,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAED;;;GAGG;AACH,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,iDAAY,CAAA;IACZ,yEAAwB,CAAA;IACxB,6EAA0B,CAAA;IAC1B,yDAAgB,CAAA;IAChB,4FAA4F;IAC5F,qDAIwB,CAAA;AAC1B,CAAC,EAXW,SAAS,yBAAT,SAAS,QAWpB;AAED,qBAAqB;AACR,QAAA,+BAA+B,GAAG,CAAC,CAAC,CAAC;AAElD,eAAe;AACF,QAAA,kCAAkC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.d.ts
new file mode 100644
index 0000000..a137cab
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.d.ts
@@ -0,0 +1,5 @@
+import { Status } from './constants';
+export declare function restrictControlPlaneStatusCode(code: Status, details: string): {
+ code: Status;
+ details: string;
+};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js
new file mode 100644
index 0000000..dc41cb2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js
@@ -0,0 +1,43 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.restrictControlPlaneStatusCode = void 0;
+const constants_1 = require("./constants");
+const INAPPROPRIATE_CONTROL_PLANE_CODES = [
+ constants_1.Status.OK,
+ constants_1.Status.INVALID_ARGUMENT,
+ constants_1.Status.NOT_FOUND,
+ constants_1.Status.ALREADY_EXISTS,
+ constants_1.Status.FAILED_PRECONDITION,
+ constants_1.Status.ABORTED,
+ constants_1.Status.OUT_OF_RANGE,
+ constants_1.Status.DATA_LOSS,
+];
+function restrictControlPlaneStatusCode(code, details) {
+ if (INAPPROPRIATE_CONTROL_PLANE_CODES.includes(code)) {
+ return {
+ code: constants_1.Status.INTERNAL,
+ details: `Invalid status from control plane: ${code} ${constants_1.Status[code]} ${details}`,
+ };
+ }
+ else {
+ return { code, details };
+ }
+}
+exports.restrictControlPlaneStatusCode = restrictControlPlaneStatusCode;
+//# sourceMappingURL=control-plane-status.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js.map
new file mode 100644
index 0000000..297ca91
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/control-plane-status.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"control-plane-status.js","sourceRoot":"","sources":["../../src/control-plane-status.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,2CAAqC;AAErC,MAAM,iCAAiC,GAAa;IAClD,kBAAM,CAAC,EAAE;IACT,kBAAM,CAAC,gBAAgB;IACvB,kBAAM,CAAC,SAAS;IAChB,kBAAM,CAAC,cAAc;IACrB,kBAAM,CAAC,mBAAmB;IAC1B,kBAAM,CAAC,OAAO;IACd,kBAAM,CAAC,YAAY;IACnB,kBAAM,CAAC,SAAS;CACjB,CAAC;AAEF,SAAgB,8BAA8B,CAC5C,IAAY,EACZ,OAAe;IAEf,IAAI,iCAAiC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO;YACL,IAAI,EAAE,kBAAM,CAAC,QAAQ;YACrB,OAAO,EAAE,sCAAsC,IAAI,IAAI,kBAAM,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE;SACjF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAZD,wEAYC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.d.ts
new file mode 100644
index 0000000..08af4ba
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.d.ts
@@ -0,0 +1,14 @@
+export type Deadline = Date | number;
+export declare function minDeadline(...deadlineList: Deadline[]): Deadline;
+export declare function getDeadlineTimeoutString(deadline: Deadline): string;
+/**
+ * Get the timeout value that should be passed to setTimeout now for the timer
+ * to end at the deadline. For any deadline before now, the timer should end
+ * immediately, represented by a value of 0. For any deadline more than
+ * MAX_TIMEOUT_TIME milliseconds in the future, a timer cannot be set that will
+ * end at that time, so it is treated as infinitely far in the future.
+ * @param deadline
+ * @returns
+ */
+export declare function getRelativeTimeout(deadline: Deadline): number;
+export declare function deadlineToString(deadline: Deadline): string;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js
new file mode 100644
index 0000000..f51c43c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js
@@ -0,0 +1,98 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.deadlineToString = exports.getRelativeTimeout = exports.getDeadlineTimeoutString = exports.minDeadline = void 0;
+function minDeadline(...deadlineList) {
+ let minValue = Infinity;
+ for (const deadline of deadlineList) {
+ const deadlineMsecs = deadline instanceof Date ? deadline.getTime() : deadline;
+ if (deadlineMsecs < minValue) {
+ minValue = deadlineMsecs;
+ }
+ }
+ return minValue;
+}
+exports.minDeadline = minDeadline;
+const units = [
+ ['m', 1],
+ ['S', 1000],
+ ['M', 60 * 1000],
+ ['H', 60 * 60 * 1000],
+];
+function getDeadlineTimeoutString(deadline) {
+ const now = new Date().getTime();
+ if (deadline instanceof Date) {
+ deadline = deadline.getTime();
+ }
+ const timeoutMs = Math.max(deadline - now, 0);
+ for (const [unit, factor] of units) {
+ const amount = timeoutMs / factor;
+ if (amount < 1e8) {
+ return String(Math.ceil(amount)) + unit;
+ }
+ }
+ throw new Error('Deadline is too far in the future');
+}
+exports.getDeadlineTimeoutString = getDeadlineTimeoutString;
+/**
+ * See https://nodejs.org/api/timers.html#settimeoutcallback-delay-args
+ * In particular, "When delay is larger than 2147483647 or less than 1, the
+ * delay will be set to 1. Non-integer delays are truncated to an integer."
+ * This number of milliseconds is almost 25 days.
+ */
+const MAX_TIMEOUT_TIME = 2147483647;
+/**
+ * Get the timeout value that should be passed to setTimeout now for the timer
+ * to end at the deadline. For any deadline before now, the timer should end
+ * immediately, represented by a value of 0. For any deadline more than
+ * MAX_TIMEOUT_TIME milliseconds in the future, a timer cannot be set that will
+ * end at that time, so it is treated as infinitely far in the future.
+ * @param deadline
+ * @returns
+ */
+function getRelativeTimeout(deadline) {
+ const deadlineMs = deadline instanceof Date ? deadline.getTime() : deadline;
+ const now = new Date().getTime();
+ const timeout = deadlineMs - now;
+ if (timeout < 0) {
+ return 0;
+ }
+ else if (timeout > MAX_TIMEOUT_TIME) {
+ return Infinity;
+ }
+ else {
+ return timeout;
+ }
+}
+exports.getRelativeTimeout = getRelativeTimeout;
+function deadlineToString(deadline) {
+ if (deadline instanceof Date) {
+ return deadline.toISOString();
+ }
+ else {
+ const dateDeadline = new Date(deadline);
+ if (Number.isNaN(dateDeadline.getTime())) {
+ return '' + deadline;
+ }
+ else {
+ return dateDeadline.toISOString();
+ }
+ }
+}
+exports.deadlineToString = deadlineToString;
+//# sourceMappingURL=deadline.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js.map
new file mode 100644
index 0000000..c9a47b3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/deadline.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"deadline.js","sourceRoot":"","sources":["../../src/deadline.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAIH,SAAgB,WAAW,CAAC,GAAG,YAAwB;IACrD,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,aAAa,GACjB,QAAQ,YAAY,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3D,IAAI,aAAa,GAAG,QAAQ,EAAE,CAAC;YAC7B,QAAQ,GAAG,aAAa,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAVD,kCAUC;AAED,MAAM,KAAK,GAA4B;IACrC,CAAC,GAAG,EAAE,CAAC,CAAC;IACR,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,SAAgB,wBAAwB,CAAC,QAAkB;IACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,QAAQ,YAAY,IAAI,EAAE,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;QAClC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACvD,CAAC;AAbD,4DAaC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAEpC;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAC,QAAkB;IACnD,MAAM,UAAU,GAAG,QAAQ,YAAY,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,GAAG,GAAG,CAAC;IACjC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAXD,gDAWC;AAED,SAAgB,gBAAgB,CAAC,QAAkB;IACjD,IAAI,QAAQ,YAAY,IAAI,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,GAAG,QAAQ,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAXD,4CAWC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.d.ts
new file mode 100644
index 0000000..923159b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.d.ts
@@ -0,0 +1,7 @@
+export interface Duration {
+ seconds: number;
+ nanos: number;
+}
+export declare function msToDuration(millis: number): Duration;
+export declare function durationToMs(duration: Duration): number;
+export declare function isDuration(value: any): value is Duration;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js
new file mode 100644
index 0000000..3ac1d21
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js
@@ -0,0 +1,35 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isDuration = exports.durationToMs = exports.msToDuration = void 0;
+function msToDuration(millis) {
+ return {
+ seconds: (millis / 1000) | 0,
+ nanos: ((millis % 1000) * 1000000) | 0,
+ };
+}
+exports.msToDuration = msToDuration;
+function durationToMs(duration) {
+ return (duration.seconds * 1000 + duration.nanos / 1000000) | 0;
+}
+exports.durationToMs = durationToMs;
+function isDuration(value) {
+ return typeof value.seconds === 'number' && typeof value.nanos === 'number';
+}
+exports.isDuration = isDuration;
+//# sourceMappingURL=duration.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js.map
new file mode 100644
index 0000000..3be3631
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/duration.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/duration.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAOH,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO;QACL,OAAO,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAS,CAAC,GAAG,CAAC;KACzC,CAAC;AACJ,CAAC;AALD,oCAKC;AAED,SAAgB,YAAY,CAAC,QAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,OAAS,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC;AAFD,oCAEC;AAED,SAAgB,UAAU,CAAC,KAAU;IACnC,OAAO,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAFD,gCAEC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/error.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/error.d.ts
new file mode 100644
index 0000000..fd4cc77
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/error.d.ts
@@ -0,0 +1,2 @@
+export declare function getErrorMessage(error: unknown): string;
+export declare function getErrorCode(error: unknown): number | null;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/error.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/error.js
new file mode 100644
index 0000000..c842333
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/error.js
@@ -0,0 +1,41 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getErrorCode = exports.getErrorMessage = void 0;
+function getErrorMessage(error) {
+ if (error instanceof Error) {
+ return error.message;
+ }
+ else {
+ return String(error);
+ }
+}
+exports.getErrorMessage = getErrorMessage;
+function getErrorCode(error) {
+ if (typeof error === 'object' &&
+ error !== null &&
+ 'code' in error &&
+ typeof error.code === 'number') {
+ return error.code;
+ }
+ else {
+ return null;
+ }
+}
+exports.getErrorCode = getErrorCode;
+//# sourceMappingURL=error.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/error.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/error.js.map
new file mode 100644
index 0000000..192891c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/error.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,SAAgB,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAND,0CAMC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OAAQ,KAAiC,CAAC,IAAI,KAAK,QAAQ,EAC3D,CAAC;QACD,OAAQ,KAAgC,CAAC,IAAI,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAXD,oCAWC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/events.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/events.d.ts
new file mode 100644
index 0000000..d1a764e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/events.d.ts
@@ -0,0 +1,9 @@
+export interface EmitterAugmentation1<Name extends string | symbol, Arg> {
+ addListener(event: Name, listener: (arg1: Arg) => void): this;
+ emit(event: Name, arg1: Arg): boolean;
+ on(event: Name, listener: (arg1: Arg) => void): this;
+ once(event: Name, listener: (arg1: Arg) => void): this;
+ prependListener(event: Name, listener: (arg1: Arg) => void): this;
+ prependOnceListener(event: Name, listener: (arg1: Arg) => void): this;
+ removeListener(event: Name, listener: (arg1: Arg) => void): this;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/events.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/events.js
new file mode 100644
index 0000000..082ed9b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/events.js
@@ -0,0 +1,19 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=events.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/events.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/events.js.map
new file mode 100644
index 0000000..ba39b5d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/events.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.d.ts
new file mode 100644
index 0000000..5808971
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.d.ts
@@ -0,0 +1,16 @@
+export { trace, log } from './logging';
+export { Resolver, ResolverListener, registerResolver, ConfigSelector, createResolver, } from './resolver';
+export { GrpcUri, uriToString } from './uri-parser';
+export { Duration, durationToMs } from './duration';
+export { ServiceConfig, MethodConfig, RetryPolicy } from './service-config';
+export { BackoffTimeout } from './backoff-timeout';
+export { LoadBalancer, LoadBalancingConfig, ChannelControlHelper, createChildChannelControlHelper, registerLoadBalancerType, getFirstUsableConfig, validateLoadBalancingConfig, } from './load-balancer';
+export { SubchannelAddress, subchannelAddressToString, } from './subchannel-address';
+export { ChildLoadBalancerHandler } from './load-balancer-child-handler';
+export { Picker, UnavailablePicker, QueuePicker, PickResult, PickArgs, PickResultType, } from './picker';
+export { Call as CallStream } from './call-interface';
+export { Filter, BaseFilter, FilterFactory } from './filter';
+export { FilterStackFactory } from './filter-stack';
+export { registerAdminService } from './admin';
+export { SubchannelInterface, BaseSubchannelWrapper, ConnectivityStateListener, } from './subchannel-interface';
+export { OutlierDetectionLoadBalancingConfig, SuccessRateEjectionConfig, FailurePercentageEjectionConfig, } from './load-balancer-outlier-detection';
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js
new file mode 100644
index 0000000..21e26e0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js
@@ -0,0 +1,39 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.OutlierDetectionLoadBalancingConfig = exports.BaseSubchannelWrapper = exports.registerAdminService = exports.FilterStackFactory = exports.BaseFilter = exports.PickResultType = exports.QueuePicker = exports.UnavailablePicker = exports.ChildLoadBalancerHandler = exports.subchannelAddressToString = exports.validateLoadBalancingConfig = exports.getFirstUsableConfig = exports.registerLoadBalancerType = exports.createChildChannelControlHelper = exports.BackoffTimeout = exports.durationToMs = exports.uriToString = exports.createResolver = exports.registerResolver = exports.log = exports.trace = void 0;
+var logging_1 = require("./logging");
+Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return logging_1.trace; } });
+Object.defineProperty(exports, "log", { enumerable: true, get: function () { return logging_1.log; } });
+var resolver_1 = require("./resolver");
+Object.defineProperty(exports, "registerResolver", { enumerable: true, get: function () { return resolver_1.registerResolver; } });
+Object.defineProperty(exports, "createResolver", { enumerable: true, get: function () { return resolver_1.createResolver; } });
+var uri_parser_1 = require("./uri-parser");
+Object.defineProperty(exports, "uriToString", { enumerable: true, get: function () { return uri_parser_1.uriToString; } });
+var duration_1 = require("./duration");
+Object.defineProperty(exports, "durationToMs", { enumerable: true, get: function () { return duration_1.durationToMs; } });
+var backoff_timeout_1 = require("./backoff-timeout");
+Object.defineProperty(exports, "BackoffTimeout", { enumerable: true, get: function () { return backoff_timeout_1.BackoffTimeout; } });
+var load_balancer_1 = require("./load-balancer");
+Object.defineProperty(exports, "createChildChannelControlHelper", { enumerable: true, get: function () { return load_balancer_1.createChildChannelControlHelper; } });
+Object.defineProperty(exports, "registerLoadBalancerType", { enumerable: true, get: function () { return load_balancer_1.registerLoadBalancerType; } });
+Object.defineProperty(exports, "getFirstUsableConfig", { enumerable: true, get: function () { return load_balancer_1.getFirstUsableConfig; } });
+Object.defineProperty(exports, "validateLoadBalancingConfig", { enumerable: true, get: function () { return load_balancer_1.validateLoadBalancingConfig; } });
+var subchannel_address_1 = require("./subchannel-address");
+Object.defineProperty(exports, "subchannelAddressToString", { enumerable: true, get: function () { return subchannel_address_1.subchannelAddressToString; } });
+var load_balancer_child_handler_1 = require("./load-balancer-child-handler");
+Object.defineProperty(exports, "ChildLoadBalancerHandler", { enumerable: true, get: function () { return load_balancer_child_handler_1.ChildLoadBalancerHandler; } });
+var picker_1 = require("./picker");
+Object.defineProperty(exports, "UnavailablePicker", { enumerable: true, get: function () { return picker_1.UnavailablePicker; } });
+Object.defineProperty(exports, "QueuePicker", { enumerable: true, get: function () { return picker_1.QueuePicker; } });
+Object.defineProperty(exports, "PickResultType", { enumerable: true, get: function () { return picker_1.PickResultType; } });
+var filter_1 = require("./filter");
+Object.defineProperty(exports, "BaseFilter", { enumerable: true, get: function () { return filter_1.BaseFilter; } });
+var filter_stack_1 = require("./filter-stack");
+Object.defineProperty(exports, "FilterStackFactory", { enumerable: true, get: function () { return filter_stack_1.FilterStackFactory; } });
+var admin_1 = require("./admin");
+Object.defineProperty(exports, "registerAdminService", { enumerable: true, get: function () { return admin_1.registerAdminService; } });
+var subchannel_interface_1 = require("./subchannel-interface");
+Object.defineProperty(exports, "BaseSubchannelWrapper", { enumerable: true, get: function () { return subchannel_interface_1.BaseSubchannelWrapper; } });
+var load_balancer_outlier_detection_1 = require("./load-balancer-outlier-detection");
+Object.defineProperty(exports, "OutlierDetectionLoadBalancingConfig", { enumerable: true, get: function () { return load_balancer_outlier_detection_1.OutlierDetectionLoadBalancingConfig; } });
+//# sourceMappingURL=experimental.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js.map
new file mode 100644
index 0000000..757d3db
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/experimental.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"experimental.js","sourceRoot":"","sources":["../../src/experimental.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAA9B,gGAAA,KAAK,OAAA;AAAE,8FAAA,GAAG,OAAA;AACnB,uCAMoB;AAHlB,4GAAA,gBAAgB,OAAA;AAEhB,0GAAA,cAAc,OAAA;AAEhB,2CAAoD;AAAlC,yGAAA,WAAW,OAAA;AAC7B,uCAAoD;AAAjC,wGAAA,YAAY,OAAA;AAE/B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iDAQyB;AAJvB,gIAAA,+BAA+B,OAAA;AAC/B,yHAAA,wBAAwB,OAAA;AACxB,qHAAA,oBAAoB,OAAA;AACpB,4HAAA,2BAA2B,OAAA;AAE7B,2DAG8B;AAD5B,+HAAA,yBAAyB,OAAA;AAE3B,6EAAyE;AAAhE,uIAAA,wBAAwB,OAAA;AACjC,mCAOkB;AALhB,2GAAA,iBAAiB,OAAA;AACjB,qGAAA,WAAW,OAAA;AAGX,wGAAA,cAAc,OAAA;AAGhB,mCAA6D;AAA5C,oGAAA,UAAU,OAAA;AAC3B,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAC3B,iCAA+C;AAAtC,6GAAA,oBAAoB,OAAA;AAC7B,+DAIgC;AAF9B,6HAAA,qBAAqB,OAAA;AAGvB,qFAI2C;AAHzC,sJAAA,mCAAmC,OAAA"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts
new file mode 100644
index 0000000..c3f55cc
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts
@@ -0,0 +1,22 @@
+/// <reference types="node" />
+import { StatusObject, WriteObject } from './call-interface';
+import { Filter, FilterFactory } from './filter';
+import { Metadata } from './metadata';
+export declare class FilterStack implements Filter {
+ private readonly filters;
+ constructor(filters: Filter[]);
+ sendMetadata(metadata: Promise<Metadata>): Promise<Metadata>;
+ receiveMetadata(metadata: Metadata): Metadata;
+ sendMessage(message: Promise<WriteObject>): Promise<WriteObject>;
+ receiveMessage(message: Promise<Buffer>): Promise<Buffer>;
+ receiveTrailers(status: StatusObject): StatusObject;
+ push(filters: Filter[]): void;
+ getFilters(): Filter[];
+}
+export declare class FilterStackFactory implements FilterFactory<FilterStack> {
+ private readonly factories;
+ constructor(factories: Array<FilterFactory<Filter>>);
+ push(filterFactories: FilterFactory<Filter>[]): void;
+ clone(): FilterStackFactory;
+ createFilter(): FilterStack;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js
new file mode 100644
index 0000000..6cf2e1a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js
@@ -0,0 +1,82 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FilterStackFactory = exports.FilterStack = void 0;
+class FilterStack {
+ constructor(filters) {
+ this.filters = filters;
+ }
+ sendMetadata(metadata) {
+ let result = metadata;
+ for (let i = 0; i < this.filters.length; i++) {
+ result = this.filters[i].sendMetadata(result);
+ }
+ return result;
+ }
+ receiveMetadata(metadata) {
+ let result = metadata;
+ for (let i = this.filters.length - 1; i >= 0; i--) {
+ result = this.filters[i].receiveMetadata(result);
+ }
+ return result;
+ }
+ sendMessage(message) {
+ let result = message;
+ for (let i = 0; i < this.filters.length; i++) {
+ result = this.filters[i].sendMessage(result);
+ }
+ return result;
+ }
+ receiveMessage(message) {
+ let result = message;
+ for (let i = this.filters.length - 1; i >= 0; i--) {
+ result = this.filters[i].receiveMessage(result);
+ }
+ return result;
+ }
+ receiveTrailers(status) {
+ let result = status;
+ for (let i = this.filters.length - 1; i >= 0; i--) {
+ result = this.filters[i].receiveTrailers(result);
+ }
+ return result;
+ }
+ push(filters) {
+ this.filters.unshift(...filters);
+ }
+ getFilters() {
+ return this.filters;
+ }
+}
+exports.FilterStack = FilterStack;
+class FilterStackFactory {
+ constructor(factories) {
+ this.factories = factories;
+ }
+ push(filterFactories) {
+ this.factories.unshift(...filterFactories);
+ }
+ clone() {
+ return new FilterStackFactory([...this.factories]);
+ }
+ createFilter() {
+ return new FilterStack(this.factories.map(factory => factory.createFilter()));
+ }
+}
+exports.FilterStackFactory = FilterStackFactory;
+//# sourceMappingURL=filter-stack.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js.map
new file mode 100644
index 0000000..ffbeadf
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter-stack.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"filter-stack.js","sourceRoot":"","sources":["../../src/filter-stack.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.d.ts
new file mode 100644
index 0000000..f7e382a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.d.ts
@@ -0,0 +1,26 @@
+/// <reference types="node" />
+import { StatusObject, WriteObject } from './call-interface';
+import { Metadata } from './metadata';
+/**
+ * Filter classes represent related per-call logic and state that is primarily
+ * used to modify incoming and outgoing data. All async filters can be
+ * rejected. The rejection error must be a StatusObject, and a rejection will
+ * cause the call to end with that status.
+ */
+export interface Filter {
+ sendMetadata(metadata: Promise<Metadata>): Promise<Metadata>;
+ receiveMetadata(metadata: Metadata): Metadata;
+ sendMessage(message: Promise<WriteObject>): Promise<WriteObject>;
+ receiveMessage(message: Promise<Buffer>): Promise<Buffer>;
+ receiveTrailers(status: StatusObject): StatusObject;
+}
+export declare abstract class BaseFilter implements Filter {
+ sendMetadata(metadata: Promise<Metadata>): Promise<Metadata>;
+ receiveMetadata(metadata: Metadata): Metadata;
+ sendMessage(message: Promise<WriteObject>): Promise<WriteObject>;
+ receiveMessage(message: Promise<Buffer>): Promise<Buffer>;
+ receiveTrailers(status: StatusObject): StatusObject;
+}
+export interface FilterFactory<T extends Filter> {
+ createFilter(): T;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js
new file mode 100644
index 0000000..d888a82
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js
@@ -0,0 +1,38 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BaseFilter = void 0;
+class BaseFilter {
+ async sendMetadata(metadata) {
+ return metadata;
+ }
+ receiveMetadata(metadata) {
+ return metadata;
+ }
+ async sendMessage(message) {
+ return message;
+ }
+ async receiveMessage(message) {
+ return message;
+ }
+ receiveTrailers(status) {
+ return status;
+ }
+}
+exports.BaseFilter = BaseFilter;
+//# sourceMappingURL=filter.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js.map
new file mode 100644
index 0000000..1ddf110
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/filter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/filter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAuBH,MAAsB,UAAU;IAC9B,KAAK,CAAC,YAAY,CAAC,QAA2B;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,eAAe,CAAC,QAAkB;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA6B;QAC7C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAwB;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,eAAe,CAAC,MAAoB;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AApBD,gCAoBC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.d.ts
new file mode 100644
index 0000000..d311c65
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.d.ts
@@ -0,0 +1,72 @@
+import type * as grpc from '../index';
+import type { MessageTypeDefinition } from '@grpc/proto-loader';
+import type { ChannelzClient as _grpc_channelz_v1_ChannelzClient, ChannelzDefinition as _grpc_channelz_v1_ChannelzDefinition } from './grpc/channelz/v1/Channelz';
+type SubtypeConstructor<Constructor extends new (...args: any) => any, Subtype> = {
+ new (...args: ConstructorParameters<Constructor>): Subtype;
+};
+export interface ProtoGrpcType {
+ google: {
+ protobuf: {
+ Any: MessageTypeDefinition;
+ BoolValue: MessageTypeDefinition;
+ BytesValue: MessageTypeDefinition;
+ DoubleValue: MessageTypeDefinition;
+ Duration: MessageTypeDefinition;
+ FloatValue: MessageTypeDefinition;
+ Int32Value: MessageTypeDefinition;
+ Int64Value: MessageTypeDefinition;
+ StringValue: MessageTypeDefinition;
+ Timestamp: MessageTypeDefinition;
+ UInt32Value: MessageTypeDefinition;
+ UInt64Value: MessageTypeDefinition;
+ };
+ };
+ grpc: {
+ channelz: {
+ v1: {
+ Address: MessageTypeDefinition;
+ Channel: MessageTypeDefinition;
+ ChannelConnectivityState: MessageTypeDefinition;
+ ChannelData: MessageTypeDefinition;
+ ChannelRef: MessageTypeDefinition;
+ ChannelTrace: MessageTypeDefinition;
+ ChannelTraceEvent: MessageTypeDefinition;
+ /**
+ * Channelz is a service exposed by gRPC servers that provides detailed debug
+ * information.
+ */
+ Channelz: SubtypeConstructor<typeof grpc.Client, _grpc_channelz_v1_ChannelzClient> & {
+ service: _grpc_channelz_v1_ChannelzDefinition;
+ };
+ GetChannelRequest: MessageTypeDefinition;
+ GetChannelResponse: MessageTypeDefinition;
+ GetServerRequest: MessageTypeDefinition;
+ GetServerResponse: MessageTypeDefinition;
+ GetServerSocketsRequest: MessageTypeDefinition;
+ GetServerSocketsResponse: MessageTypeDefinition;
+ GetServersRequest: MessageTypeDefinition;
+ GetServersResponse: MessageTypeDefinition;
+ GetSocketRequest: MessageTypeDefinition;
+ GetSocketResponse: MessageTypeDefinition;
+ GetSubchannelRequest: MessageTypeDefinition;
+ GetSubchannelResponse: MessageTypeDefinition;
+ GetTopChannelsRequest: MessageTypeDefinition;
+ GetTopChannelsResponse: MessageTypeDefinition;
+ Security: MessageTypeDefinition;
+ Server: MessageTypeDefinition;
+ ServerData: MessageTypeDefinition;
+ ServerRef: MessageTypeDefinition;
+ Socket: MessageTypeDefinition;
+ SocketData: MessageTypeDefinition;
+ SocketOption: MessageTypeDefinition;
+ SocketOptionLinger: MessageTypeDefinition;
+ SocketOptionTcpInfo: MessageTypeDefinition;
+ SocketOptionTimeout: MessageTypeDefinition;
+ SocketRef: MessageTypeDefinition;
+ Subchannel: MessageTypeDefinition;
+ SubchannelRef: MessageTypeDefinition;
+ };
+ };
+ };
+}
+export {};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js
new file mode 100644
index 0000000..0c2cf67
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=channelz.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js.map
new file mode 100644
index 0000000..af4016b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/channelz.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"channelz.js","sourceRoot":"","sources":["../../../src/generated/channelz.ts"],"names":[],"mappings":""} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts
new file mode 100644
index 0000000..e8c0607
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts
@@ -0,0 +1,10 @@
+/// <reference types="node" />
+import type { AnyExtension } from '@grpc/proto-loader';
+export type Any = AnyExtension | {
+ type_url: string;
+ value: Buffer | Uint8Array | string;
+};
+export interface Any__Output {
+ 'type_url': (string);
+ 'value': (Buffer);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js
new file mode 100644
index 0000000..f9651f8
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Any.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js.map
new file mode 100644
index 0000000..2e75474
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Any.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/Any.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.d.ts
new file mode 100644
index 0000000..b7235a7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.d.ts
@@ -0,0 +1,6 @@
+export interface BoolValue {
+ 'value'?: (boolean);
+}
+export interface BoolValue__Output {
+ 'value': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js
new file mode 100644
index 0000000..f893f74
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=BoolValue.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js.map
new file mode 100644
index 0000000..3573853
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BoolValue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"BoolValue.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/BoolValue.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.d.ts
new file mode 100644
index 0000000..2c77f9d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.d.ts
@@ -0,0 +1,7 @@
+/// <reference types="node" />
+export interface BytesValue {
+ 'value'?: (Buffer | Uint8Array | string);
+}
+export interface BytesValue__Output {
+ 'value': (Buffer);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js
new file mode 100644
index 0000000..4cac93e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=BytesValue.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js.map
new file mode 100644
index 0000000..a589ea5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/BytesValue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"BytesValue.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/BytesValue.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.d.ts
new file mode 100644
index 0000000..e4e2204
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.d.ts
@@ -0,0 +1,6 @@
+export interface DoubleValue {
+ 'value'?: (number | string);
+}
+export interface DoubleValue__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js
new file mode 100644
index 0000000..133e011
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=DoubleValue.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js.map
new file mode 100644
index 0000000..7f28720
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/DoubleValue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DoubleValue.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/DoubleValue.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.d.ts
new file mode 100644
index 0000000..7e04ea6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.d.ts
@@ -0,0 +1,9 @@
+import type { Long } from '@grpc/proto-loader';
+export interface Duration {
+ 'seconds'?: (number | string | Long);
+ 'nanos'?: (number);
+}
+export interface Duration__Output {
+ 'seconds': (string);
+ 'nanos': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js
new file mode 100644
index 0000000..b071b70
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Duration.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js.map
new file mode 100644
index 0000000..3fc8fe8
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Duration.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/Duration.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.d.ts
new file mode 100644
index 0000000..33bd60b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.d.ts
@@ -0,0 +1,6 @@
+export interface FloatValue {
+ 'value'?: (number | string);
+}
+export interface FloatValue__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js
new file mode 100644
index 0000000..17290a2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=FloatValue.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js.map
new file mode 100644
index 0000000..bf27b78
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/FloatValue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FloatValue.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/FloatValue.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.d.ts
new file mode 100644
index 0000000..895fb9d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.d.ts
@@ -0,0 +1,6 @@
+export interface Int32Value {
+ 'value'?: (number);
+}
+export interface Int32Value__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js
new file mode 100644
index 0000000..dc46343
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Int32Value.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js.map
new file mode 100644
index 0000000..157e73a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int32Value.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Int32Value.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/Int32Value.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts
new file mode 100644
index 0000000..00bd119
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts
@@ -0,0 +1,7 @@
+import type { Long } from '@grpc/proto-loader';
+export interface Int64Value {
+ 'value'?: (number | string | Long);
+}
+export interface Int64Value__Output {
+ 'value': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js
new file mode 100644
index 0000000..a77bc96
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Int64Value.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js.map
new file mode 100644
index 0000000..b8894b1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Int64Value.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/Int64Value.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.d.ts
new file mode 100644
index 0000000..74230c9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.d.ts
@@ -0,0 +1,6 @@
+export interface StringValue {
+ 'value'?: (string);
+}
+export interface StringValue__Output {
+ 'value': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js
new file mode 100644
index 0000000..0836e97
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=StringValue.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js.map
new file mode 100644
index 0000000..bc05ddc
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/StringValue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"StringValue.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/StringValue.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts
new file mode 100644
index 0000000..900ff5a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts
@@ -0,0 +1,9 @@
+import type { Long } from '@grpc/proto-loader';
+export interface Timestamp {
+ 'seconds'?: (number | string | Long);
+ 'nanos'?: (number);
+}
+export interface Timestamp__Output {
+ 'seconds': (string);
+ 'nanos': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js
new file mode 100644
index 0000000..dcca213
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Timestamp.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js.map
new file mode 100644
index 0000000..e90342e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Timestamp.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/Timestamp.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.d.ts
new file mode 100644
index 0000000..d7e185f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.d.ts
@@ -0,0 +1,6 @@
+export interface UInt32Value {
+ 'value'?: (number);
+}
+export interface UInt32Value__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js
new file mode 100644
index 0000000..889cd2e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=UInt32Value.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js.map
new file mode 100644
index 0000000..2a0420f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt32Value.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"UInt32Value.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/UInt32Value.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.d.ts
new file mode 100644
index 0000000..fe94d29
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.d.ts
@@ -0,0 +1,7 @@
+import type { Long } from '@grpc/proto-loader';
+export interface UInt64Value {
+ 'value'?: (number | string | Long);
+}
+export interface UInt64Value__Output {
+ 'value': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js
new file mode 100644
index 0000000..2a06a69
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: null
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=UInt64Value.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js.map
new file mode 100644
index 0000000..4ea43ca
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/UInt64Value.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"UInt64Value.js","sourceRoot":"","sources":["../../../../../src/generated/google/protobuf/UInt64Value.ts"],"names":[],"mappings":";AAAA,sBAAsB"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts
new file mode 100644
index 0000000..0676367
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts
@@ -0,0 +1,80 @@
+/// <reference types="node" />
+import type { Any as _google_protobuf_Any, Any__Output as _google_protobuf_Any__Output } from '../../../google/protobuf/Any';
+/**
+ * An address type not included above.
+ */
+export interface _grpc_channelz_v1_Address_OtherAddress {
+ /**
+ * The human readable version of the value. This value should be set.
+ */
+ 'name'?: (string);
+ /**
+ * The actual address message.
+ */
+ 'value'?: (_google_protobuf_Any | null);
+}
+/**
+ * An address type not included above.
+ */
+export interface _grpc_channelz_v1_Address_OtherAddress__Output {
+ /**
+ * The human readable version of the value. This value should be set.
+ */
+ 'name': (string);
+ /**
+ * The actual address message.
+ */
+ 'value': (_google_protobuf_Any__Output | null);
+}
+export interface _grpc_channelz_v1_Address_TcpIpAddress {
+ /**
+ * Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16
+ * bytes in length.
+ */
+ 'ip_address'?: (Buffer | Uint8Array | string);
+ /**
+ * 0-64k, or -1 if not appropriate.
+ */
+ 'port'?: (number);
+}
+export interface _grpc_channelz_v1_Address_TcpIpAddress__Output {
+ /**
+ * Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16
+ * bytes in length.
+ */
+ 'ip_address': (Buffer);
+ /**
+ * 0-64k, or -1 if not appropriate.
+ */
+ 'port': (number);
+}
+/**
+ * A Unix Domain Socket address.
+ */
+export interface _grpc_channelz_v1_Address_UdsAddress {
+ 'filename'?: (string);
+}
+/**
+ * A Unix Domain Socket address.
+ */
+export interface _grpc_channelz_v1_Address_UdsAddress__Output {
+ 'filename': (string);
+}
+/**
+ * Address represents the address used to create the socket.
+ */
+export interface Address {
+ 'tcpip_address'?: (_grpc_channelz_v1_Address_TcpIpAddress | null);
+ 'uds_address'?: (_grpc_channelz_v1_Address_UdsAddress | null);
+ 'other_address'?: (_grpc_channelz_v1_Address_OtherAddress | null);
+ 'address'?: "tcpip_address" | "uds_address" | "other_address";
+}
+/**
+ * Address represents the address used to create the socket.
+ */
+export interface Address__Output {
+ 'tcpip_address'?: (_grpc_channelz_v1_Address_TcpIpAddress__Output | null);
+ 'uds_address'?: (_grpc_channelz_v1_Address_UdsAddress__Output | null);
+ 'other_address'?: (_grpc_channelz_v1_Address_OtherAddress__Output | null);
+ 'address': "tcpip_address" | "uds_address" | "other_address";
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js
new file mode 100644
index 0000000..6f15b91
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Address.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js.map
new file mode 100644
index 0000000..554d6da
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Address.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/Address.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts
new file mode 100644
index 0000000..3bd11ca
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts
@@ -0,0 +1,64 @@
+import type { ChannelRef as _grpc_channelz_v1_ChannelRef, ChannelRef__Output as _grpc_channelz_v1_ChannelRef__Output } from '../../../grpc/channelz/v1/ChannelRef';
+import type { ChannelData as _grpc_channelz_v1_ChannelData, ChannelData__Output as _grpc_channelz_v1_ChannelData__Output } from '../../../grpc/channelz/v1/ChannelData';
+import type { SubchannelRef as _grpc_channelz_v1_SubchannelRef, SubchannelRef__Output as _grpc_channelz_v1_SubchannelRef__Output } from '../../../grpc/channelz/v1/SubchannelRef';
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+/**
+ * Channel is a logical grouping of channels, subchannels, and sockets.
+ */
+export interface Channel {
+ /**
+ * The identifier for this channel. This should bet set.
+ */
+ 'ref'?: (_grpc_channelz_v1_ChannelRef | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data'?: (_grpc_channelz_v1_ChannelData | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref'?: (_grpc_channelz_v1_SocketRef)[];
+}
+/**
+ * Channel is a logical grouping of channels, subchannels, and sockets.
+ */
+export interface Channel__Output {
+ /**
+ * The identifier for this channel. This should bet set.
+ */
+ 'ref': (_grpc_channelz_v1_ChannelRef__Output | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data': (_grpc_channelz_v1_ChannelData__Output | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref': (_grpc_channelz_v1_ChannelRef__Output)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref': (_grpc_channelz_v1_SubchannelRef__Output)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref': (_grpc_channelz_v1_SocketRef__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js
new file mode 100644
index 0000000..d9bc55a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Channel.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js.map
new file mode 100644
index 0000000..5dd6b69
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/Channel.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts
new file mode 100644
index 0000000..2ea3833
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts
@@ -0,0 +1,24 @@
+export declare const _grpc_channelz_v1_ChannelConnectivityState_State: {
+ readonly UNKNOWN: "UNKNOWN";
+ readonly IDLE: "IDLE";
+ readonly CONNECTING: "CONNECTING";
+ readonly READY: "READY";
+ readonly TRANSIENT_FAILURE: "TRANSIENT_FAILURE";
+ readonly SHUTDOWN: "SHUTDOWN";
+};
+export type _grpc_channelz_v1_ChannelConnectivityState_State = 'UNKNOWN' | 0 | 'IDLE' | 1 | 'CONNECTING' | 2 | 'READY' | 3 | 'TRANSIENT_FAILURE' | 4 | 'SHUTDOWN' | 5;
+export type _grpc_channelz_v1_ChannelConnectivityState_State__Output = typeof _grpc_channelz_v1_ChannelConnectivityState_State[keyof typeof _grpc_channelz_v1_ChannelConnectivityState_State];
+/**
+ * These come from the specified states in this document:
+ * https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
+ */
+export interface ChannelConnectivityState {
+ 'state'?: (_grpc_channelz_v1_ChannelConnectivityState_State);
+}
+/**
+ * These come from the specified states in this document:
+ * https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
+ */
+export interface ChannelConnectivityState__Output {
+ 'state': (_grpc_channelz_v1_ChannelConnectivityState_State__Output);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js
new file mode 100644
index 0000000..2a783d9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js
@@ -0,0 +1,14 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+exports._grpc_channelz_v1_ChannelConnectivityState_State = void 0;
+// Original file: proto/channelz.proto
+exports._grpc_channelz_v1_ChannelConnectivityState_State = {
+ UNKNOWN: 'UNKNOWN',
+ IDLE: 'IDLE',
+ CONNECTING: 'CONNECTING',
+ READY: 'READY',
+ TRANSIENT_FAILURE: 'TRANSIENT_FAILURE',
+ SHUTDOWN: 'SHUTDOWN',
+};
+//# sourceMappingURL=ChannelConnectivityState.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js.map
new file mode 100644
index 0000000..d4b2567
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ChannelConnectivityState.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/ChannelConnectivityState.ts"],"names":[],"mappings":";AAAA,sCAAsC;;;AAGtC,sCAAsC;AAEzB,QAAA,gDAAgD,GAAG;IAC9D,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;IACd,iBAAiB,EAAE,mBAAmB;IACtC,QAAQ,EAAE,UAAU;CACZ,CAAC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts
new file mode 100644
index 0000000..3d9716a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts
@@ -0,0 +1,72 @@
+import type { ChannelConnectivityState as _grpc_channelz_v1_ChannelConnectivityState, ChannelConnectivityState__Output as _grpc_channelz_v1_ChannelConnectivityState__Output } from '../../../grpc/channelz/v1/ChannelConnectivityState';
+import type { ChannelTrace as _grpc_channelz_v1_ChannelTrace, ChannelTrace__Output as _grpc_channelz_v1_ChannelTrace__Output } from '../../../grpc/channelz/v1/ChannelTrace';
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { Long } from '@grpc/proto-loader';
+/**
+ * Channel data is data related to a specific Channel or Subchannel.
+ */
+export interface ChannelData {
+ /**
+ * The connectivity state of the channel or subchannel. Implementations
+ * should always set this.
+ */
+ 'state'?: (_grpc_channelz_v1_ChannelConnectivityState | null);
+ /**
+ * The target this channel originally tried to connect to. May be absent
+ */
+ 'target'?: (string);
+ /**
+ * A trace of recent events on the channel. May be absent.
+ */
+ 'trace'?: (_grpc_channelz_v1_ChannelTrace | null);
+ /**
+ * The number of calls started on the channel
+ */
+ 'calls_started'?: (number | string | Long);
+ /**
+ * The number of calls that have completed with an OK status
+ */
+ 'calls_succeeded'?: (number | string | Long);
+ /**
+ * The number of calls that have completed with a non-OK status
+ */
+ 'calls_failed'?: (number | string | Long);
+ /**
+ * The last time a call was started on the channel.
+ */
+ 'last_call_started_timestamp'?: (_google_protobuf_Timestamp | null);
+}
+/**
+ * Channel data is data related to a specific Channel or Subchannel.
+ */
+export interface ChannelData__Output {
+ /**
+ * The connectivity state of the channel or subchannel. Implementations
+ * should always set this.
+ */
+ 'state': (_grpc_channelz_v1_ChannelConnectivityState__Output | null);
+ /**
+ * The target this channel originally tried to connect to. May be absent
+ */
+ 'target': (string);
+ /**
+ * A trace of recent events on the channel. May be absent.
+ */
+ 'trace': (_grpc_channelz_v1_ChannelTrace__Output | null);
+ /**
+ * The number of calls started on the channel
+ */
+ 'calls_started': (string);
+ /**
+ * The number of calls that have completed with an OK status
+ */
+ 'calls_succeeded': (string);
+ /**
+ * The number of calls that have completed with a non-OK status
+ */
+ 'calls_failed': (string);
+ /**
+ * The last time a call was started on the channel.
+ */
+ 'last_call_started_timestamp': (_google_protobuf_Timestamp__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js
new file mode 100644
index 0000000..dffbd45
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ChannelData.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js.map
new file mode 100644
index 0000000..bb2b4c4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ChannelData.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/ChannelData.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts
new file mode 100644
index 0000000..29deef9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts
@@ -0,0 +1,27 @@
+import type { Long } from '@grpc/proto-loader';
+/**
+ * ChannelRef is a reference to a Channel.
+ */
+export interface ChannelRef {
+ /**
+ * The globally unique id for this channel. Must be a positive number.
+ */
+ 'channel_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the channel.
+ */
+ 'name'?: (string);
+}
+/**
+ * ChannelRef is a reference to a Channel.
+ */
+export interface ChannelRef__Output {
+ /**
+ * The globally unique id for this channel. Must be a positive number.
+ */
+ 'channel_id': (string);
+ /**
+ * An optional name associated with the channel.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js
new file mode 100644
index 0000000..d239819
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ChannelRef.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js.map
new file mode 100644
index 0000000..1030ded
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ChannelRef.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/ChannelRef.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts
new file mode 100644
index 0000000..5b6170a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts
@@ -0,0 +1,41 @@
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { ChannelTraceEvent as _grpc_channelz_v1_ChannelTraceEvent, ChannelTraceEvent__Output as _grpc_channelz_v1_ChannelTraceEvent__Output } from '../../../grpc/channelz/v1/ChannelTraceEvent';
+import type { Long } from '@grpc/proto-loader';
+/**
+ * ChannelTrace represents the recent events that have occurred on the channel.
+ */
+export interface ChannelTrace {
+ /**
+ * Number of events ever logged in this tracing object. This can differ from
+ * events.size() because events can be overwritten or garbage collected by
+ * implementations.
+ */
+ 'num_events_logged'?: (number | string | Long);
+ /**
+ * Time that this channel was created.
+ */
+ 'creation_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * List of events that have occurred on this channel.
+ */
+ 'events'?: (_grpc_channelz_v1_ChannelTraceEvent)[];
+}
+/**
+ * ChannelTrace represents the recent events that have occurred on the channel.
+ */
+export interface ChannelTrace__Output {
+ /**
+ * Number of events ever logged in this tracing object. This can differ from
+ * events.size() because events can be overwritten or garbage collected by
+ * implementations.
+ */
+ 'num_events_logged': (string);
+ /**
+ * Time that this channel was created.
+ */
+ 'creation_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * List of events that have occurred on this channel.
+ */
+ 'events': (_grpc_channelz_v1_ChannelTraceEvent__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js
new file mode 100644
index 0000000..112069c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ChannelTrace.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js.map
new file mode 100644
index 0000000..2f665dc
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ChannelTrace.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/ChannelTrace.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts
new file mode 100644
index 0000000..6ff7e30
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts
@@ -0,0 +1,74 @@
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { ChannelRef as _grpc_channelz_v1_ChannelRef, ChannelRef__Output as _grpc_channelz_v1_ChannelRef__Output } from '../../../grpc/channelz/v1/ChannelRef';
+import type { SubchannelRef as _grpc_channelz_v1_SubchannelRef, SubchannelRef__Output as _grpc_channelz_v1_SubchannelRef__Output } from '../../../grpc/channelz/v1/SubchannelRef';
+/**
+ * The supported severity levels of trace events.
+ */
+export declare const _grpc_channelz_v1_ChannelTraceEvent_Severity: {
+ readonly CT_UNKNOWN: "CT_UNKNOWN";
+ readonly CT_INFO: "CT_INFO";
+ readonly CT_WARNING: "CT_WARNING";
+ readonly CT_ERROR: "CT_ERROR";
+};
+/**
+ * The supported severity levels of trace events.
+ */
+export type _grpc_channelz_v1_ChannelTraceEvent_Severity = 'CT_UNKNOWN' | 0 | 'CT_INFO' | 1 | 'CT_WARNING' | 2 | 'CT_ERROR' | 3;
+/**
+ * The supported severity levels of trace events.
+ */
+export type _grpc_channelz_v1_ChannelTraceEvent_Severity__Output = typeof _grpc_channelz_v1_ChannelTraceEvent_Severity[keyof typeof _grpc_channelz_v1_ChannelTraceEvent_Severity];
+/**
+ * A trace event is an interesting thing that happened to a channel or
+ * subchannel, such as creation, address resolution, subchannel creation, etc.
+ */
+export interface ChannelTraceEvent {
+ /**
+ * High level description of the event.
+ */
+ 'description'?: (string);
+ /**
+ * the severity of the trace event
+ */
+ 'severity'?: (_grpc_channelz_v1_ChannelTraceEvent_Severity);
+ /**
+ * When this event occurred.
+ */
+ 'timestamp'?: (_google_protobuf_Timestamp | null);
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef | null);
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef | null);
+ /**
+ * ref of referenced channel or subchannel.
+ * Optional, only present if this event refers to a child object. For example,
+ * this field would be filled if this trace event was for a subchannel being
+ * created.
+ */
+ 'child_ref'?: "channel_ref" | "subchannel_ref";
+}
+/**
+ * A trace event is an interesting thing that happened to a channel or
+ * subchannel, such as creation, address resolution, subchannel creation, etc.
+ */
+export interface ChannelTraceEvent__Output {
+ /**
+ * High level description of the event.
+ */
+ 'description': (string);
+ /**
+ * the severity of the trace event
+ */
+ 'severity': (_grpc_channelz_v1_ChannelTraceEvent_Severity__Output);
+ /**
+ * When this event occurred.
+ */
+ 'timestamp': (_google_protobuf_Timestamp__Output | null);
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef__Output | null);
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef__Output | null);
+ /**
+ * ref of referenced channel or subchannel.
+ * Optional, only present if this event refers to a child object. For example,
+ * this field would be filled if this trace event was for a subchannel being
+ * created.
+ */
+ 'child_ref': "channel_ref" | "subchannel_ref";
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js
new file mode 100644
index 0000000..ae9981b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js
@@ -0,0 +1,15 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+exports._grpc_channelz_v1_ChannelTraceEvent_Severity = void 0;
+// Original file: proto/channelz.proto
+/**
+ * The supported severity levels of trace events.
+ */
+exports._grpc_channelz_v1_ChannelTraceEvent_Severity = {
+ CT_UNKNOWN: 'CT_UNKNOWN',
+ CT_INFO: 'CT_INFO',
+ CT_WARNING: 'CT_WARNING',
+ CT_ERROR: 'CT_ERROR',
+};
+//# sourceMappingURL=ChannelTraceEvent.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js.map
new file mode 100644
index 0000000..2ed003c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ChannelTraceEvent.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/ChannelTraceEvent.ts"],"names":[],"mappings":";AAAA,sCAAsC;;;AAMtC,sCAAsC;AAEtC;;GAEG;AACU,QAAA,4CAA4C,GAAG;IAC1D,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;CACZ,CAAC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts
new file mode 100644
index 0000000..3e9eb98
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts
@@ -0,0 +1,159 @@
+import type * as grpc from '../../../../index';
+import type { MethodDefinition } from '@grpc/proto-loader';
+import type { GetChannelRequest as _grpc_channelz_v1_GetChannelRequest, GetChannelRequest__Output as _grpc_channelz_v1_GetChannelRequest__Output } from '../../../grpc/channelz/v1/GetChannelRequest';
+import type { GetChannelResponse as _grpc_channelz_v1_GetChannelResponse, GetChannelResponse__Output as _grpc_channelz_v1_GetChannelResponse__Output } from '../../../grpc/channelz/v1/GetChannelResponse';
+import type { GetServerRequest as _grpc_channelz_v1_GetServerRequest, GetServerRequest__Output as _grpc_channelz_v1_GetServerRequest__Output } from '../../../grpc/channelz/v1/GetServerRequest';
+import type { GetServerResponse as _grpc_channelz_v1_GetServerResponse, GetServerResponse__Output as _grpc_channelz_v1_GetServerResponse__Output } from '../../../grpc/channelz/v1/GetServerResponse';
+import type { GetServerSocketsRequest as _grpc_channelz_v1_GetServerSocketsRequest, GetServerSocketsRequest__Output as _grpc_channelz_v1_GetServerSocketsRequest__Output } from '../../../grpc/channelz/v1/GetServerSocketsRequest';
+import type { GetServerSocketsResponse as _grpc_channelz_v1_GetServerSocketsResponse, GetServerSocketsResponse__Output as _grpc_channelz_v1_GetServerSocketsResponse__Output } from '../../../grpc/channelz/v1/GetServerSocketsResponse';
+import type { GetServersRequest as _grpc_channelz_v1_GetServersRequest, GetServersRequest__Output as _grpc_channelz_v1_GetServersRequest__Output } from '../../../grpc/channelz/v1/GetServersRequest';
+import type { GetServersResponse as _grpc_channelz_v1_GetServersResponse, GetServersResponse__Output as _grpc_channelz_v1_GetServersResponse__Output } from '../../../grpc/channelz/v1/GetServersResponse';
+import type { GetSocketRequest as _grpc_channelz_v1_GetSocketRequest, GetSocketRequest__Output as _grpc_channelz_v1_GetSocketRequest__Output } from '../../../grpc/channelz/v1/GetSocketRequest';
+import type { GetSocketResponse as _grpc_channelz_v1_GetSocketResponse, GetSocketResponse__Output as _grpc_channelz_v1_GetSocketResponse__Output } from '../../../grpc/channelz/v1/GetSocketResponse';
+import type { GetSubchannelRequest as _grpc_channelz_v1_GetSubchannelRequest, GetSubchannelRequest__Output as _grpc_channelz_v1_GetSubchannelRequest__Output } from '../../../grpc/channelz/v1/GetSubchannelRequest';
+import type { GetSubchannelResponse as _grpc_channelz_v1_GetSubchannelResponse, GetSubchannelResponse__Output as _grpc_channelz_v1_GetSubchannelResponse__Output } from '../../../grpc/channelz/v1/GetSubchannelResponse';
+import type { GetTopChannelsRequest as _grpc_channelz_v1_GetTopChannelsRequest, GetTopChannelsRequest__Output as _grpc_channelz_v1_GetTopChannelsRequest__Output } from '../../../grpc/channelz/v1/GetTopChannelsRequest';
+import type { GetTopChannelsResponse as _grpc_channelz_v1_GetTopChannelsResponse, GetTopChannelsResponse__Output as _grpc_channelz_v1_GetTopChannelsResponse__Output } from '../../../grpc/channelz/v1/GetTopChannelsResponse';
+/**
+ * Channelz is a service exposed by gRPC servers that provides detailed debug
+ * information.
+ */
+export interface ChannelzClient extends grpc.Client {
+ /**
+ * Returns a single Channel, or else a NOT_FOUND code.
+ */
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Server, or else a NOT_FOUND code.
+ */
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Server, or else a NOT_FOUND code.
+ */
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all server sockets that exist in the process.
+ */
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all server sockets that exist in the process.
+ */
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all servers that exist in the process.
+ */
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all servers that exist in the process.
+ */
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Socket or else a NOT_FOUND code.
+ */
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Socket or else a NOT_FOUND code.
+ */
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Subchannel, or else a NOT_FOUND code.
+ */
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Subchannel, or else a NOT_FOUND code.
+ */
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all root channels (i.e. channels the application has directly
+ * created). This does not include subchannels nor non-top level channels.
+ */
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all root channels (i.e. channels the application has directly
+ * created). This does not include subchannels nor non-top level channels.
+ */
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+}
+/**
+ * Channelz is a service exposed by gRPC servers that provides detailed debug
+ * information.
+ */
+export interface ChannelzHandlers extends grpc.UntypedServiceImplementation {
+ /**
+ * Returns a single Channel, or else a NOT_FOUND code.
+ */
+ GetChannel: grpc.handleUnaryCall<_grpc_channelz_v1_GetChannelRequest__Output, _grpc_channelz_v1_GetChannelResponse>;
+ /**
+ * Returns a single Server, or else a NOT_FOUND code.
+ */
+ GetServer: grpc.handleUnaryCall<_grpc_channelz_v1_GetServerRequest__Output, _grpc_channelz_v1_GetServerResponse>;
+ /**
+ * Gets all server sockets that exist in the process.
+ */
+ GetServerSockets: grpc.handleUnaryCall<_grpc_channelz_v1_GetServerSocketsRequest__Output, _grpc_channelz_v1_GetServerSocketsResponse>;
+ /**
+ * Gets all servers that exist in the process.
+ */
+ GetServers: grpc.handleUnaryCall<_grpc_channelz_v1_GetServersRequest__Output, _grpc_channelz_v1_GetServersResponse>;
+ /**
+ * Returns a single Socket or else a NOT_FOUND code.
+ */
+ GetSocket: grpc.handleUnaryCall<_grpc_channelz_v1_GetSocketRequest__Output, _grpc_channelz_v1_GetSocketResponse>;
+ /**
+ * Returns a single Subchannel, or else a NOT_FOUND code.
+ */
+ GetSubchannel: grpc.handleUnaryCall<_grpc_channelz_v1_GetSubchannelRequest__Output, _grpc_channelz_v1_GetSubchannelResponse>;
+ /**
+ * Gets all root channels (i.e. channels the application has directly
+ * created). This does not include subchannels nor non-top level channels.
+ */
+ GetTopChannels: grpc.handleUnaryCall<_grpc_channelz_v1_GetTopChannelsRequest__Output, _grpc_channelz_v1_GetTopChannelsResponse>;
+}
+export interface ChannelzDefinition extends grpc.ServiceDefinition {
+ GetChannel: MethodDefinition<_grpc_channelz_v1_GetChannelRequest, _grpc_channelz_v1_GetChannelResponse, _grpc_channelz_v1_GetChannelRequest__Output, _grpc_channelz_v1_GetChannelResponse__Output>;
+ GetServer: MethodDefinition<_grpc_channelz_v1_GetServerRequest, _grpc_channelz_v1_GetServerResponse, _grpc_channelz_v1_GetServerRequest__Output, _grpc_channelz_v1_GetServerResponse__Output>;
+ GetServerSockets: MethodDefinition<_grpc_channelz_v1_GetServerSocketsRequest, _grpc_channelz_v1_GetServerSocketsResponse, _grpc_channelz_v1_GetServerSocketsRequest__Output, _grpc_channelz_v1_GetServerSocketsResponse__Output>;
+ GetServers: MethodDefinition<_grpc_channelz_v1_GetServersRequest, _grpc_channelz_v1_GetServersResponse, _grpc_channelz_v1_GetServersRequest__Output, _grpc_channelz_v1_GetServersResponse__Output>;
+ GetSocket: MethodDefinition<_grpc_channelz_v1_GetSocketRequest, _grpc_channelz_v1_GetSocketResponse, _grpc_channelz_v1_GetSocketRequest__Output, _grpc_channelz_v1_GetSocketResponse__Output>;
+ GetSubchannel: MethodDefinition<_grpc_channelz_v1_GetSubchannelRequest, _grpc_channelz_v1_GetSubchannelResponse, _grpc_channelz_v1_GetSubchannelRequest__Output, _grpc_channelz_v1_GetSubchannelResponse__Output>;
+ GetTopChannels: MethodDefinition<_grpc_channelz_v1_GetTopChannelsRequest, _grpc_channelz_v1_GetTopChannelsResponse, _grpc_channelz_v1_GetTopChannelsRequest__Output, _grpc_channelz_v1_GetTopChannelsResponse__Output>;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js
new file mode 100644
index 0000000..9fdf9fc
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Channelz.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js.map
new file mode 100644
index 0000000..86fafec
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Channelz.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/Channelz.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts
new file mode 100644
index 0000000..4956cfa
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts
@@ -0,0 +1,13 @@
+import type { Long } from '@grpc/proto-loader';
+export interface GetChannelRequest {
+ /**
+ * channel_id is the identifier of the specific channel to get.
+ */
+ 'channel_id'?: (number | string | Long);
+}
+export interface GetChannelRequest__Output {
+ /**
+ * channel_id is the identifier of the specific channel to get.
+ */
+ 'channel_id': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js
new file mode 100644
index 0000000..10948d4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetChannelRequest.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js.map
new file mode 100644
index 0000000..0ae3f26
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetChannelRequest.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetChannelRequest.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts
new file mode 100644
index 0000000..2fbab92
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts
@@ -0,0 +1,15 @@
+import type { Channel as _grpc_channelz_v1_Channel, Channel__Output as _grpc_channelz_v1_Channel__Output } from '../../../grpc/channelz/v1/Channel';
+export interface GetChannelResponse {
+ /**
+ * The Channel that corresponds to the requested channel_id. This field
+ * should be set.
+ */
+ 'channel'?: (_grpc_channelz_v1_Channel | null);
+}
+export interface GetChannelResponse__Output {
+ /**
+ * The Channel that corresponds to the requested channel_id. This field
+ * should be set.
+ */
+ 'channel': (_grpc_channelz_v1_Channel__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js
new file mode 100644
index 0000000..02a4426
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetChannelResponse.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js.map
new file mode 100644
index 0000000..a3cfefb
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetChannelResponse.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetChannelResponse.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts
new file mode 100644
index 0000000..1df8503
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts
@@ -0,0 +1,13 @@
+import type { Long } from '@grpc/proto-loader';
+export interface GetServerRequest {
+ /**
+ * server_id is the identifier of the specific server to get.
+ */
+ 'server_id'?: (number | string | Long);
+}
+export interface GetServerRequest__Output {
+ /**
+ * server_id is the identifier of the specific server to get.
+ */
+ 'server_id': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js
new file mode 100644
index 0000000..77717b4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetServerRequest.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js.map
new file mode 100644
index 0000000..86fbba6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetServerRequest.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetServerRequest.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts
new file mode 100644
index 0000000..2da13dd
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts
@@ -0,0 +1,15 @@
+import type { Server as _grpc_channelz_v1_Server, Server__Output as _grpc_channelz_v1_Server__Output } from '../../../grpc/channelz/v1/Server';
+export interface GetServerResponse {
+ /**
+ * The Server that corresponds to the requested server_id. This field
+ * should be set.
+ */
+ 'server'?: (_grpc_channelz_v1_Server | null);
+}
+export interface GetServerResponse__Output {
+ /**
+ * The Server that corresponds to the requested server_id. This field
+ * should be set.
+ */
+ 'server': (_grpc_channelz_v1_Server__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js
new file mode 100644
index 0000000..130eb1b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetServerResponse.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js.map
new file mode 100644
index 0000000..f4b16ff
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetServerResponse.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetServerResponse.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts
new file mode 100644
index 0000000..d810b92
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts
@@ -0,0 +1,35 @@
+import type { Long } from '@grpc/proto-loader';
+export interface GetServerSocketsRequest {
+ 'server_id'?: (number | string | Long);
+ /**
+ * start_socket_id indicates that only sockets at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_socket_id'?: (number | string | Long);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results'?: (number | string | Long);
+}
+export interface GetServerSocketsRequest__Output {
+ 'server_id': (string);
+ /**
+ * start_socket_id indicates that only sockets at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_socket_id': (string);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js
new file mode 100644
index 0000000..1a15183
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetServerSocketsRequest.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js.map
new file mode 100644
index 0000000..458dd98
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetServerSocketsRequest.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetServerSocketsRequest.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts
new file mode 100644
index 0000000..4c329ae
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts
@@ -0,0 +1,29 @@
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+export interface GetServerSocketsResponse {
+ /**
+ * list of socket refs that the connection detail service knows about. Sorted in
+ * ascending socket_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'socket_ref'?: (_grpc_channelz_v1_SocketRef)[];
+ /**
+ * If set, indicates that the list of sockets is the final list. Requesting
+ * more sockets will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end'?: (boolean);
+}
+export interface GetServerSocketsResponse__Output {
+ /**
+ * list of socket refs that the connection detail service knows about. Sorted in
+ * ascending socket_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'socket_ref': (_grpc_channelz_v1_SocketRef__Output)[];
+ /**
+ * If set, indicates that the list of sockets is the final list. Requesting
+ * more sockets will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js
new file mode 100644
index 0000000..29e424f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetServerSocketsResponse.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js.map
new file mode 100644
index 0000000..dc99923
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetServerSocketsResponse.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetServerSocketsResponse.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts
new file mode 100644
index 0000000..64ace6e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts
@@ -0,0 +1,33 @@
+import type { Long } from '@grpc/proto-loader';
+export interface GetServersRequest {
+ /**
+ * start_server_id indicates that only servers at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_server_id'?: (number | string | Long);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results'?: (number | string | Long);
+}
+export interface GetServersRequest__Output {
+ /**
+ * start_server_id indicates that only servers at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_server_id': (string);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js
new file mode 100644
index 0000000..7371813
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetServersRequest.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js.map
new file mode 100644
index 0000000..db7c710
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetServersRequest.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetServersRequest.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts
new file mode 100644
index 0000000..d3840cd
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts
@@ -0,0 +1,29 @@
+import type { Server as _grpc_channelz_v1_Server, Server__Output as _grpc_channelz_v1_Server__Output } from '../../../grpc/channelz/v1/Server';
+export interface GetServersResponse {
+ /**
+ * list of servers that the connection detail service knows about. Sorted in
+ * ascending server_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'server'?: (_grpc_channelz_v1_Server)[];
+ /**
+ * If set, indicates that the list of servers is the final list. Requesting
+ * more servers will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end'?: (boolean);
+}
+export interface GetServersResponse__Output {
+ /**
+ * list of servers that the connection detail service knows about. Sorted in
+ * ascending server_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'server': (_grpc_channelz_v1_Server__Output)[];
+ /**
+ * If set, indicates that the list of servers is the final list. Requesting
+ * more servers will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js
new file mode 100644
index 0000000..5124298
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetServersResponse.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js.map
new file mode 100644
index 0000000..74e4bba
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetServersResponse.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetServersResponse.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts
new file mode 100644
index 0000000..f80615c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts
@@ -0,0 +1,25 @@
+import type { Long } from '@grpc/proto-loader';
+export interface GetSocketRequest {
+ /**
+ * socket_id is the identifier of the specific socket to get.
+ */
+ 'socket_id'?: (number | string | Long);
+ /**
+ * If true, the response will contain only high level information
+ * that is inexpensive to obtain. Fields thay may be omitted are
+ * documented.
+ */
+ 'summary'?: (boolean);
+}
+export interface GetSocketRequest__Output {
+ /**
+ * socket_id is the identifier of the specific socket to get.
+ */
+ 'socket_id': (string);
+ /**
+ * If true, the response will contain only high level information
+ * that is inexpensive to obtain. Fields thay may be omitted are
+ * documented.
+ */
+ 'summary': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js
new file mode 100644
index 0000000..40ad25b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetSocketRequest.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js.map
new file mode 100644
index 0000000..3b4c180
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetSocketRequest.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetSocketRequest.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts
new file mode 100644
index 0000000..a9795d3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts
@@ -0,0 +1,15 @@
+import type { Socket as _grpc_channelz_v1_Socket, Socket__Output as _grpc_channelz_v1_Socket__Output } from '../../../grpc/channelz/v1/Socket';
+export interface GetSocketResponse {
+ /**
+ * The Socket that corresponds to the requested socket_id. This field
+ * should be set.
+ */
+ 'socket'?: (_grpc_channelz_v1_Socket | null);
+}
+export interface GetSocketResponse__Output {
+ /**
+ * The Socket that corresponds to the requested socket_id. This field
+ * should be set.
+ */
+ 'socket': (_grpc_channelz_v1_Socket__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js
new file mode 100644
index 0000000..ace0ef2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetSocketResponse.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js.map
new file mode 100644
index 0000000..90fada3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetSocketResponse.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetSocketResponse.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts
new file mode 100644
index 0000000..114a91f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts
@@ -0,0 +1,13 @@
+import type { Long } from '@grpc/proto-loader';
+export interface GetSubchannelRequest {
+ /**
+ * subchannel_id is the identifier of the specific subchannel to get.
+ */
+ 'subchannel_id'?: (number | string | Long);
+}
+export interface GetSubchannelRequest__Output {
+ /**
+ * subchannel_id is the identifier of the specific subchannel to get.
+ */
+ 'subchannel_id': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js
new file mode 100644
index 0000000..90f45ea
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetSubchannelRequest.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js.map
new file mode 100644
index 0000000..b8f8f62
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetSubchannelRequest.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetSubchannelRequest.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts
new file mode 100644
index 0000000..455639f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts
@@ -0,0 +1,15 @@
+import type { Subchannel as _grpc_channelz_v1_Subchannel, Subchannel__Output as _grpc_channelz_v1_Subchannel__Output } from '../../../grpc/channelz/v1/Subchannel';
+export interface GetSubchannelResponse {
+ /**
+ * The Subchannel that corresponds to the requested subchannel_id. This
+ * field should be set.
+ */
+ 'subchannel'?: (_grpc_channelz_v1_Subchannel | null);
+}
+export interface GetSubchannelResponse__Output {
+ /**
+ * The Subchannel that corresponds to the requested subchannel_id. This
+ * field should be set.
+ */
+ 'subchannel': (_grpc_channelz_v1_Subchannel__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js
new file mode 100644
index 0000000..52d4111
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetSubchannelResponse.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js.map
new file mode 100644
index 0000000..b39861f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetSubchannelResponse.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetSubchannelResponse.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts
new file mode 100644
index 0000000..43049af
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts
@@ -0,0 +1,33 @@
+import type { Long } from '@grpc/proto-loader';
+export interface GetTopChannelsRequest {
+ /**
+ * start_channel_id indicates that only channels at or above this id should be
+ * included in the results.
+ * To request the first page, this should be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_channel_id'?: (number | string | Long);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results'?: (number | string | Long);
+}
+export interface GetTopChannelsRequest__Output {
+ /**
+ * start_channel_id indicates that only channels at or above this id should be
+ * included in the results.
+ * To request the first page, this should be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_channel_id': (string);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js
new file mode 100644
index 0000000..8b3e023
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetTopChannelsRequest.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js.map
new file mode 100644
index 0000000..c4ffc68
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetTopChannelsRequest.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetTopChannelsRequest.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts
new file mode 100644
index 0000000..03f282f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts
@@ -0,0 +1,29 @@
+import type { Channel as _grpc_channelz_v1_Channel, Channel__Output as _grpc_channelz_v1_Channel__Output } from '../../../grpc/channelz/v1/Channel';
+export interface GetTopChannelsResponse {
+ /**
+ * list of channels that the connection detail service knows about. Sorted in
+ * ascending channel_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'channel'?: (_grpc_channelz_v1_Channel)[];
+ /**
+ * If set, indicates that the list of channels is the final list. Requesting
+ * more channels can only return more if they are created after this RPC
+ * completes.
+ */
+ 'end'?: (boolean);
+}
+export interface GetTopChannelsResponse__Output {
+ /**
+ * list of channels that the connection detail service knows about. Sorted in
+ * ascending channel_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'channel': (_grpc_channelz_v1_Channel__Output)[];
+ /**
+ * If set, indicates that the list of channels is the final list. Requesting
+ * more channels can only return more if they are created after this RPC
+ * completes.
+ */
+ 'end': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js
new file mode 100644
index 0000000..44f1c91
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=GetTopChannelsResponse.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js.map
new file mode 100644
index 0000000..b691e5e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetTopChannelsResponse.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/GetTopChannelsResponse.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts
new file mode 100644
index 0000000..a78e8f8
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts
@@ -0,0 +1,80 @@
+/// <reference types="node" />
+import type { Any as _google_protobuf_Any, Any__Output as _google_protobuf_Any__Output } from '../../../google/protobuf/Any';
+export interface _grpc_channelz_v1_Security_OtherSecurity {
+ /**
+ * The human readable version of the value.
+ */
+ 'name'?: (string);
+ /**
+ * The actual security details message.
+ */
+ 'value'?: (_google_protobuf_Any | null);
+}
+export interface _grpc_channelz_v1_Security_OtherSecurity__Output {
+ /**
+ * The human readable version of the value.
+ */
+ 'name': (string);
+ /**
+ * The actual security details message.
+ */
+ 'value': (_google_protobuf_Any__Output | null);
+}
+export interface _grpc_channelz_v1_Security_Tls {
+ /**
+ * The cipher suite name in the RFC 4346 format:
+ * https://tools.ietf.org/html/rfc4346#appendix-C
+ */
+ 'standard_name'?: (string);
+ /**
+ * Some other way to describe the cipher suite if
+ * the RFC 4346 name is not available.
+ */
+ 'other_name'?: (string);
+ /**
+ * the certificate used by this endpoint.
+ */
+ 'local_certificate'?: (Buffer | Uint8Array | string);
+ /**
+ * the certificate used by the remote endpoint.
+ */
+ 'remote_certificate'?: (Buffer | Uint8Array | string);
+ 'cipher_suite'?: "standard_name" | "other_name";
+}
+export interface _grpc_channelz_v1_Security_Tls__Output {
+ /**
+ * The cipher suite name in the RFC 4346 format:
+ * https://tools.ietf.org/html/rfc4346#appendix-C
+ */
+ 'standard_name'?: (string);
+ /**
+ * Some other way to describe the cipher suite if
+ * the RFC 4346 name is not available.
+ */
+ 'other_name'?: (string);
+ /**
+ * the certificate used by this endpoint.
+ */
+ 'local_certificate': (Buffer);
+ /**
+ * the certificate used by the remote endpoint.
+ */
+ 'remote_certificate': (Buffer);
+ 'cipher_suite': "standard_name" | "other_name";
+}
+/**
+ * Security represents details about how secure the socket is.
+ */
+export interface Security {
+ 'tls'?: (_grpc_channelz_v1_Security_Tls | null);
+ 'other'?: (_grpc_channelz_v1_Security_OtherSecurity | null);
+ 'model'?: "tls" | "other";
+}
+/**
+ * Security represents details about how secure the socket is.
+ */
+export interface Security__Output {
+ 'tls'?: (_grpc_channelz_v1_Security_Tls__Output | null);
+ 'other'?: (_grpc_channelz_v1_Security_OtherSecurity__Output | null);
+ 'model': "tls" | "other";
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js
new file mode 100644
index 0000000..022b367
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Security.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js.map
new file mode 100644
index 0000000..3243c97
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Security.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/Security.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts
new file mode 100644
index 0000000..8d984af
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts
@@ -0,0 +1,41 @@
+import type { ServerRef as _grpc_channelz_v1_ServerRef, ServerRef__Output as _grpc_channelz_v1_ServerRef__Output } from '../../../grpc/channelz/v1/ServerRef';
+import type { ServerData as _grpc_channelz_v1_ServerData, ServerData__Output as _grpc_channelz_v1_ServerData__Output } from '../../../grpc/channelz/v1/ServerData';
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+/**
+ * Server represents a single server. There may be multiple servers in a single
+ * program.
+ */
+export interface Server {
+ /**
+ * The identifier for a Server. This should be set.
+ */
+ 'ref'?: (_grpc_channelz_v1_ServerRef | null);
+ /**
+ * The associated data of the Server.
+ */
+ 'data'?: (_grpc_channelz_v1_ServerData | null);
+ /**
+ * The sockets that the server is listening on. There are no ordering
+ * guarantees. This may be absent.
+ */
+ 'listen_socket'?: (_grpc_channelz_v1_SocketRef)[];
+}
+/**
+ * Server represents a single server. There may be multiple servers in a single
+ * program.
+ */
+export interface Server__Output {
+ /**
+ * The identifier for a Server. This should be set.
+ */
+ 'ref': (_grpc_channelz_v1_ServerRef__Output | null);
+ /**
+ * The associated data of the Server.
+ */
+ 'data': (_grpc_channelz_v1_ServerData__Output | null);
+ /**
+ * The sockets that the server is listening on. There are no ordering
+ * guarantees. This may be absent.
+ */
+ 'listen_socket': (_grpc_channelz_v1_SocketRef__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js
new file mode 100644
index 0000000..b230e4d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Server.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js.map
new file mode 100644
index 0000000..522934d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/Server.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts
new file mode 100644
index 0000000..7a2de0f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts
@@ -0,0 +1,53 @@
+import type { ChannelTrace as _grpc_channelz_v1_ChannelTrace, ChannelTrace__Output as _grpc_channelz_v1_ChannelTrace__Output } from '../../../grpc/channelz/v1/ChannelTrace';
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { Long } from '@grpc/proto-loader';
+/**
+ * ServerData is data for a specific Server.
+ */
+export interface ServerData {
+ /**
+ * A trace of recent events on the server. May be absent.
+ */
+ 'trace'?: (_grpc_channelz_v1_ChannelTrace | null);
+ /**
+ * The number of incoming calls started on the server
+ */
+ 'calls_started'?: (number | string | Long);
+ /**
+ * The number of incoming calls that have completed with an OK status
+ */
+ 'calls_succeeded'?: (number | string | Long);
+ /**
+ * The number of incoming calls that have a completed with a non-OK status
+ */
+ 'calls_failed'?: (number | string | Long);
+ /**
+ * The last time a call was started on the server.
+ */
+ 'last_call_started_timestamp'?: (_google_protobuf_Timestamp | null);
+}
+/**
+ * ServerData is data for a specific Server.
+ */
+export interface ServerData__Output {
+ /**
+ * A trace of recent events on the server. May be absent.
+ */
+ 'trace': (_grpc_channelz_v1_ChannelTrace__Output | null);
+ /**
+ * The number of incoming calls started on the server
+ */
+ 'calls_started': (string);
+ /**
+ * The number of incoming calls that have completed with an OK status
+ */
+ 'calls_succeeded': (string);
+ /**
+ * The number of incoming calls that have a completed with a non-OK status
+ */
+ 'calls_failed': (string);
+ /**
+ * The last time a call was started on the server.
+ */
+ 'last_call_started_timestamp': (_google_protobuf_Timestamp__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js
new file mode 100644
index 0000000..53d92a6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ServerData.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js.map
new file mode 100644
index 0000000..b78c5b4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ServerData.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/ServerData.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts
new file mode 100644
index 0000000..778b87d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts
@@ -0,0 +1,27 @@
+import type { Long } from '@grpc/proto-loader';
+/**
+ * ServerRef is a reference to a Server.
+ */
+export interface ServerRef {
+ /**
+ * A globally unique identifier for this server. Must be a positive number.
+ */
+ 'server_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the server.
+ */
+ 'name'?: (string);
+}
+/**
+ * ServerRef is a reference to a Server.
+ */
+export interface ServerRef__Output {
+ /**
+ * A globally unique identifier for this server. Must be a positive number.
+ */
+ 'server_id': (string);
+ /**
+ * An optional name associated with the server.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js
new file mode 100644
index 0000000..9a623c7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ServerRef.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js.map
new file mode 100644
index 0000000..75f5aad
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ServerRef.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/ServerRef.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts
new file mode 100644
index 0000000..91d4ad8
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts
@@ -0,0 +1,66 @@
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+import type { SocketData as _grpc_channelz_v1_SocketData, SocketData__Output as _grpc_channelz_v1_SocketData__Output } from '../../../grpc/channelz/v1/SocketData';
+import type { Address as _grpc_channelz_v1_Address, Address__Output as _grpc_channelz_v1_Address__Output } from '../../../grpc/channelz/v1/Address';
+import type { Security as _grpc_channelz_v1_Security, Security__Output as _grpc_channelz_v1_Security__Output } from '../../../grpc/channelz/v1/Security';
+/**
+ * Information about an actual connection. Pronounced "sock-ay".
+ */
+export interface Socket {
+ /**
+ * The identifier for the Socket.
+ */
+ 'ref'?: (_grpc_channelz_v1_SocketRef | null);
+ /**
+ * Data specific to this Socket.
+ */
+ 'data'?: (_grpc_channelz_v1_SocketData | null);
+ /**
+ * The locally bound address.
+ */
+ 'local'?: (_grpc_channelz_v1_Address | null);
+ /**
+ * The remote bound address. May be absent.
+ */
+ 'remote'?: (_grpc_channelz_v1_Address | null);
+ /**
+ * Security details for this socket. May be absent if not available, or
+ * there is no security on the socket.
+ */
+ 'security'?: (_grpc_channelz_v1_Security | null);
+ /**
+ * Optional, represents the name of the remote endpoint, if different than
+ * the original target name.
+ */
+ 'remote_name'?: (string);
+}
+/**
+ * Information about an actual connection. Pronounced "sock-ay".
+ */
+export interface Socket__Output {
+ /**
+ * The identifier for the Socket.
+ */
+ 'ref': (_grpc_channelz_v1_SocketRef__Output | null);
+ /**
+ * Data specific to this Socket.
+ */
+ 'data': (_grpc_channelz_v1_SocketData__Output | null);
+ /**
+ * The locally bound address.
+ */
+ 'local': (_grpc_channelz_v1_Address__Output | null);
+ /**
+ * The remote bound address. May be absent.
+ */
+ 'remote': (_grpc_channelz_v1_Address__Output | null);
+ /**
+ * Security details for this socket. May be absent if not available, or
+ * there is no security on the socket.
+ */
+ 'security': (_grpc_channelz_v1_Security__Output | null);
+ /**
+ * Optional, represents the name of the remote endpoint, if different than
+ * the original target name.
+ */
+ 'remote_name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js
new file mode 100644
index 0000000..c1e5004
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Socket.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js.map
new file mode 100644
index 0000000..d49d9df
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Socket.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/Socket.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts
new file mode 100644
index 0000000..5553cb2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts
@@ -0,0 +1,146 @@
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { Int64Value as _google_protobuf_Int64Value, Int64Value__Output as _google_protobuf_Int64Value__Output } from '../../../google/protobuf/Int64Value';
+import type { SocketOption as _grpc_channelz_v1_SocketOption, SocketOption__Output as _grpc_channelz_v1_SocketOption__Output } from '../../../grpc/channelz/v1/SocketOption';
+import type { Long } from '@grpc/proto-loader';
+/**
+ * SocketData is data associated for a specific Socket. The fields present
+ * are specific to the implementation, so there may be minor differences in
+ * the semantics. (e.g. flow control windows)
+ */
+export interface SocketData {
+ /**
+ * The number of streams that have been started.
+ */
+ 'streams_started'?: (number | string | Long);
+ /**
+ * The number of streams that have ended successfully:
+ * On client side, received frame with eos bit set;
+ * On server side, sent frame with eos bit set.
+ */
+ 'streams_succeeded'?: (number | string | Long);
+ /**
+ * The number of streams that have ended unsuccessfully:
+ * On client side, ended without receiving frame with eos bit set;
+ * On server side, ended without sending frame with eos bit set.
+ */
+ 'streams_failed'?: (number | string | Long);
+ /**
+ * The number of grpc messages successfully sent on this socket.
+ */
+ 'messages_sent'?: (number | string | Long);
+ /**
+ * The number of grpc messages received on this socket.
+ */
+ 'messages_received'?: (number | string | Long);
+ /**
+ * The number of keep alives sent. This is typically implemented with HTTP/2
+ * ping messages.
+ */
+ 'keep_alives_sent'?: (number | string | Long);
+ /**
+ * The last time a stream was created by this endpoint. Usually unset for
+ * servers.
+ */
+ 'last_local_stream_created_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The last time a stream was created by the remote endpoint. Usually unset
+ * for clients.
+ */
+ 'last_remote_stream_created_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The last time a message was sent by this endpoint.
+ */
+ 'last_message_sent_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The last time a message was received by this endpoint.
+ */
+ 'last_message_received_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The amount of window, granted to the local endpoint by the remote endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'local_flow_control_window'?: (_google_protobuf_Int64Value | null);
+ /**
+ * The amount of window, granted to the remote endpoint by the local endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'remote_flow_control_window'?: (_google_protobuf_Int64Value | null);
+ /**
+ * Socket options set on this socket. May be absent if 'summary' is set
+ * on GetSocketRequest.
+ */
+ 'option'?: (_grpc_channelz_v1_SocketOption)[];
+}
+/**
+ * SocketData is data associated for a specific Socket. The fields present
+ * are specific to the implementation, so there may be minor differences in
+ * the semantics. (e.g. flow control windows)
+ */
+export interface SocketData__Output {
+ /**
+ * The number of streams that have been started.
+ */
+ 'streams_started': (string);
+ /**
+ * The number of streams that have ended successfully:
+ * On client side, received frame with eos bit set;
+ * On server side, sent frame with eos bit set.
+ */
+ 'streams_succeeded': (string);
+ /**
+ * The number of streams that have ended unsuccessfully:
+ * On client side, ended without receiving frame with eos bit set;
+ * On server side, ended without sending frame with eos bit set.
+ */
+ 'streams_failed': (string);
+ /**
+ * The number of grpc messages successfully sent on this socket.
+ */
+ 'messages_sent': (string);
+ /**
+ * The number of grpc messages received on this socket.
+ */
+ 'messages_received': (string);
+ /**
+ * The number of keep alives sent. This is typically implemented with HTTP/2
+ * ping messages.
+ */
+ 'keep_alives_sent': (string);
+ /**
+ * The last time a stream was created by this endpoint. Usually unset for
+ * servers.
+ */
+ 'last_local_stream_created_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The last time a stream was created by the remote endpoint. Usually unset
+ * for clients.
+ */
+ 'last_remote_stream_created_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The last time a message was sent by this endpoint.
+ */
+ 'last_message_sent_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The last time a message was received by this endpoint.
+ */
+ 'last_message_received_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The amount of window, granted to the local endpoint by the remote endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'local_flow_control_window': (_google_protobuf_Int64Value__Output | null);
+ /**
+ * The amount of window, granted to the remote endpoint by the local endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'remote_flow_control_window': (_google_protobuf_Int64Value__Output | null);
+ /**
+ * Socket options set on this socket. May be absent if 'summary' is set
+ * on GetSocketRequest.
+ */
+ 'option': (_grpc_channelz_v1_SocketOption__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js
new file mode 100644
index 0000000..40638de
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=SocketData.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js.map
new file mode 100644
index 0000000..c17becd
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SocketData.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/SocketData.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts
new file mode 100644
index 0000000..53c23a2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts
@@ -0,0 +1,43 @@
+import type { Any as _google_protobuf_Any, Any__Output as _google_protobuf_Any__Output } from '../../../google/protobuf/Any';
+/**
+ * SocketOption represents socket options for a socket. Specifically, these
+ * are the options returned by getsockopt().
+ */
+export interface SocketOption {
+ /**
+ * The full name of the socket option. Typically this will be the upper case
+ * name, such as "SO_REUSEPORT".
+ */
+ 'name'?: (string);
+ /**
+ * The human readable value of this socket option. At least one of value or
+ * additional will be set.
+ */
+ 'value'?: (string);
+ /**
+ * Additional data associated with the socket option. At least one of value
+ * or additional will be set.
+ */
+ 'additional'?: (_google_protobuf_Any | null);
+}
+/**
+ * SocketOption represents socket options for a socket. Specifically, these
+ * are the options returned by getsockopt().
+ */
+export interface SocketOption__Output {
+ /**
+ * The full name of the socket option. Typically this will be the upper case
+ * name, such as "SO_REUSEPORT".
+ */
+ 'name': (string);
+ /**
+ * The human readable value of this socket option. At least one of value or
+ * additional will be set.
+ */
+ 'value': (string);
+ /**
+ * Additional data associated with the socket option. At least one of value
+ * or additional will be set.
+ */
+ 'additional': (_google_protobuf_Any__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js
new file mode 100644
index 0000000..c459962
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=SocketOption.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js.map
new file mode 100644
index 0000000..6b8bf59
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SocketOption.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/SocketOption.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.d.ts
new file mode 100644
index 0000000..d0fd4b0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.d.ts
@@ -0,0 +1,29 @@
+import type { Duration as _google_protobuf_Duration, Duration__Output as _google_protobuf_Duration__Output } from '../../../google/protobuf/Duration';
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_LINGER.
+ */
+export interface SocketOptionLinger {
+ /**
+ * active maps to `struct linger.l_onoff`
+ */
+ 'active'?: (boolean);
+ /**
+ * duration maps to `struct linger.l_linger`
+ */
+ 'duration'?: (_google_protobuf_Duration | null);
+}
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_LINGER.
+ */
+export interface SocketOptionLinger__Output {
+ /**
+ * active maps to `struct linger.l_onoff`
+ */
+ 'active': (boolean);
+ /**
+ * duration maps to `struct linger.l_linger`
+ */
+ 'duration': (_google_protobuf_Duration__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js
new file mode 100644
index 0000000..01028c8
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=SocketOptionLinger.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js.map
new file mode 100644
index 0000000..a5283ab
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SocketOptionLinger.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/SocketOptionLinger.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.d.ts
new file mode 100644
index 0000000..d2457e1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.d.ts
@@ -0,0 +1,70 @@
+/**
+ * For use with SocketOption's additional field. Tcp info for
+ * SOL_TCP and TCP_INFO.
+ */
+export interface SocketOptionTcpInfo {
+ 'tcpi_state'?: (number);
+ 'tcpi_ca_state'?: (number);
+ 'tcpi_retransmits'?: (number);
+ 'tcpi_probes'?: (number);
+ 'tcpi_backoff'?: (number);
+ 'tcpi_options'?: (number);
+ 'tcpi_snd_wscale'?: (number);
+ 'tcpi_rcv_wscale'?: (number);
+ 'tcpi_rto'?: (number);
+ 'tcpi_ato'?: (number);
+ 'tcpi_snd_mss'?: (number);
+ 'tcpi_rcv_mss'?: (number);
+ 'tcpi_unacked'?: (number);
+ 'tcpi_sacked'?: (number);
+ 'tcpi_lost'?: (number);
+ 'tcpi_retrans'?: (number);
+ 'tcpi_fackets'?: (number);
+ 'tcpi_last_data_sent'?: (number);
+ 'tcpi_last_ack_sent'?: (number);
+ 'tcpi_last_data_recv'?: (number);
+ 'tcpi_last_ack_recv'?: (number);
+ 'tcpi_pmtu'?: (number);
+ 'tcpi_rcv_ssthresh'?: (number);
+ 'tcpi_rtt'?: (number);
+ 'tcpi_rttvar'?: (number);
+ 'tcpi_snd_ssthresh'?: (number);
+ 'tcpi_snd_cwnd'?: (number);
+ 'tcpi_advmss'?: (number);
+ 'tcpi_reordering'?: (number);
+}
+/**
+ * For use with SocketOption's additional field. Tcp info for
+ * SOL_TCP and TCP_INFO.
+ */
+export interface SocketOptionTcpInfo__Output {
+ 'tcpi_state': (number);
+ 'tcpi_ca_state': (number);
+ 'tcpi_retransmits': (number);
+ 'tcpi_probes': (number);
+ 'tcpi_backoff': (number);
+ 'tcpi_options': (number);
+ 'tcpi_snd_wscale': (number);
+ 'tcpi_rcv_wscale': (number);
+ 'tcpi_rto': (number);
+ 'tcpi_ato': (number);
+ 'tcpi_snd_mss': (number);
+ 'tcpi_rcv_mss': (number);
+ 'tcpi_unacked': (number);
+ 'tcpi_sacked': (number);
+ 'tcpi_lost': (number);
+ 'tcpi_retrans': (number);
+ 'tcpi_fackets': (number);
+ 'tcpi_last_data_sent': (number);
+ 'tcpi_last_ack_sent': (number);
+ 'tcpi_last_data_recv': (number);
+ 'tcpi_last_ack_recv': (number);
+ 'tcpi_pmtu': (number);
+ 'tcpi_rcv_ssthresh': (number);
+ 'tcpi_rtt': (number);
+ 'tcpi_rttvar': (number);
+ 'tcpi_snd_ssthresh': (number);
+ 'tcpi_snd_cwnd': (number);
+ 'tcpi_advmss': (number);
+ 'tcpi_reordering': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js
new file mode 100644
index 0000000..b663a2e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=SocketOptionTcpInfo.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js.map
new file mode 100644
index 0000000..cb68a32
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SocketOptionTcpInfo.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/SocketOptionTcpInfo.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.d.ts
new file mode 100644
index 0000000..b102a34
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.d.ts
@@ -0,0 +1,15 @@
+import type { Duration as _google_protobuf_Duration, Duration__Output as _google_protobuf_Duration__Output } from '../../../google/protobuf/Duration';
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_RCVTIMEO and SO_SNDTIMEO
+ */
+export interface SocketOptionTimeout {
+ 'duration'?: (_google_protobuf_Duration | null);
+}
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_RCVTIMEO and SO_SNDTIMEO
+ */
+export interface SocketOptionTimeout__Output {
+ 'duration': (_google_protobuf_Duration__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js
new file mode 100644
index 0000000..bcef7f5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=SocketOptionTimeout.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js.map
new file mode 100644
index 0000000..73c8085
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SocketOptionTimeout.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/SocketOptionTimeout.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts
new file mode 100644
index 0000000..2f34d65
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts
@@ -0,0 +1,27 @@
+import type { Long } from '@grpc/proto-loader';
+/**
+ * SocketRef is a reference to a Socket.
+ */
+export interface SocketRef {
+ /**
+ * The globally unique id for this socket. Must be a positive number.
+ */
+ 'socket_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the socket.
+ */
+ 'name'?: (string);
+}
+/**
+ * SocketRef is a reference to a Socket.
+ */
+export interface SocketRef__Output {
+ /**
+ * The globally unique id for this socket. Must be a positive number.
+ */
+ 'socket_id': (string);
+ /**
+ * An optional name associated with the socket.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js
new file mode 100644
index 0000000..a73587f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=SocketRef.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js.map
new file mode 100644
index 0000000..d970f9c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SocketRef.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/SocketRef.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts
new file mode 100644
index 0000000..1222cb5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts
@@ -0,0 +1,66 @@
+import type { SubchannelRef as _grpc_channelz_v1_SubchannelRef, SubchannelRef__Output as _grpc_channelz_v1_SubchannelRef__Output } from '../../../grpc/channelz/v1/SubchannelRef';
+import type { ChannelData as _grpc_channelz_v1_ChannelData, ChannelData__Output as _grpc_channelz_v1_ChannelData__Output } from '../../../grpc/channelz/v1/ChannelData';
+import type { ChannelRef as _grpc_channelz_v1_ChannelRef, ChannelRef__Output as _grpc_channelz_v1_ChannelRef__Output } from '../../../grpc/channelz/v1/ChannelRef';
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+/**
+ * Subchannel is a logical grouping of channels, subchannels, and sockets.
+ * A subchannel is load balanced over by it's ancestor
+ */
+export interface Subchannel {
+ /**
+ * The identifier for this channel.
+ */
+ 'ref'?: (_grpc_channelz_v1_SubchannelRef | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data'?: (_grpc_channelz_v1_ChannelData | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref'?: (_grpc_channelz_v1_SocketRef)[];
+}
+/**
+ * Subchannel is a logical grouping of channels, subchannels, and sockets.
+ * A subchannel is load balanced over by it's ancestor
+ */
+export interface Subchannel__Output {
+ /**
+ * The identifier for this channel.
+ */
+ 'ref': (_grpc_channelz_v1_SubchannelRef__Output | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data': (_grpc_channelz_v1_ChannelData__Output | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref': (_grpc_channelz_v1_ChannelRef__Output)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref': (_grpc_channelz_v1_SubchannelRef__Output)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref': (_grpc_channelz_v1_SocketRef__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js
new file mode 100644
index 0000000..6a5e543
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Subchannel.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js.map
new file mode 100644
index 0000000..6441346
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Subchannel.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/Subchannel.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts
new file mode 100644
index 0000000..290fc85
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts
@@ -0,0 +1,27 @@
+import type { Long } from '@grpc/proto-loader';
+/**
+ * SubchannelRef is a reference to a Subchannel.
+ */
+export interface SubchannelRef {
+ /**
+ * The globally unique id for this subchannel. Must be a positive number.
+ */
+ 'subchannel_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the subchannel.
+ */
+ 'name'?: (string);
+}
+/**
+ * SubchannelRef is a reference to a Subchannel.
+ */
+export interface SubchannelRef__Output {
+ /**
+ * The globally unique id for this subchannel. Must be a positive number.
+ */
+ 'subchannel_id': (string);
+ /**
+ * An optional name associated with the subchannel.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js
new file mode 100644
index 0000000..68520f9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js
@@ -0,0 +1,4 @@
+"use strict";
+// Original file: proto/channelz.proto
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=SubchannelRef.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js.map
new file mode 100644
index 0000000..1e4b009
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SubchannelRef.js","sourceRoot":"","sources":["../../../../../../src/generated/grpc/channelz/v1/SubchannelRef.ts"],"names":[],"mappings":";AAAA,sCAAsC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.d.ts
new file mode 100644
index 0000000..345e42c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.d.ts
@@ -0,0 +1,17 @@
+/// <reference types="node" />
+/// <reference types="node" />
+import { Socket } from 'net';
+import * as tls from 'tls';
+import { SubchannelAddress } from './subchannel-address';
+import { ChannelOptions } from './channel-options';
+import { GrpcUri } from './uri-parser';
+export interface ProxyMapResult {
+ target: GrpcUri;
+ extraOptions: ChannelOptions;
+}
+export declare function mapProxyName(target: GrpcUri, options: ChannelOptions): ProxyMapResult;
+export interface ProxyConnectionResult {
+ socket?: Socket;
+ realTarget?: GrpcUri;
+}
+export declare function getProxiedConnection(address: SubchannelAddress, channelOptions: ChannelOptions, connectionOptions: tls.ConnectionOptions): Promise<ProxyConnectionResult>;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js
new file mode 100644
index 0000000..67fc1e2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js
@@ -0,0 +1,260 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getProxiedConnection = exports.mapProxyName = void 0;
+const logging_1 = require("./logging");
+const constants_1 = require("./constants");
+const resolver_1 = require("./resolver");
+const http = require("http");
+const tls = require("tls");
+const logging = require("./logging");
+const subchannel_address_1 = require("./subchannel-address");
+const uri_parser_1 = require("./uri-parser");
+const url_1 = require("url");
+const resolver_dns_1 = require("./resolver-dns");
+const TRACER_NAME = 'proxy';
+function trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+function getProxyInfo() {
+ let proxyEnv = '';
+ let envVar = '';
+ /* Prefer using 'grpc_proxy'. Fallback on 'http_proxy' if it is not set.
+ * Also prefer using 'https_proxy' with fallback on 'http_proxy'. The
+ * fallback behavior can be removed if there's a demand for it.
+ */
+ if (process.env.grpc_proxy) {
+ envVar = 'grpc_proxy';
+ proxyEnv = process.env.grpc_proxy;
+ }
+ else if (process.env.https_proxy) {
+ envVar = 'https_proxy';
+ proxyEnv = process.env.https_proxy;
+ }
+ else if (process.env.http_proxy) {
+ envVar = 'http_proxy';
+ proxyEnv = process.env.http_proxy;
+ }
+ else {
+ return {};
+ }
+ let proxyUrl;
+ try {
+ proxyUrl = new url_1.URL(proxyEnv);
+ }
+ catch (e) {
+ (0, logging_1.log)(constants_1.LogVerbosity.ERROR, `cannot parse value of "${envVar}" env var`);
+ return {};
+ }
+ if (proxyUrl.protocol !== 'http:') {
+ (0, logging_1.log)(constants_1.LogVerbosity.ERROR, `"${proxyUrl.protocol}" scheme not supported in proxy URI`);
+ return {};
+ }
+ let userCred = null;
+ if (proxyUrl.username) {
+ if (proxyUrl.password) {
+ (0, logging_1.log)(constants_1.LogVerbosity.INFO, 'userinfo found in proxy URI');
+ userCred = `${proxyUrl.username}:${proxyUrl.password}`;
+ }
+ else {
+ userCred = proxyUrl.username;
+ }
+ }
+ const hostname = proxyUrl.hostname;
+ let port = proxyUrl.port;
+ /* The proxy URL uses the scheme "http:", which has a default port number of
+ * 80. We need to set that explicitly here if it is omitted because otherwise
+ * it will use gRPC's default port 443. */
+ if (port === '') {
+ port = '80';
+ }
+ const result = {
+ address: `${hostname}:${port}`,
+ };
+ if (userCred) {
+ result.creds = userCred;
+ }
+ trace('Proxy server ' + result.address + ' set by environment variable ' + envVar);
+ return result;
+}
+function getNoProxyHostList() {
+ /* Prefer using 'no_grpc_proxy'. Fallback on 'no_proxy' if it is not set. */
+ let noProxyStr = process.env.no_grpc_proxy;
+ let envVar = 'no_grpc_proxy';
+ if (!noProxyStr) {
+ noProxyStr = process.env.no_proxy;
+ envVar = 'no_proxy';
+ }
+ if (noProxyStr) {
+ trace('No proxy server list set by environment variable ' + envVar);
+ return noProxyStr.split(',');
+ }
+ else {
+ return [];
+ }
+}
+function mapProxyName(target, options) {
+ var _a;
+ const noProxyResult = {
+ target: target,
+ extraOptions: {},
+ };
+ if (((_a = options['grpc.enable_http_proxy']) !== null && _a !== void 0 ? _a : 1) === 0) {
+ return noProxyResult;
+ }
+ if (target.scheme === 'unix') {
+ return noProxyResult;
+ }
+ const proxyInfo = getProxyInfo();
+ if (!proxyInfo.address) {
+ return noProxyResult;
+ }
+ const hostPort = (0, uri_parser_1.splitHostPort)(target.path);
+ if (!hostPort) {
+ return noProxyResult;
+ }
+ const serverHost = hostPort.host;
+ for (const host of getNoProxyHostList()) {
+ if (host === serverHost) {
+ trace('Not using proxy for target in no_proxy list: ' + (0, uri_parser_1.uriToString)(target));
+ return noProxyResult;
+ }
+ }
+ const extraOptions = {
+ 'grpc.http_connect_target': (0, uri_parser_1.uriToString)(target),
+ };
+ if (proxyInfo.creds) {
+ extraOptions['grpc.http_connect_creds'] = proxyInfo.creds;
+ }
+ return {
+ target: {
+ scheme: 'dns',
+ path: proxyInfo.address,
+ },
+ extraOptions: extraOptions,
+ };
+}
+exports.mapProxyName = mapProxyName;
+function getProxiedConnection(address, channelOptions, connectionOptions) {
+ var _a;
+ if (!('grpc.http_connect_target' in channelOptions)) {
+ return Promise.resolve({});
+ }
+ const realTarget = channelOptions['grpc.http_connect_target'];
+ const parsedTarget = (0, uri_parser_1.parseUri)(realTarget);
+ if (parsedTarget === null) {
+ return Promise.resolve({});
+ }
+ const splitHostPost = (0, uri_parser_1.splitHostPort)(parsedTarget.path);
+ if (splitHostPost === null) {
+ return Promise.resolve({});
+ }
+ const hostPort = `${splitHostPost.host}:${(_a = splitHostPost.port) !== null && _a !== void 0 ? _a : resolver_dns_1.DEFAULT_PORT}`;
+ const options = {
+ method: 'CONNECT',
+ path: hostPort,
+ };
+ const headers = {
+ Host: hostPort,
+ };
+ // Connect to the subchannel address as a proxy
+ if ((0, subchannel_address_1.isTcpSubchannelAddress)(address)) {
+ options.host = address.host;
+ options.port = address.port;
+ }
+ else {
+ options.socketPath = address.path;
+ }
+ if ('grpc.http_connect_creds' in channelOptions) {
+ headers['Proxy-Authorization'] =
+ 'Basic ' +
+ Buffer.from(channelOptions['grpc.http_connect_creds']).toString('base64');
+ }
+ options.headers = headers;
+ const proxyAddressString = (0, subchannel_address_1.subchannelAddressToString)(address);
+ trace('Using proxy ' + proxyAddressString + ' to connect to ' + options.path);
+ return new Promise((resolve, reject) => {
+ const request = http.request(options);
+ request.once('connect', (res, socket, head) => {
+ var _a;
+ request.removeAllListeners();
+ socket.removeAllListeners();
+ if (res.statusCode === 200) {
+ trace('Successfully connected to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString);
+ if ('secureContext' in connectionOptions) {
+ /* The proxy is connecting to a TLS server, so upgrade this socket
+ * connection to a TLS connection.
+ * This is a workaround for https://github.com/nodejs/node/issues/32922
+ * See https://github.com/grpc/grpc-node/pull/1369 for more info. */
+ const targetPath = (0, resolver_1.getDefaultAuthority)(parsedTarget);
+ const hostPort = (0, uri_parser_1.splitHostPort)(targetPath);
+ const remoteHost = (_a = hostPort === null || hostPort === void 0 ? void 0 : hostPort.host) !== null && _a !== void 0 ? _a : targetPath;
+ const cts = tls.connect(Object.assign({ host: remoteHost, servername: remoteHost, socket: socket }, connectionOptions), () => {
+ trace('Successfully established a TLS connection to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString);
+ resolve({ socket: cts, realTarget: parsedTarget });
+ });
+ cts.on('error', (error) => {
+ trace('Failed to establish a TLS connection to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString +
+ ' with error ' +
+ error.message);
+ reject();
+ });
+ }
+ else {
+ trace('Successfully established a plaintext connection to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString);
+ resolve({
+ socket,
+ realTarget: parsedTarget,
+ });
+ }
+ }
+ else {
+ (0, logging_1.log)(constants_1.LogVerbosity.ERROR, 'Failed to connect to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString +
+ ' with status ' +
+ res.statusCode);
+ reject();
+ }
+ });
+ request.once('error', err => {
+ request.removeAllListeners();
+ (0, logging_1.log)(constants_1.LogVerbosity.ERROR, 'Failed to connect to proxy ' +
+ proxyAddressString +
+ ' with error ' +
+ err.message);
+ reject();
+ });
+ request.end();
+ });
+}
+exports.getProxiedConnection = getProxiedConnection;
+//# sourceMappingURL=http_proxy.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js.map
new file mode 100644
index 0000000..82df262
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/http_proxy.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"http_proxy.js","sourceRoot":"","sources":["../../src/http_proxy.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/index.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/index.d.ts
new file mode 100644
index 0000000..5842a1b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/index.d.ts
@@ -0,0 +1,77 @@
+/// <reference types="node" />
+import { ClientDuplexStream, ClientReadableStream, ClientUnaryCall, ClientWritableStream, ServiceError } from './call';
+import { CallCredentials, OAuth2Client } from './call-credentials';
+import { StatusObject } from './call-interface';
+import { Channel, ChannelImplementation } from './channel';
+import { CompressionAlgorithms } from './compression-algorithms';
+import { ConnectivityState } from './connectivity-state';
+import { ChannelCredentials } from './channel-credentials';
+import { CallOptions, Client, ClientOptions, CallInvocationTransformer, CallProperties, UnaryCallback } from './client';
+import { LogVerbosity, Status, Propagate } from './constants';
+import { Deserialize, loadPackageDefinition, makeClientConstructor, MethodDefinition, Serialize, ServiceDefinition } from './make-client';
+import { Metadata, MetadataOptions, MetadataValue } from './metadata';
+import { Server, UntypedHandleCall, UntypedServiceImplementation } from './server';
+import { KeyCertPair, ServerCredentials } from './server-credentials';
+import { StatusBuilder } from './status-builder';
+import { handleBidiStreamingCall, handleServerStreamingCall, handleClientStreamingCall, handleUnaryCall, sendUnaryData, ServerUnaryCall, ServerReadableStream, ServerWritableStream, ServerDuplexStream, ServerErrorResponse } from './server-call';
+export { OAuth2Client };
+/**** Client Credentials ****/
+export declare const credentials: {
+ /**
+ * Combine a ChannelCredentials with any number of CallCredentials into a
+ * single ChannelCredentials object.
+ * @param channelCredentials The ChannelCredentials object.
+ * @param callCredentials Any number of CallCredentials objects.
+ * @return The resulting ChannelCredentials object.
+ */
+ combineChannelCredentials: (channelCredentials: ChannelCredentials, ...callCredentials: CallCredentials[]) => ChannelCredentials;
+ /**
+ * Combine any number of CallCredentials into a single CallCredentials
+ * object.
+ * @param first The first CallCredentials object.
+ * @param additional Any number of additional CallCredentials objects.
+ * @return The resulting CallCredentials object.
+ */
+ combineCallCredentials: (first: CallCredentials, ...additional: CallCredentials[]) => CallCredentials;
+ createInsecure: typeof ChannelCredentials.createInsecure;
+ createSsl: typeof ChannelCredentials.createSsl;
+ createFromSecureContext: typeof ChannelCredentials.createFromSecureContext;
+ createFromMetadataGenerator: typeof CallCredentials.createFromMetadataGenerator;
+ createFromGoogleCredential: typeof CallCredentials.createFromGoogleCredential;
+ createEmpty: typeof CallCredentials.createEmpty;
+};
+/**** Metadata ****/
+export { Metadata, MetadataOptions, MetadataValue };
+/**** Constants ****/
+export { LogVerbosity as logVerbosity, Status as status, ConnectivityState as connectivityState, Propagate as propagate, CompressionAlgorithms as compressionAlgorithms, };
+/**** Client ****/
+export { Client, ClientOptions, loadPackageDefinition, makeClientConstructor, makeClientConstructor as makeGenericClientConstructor, CallProperties, CallInvocationTransformer, ChannelImplementation as Channel, Channel as ChannelInterface, UnaryCallback as requestCallback, };
+/**
+ * Close a Client object.
+ * @param client The client to close.
+ */
+export declare const closeClient: (client: Client) => void;
+export declare const waitForClientReady: (client: Client, deadline: Date | number, callback: (error?: Error) => void) => void;
+export { sendUnaryData, ChannelCredentials, CallCredentials, Deadline, Serialize as serialize, Deserialize as deserialize, ClientUnaryCall, ClientReadableStream, ClientWritableStream, ClientDuplexStream, CallOptions, MethodDefinition, StatusObject, ServiceError, ServerUnaryCall, ServerReadableStream, ServerWritableStream, ServerDuplexStream, ServerErrorResponse, ServiceDefinition, UntypedHandleCall, UntypedServiceImplementation, };
+/**** Server ****/
+export { handleBidiStreamingCall, handleServerStreamingCall, handleUnaryCall, handleClientStreamingCall, };
+export type Call = ClientUnaryCall | ClientReadableStream<any> | ClientWritableStream<any> | ClientDuplexStream<any, any>;
+/**** Unimplemented function stubs ****/
+export declare const loadObject: (value: any, options: any) => never;
+export declare const load: (filename: any, format: any, options: any) => never;
+export declare const setLogger: (logger: Partial<Console>) => void;
+export declare const setLogVerbosity: (verbosity: LogVerbosity) => void;
+export { Server };
+export { ServerCredentials };
+export { KeyCertPair };
+export declare const getClientChannel: (client: Client) => Channel;
+export { StatusBuilder };
+export { Listener, InterceptingListener } from './call-interface';
+export { Requester, ListenerBuilder, RequesterBuilder, Interceptor, InterceptorOptions, InterceptorProvider, InterceptingCall, InterceptorConfigurationError, NextCall, } from './client-interceptors';
+export { GrpcObject, ServiceClientConstructor, ProtobufTypeDefinition, } from './make-client';
+export { ChannelOptions } from './channel-options';
+export { getChannelzServiceDefinition, getChannelzHandlers } from './channelz';
+export { addAdminServicesToServer } from './admin';
+import * as experimental from './experimental';
+export { experimental };
+import { Deadline } from './deadline';
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/index.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/index.js
new file mode 100644
index 0000000..7a7821d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/index.js
@@ -0,0 +1,140 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.experimental = exports.addAdminServicesToServer = exports.getChannelzHandlers = exports.getChannelzServiceDefinition = exports.InterceptorConfigurationError = exports.InterceptingCall = exports.RequesterBuilder = exports.ListenerBuilder = exports.StatusBuilder = exports.getClientChannel = exports.ServerCredentials = exports.Server = exports.setLogVerbosity = exports.setLogger = exports.load = exports.loadObject = exports.CallCredentials = exports.ChannelCredentials = exports.waitForClientReady = exports.closeClient = exports.Channel = exports.makeGenericClientConstructor = exports.makeClientConstructor = exports.loadPackageDefinition = exports.Client = exports.compressionAlgorithms = exports.propagate = exports.connectivityState = exports.status = exports.logVerbosity = exports.Metadata = exports.credentials = void 0;
+const call_credentials_1 = require("./call-credentials");
+Object.defineProperty(exports, "CallCredentials", { enumerable: true, get: function () { return call_credentials_1.CallCredentials; } });
+const channel_1 = require("./channel");
+Object.defineProperty(exports, "Channel", { enumerable: true, get: function () { return channel_1.ChannelImplementation; } });
+const compression_algorithms_1 = require("./compression-algorithms");
+Object.defineProperty(exports, "compressionAlgorithms", { enumerable: true, get: function () { return compression_algorithms_1.CompressionAlgorithms; } });
+const connectivity_state_1 = require("./connectivity-state");
+Object.defineProperty(exports, "connectivityState", { enumerable: true, get: function () { return connectivity_state_1.ConnectivityState; } });
+const channel_credentials_1 = require("./channel-credentials");
+Object.defineProperty(exports, "ChannelCredentials", { enumerable: true, get: function () { return channel_credentials_1.ChannelCredentials; } });
+const client_1 = require("./client");
+Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_1.Client; } });
+const constants_1 = require("./constants");
+Object.defineProperty(exports, "logVerbosity", { enumerable: true, get: function () { return constants_1.LogVerbosity; } });
+Object.defineProperty(exports, "status", { enumerable: true, get: function () { return constants_1.Status; } });
+Object.defineProperty(exports, "propagate", { enumerable: true, get: function () { return constants_1.Propagate; } });
+const logging = require("./logging");
+const make_client_1 = require("./make-client");
+Object.defineProperty(exports, "loadPackageDefinition", { enumerable: true, get: function () { return make_client_1.loadPackageDefinition; } });
+Object.defineProperty(exports, "makeClientConstructor", { enumerable: true, get: function () { return make_client_1.makeClientConstructor; } });
+Object.defineProperty(exports, "makeGenericClientConstructor", { enumerable: true, get: function () { return make_client_1.makeClientConstructor; } });
+const metadata_1 = require("./metadata");
+Object.defineProperty(exports, "Metadata", { enumerable: true, get: function () { return metadata_1.Metadata; } });
+const server_1 = require("./server");
+Object.defineProperty(exports, "Server", { enumerable: true, get: function () { return server_1.Server; } });
+const server_credentials_1 = require("./server-credentials");
+Object.defineProperty(exports, "ServerCredentials", { enumerable: true, get: function () { return server_credentials_1.ServerCredentials; } });
+const status_builder_1 = require("./status-builder");
+Object.defineProperty(exports, "StatusBuilder", { enumerable: true, get: function () { return status_builder_1.StatusBuilder; } });
+/**** Client Credentials ****/
+// Using assign only copies enumerable properties, which is what we want
+exports.credentials = {
+ /**
+ * Combine a ChannelCredentials with any number of CallCredentials into a
+ * single ChannelCredentials object.
+ * @param channelCredentials The ChannelCredentials object.
+ * @param callCredentials Any number of CallCredentials objects.
+ * @return The resulting ChannelCredentials object.
+ */
+ combineChannelCredentials: (channelCredentials, ...callCredentials) => {
+ return callCredentials.reduce((acc, other) => acc.compose(other), channelCredentials);
+ },
+ /**
+ * Combine any number of CallCredentials into a single CallCredentials
+ * object.
+ * @param first The first CallCredentials object.
+ * @param additional Any number of additional CallCredentials objects.
+ * @return The resulting CallCredentials object.
+ */
+ combineCallCredentials: (first, ...additional) => {
+ return additional.reduce((acc, other) => acc.compose(other), first);
+ },
+ // from channel-credentials.ts
+ createInsecure: channel_credentials_1.ChannelCredentials.createInsecure,
+ createSsl: channel_credentials_1.ChannelCredentials.createSsl,
+ createFromSecureContext: channel_credentials_1.ChannelCredentials.createFromSecureContext,
+ // from call-credentials.ts
+ createFromMetadataGenerator: call_credentials_1.CallCredentials.createFromMetadataGenerator,
+ createFromGoogleCredential: call_credentials_1.CallCredentials.createFromGoogleCredential,
+ createEmpty: call_credentials_1.CallCredentials.createEmpty,
+};
+/**
+ * Close a Client object.
+ * @param client The client to close.
+ */
+const closeClient = (client) => client.close();
+exports.closeClient = closeClient;
+const waitForClientReady = (client, deadline, callback) => client.waitForReady(deadline, callback);
+exports.waitForClientReady = waitForClientReady;
+/* eslint-enable @typescript-eslint/no-explicit-any */
+/**** Unimplemented function stubs ****/
+/* eslint-disable @typescript-eslint/no-explicit-any */
+const loadObject = (value, options) => {
+ throw new Error('Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead');
+};
+exports.loadObject = loadObject;
+const load = (filename, format, options) => {
+ throw new Error('Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead');
+};
+exports.load = load;
+const setLogger = (logger) => {
+ logging.setLogger(logger);
+};
+exports.setLogger = setLogger;
+const setLogVerbosity = (verbosity) => {
+ logging.setLoggerVerbosity(verbosity);
+};
+exports.setLogVerbosity = setLogVerbosity;
+const getClientChannel = (client) => {
+ return client_1.Client.prototype.getChannel.call(client);
+};
+exports.getClientChannel = getClientChannel;
+var client_interceptors_1 = require("./client-interceptors");
+Object.defineProperty(exports, "ListenerBuilder", { enumerable: true, get: function () { return client_interceptors_1.ListenerBuilder; } });
+Object.defineProperty(exports, "RequesterBuilder", { enumerable: true, get: function () { return client_interceptors_1.RequesterBuilder; } });
+Object.defineProperty(exports, "InterceptingCall", { enumerable: true, get: function () { return client_interceptors_1.InterceptingCall; } });
+Object.defineProperty(exports, "InterceptorConfigurationError", { enumerable: true, get: function () { return client_interceptors_1.InterceptorConfigurationError; } });
+var channelz_1 = require("./channelz");
+Object.defineProperty(exports, "getChannelzServiceDefinition", { enumerable: true, get: function () { return channelz_1.getChannelzServiceDefinition; } });
+Object.defineProperty(exports, "getChannelzHandlers", { enumerable: true, get: function () { return channelz_1.getChannelzHandlers; } });
+var admin_1 = require("./admin");
+Object.defineProperty(exports, "addAdminServicesToServer", { enumerable: true, get: function () { return admin_1.addAdminServicesToServer; } });
+const experimental = require("./experimental");
+exports.experimental = experimental;
+const resolver_dns = require("./resolver-dns");
+const resolver_uds = require("./resolver-uds");
+const resolver_ip = require("./resolver-ip");
+const load_balancer_pick_first = require("./load-balancer-pick-first");
+const load_balancer_round_robin = require("./load-balancer-round-robin");
+const load_balancer_outlier_detection = require("./load-balancer-outlier-detection");
+const channelz = require("./channelz");
+(() => {
+ resolver_dns.setup();
+ resolver_uds.setup();
+ resolver_ip.setup();
+ load_balancer_pick_first.setup();
+ load_balancer_round_robin.setup();
+ load_balancer_outlier_detection.setup();
+ channelz.setup();
+})();
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/index.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/index.js.map
new file mode 100644
index 0000000..439aec5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AASH,yDAAmE;AA4IjE,gGA5IO,kCAAe,OA4IP;AA1IjB,uCAA2D;AAoHhC,wFApHT,+BAAqB,OAoHL;AAnHlC,qEAAiE;AAqGtC,sGArGlB,8CAAqB,OAqGkB;AApGhD,6DAAyD;AAkGlC,kGAlGd,sCAAiB,OAkGc;AAjGxC,+DAA2D;AAsIzD,mGAtIO,wCAAkB,OAsIP;AArIpB,qCAOkB;AAkGhB,uFAvGA,eAAM,OAuGA;AAjGR,2CAA8D;AAsF5C,6FAtFT,wBAAY,OAsFS;AAClB,uFAvFW,kBAAM,OAuFX;AAEH,0FAzFgB,qBAAS,OAyFhB;AAxFxB,qCAAqC;AACrC,+CAOuB;AA0FrB,sGA/FA,mCAAqB,OA+FA;AACrB,sGA/FA,mCAAqB,OA+FA;AACI,6GAhGzB,mCAAqB,OAgGgC;AA3FvD,yCAAsE;AAuE7D,yFAvEA,mBAAQ,OAuEA;AAtEjB,qCAIkB;AA8KT,uFAjLP,eAAM,OAiLO;AA7Kf,6DAAsE;AA8K7D,kGA9Ka,sCAAiB,OA8Kb;AA7K1B,qDAAiD;AAoLxC,8FApLA,8BAAa,OAoLA;AApKtB,8BAA8B;AAE9B,wEAAwE;AAC3D,QAAA,WAAW,GAAG;IACzB;;;;;;OAMG;IACH,yBAAyB,EAAE,CACzB,kBAAsC,EACtC,GAAG,eAAkC,EACjB,EAAE;QACtB,OAAO,eAAe,CAAC,MAAM,CAC3B,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAClC,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,sBAAsB,EAAE,CACtB,KAAsB,EACtB,GAAG,UAA6B,EACf,EAAE;QACnB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED,8BAA8B;IAC9B,cAAc,EAAE,wCAAkB,CAAC,cAAc;IACjD,SAAS,EAAE,wCAAkB,CAAC,SAAS;IACvC,uBAAuB,EAAE,wCAAkB,CAAC,uBAAuB;IAEnE,2BAA2B;IAC3B,2BAA2B,EAAE,kCAAe,CAAC,2BAA2B;IACxE,0BAA0B,EAAE,kCAAe,CAAC,0BAA0B;IACtE,WAAW,EAAE,kCAAe,CAAC,WAAW;CACzC,CAAC;AAgCF;;;GAGG;AACI,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAAjD,QAAA,WAAW,eAAsC;AAEvD,MAAM,kBAAkB,GAAG,CAChC,MAAc,EACd,QAAuB,EACvB,QAAiC,EACjC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAJhC,QAAA,kBAAkB,sBAIc;AA4C7C,sDAAsD;AAEtD,wCAAwC;AAExC,uDAAuD;AAEhD,MAAM,UAAU,GAAG,CAAC,KAAU,EAAE,OAAY,EAAS,EAAE;IAC5D,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,UAAU,cAIrB;AAEK,MAAM,IAAI,GAAG,CAAC,QAAa,EAAE,MAAW,EAAE,OAAY,EAAS,EAAE;IACtE,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,IAAI,QAIf;AAEK,MAAM,SAAS,GAAG,CAAC,MAAwB,EAAQ,EAAE;IAC1D,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB;AAEK,MAAM,eAAe,GAAG,CAAC,SAAuB,EAAQ,EAAE;IAC/D,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAMK,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE;IACjD,OAAO,eAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAMF,6DAU+B;AAR7B,sHAAA,eAAe,OAAA;AACf,uHAAA,gBAAgB,OAAA;AAIhB,uHAAA,gBAAgB,OAAA;AAChB,oIAAA,6BAA6B,OAAA;AAY/B,uCAA+E;AAAtE,wHAAA,4BAA4B,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAE1D,iCAAmD;AAA1C,iHAAA,wBAAwB,OAAA;AAEjC,+CAA+C;AACtC,oCAAY;AAErB,+CAA+C;AAC/C,+CAA+C;AAC/C,6CAA6C;AAC7C,uEAAuE;AACvE,yEAAyE;AACzE,qFAAqF;AACrF,uCAAuC;AAGvC,CAAC,GAAG,EAAE;IACJ,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,wBAAwB,CAAC,KAAK,EAAE,CAAC;IACjC,yBAAyB,CAAC,KAAK,EAAE,CAAC;IAClC,+BAA+B,CAAC,KAAK,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC,EAAE,CAAC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.d.ts
new file mode 100644
index 0000000..7dee784
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.d.ts
@@ -0,0 +1,118 @@
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { Metadata } from './metadata';
+import { CallConfig } from './resolver';
+import { ServerSurfaceCall } from './server-call';
+import { ConnectivityState } from './connectivity-state';
+import { ChannelRef } from './channelz';
+import { LoadBalancingCall } from './load-balancing-call';
+import { CallCredentials } from './call-credentials';
+import { Call, StatusObject } from './call-interface';
+import { Deadline } from './deadline';
+import { ResolvingCall } from './resolving-call';
+import { RetryingCall } from './retrying-call';
+import { BaseSubchannelWrapper, SubchannelInterface } from './subchannel-interface';
+interface NoneConfigResult {
+ type: 'NONE';
+}
+interface SuccessConfigResult {
+ type: 'SUCCESS';
+ config: CallConfig;
+}
+interface ErrorConfigResult {
+ type: 'ERROR';
+ error: StatusObject;
+}
+type GetConfigResult = NoneConfigResult | SuccessConfigResult | ErrorConfigResult;
+declare class ChannelSubchannelWrapper extends BaseSubchannelWrapper implements SubchannelInterface {
+ private channel;
+ private refCount;
+ private subchannelStateListener;
+ constructor(childSubchannel: SubchannelInterface, channel: InternalChannel);
+ ref(): void;
+ unref(): void;
+}
+export declare class InternalChannel {
+ private readonly credentials;
+ private readonly options;
+ private readonly resolvingLoadBalancer;
+ private readonly subchannelPool;
+ private connectivityState;
+ private currentPicker;
+ /**
+ * Calls queued up to get a call config. Should only be populated before the
+ * first time the resolver returns a result, which includes the ConfigSelector.
+ */
+ private configSelectionQueue;
+ private pickQueue;
+ private connectivityStateWatchers;
+ private readonly defaultAuthority;
+ private readonly filterStackFactory;
+ private readonly target;
+ /**
+ * This timer does not do anything on its own. Its purpose is to hold the
+ * event loop open while there are any pending calls for the channel that
+ * have not yet been assigned to specific subchannels. In other words,
+ * the invariant is that callRefTimer is reffed if and only if pickQueue
+ * is non-empty.
+ */
+ private readonly callRefTimer;
+ private configSelector;
+ /**
+ * This is the error from the name resolver if it failed most recently. It
+ * is only used to end calls that start while there is no config selector
+ * and the name resolver is in backoff, so it should be nulled if
+ * configSelector becomes set or the channel state becomes anything other
+ * than TRANSIENT_FAILURE.
+ */
+ private currentResolutionError;
+ private readonly retryBufferTracker;
+ private keepaliveTime;
+ private readonly wrappedSubchannels;
+ private callCount;
+ private idleTimer;
+ private readonly idleTimeoutMs;
+ private lastActivityTimestamp;
+ private readonly channelzEnabled;
+ private readonly originalTarget;
+ private readonly channelzRef;
+ private readonly channelzTrace;
+ private readonly callTracker;
+ private readonly childrenTracker;
+ constructor(target: string, credentials: ChannelCredentials, options: ChannelOptions);
+ private getChannelzInfo;
+ private trace;
+ private callRefTimerRef;
+ private callRefTimerUnref;
+ private removeConnectivityStateWatcher;
+ private updateState;
+ throttleKeepalive(newKeepaliveTime: number): void;
+ removeWrappedSubchannel(wrappedSubchannel: ChannelSubchannelWrapper): void;
+ doPick(metadata: Metadata, extraPickInfo: {
+ [key: string]: string;
+ }): import("./picker").PickResult;
+ queueCallForPick(call: LoadBalancingCall): void;
+ getConfig(method: string, metadata: Metadata): GetConfigResult;
+ queueCallForConfig(call: ResolvingCall): void;
+ private enterIdle;
+ private startIdleTimeout;
+ private maybeStartIdleTimer;
+ private onCallStart;
+ private onCallEnd;
+ createLoadBalancingCall(callConfig: CallConfig, method: string, host: string, credentials: CallCredentials, deadline: Deadline): LoadBalancingCall;
+ createRetryingCall(callConfig: CallConfig, method: string, host: string, credentials: CallCredentials, deadline: Deadline): RetryingCall;
+ createInnerCall(callConfig: CallConfig, method: string, host: string, credentials: CallCredentials, deadline: Deadline): Call;
+ createResolvingCall(method: string, deadline: Deadline, host: string | null | undefined, parentCall: ServerSurfaceCall | null, propagateFlags: number | null | undefined): ResolvingCall;
+ close(): void;
+ getTarget(): string;
+ getConnectivityState(tryToConnect: boolean): ConnectivityState;
+ watchConnectivityState(currentState: ConnectivityState, deadline: Date | number, callback: (error?: Error) => void): void;
+ /**
+ * Get the channelz reference object for this channel. The returned value is
+ * garbage if channelz is disabled for this channel.
+ * @returns
+ */
+ getChannelzRef(): ChannelRef;
+ createCall(method: string, deadline: Deadline, host: string | null | undefined, parentCall: ServerSurfaceCall | null, propagateFlags: number | null | undefined): Call;
+}
+export {};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js
new file mode 100644
index 0000000..535aba2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js
@@ -0,0 +1,533 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.InternalChannel = void 0;
+const channel_credentials_1 = require("./channel-credentials");
+const resolving_load_balancer_1 = require("./resolving-load-balancer");
+const subchannel_pool_1 = require("./subchannel-pool");
+const picker_1 = require("./picker");
+const constants_1 = require("./constants");
+const filter_stack_1 = require("./filter-stack");
+const compression_filter_1 = require("./compression-filter");
+const resolver_1 = require("./resolver");
+const logging_1 = require("./logging");
+const http_proxy_1 = require("./http_proxy");
+const uri_parser_1 = require("./uri-parser");
+const connectivity_state_1 = require("./connectivity-state");
+const channelz_1 = require("./channelz");
+const load_balancing_call_1 = require("./load-balancing-call");
+const deadline_1 = require("./deadline");
+const resolving_call_1 = require("./resolving-call");
+const call_number_1 = require("./call-number");
+const control_plane_status_1 = require("./control-plane-status");
+const retrying_call_1 = require("./retrying-call");
+const subchannel_interface_1 = require("./subchannel-interface");
+/**
+ * See https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args
+ */
+const MAX_TIMEOUT_TIME = 2147483647;
+const MIN_IDLE_TIMEOUT_MS = 1000;
+// 30 minutes
+const DEFAULT_IDLE_TIMEOUT_MS = 30 * 60 * 1000;
+const RETRY_THROTTLER_MAP = new Map();
+const DEFAULT_RETRY_BUFFER_SIZE_BYTES = 1 << 24; // 16 MB
+const DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES = 1 << 20; // 1 MB
+class ChannelSubchannelWrapper extends subchannel_interface_1.BaseSubchannelWrapper {
+ constructor(childSubchannel, channel) {
+ super(childSubchannel);
+ this.channel = channel;
+ this.refCount = 0;
+ this.subchannelStateListener = (subchannel, previousState, newState, keepaliveTime) => {
+ channel.throttleKeepalive(keepaliveTime);
+ };
+ childSubchannel.addConnectivityStateListener(this.subchannelStateListener);
+ }
+ ref() {
+ this.child.ref();
+ this.refCount += 1;
+ }
+ unref() {
+ this.child.unref();
+ this.refCount -= 1;
+ if (this.refCount <= 0) {
+ this.child.removeConnectivityStateListener(this.subchannelStateListener);
+ this.channel.removeWrappedSubchannel(this);
+ }
+ }
+}
+class InternalChannel {
+ constructor(target, credentials, options) {
+ var _a, _b, _c, _d, _e, _f, _g, _h;
+ this.credentials = credentials;
+ this.options = options;
+ this.connectivityState = connectivity_state_1.ConnectivityState.IDLE;
+ this.currentPicker = new picker_1.UnavailablePicker();
+ /**
+ * Calls queued up to get a call config. Should only be populated before the
+ * first time the resolver returns a result, which includes the ConfigSelector.
+ */
+ this.configSelectionQueue = [];
+ this.pickQueue = [];
+ this.connectivityStateWatchers = [];
+ this.configSelector = null;
+ /**
+ * This is the error from the name resolver if it failed most recently. It
+ * is only used to end calls that start while there is no config selector
+ * and the name resolver is in backoff, so it should be nulled if
+ * configSelector becomes set or the channel state becomes anything other
+ * than TRANSIENT_FAILURE.
+ */
+ this.currentResolutionError = null;
+ this.wrappedSubchannels = new Set();
+ this.callCount = 0;
+ this.idleTimer = null;
+ // Channelz info
+ this.channelzEnabled = true;
+ this.callTracker = new channelz_1.ChannelzCallTracker();
+ this.childrenTracker = new channelz_1.ChannelzChildrenTracker();
+ if (typeof target !== 'string') {
+ throw new TypeError('Channel target must be a string');
+ }
+ if (!(credentials instanceof channel_credentials_1.ChannelCredentials)) {
+ throw new TypeError('Channel credentials must be a ChannelCredentials object');
+ }
+ if (options) {
+ if (typeof options !== 'object') {
+ throw new TypeError('Channel options must be an object');
+ }
+ }
+ this.originalTarget = target;
+ const originalTargetUri = (0, uri_parser_1.parseUri)(target);
+ if (originalTargetUri === null) {
+ throw new Error(`Could not parse target name "${target}"`);
+ }
+ /* This ensures that the target has a scheme that is registered with the
+ * resolver */
+ const defaultSchemeMapResult = (0, resolver_1.mapUriDefaultScheme)(originalTargetUri);
+ if (defaultSchemeMapResult === null) {
+ throw new Error(`Could not find a default scheme for target name "${target}"`);
+ }
+ this.callRefTimer = setInterval(() => { }, MAX_TIMEOUT_TIME);
+ (_b = (_a = this.callRefTimer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ if (this.options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+ this.channelzTrace = new channelz_1.ChannelzTrace();
+ this.channelzRef = (0, channelz_1.registerChannelzChannel)(target, () => this.getChannelzInfo(), this.channelzEnabled);
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Channel created');
+ }
+ if (this.options['grpc.default_authority']) {
+ this.defaultAuthority = this.options['grpc.default_authority'];
+ }
+ else {
+ this.defaultAuthority = (0, resolver_1.getDefaultAuthority)(defaultSchemeMapResult);
+ }
+ const proxyMapResult = (0, http_proxy_1.mapProxyName)(defaultSchemeMapResult, options);
+ this.target = proxyMapResult.target;
+ this.options = Object.assign({}, this.options, proxyMapResult.extraOptions);
+ /* The global boolean parameter to getSubchannelPool has the inverse meaning to what
+ * the grpc.use_local_subchannel_pool channel option means. */
+ this.subchannelPool = (0, subchannel_pool_1.getSubchannelPool)(((_c = options['grpc.use_local_subchannel_pool']) !== null && _c !== void 0 ? _c : 0) === 0);
+ this.retryBufferTracker = new retrying_call_1.MessageBufferTracker((_d = options['grpc.retry_buffer_size']) !== null && _d !== void 0 ? _d : DEFAULT_RETRY_BUFFER_SIZE_BYTES, (_e = options['grpc.per_rpc_retry_buffer_size']) !== null && _e !== void 0 ? _e : DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES);
+ this.keepaliveTime = (_f = options['grpc.keepalive_time_ms']) !== null && _f !== void 0 ? _f : -1;
+ this.idleTimeoutMs = Math.max((_g = options['grpc.client_idle_timeout_ms']) !== null && _g !== void 0 ? _g : DEFAULT_IDLE_TIMEOUT_MS, MIN_IDLE_TIMEOUT_MS);
+ const channelControlHelper = {
+ createSubchannel: (subchannelAddress, subchannelArgs) => {
+ const subchannel = this.subchannelPool.getOrCreateSubchannel(this.target, subchannelAddress, Object.assign({}, this.options, subchannelArgs), this.credentials);
+ subchannel.throttleKeepalive(this.keepaliveTime);
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Created subchannel or used existing subchannel', subchannel.getChannelzRef());
+ }
+ const wrappedSubchannel = new ChannelSubchannelWrapper(subchannel, this);
+ this.wrappedSubchannels.add(wrappedSubchannel);
+ return wrappedSubchannel;
+ },
+ updateState: (connectivityState, picker) => {
+ this.currentPicker = picker;
+ const queueCopy = this.pickQueue.slice();
+ this.pickQueue = [];
+ if (queueCopy.length > 0) {
+ this.callRefTimerUnref();
+ }
+ for (const call of queueCopy) {
+ call.doPick();
+ }
+ this.updateState(connectivityState);
+ },
+ requestReresolution: () => {
+ // This should never be called.
+ throw new Error('Resolving load balancer should never call requestReresolution');
+ },
+ addChannelzChild: (child) => {
+ if (this.channelzEnabled) {
+ this.childrenTracker.refChild(child);
+ }
+ },
+ removeChannelzChild: (child) => {
+ if (this.channelzEnabled) {
+ this.childrenTracker.unrefChild(child);
+ }
+ },
+ };
+ this.resolvingLoadBalancer = new resolving_load_balancer_1.ResolvingLoadBalancer(this.target, channelControlHelper, options, (serviceConfig, configSelector) => {
+ if (serviceConfig.retryThrottling) {
+ RETRY_THROTTLER_MAP.set(this.getTarget(), new retrying_call_1.RetryThrottler(serviceConfig.retryThrottling.maxTokens, serviceConfig.retryThrottling.tokenRatio, RETRY_THROTTLER_MAP.get(this.getTarget())));
+ }
+ else {
+ RETRY_THROTTLER_MAP.delete(this.getTarget());
+ }
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Address resolution succeeded');
+ }
+ this.configSelector = configSelector;
+ this.currentResolutionError = null;
+ /* We process the queue asynchronously to ensure that the corresponding
+ * load balancer update has completed. */
+ process.nextTick(() => {
+ const localQueue = this.configSelectionQueue;
+ this.configSelectionQueue = [];
+ if (localQueue.length > 0) {
+ this.callRefTimerUnref();
+ }
+ for (const call of localQueue) {
+ call.getConfig();
+ }
+ });
+ }, status => {
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_WARNING', 'Address resolution failed with code ' +
+ status.code +
+ ' and details "' +
+ status.details +
+ '"');
+ }
+ if (this.configSelectionQueue.length > 0) {
+ this.trace('Name resolution failed with calls queued for config selection');
+ }
+ if (this.configSelector === null) {
+ this.currentResolutionError = Object.assign(Object.assign({}, (0, control_plane_status_1.restrictControlPlaneStatusCode)(status.code, status.details)), { metadata: status.metadata });
+ }
+ const localQueue = this.configSelectionQueue;
+ this.configSelectionQueue = [];
+ if (localQueue.length > 0) {
+ this.callRefTimerUnref();
+ }
+ for (const call of localQueue) {
+ call.reportResolverError(status);
+ }
+ });
+ this.filterStackFactory = new filter_stack_1.FilterStackFactory([
+ new compression_filter_1.CompressionFilterFactory(this, this.options),
+ ]);
+ this.trace('Channel constructed with options ' +
+ JSON.stringify(options, undefined, 2));
+ const error = new Error();
+ (0, logging_1.trace)(constants_1.LogVerbosity.DEBUG, 'channel_stacktrace', '(' +
+ this.channelzRef.id +
+ ') ' +
+ 'Channel constructed \n' +
+ ((_h = error.stack) === null || _h === void 0 ? void 0 : _h.substring(error.stack.indexOf('\n') + 1)));
+ this.lastActivityTimestamp = new Date();
+ }
+ getChannelzInfo() {
+ return {
+ target: this.originalTarget,
+ state: this.connectivityState,
+ trace: this.channelzTrace,
+ callTracker: this.callTracker,
+ children: this.childrenTracker.getChildLists(),
+ };
+ }
+ trace(text, verbosityOverride) {
+ (0, logging_1.trace)(verbosityOverride !== null && verbosityOverride !== void 0 ? verbosityOverride : constants_1.LogVerbosity.DEBUG, 'channel', '(' + this.channelzRef.id + ') ' + (0, uri_parser_1.uriToString)(this.target) + ' ' + text);
+ }
+ callRefTimerRef() {
+ var _a, _b, _c, _d;
+ // If the hasRef function does not exist, always run the code
+ if (!((_b = (_a = this.callRefTimer).hasRef) === null || _b === void 0 ? void 0 : _b.call(_a))) {
+ this.trace('callRefTimer.ref | configSelectionQueue.length=' +
+ this.configSelectionQueue.length +
+ ' pickQueue.length=' +
+ this.pickQueue.length);
+ (_d = (_c = this.callRefTimer).ref) === null || _d === void 0 ? void 0 : _d.call(_c);
+ }
+ }
+ callRefTimerUnref() {
+ var _a, _b;
+ // If the hasRef function does not exist, always run the code
+ if (!this.callRefTimer.hasRef || this.callRefTimer.hasRef()) {
+ this.trace('callRefTimer.unref | configSelectionQueue.length=' +
+ this.configSelectionQueue.length +
+ ' pickQueue.length=' +
+ this.pickQueue.length);
+ (_b = (_a = this.callRefTimer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ }
+ removeConnectivityStateWatcher(watcherObject) {
+ const watcherIndex = this.connectivityStateWatchers.findIndex(value => value === watcherObject);
+ if (watcherIndex >= 0) {
+ this.connectivityStateWatchers.splice(watcherIndex, 1);
+ }
+ }
+ updateState(newState) {
+ (0, logging_1.trace)(constants_1.LogVerbosity.DEBUG, 'connectivity_state', '(' +
+ this.channelzRef.id +
+ ') ' +
+ (0, uri_parser_1.uriToString)(this.target) +
+ ' ' +
+ connectivity_state_1.ConnectivityState[this.connectivityState] +
+ ' -> ' +
+ connectivity_state_1.ConnectivityState[newState]);
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Connectivity state change to ' + connectivity_state_1.ConnectivityState[newState]);
+ }
+ this.connectivityState = newState;
+ const watchersCopy = this.connectivityStateWatchers.slice();
+ for (const watcherObject of watchersCopy) {
+ if (newState !== watcherObject.currentState) {
+ if (watcherObject.timer) {
+ clearTimeout(watcherObject.timer);
+ }
+ this.removeConnectivityStateWatcher(watcherObject);
+ watcherObject.callback();
+ }
+ }
+ if (newState !== connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) {
+ this.currentResolutionError = null;
+ }
+ }
+ throttleKeepalive(newKeepaliveTime) {
+ if (newKeepaliveTime > this.keepaliveTime) {
+ this.keepaliveTime = newKeepaliveTime;
+ for (const wrappedSubchannel of this.wrappedSubchannels) {
+ wrappedSubchannel.throttleKeepalive(newKeepaliveTime);
+ }
+ }
+ }
+ removeWrappedSubchannel(wrappedSubchannel) {
+ this.wrappedSubchannels.delete(wrappedSubchannel);
+ }
+ doPick(metadata, extraPickInfo) {
+ return this.currentPicker.pick({
+ metadata: metadata,
+ extraPickInfo: extraPickInfo,
+ });
+ }
+ queueCallForPick(call) {
+ this.pickQueue.push(call);
+ this.callRefTimerRef();
+ }
+ getConfig(method, metadata) {
+ this.resolvingLoadBalancer.exitIdle();
+ if (this.configSelector) {
+ return {
+ type: 'SUCCESS',
+ config: this.configSelector(method, metadata),
+ };
+ }
+ else {
+ if (this.currentResolutionError) {
+ return {
+ type: 'ERROR',
+ error: this.currentResolutionError,
+ };
+ }
+ else {
+ return {
+ type: 'NONE',
+ };
+ }
+ }
+ }
+ queueCallForConfig(call) {
+ this.configSelectionQueue.push(call);
+ this.callRefTimerRef();
+ }
+ enterIdle() {
+ this.resolvingLoadBalancer.destroy();
+ this.updateState(connectivity_state_1.ConnectivityState.IDLE);
+ this.currentPicker = new picker_1.QueuePicker(this.resolvingLoadBalancer);
+ if (this.idleTimer) {
+ clearTimeout(this.idleTimer);
+ this.idleTimer = null;
+ }
+ }
+ startIdleTimeout(timeoutMs) {
+ var _a, _b;
+ this.idleTimer = setTimeout(() => {
+ if (this.callCount > 0) {
+ /* If there is currently a call, the channel will not go idle for a
+ * period of at least idleTimeoutMs, so check again after that time.
+ */
+ this.startIdleTimeout(this.idleTimeoutMs);
+ return;
+ }
+ const now = new Date();
+ const timeSinceLastActivity = now.valueOf() - this.lastActivityTimestamp.valueOf();
+ if (timeSinceLastActivity >= this.idleTimeoutMs) {
+ this.trace('Idle timer triggered after ' +
+ this.idleTimeoutMs +
+ 'ms of inactivity');
+ this.enterIdle();
+ }
+ else {
+ /* Whenever the timer fires with the latest activity being too recent,
+ * set the timer again for the time when the time since the last
+ * activity is equal to the timeout. This should result in the timer
+ * firing no more than once every idleTimeoutMs/2 on average. */
+ this.startIdleTimeout(this.idleTimeoutMs - timeSinceLastActivity);
+ }
+ }, timeoutMs);
+ (_b = (_a = this.idleTimer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ maybeStartIdleTimer() {
+ if (this.connectivityState !== connectivity_state_1.ConnectivityState.SHUTDOWN && !this.idleTimer) {
+ this.startIdleTimeout(this.idleTimeoutMs);
+ }
+ }
+ onCallStart() {
+ if (this.channelzEnabled) {
+ this.callTracker.addCallStarted();
+ }
+ this.callCount += 1;
+ }
+ onCallEnd(status) {
+ if (this.channelzEnabled) {
+ if (status.code === constants_1.Status.OK) {
+ this.callTracker.addCallSucceeded();
+ }
+ else {
+ this.callTracker.addCallFailed();
+ }
+ }
+ this.callCount -= 1;
+ this.lastActivityTimestamp = new Date();
+ this.maybeStartIdleTimer();
+ }
+ createLoadBalancingCall(callConfig, method, host, credentials, deadline) {
+ const callNumber = (0, call_number_1.getNextCallNumber)();
+ this.trace('createLoadBalancingCall [' + callNumber + '] method="' + method + '"');
+ return new load_balancing_call_1.LoadBalancingCall(this, callConfig, method, host, credentials, deadline, callNumber);
+ }
+ createRetryingCall(callConfig, method, host, credentials, deadline) {
+ const callNumber = (0, call_number_1.getNextCallNumber)();
+ this.trace('createRetryingCall [' + callNumber + '] method="' + method + '"');
+ return new retrying_call_1.RetryingCall(this, callConfig, method, host, credentials, deadline, callNumber, this.retryBufferTracker, RETRY_THROTTLER_MAP.get(this.getTarget()));
+ }
+ createInnerCall(callConfig, method, host, credentials, deadline) {
+ // Create a RetryingCall if retries are enabled
+ if (this.options['grpc.enable_retries'] === 0) {
+ return this.createLoadBalancingCall(callConfig, method, host, credentials, deadline);
+ }
+ else {
+ return this.createRetryingCall(callConfig, method, host, credentials, deadline);
+ }
+ }
+ createResolvingCall(method, deadline, host, parentCall, propagateFlags) {
+ const callNumber = (0, call_number_1.getNextCallNumber)();
+ this.trace('createResolvingCall [' +
+ callNumber +
+ '] method="' +
+ method +
+ '", deadline=' +
+ (0, deadline_1.deadlineToString)(deadline));
+ const finalOptions = {
+ deadline: deadline,
+ flags: propagateFlags !== null && propagateFlags !== void 0 ? propagateFlags : constants_1.Propagate.DEFAULTS,
+ host: host !== null && host !== void 0 ? host : this.defaultAuthority,
+ parentCall: parentCall,
+ };
+ const call = new resolving_call_1.ResolvingCall(this, method, finalOptions, this.filterStackFactory.clone(), this.credentials._getCallCredentials(), callNumber);
+ this.onCallStart();
+ call.addStatusWatcher(status => {
+ this.onCallEnd(status);
+ });
+ return call;
+ }
+ close() {
+ this.resolvingLoadBalancer.destroy();
+ this.updateState(connectivity_state_1.ConnectivityState.SHUTDOWN);
+ clearInterval(this.callRefTimer);
+ if (this.idleTimer) {
+ clearTimeout(this.idleTimer);
+ }
+ if (this.channelzEnabled) {
+ (0, channelz_1.unregisterChannelzRef)(this.channelzRef);
+ }
+ this.subchannelPool.unrefUnusedSubchannels();
+ }
+ getTarget() {
+ return (0, uri_parser_1.uriToString)(this.target);
+ }
+ getConnectivityState(tryToConnect) {
+ const connectivityState = this.connectivityState;
+ if (tryToConnect) {
+ this.resolvingLoadBalancer.exitIdle();
+ this.lastActivityTimestamp = new Date();
+ this.maybeStartIdleTimer();
+ }
+ return connectivityState;
+ }
+ watchConnectivityState(currentState, deadline, callback) {
+ if (this.connectivityState === connectivity_state_1.ConnectivityState.SHUTDOWN) {
+ throw new Error('Channel has been shut down');
+ }
+ let timer = null;
+ if (deadline !== Infinity) {
+ const deadlineDate = deadline instanceof Date ? deadline : new Date(deadline);
+ const now = new Date();
+ if (deadline === -Infinity || deadlineDate <= now) {
+ process.nextTick(callback, new Error('Deadline passed without connectivity state change'));
+ return;
+ }
+ timer = setTimeout(() => {
+ this.removeConnectivityStateWatcher(watcherObject);
+ callback(new Error('Deadline passed without connectivity state change'));
+ }, deadlineDate.getTime() - now.getTime());
+ }
+ const watcherObject = {
+ currentState,
+ callback,
+ timer,
+ };
+ this.connectivityStateWatchers.push(watcherObject);
+ }
+ /**
+ * Get the channelz reference object for this channel. The returned value is
+ * garbage if channelz is disabled for this channel.
+ * @returns
+ */
+ getChannelzRef() {
+ return this.channelzRef;
+ }
+ createCall(method, deadline, host, parentCall, propagateFlags) {
+ if (typeof method !== 'string') {
+ throw new TypeError('Channel#createCall: method must be a string');
+ }
+ if (!(typeof deadline === 'number' || deadline instanceof Date)) {
+ throw new TypeError('Channel#createCall: deadline must be a number or Date');
+ }
+ if (this.connectivityState === connectivity_state_1.ConnectivityState.SHUTDOWN) {
+ throw new Error('Channel has been shut down');
+ }
+ return this.createResolvingCall(method, deadline, host, parentCall, propagateFlags);
+ }
+}
+exports.InternalChannel = InternalChannel;
+//# sourceMappingURL=internal-channel.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js.map
new file mode 100644
index 0000000..6e00714
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/internal-channel.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"internal-channel.js","sourceRoot":"","sources":["../../src/internal-channel.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts
new file mode 100644
index 0000000..c142b54
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts
@@ -0,0 +1,24 @@
+import { LoadBalancer, ChannelControlHelper, LoadBalancingConfig } from './load-balancer';
+import { SubchannelAddress } from './subchannel-address';
+export declare class ChildLoadBalancerHandler implements LoadBalancer {
+ private readonly channelControlHelper;
+ private currentChild;
+ private pendingChild;
+ private latestConfig;
+ private ChildPolicyHelper;
+ constructor(channelControlHelper: ChannelControlHelper);
+ protected configUpdateRequiresNewPolicyInstance(oldConfig: LoadBalancingConfig, newConfig: LoadBalancingConfig): boolean;
+ /**
+ * Prerequisites: lbConfig !== null and lbConfig.name is registered
+ * @param addressList
+ * @param lbConfig
+ * @param attributes
+ */
+ updateAddressList(addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig, attributes: {
+ [key: string]: unknown;
+ }): void;
+ exitIdle(): void;
+ resetBackoff(): void;
+ destroy(): void;
+ getTypeName(): string;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js
new file mode 100644
index 0000000..181450b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js
@@ -0,0 +1,151 @@
+"use strict";
+/*
+ * Copyright 2020 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ChildLoadBalancerHandler = void 0;
+const load_balancer_1 = require("./load-balancer");
+const connectivity_state_1 = require("./connectivity-state");
+const TYPE_NAME = 'child_load_balancer_helper';
+class ChildLoadBalancerHandler {
+ constructor(channelControlHelper) {
+ this.channelControlHelper = channelControlHelper;
+ this.currentChild = null;
+ this.pendingChild = null;
+ this.latestConfig = null;
+ this.ChildPolicyHelper = class {
+ constructor(parent) {
+ this.parent = parent;
+ this.child = null;
+ }
+ createSubchannel(subchannelAddress, subchannelArgs) {
+ return this.parent.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs);
+ }
+ updateState(connectivityState, picker) {
+ var _a;
+ if (this.calledByPendingChild()) {
+ if (connectivityState === connectivity_state_1.ConnectivityState.CONNECTING) {
+ return;
+ }
+ (_a = this.parent.currentChild) === null || _a === void 0 ? void 0 : _a.destroy();
+ this.parent.currentChild = this.parent.pendingChild;
+ this.parent.pendingChild = null;
+ }
+ else if (!this.calledByCurrentChild()) {
+ return;
+ }
+ this.parent.channelControlHelper.updateState(connectivityState, picker);
+ }
+ requestReresolution() {
+ var _a;
+ const latestChild = (_a = this.parent.pendingChild) !== null && _a !== void 0 ? _a : this.parent.currentChild;
+ if (this.child === latestChild) {
+ this.parent.channelControlHelper.requestReresolution();
+ }
+ }
+ setChild(newChild) {
+ this.child = newChild;
+ }
+ addChannelzChild(child) {
+ this.parent.channelControlHelper.addChannelzChild(child);
+ }
+ removeChannelzChild(child) {
+ this.parent.channelControlHelper.removeChannelzChild(child);
+ }
+ calledByPendingChild() {
+ return this.child === this.parent.pendingChild;
+ }
+ calledByCurrentChild() {
+ return this.child === this.parent.currentChild;
+ }
+ };
+ }
+ configUpdateRequiresNewPolicyInstance(oldConfig, newConfig) {
+ return oldConfig.getLoadBalancerName() !== newConfig.getLoadBalancerName();
+ }
+ /**
+ * Prerequisites: lbConfig !== null and lbConfig.name is registered
+ * @param addressList
+ * @param lbConfig
+ * @param attributes
+ */
+ updateAddressList(addressList, lbConfig, attributes) {
+ let childToUpdate;
+ if (this.currentChild === null ||
+ this.latestConfig === null ||
+ this.configUpdateRequiresNewPolicyInstance(this.latestConfig, lbConfig)) {
+ const newHelper = new this.ChildPolicyHelper(this);
+ const newChild = (0, load_balancer_1.createLoadBalancer)(lbConfig, newHelper);
+ newHelper.setChild(newChild);
+ if (this.currentChild === null) {
+ this.currentChild = newChild;
+ childToUpdate = this.currentChild;
+ }
+ else {
+ if (this.pendingChild) {
+ this.pendingChild.destroy();
+ }
+ this.pendingChild = newChild;
+ childToUpdate = this.pendingChild;
+ }
+ }
+ else {
+ if (this.pendingChild === null) {
+ childToUpdate = this.currentChild;
+ }
+ else {
+ childToUpdate = this.pendingChild;
+ }
+ }
+ this.latestConfig = lbConfig;
+ childToUpdate.updateAddressList(addressList, lbConfig, attributes);
+ }
+ exitIdle() {
+ if (this.currentChild) {
+ this.currentChild.exitIdle();
+ if (this.pendingChild) {
+ this.pendingChild.exitIdle();
+ }
+ }
+ }
+ resetBackoff() {
+ if (this.currentChild) {
+ this.currentChild.resetBackoff();
+ if (this.pendingChild) {
+ this.pendingChild.resetBackoff();
+ }
+ }
+ }
+ destroy() {
+ /* Note: state updates are only propagated from the child balancer if that
+ * object is equal to this.currentChild or this.pendingChild. Since this
+ * function sets both of those to null, no further state updates will
+ * occur after this function returns. */
+ if (this.currentChild) {
+ this.currentChild.destroy();
+ this.currentChild = null;
+ }
+ if (this.pendingChild) {
+ this.pendingChild.destroy();
+ this.pendingChild = null;
+ }
+ }
+ getTypeName() {
+ return TYPE_NAME;
+ }
+}
+exports.ChildLoadBalancerHandler = ChildLoadBalancerHandler;
+//# sourceMappingURL=load-balancer-child-handler.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js.map
new file mode 100644
index 0000000..35d319b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"load-balancer-child-handler.js","sourceRoot":"","sources":["../../src/load-balancer-child-handler.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts
new file mode 100644
index 0000000..f5f8676
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts
@@ -0,0 +1,61 @@
+import { ChannelControlHelper } from './experimental';
+import { LoadBalancer, LoadBalancingConfig } from './load-balancer';
+import { SubchannelAddress } from './subchannel-address';
+export interface SuccessRateEjectionConfig {
+ readonly stdev_factor: number;
+ readonly enforcement_percentage: number;
+ readonly minimum_hosts: number;
+ readonly request_volume: number;
+}
+export interface FailurePercentageEjectionConfig {
+ readonly threshold: number;
+ readonly enforcement_percentage: number;
+ readonly minimum_hosts: number;
+ readonly request_volume: number;
+}
+export declare class OutlierDetectionLoadBalancingConfig implements LoadBalancingConfig {
+ private readonly childPolicy;
+ private readonly intervalMs;
+ private readonly baseEjectionTimeMs;
+ private readonly maxEjectionTimeMs;
+ private readonly maxEjectionPercent;
+ private readonly successRateEjection;
+ private readonly failurePercentageEjection;
+ constructor(intervalMs: number | null, baseEjectionTimeMs: number | null, maxEjectionTimeMs: number | null, maxEjectionPercent: number | null, successRateEjection: Partial<SuccessRateEjectionConfig> | null, failurePercentageEjection: Partial<FailurePercentageEjectionConfig> | null, childPolicy: LoadBalancingConfig[]);
+ getLoadBalancerName(): string;
+ toJsonObject(): object;
+ getIntervalMs(): number;
+ getBaseEjectionTimeMs(): number;
+ getMaxEjectionTimeMs(): number;
+ getMaxEjectionPercent(): number;
+ getSuccessRateEjectionConfig(): SuccessRateEjectionConfig | null;
+ getFailurePercentageEjectionConfig(): FailurePercentageEjectionConfig | null;
+ getChildPolicy(): LoadBalancingConfig[];
+ copyWithChildPolicy(childPolicy: LoadBalancingConfig[]): OutlierDetectionLoadBalancingConfig;
+ static createFromJson(obj: any): OutlierDetectionLoadBalancingConfig;
+}
+export declare class OutlierDetectionLoadBalancer implements LoadBalancer {
+ private childBalancer;
+ private addressMap;
+ private latestConfig;
+ private ejectionTimer;
+ private timerStartTime;
+ constructor(channelControlHelper: ChannelControlHelper);
+ private isCountingEnabled;
+ private getCurrentEjectionPercent;
+ private runSuccessRateCheck;
+ private runFailurePercentageCheck;
+ private eject;
+ private uneject;
+ private switchAllBuckets;
+ private startTimer;
+ private runChecks;
+ updateAddressList(addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig, attributes: {
+ [key: string]: unknown;
+ }): void;
+ exitIdle(): void;
+ resetBackoff(): void;
+ destroy(): void;
+ getTypeName(): string;
+}
+export declare function setup(): void;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js
new file mode 100644
index 0000000..82ff6e2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js
@@ -0,0 +1,608 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setup = exports.OutlierDetectionLoadBalancer = exports.OutlierDetectionLoadBalancingConfig = void 0;
+const connectivity_state_1 = require("./connectivity-state");
+const constants_1 = require("./constants");
+const duration_1 = require("./duration");
+const experimental_1 = require("./experimental");
+const load_balancer_1 = require("./load-balancer");
+const load_balancer_child_handler_1 = require("./load-balancer-child-handler");
+const picker_1 = require("./picker");
+const subchannel_address_1 = require("./subchannel-address");
+const subchannel_interface_1 = require("./subchannel-interface");
+const logging = require("./logging");
+const TRACER_NAME = 'outlier_detection';
+function trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+const TYPE_NAME = 'outlier_detection';
+const OUTLIER_DETECTION_ENABLED = ((_a = process.env.GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION) !== null && _a !== void 0 ? _a : 'true') === 'true';
+const defaultSuccessRateEjectionConfig = {
+ stdev_factor: 1900,
+ enforcement_percentage: 100,
+ minimum_hosts: 5,
+ request_volume: 100,
+};
+const defaultFailurePercentageEjectionConfig = {
+ threshold: 85,
+ enforcement_percentage: 100,
+ minimum_hosts: 5,
+ request_volume: 50,
+};
+function validateFieldType(obj, fieldName, expectedType, objectName) {
+ if (fieldName in obj && typeof obj[fieldName] !== expectedType) {
+ const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;
+ throw new Error(`outlier detection config ${fullFieldName} parse error: expected ${expectedType}, got ${typeof obj[fieldName]}`);
+ }
+}
+function validatePositiveDuration(obj, fieldName, objectName) {
+ const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;
+ if (fieldName in obj) {
+ if (!(0, duration_1.isDuration)(obj[fieldName])) {
+ throw new Error(`outlier detection config ${fullFieldName} parse error: expected Duration, got ${typeof obj[fieldName]}`);
+ }
+ if (!(obj[fieldName].seconds >= 0 &&
+ obj[fieldName].seconds <= 315576000000 &&
+ obj[fieldName].nanos >= 0 &&
+ obj[fieldName].nanos <= 999999999)) {
+ throw new Error(`outlier detection config ${fullFieldName} parse error: values out of range for non-negative Duaration`);
+ }
+ }
+}
+function validatePercentage(obj, fieldName, objectName) {
+ const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;
+ validateFieldType(obj, fieldName, 'number', objectName);
+ if (fieldName in obj && !(obj[fieldName] >= 0 && obj[fieldName] <= 100)) {
+ throw new Error(`outlier detection config ${fullFieldName} parse error: value out of range for percentage (0-100)`);
+ }
+}
+class OutlierDetectionLoadBalancingConfig {
+ constructor(intervalMs, baseEjectionTimeMs, maxEjectionTimeMs, maxEjectionPercent, successRateEjection, failurePercentageEjection, childPolicy) {
+ this.childPolicy = childPolicy;
+ if (childPolicy.length > 0 &&
+ childPolicy[0].getLoadBalancerName() === 'pick_first') {
+ throw new Error('outlier_detection LB policy cannot have a pick_first child policy');
+ }
+ this.intervalMs = intervalMs !== null && intervalMs !== void 0 ? intervalMs : 10000;
+ this.baseEjectionTimeMs = baseEjectionTimeMs !== null && baseEjectionTimeMs !== void 0 ? baseEjectionTimeMs : 30000;
+ this.maxEjectionTimeMs = maxEjectionTimeMs !== null && maxEjectionTimeMs !== void 0 ? maxEjectionTimeMs : 300000;
+ this.maxEjectionPercent = maxEjectionPercent !== null && maxEjectionPercent !== void 0 ? maxEjectionPercent : 10;
+ this.successRateEjection = successRateEjection
+ ? Object.assign(Object.assign({}, defaultSuccessRateEjectionConfig), successRateEjection) : null;
+ this.failurePercentageEjection = failurePercentageEjection
+ ? Object.assign(Object.assign({}, defaultFailurePercentageEjectionConfig), failurePercentageEjection) : null;
+ }
+ getLoadBalancerName() {
+ return TYPE_NAME;
+ }
+ toJsonObject() {
+ return {
+ interval: (0, duration_1.msToDuration)(this.intervalMs),
+ base_ejection_time: (0, duration_1.msToDuration)(this.baseEjectionTimeMs),
+ max_ejection_time: (0, duration_1.msToDuration)(this.maxEjectionTimeMs),
+ max_ejection_percent: this.maxEjectionPercent,
+ success_rate_ejection: this.successRateEjection,
+ failure_percentage_ejection: this.failurePercentageEjection,
+ child_policy: this.childPolicy.map(policy => policy.toJsonObject()),
+ };
+ }
+ getIntervalMs() {
+ return this.intervalMs;
+ }
+ getBaseEjectionTimeMs() {
+ return this.baseEjectionTimeMs;
+ }
+ getMaxEjectionTimeMs() {
+ return this.maxEjectionTimeMs;
+ }
+ getMaxEjectionPercent() {
+ return this.maxEjectionPercent;
+ }
+ getSuccessRateEjectionConfig() {
+ return this.successRateEjection;
+ }
+ getFailurePercentageEjectionConfig() {
+ return this.failurePercentageEjection;
+ }
+ getChildPolicy() {
+ return this.childPolicy;
+ }
+ copyWithChildPolicy(childPolicy) {
+ return new OutlierDetectionLoadBalancingConfig(this.intervalMs, this.baseEjectionTimeMs, this.maxEjectionTimeMs, this.maxEjectionPercent, this.successRateEjection, this.failurePercentageEjection, childPolicy);
+ }
+ static createFromJson(obj) {
+ var _a;
+ validatePositiveDuration(obj, 'interval');
+ validatePositiveDuration(obj, 'base_ejection_time');
+ validatePositiveDuration(obj, 'max_ejection_time');
+ validatePercentage(obj, 'max_ejection_percent');
+ if ('success_rate_ejection' in obj) {
+ if (typeof obj.success_rate_ejection !== 'object') {
+ throw new Error('outlier detection config success_rate_ejection must be an object');
+ }
+ validateFieldType(obj.success_rate_ejection, 'stdev_factor', 'number', 'success_rate_ejection');
+ validatePercentage(obj.success_rate_ejection, 'enforcement_percentage', 'success_rate_ejection');
+ validateFieldType(obj.success_rate_ejection, 'minimum_hosts', 'number', 'success_rate_ejection');
+ validateFieldType(obj.success_rate_ejection, 'request_volume', 'number', 'success_rate_ejection');
+ }
+ if ('failure_percentage_ejection' in obj) {
+ if (typeof obj.failure_percentage_ejection !== 'object') {
+ throw new Error('outlier detection config failure_percentage_ejection must be an object');
+ }
+ validatePercentage(obj.failure_percentage_ejection, 'threshold', 'failure_percentage_ejection');
+ validatePercentage(obj.failure_percentage_ejection, 'enforcement_percentage', 'failure_percentage_ejection');
+ validateFieldType(obj.failure_percentage_ejection, 'minimum_hosts', 'number', 'failure_percentage_ejection');
+ validateFieldType(obj.failure_percentage_ejection, 'request_volume', 'number', 'failure_percentage_ejection');
+ }
+ return new OutlierDetectionLoadBalancingConfig(obj.interval ? (0, duration_1.durationToMs)(obj.interval) : null, obj.base_ejection_time ? (0, duration_1.durationToMs)(obj.base_ejection_time) : null, obj.max_ejection_time ? (0, duration_1.durationToMs)(obj.max_ejection_time) : null, (_a = obj.max_ejection_percent) !== null && _a !== void 0 ? _a : null, obj.success_rate_ejection, obj.failure_percentage_ejection, obj.child_policy.map(load_balancer_1.validateLoadBalancingConfig));
+ }
+}
+exports.OutlierDetectionLoadBalancingConfig = OutlierDetectionLoadBalancingConfig;
+class OutlierDetectionSubchannelWrapper extends subchannel_interface_1.BaseSubchannelWrapper {
+ constructor(childSubchannel, mapEntry) {
+ super(childSubchannel);
+ this.mapEntry = mapEntry;
+ this.stateListeners = [];
+ this.ejected = false;
+ this.refCount = 0;
+ this.childSubchannelState = childSubchannel.getConnectivityState();
+ childSubchannel.addConnectivityStateListener((subchannel, previousState, newState, keepaliveTime) => {
+ this.childSubchannelState = newState;
+ if (!this.ejected) {
+ for (const listener of this.stateListeners) {
+ listener(this, previousState, newState, keepaliveTime);
+ }
+ }
+ });
+ }
+ getConnectivityState() {
+ if (this.ejected) {
+ return connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE;
+ }
+ else {
+ return this.childSubchannelState;
+ }
+ }
+ /**
+ * Add a listener function to be called whenever the wrapper's
+ * connectivity state changes.
+ * @param listener
+ */
+ addConnectivityStateListener(listener) {
+ this.stateListeners.push(listener);
+ }
+ /**
+ * Remove a listener previously added with `addConnectivityStateListener`
+ * @param listener A reference to a function previously passed to
+ * `addConnectivityStateListener`
+ */
+ removeConnectivityStateListener(listener) {
+ const listenerIndex = this.stateListeners.indexOf(listener);
+ if (listenerIndex > -1) {
+ this.stateListeners.splice(listenerIndex, 1);
+ }
+ }
+ ref() {
+ this.child.ref();
+ this.refCount += 1;
+ }
+ unref() {
+ this.child.unref();
+ this.refCount -= 1;
+ if (this.refCount <= 0) {
+ if (this.mapEntry) {
+ const index = this.mapEntry.subchannelWrappers.indexOf(this);
+ if (index >= 0) {
+ this.mapEntry.subchannelWrappers.splice(index, 1);
+ }
+ }
+ }
+ }
+ eject() {
+ this.ejected = true;
+ for (const listener of this.stateListeners) {
+ listener(this, this.childSubchannelState, connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, -1);
+ }
+ }
+ uneject() {
+ this.ejected = false;
+ for (const listener of this.stateListeners) {
+ listener(this, connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, this.childSubchannelState, -1);
+ }
+ }
+ getMapEntry() {
+ return this.mapEntry;
+ }
+ getWrappedSubchannel() {
+ return this.child;
+ }
+}
+function createEmptyBucket() {
+ return {
+ success: 0,
+ failure: 0,
+ };
+}
+class CallCounter {
+ constructor() {
+ this.activeBucket = createEmptyBucket();
+ this.inactiveBucket = createEmptyBucket();
+ }
+ addSuccess() {
+ this.activeBucket.success += 1;
+ }
+ addFailure() {
+ this.activeBucket.failure += 1;
+ }
+ switchBuckets() {
+ this.inactiveBucket = this.activeBucket;
+ this.activeBucket = createEmptyBucket();
+ }
+ getLastSuccesses() {
+ return this.inactiveBucket.success;
+ }
+ getLastFailures() {
+ return this.inactiveBucket.failure;
+ }
+}
+class OutlierDetectionPicker {
+ constructor(wrappedPicker, countCalls) {
+ this.wrappedPicker = wrappedPicker;
+ this.countCalls = countCalls;
+ }
+ pick(pickArgs) {
+ const wrappedPick = this.wrappedPicker.pick(pickArgs);
+ if (wrappedPick.pickResultType === picker_1.PickResultType.COMPLETE) {
+ const subchannelWrapper = wrappedPick.subchannel;
+ const mapEntry = subchannelWrapper.getMapEntry();
+ if (mapEntry) {
+ let onCallEnded = wrappedPick.onCallEnded;
+ if (this.countCalls) {
+ onCallEnded = statusCode => {
+ var _a;
+ if (statusCode === constants_1.Status.OK) {
+ mapEntry.counter.addSuccess();
+ }
+ else {
+ mapEntry.counter.addFailure();
+ }
+ (_a = wrappedPick.onCallEnded) === null || _a === void 0 ? void 0 : _a.call(wrappedPick, statusCode);
+ };
+ }
+ return Object.assign(Object.assign({}, wrappedPick), { subchannel: subchannelWrapper.getWrappedSubchannel(), onCallEnded: onCallEnded });
+ }
+ else {
+ return Object.assign(Object.assign({}, wrappedPick), { subchannel: subchannelWrapper.getWrappedSubchannel() });
+ }
+ }
+ else {
+ return wrappedPick;
+ }
+ }
+}
+class OutlierDetectionLoadBalancer {
+ constructor(channelControlHelper) {
+ this.addressMap = new Map();
+ this.latestConfig = null;
+ this.timerStartTime = null;
+ this.childBalancer = new load_balancer_child_handler_1.ChildLoadBalancerHandler((0, experimental_1.createChildChannelControlHelper)(channelControlHelper, {
+ createSubchannel: (subchannelAddress, subchannelArgs) => {
+ const originalSubchannel = channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs);
+ const mapEntry = this.addressMap.get((0, subchannel_address_1.subchannelAddressToString)(subchannelAddress));
+ const subchannelWrapper = new OutlierDetectionSubchannelWrapper(originalSubchannel, mapEntry);
+ if ((mapEntry === null || mapEntry === void 0 ? void 0 : mapEntry.currentEjectionTimestamp) !== null) {
+ // If the address is ejected, propagate that to the new subchannel wrapper
+ subchannelWrapper.eject();
+ }
+ mapEntry === null || mapEntry === void 0 ? void 0 : mapEntry.subchannelWrappers.push(subchannelWrapper);
+ return subchannelWrapper;
+ },
+ updateState: (connectivityState, picker) => {
+ if (connectivityState === connectivity_state_1.ConnectivityState.READY) {
+ channelControlHelper.updateState(connectivityState, new OutlierDetectionPicker(picker, this.isCountingEnabled()));
+ }
+ else {
+ channelControlHelper.updateState(connectivityState, picker);
+ }
+ },
+ }));
+ this.ejectionTimer = setInterval(() => { }, 0);
+ clearInterval(this.ejectionTimer);
+ }
+ isCountingEnabled() {
+ return (this.latestConfig !== null &&
+ (this.latestConfig.getSuccessRateEjectionConfig() !== null ||
+ this.latestConfig.getFailurePercentageEjectionConfig() !== null));
+ }
+ getCurrentEjectionPercent() {
+ let ejectionCount = 0;
+ for (const mapEntry of this.addressMap.values()) {
+ if (mapEntry.currentEjectionTimestamp !== null) {
+ ejectionCount += 1;
+ }
+ }
+ return (ejectionCount * 100) / this.addressMap.size;
+ }
+ runSuccessRateCheck(ejectionTimestamp) {
+ if (!this.latestConfig) {
+ return;
+ }
+ const successRateConfig = this.latestConfig.getSuccessRateEjectionConfig();
+ if (!successRateConfig) {
+ return;
+ }
+ trace('Running success rate check');
+ // Step 1
+ const targetRequestVolume = successRateConfig.request_volume;
+ let addresesWithTargetVolume = 0;
+ const successRates = [];
+ for (const [address, mapEntry] of this.addressMap) {
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ trace('Stats for ' +
+ address +
+ ': successes=' +
+ successes +
+ ' failures=' +
+ failures +
+ ' targetRequestVolume=' +
+ targetRequestVolume);
+ if (successes + failures >= targetRequestVolume) {
+ addresesWithTargetVolume += 1;
+ successRates.push(successes / (successes + failures));
+ }
+ }
+ trace('Found ' +
+ addresesWithTargetVolume +
+ ' success rate candidates; currentEjectionPercent=' +
+ this.getCurrentEjectionPercent() +
+ ' successRates=[' +
+ successRates +
+ ']');
+ if (addresesWithTargetVolume < successRateConfig.minimum_hosts) {
+ return;
+ }
+ // Step 2
+ const successRateMean = successRates.reduce((a, b) => a + b) / successRates.length;
+ let successRateDeviationSum = 0;
+ for (const rate of successRates) {
+ const deviation = rate - successRateMean;
+ successRateDeviationSum += deviation * deviation;
+ }
+ const successRateVariance = successRateDeviationSum / successRates.length;
+ const successRateStdev = Math.sqrt(successRateVariance);
+ const ejectionThreshold = successRateMean -
+ successRateStdev * (successRateConfig.stdev_factor / 1000);
+ trace('stdev=' + successRateStdev + ' ejectionThreshold=' + ejectionThreshold);
+ // Step 3
+ for (const [address, mapEntry] of this.addressMap.entries()) {
+ // Step 3.i
+ if (this.getCurrentEjectionPercent() >=
+ this.latestConfig.getMaxEjectionPercent()) {
+ break;
+ }
+ // Step 3.ii
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ if (successes + failures < targetRequestVolume) {
+ continue;
+ }
+ // Step 3.iii
+ const successRate = successes / (successes + failures);
+ trace('Checking candidate ' + address + ' successRate=' + successRate);
+ if (successRate < ejectionThreshold) {
+ const randomNumber = Math.random() * 100;
+ trace('Candidate ' +
+ address +
+ ' randomNumber=' +
+ randomNumber +
+ ' enforcement_percentage=' +
+ successRateConfig.enforcement_percentage);
+ if (randomNumber < successRateConfig.enforcement_percentage) {
+ trace('Ejecting candidate ' + address);
+ this.eject(mapEntry, ejectionTimestamp);
+ }
+ }
+ }
+ }
+ runFailurePercentageCheck(ejectionTimestamp) {
+ if (!this.latestConfig) {
+ return;
+ }
+ const failurePercentageConfig = this.latestConfig.getFailurePercentageEjectionConfig();
+ if (!failurePercentageConfig) {
+ return;
+ }
+ trace('Running failure percentage check. threshold=' +
+ failurePercentageConfig.threshold +
+ ' request volume threshold=' +
+ failurePercentageConfig.request_volume);
+ // Step 1
+ let addressesWithTargetVolume = 0;
+ for (const mapEntry of this.addressMap.values()) {
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ if (successes + failures >= failurePercentageConfig.request_volume) {
+ addressesWithTargetVolume += 1;
+ }
+ }
+ if (addressesWithTargetVolume < failurePercentageConfig.minimum_hosts) {
+ return;
+ }
+ // Step 2
+ for (const [address, mapEntry] of this.addressMap.entries()) {
+ // Step 2.i
+ if (this.getCurrentEjectionPercent() >=
+ this.latestConfig.getMaxEjectionPercent()) {
+ break;
+ }
+ // Step 2.ii
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ trace('Candidate successes=' + successes + ' failures=' + failures);
+ if (successes + failures < failurePercentageConfig.request_volume) {
+ continue;
+ }
+ // Step 2.iii
+ const failurePercentage = (failures * 100) / (failures + successes);
+ if (failurePercentage > failurePercentageConfig.threshold) {
+ const randomNumber = Math.random() * 100;
+ trace('Candidate ' +
+ address +
+ ' randomNumber=' +
+ randomNumber +
+ ' enforcement_percentage=' +
+ failurePercentageConfig.enforcement_percentage);
+ if (randomNumber < failurePercentageConfig.enforcement_percentage) {
+ trace('Ejecting candidate ' + address);
+ this.eject(mapEntry, ejectionTimestamp);
+ }
+ }
+ }
+ }
+ eject(mapEntry, ejectionTimestamp) {
+ mapEntry.currentEjectionTimestamp = new Date();
+ mapEntry.ejectionTimeMultiplier += 1;
+ for (const subchannelWrapper of mapEntry.subchannelWrappers) {
+ subchannelWrapper.eject();
+ }
+ }
+ uneject(mapEntry) {
+ mapEntry.currentEjectionTimestamp = null;
+ for (const subchannelWrapper of mapEntry.subchannelWrappers) {
+ subchannelWrapper.uneject();
+ }
+ }
+ switchAllBuckets() {
+ for (const mapEntry of this.addressMap.values()) {
+ mapEntry.counter.switchBuckets();
+ }
+ }
+ startTimer(delayMs) {
+ var _a, _b;
+ this.ejectionTimer = setTimeout(() => this.runChecks(), delayMs);
+ (_b = (_a = this.ejectionTimer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ runChecks() {
+ const ejectionTimestamp = new Date();
+ trace('Ejection timer running');
+ this.switchAllBuckets();
+ if (!this.latestConfig) {
+ return;
+ }
+ this.timerStartTime = ejectionTimestamp;
+ this.startTimer(this.latestConfig.getIntervalMs());
+ this.runSuccessRateCheck(ejectionTimestamp);
+ this.runFailurePercentageCheck(ejectionTimestamp);
+ for (const [address, mapEntry] of this.addressMap.entries()) {
+ if (mapEntry.currentEjectionTimestamp === null) {
+ if (mapEntry.ejectionTimeMultiplier > 0) {
+ mapEntry.ejectionTimeMultiplier -= 1;
+ }
+ }
+ else {
+ const baseEjectionTimeMs = this.latestConfig.getBaseEjectionTimeMs();
+ const maxEjectionTimeMs = this.latestConfig.getMaxEjectionTimeMs();
+ const returnTime = new Date(mapEntry.currentEjectionTimestamp.getTime());
+ returnTime.setMilliseconds(returnTime.getMilliseconds() +
+ Math.min(baseEjectionTimeMs * mapEntry.ejectionTimeMultiplier, Math.max(baseEjectionTimeMs, maxEjectionTimeMs)));
+ if (returnTime < new Date()) {
+ trace('Unejecting ' + address);
+ this.uneject(mapEntry);
+ }
+ }
+ }
+ }
+ updateAddressList(addressList, lbConfig, attributes) {
+ if (!(lbConfig instanceof OutlierDetectionLoadBalancingConfig)) {
+ return;
+ }
+ const subchannelAddresses = new Set();
+ for (const address of addressList) {
+ subchannelAddresses.add((0, subchannel_address_1.subchannelAddressToString)(address));
+ }
+ for (const address of subchannelAddresses) {
+ if (!this.addressMap.has(address)) {
+ trace('Adding map entry for ' + address);
+ this.addressMap.set(address, {
+ counter: new CallCounter(),
+ currentEjectionTimestamp: null,
+ ejectionTimeMultiplier: 0,
+ subchannelWrappers: [],
+ });
+ }
+ }
+ for (const key of this.addressMap.keys()) {
+ if (!subchannelAddresses.has(key)) {
+ trace('Removing map entry for ' + key);
+ this.addressMap.delete(key);
+ }
+ }
+ const childPolicy = (0, load_balancer_1.getFirstUsableConfig)(lbConfig.getChildPolicy(), true);
+ this.childBalancer.updateAddressList(addressList, childPolicy, attributes);
+ if (lbConfig.getSuccessRateEjectionConfig() ||
+ lbConfig.getFailurePercentageEjectionConfig()) {
+ if (this.timerStartTime) {
+ trace('Previous timer existed. Replacing timer');
+ clearTimeout(this.ejectionTimer);
+ const remainingDelay = lbConfig.getIntervalMs() -
+ (new Date().getTime() - this.timerStartTime.getTime());
+ this.startTimer(remainingDelay);
+ }
+ else {
+ trace('Starting new timer');
+ this.timerStartTime = new Date();
+ this.startTimer(lbConfig.getIntervalMs());
+ this.switchAllBuckets();
+ }
+ }
+ else {
+ trace('Counting disabled. Cancelling timer.');
+ this.timerStartTime = null;
+ clearTimeout(this.ejectionTimer);
+ for (const mapEntry of this.addressMap.values()) {
+ this.uneject(mapEntry);
+ mapEntry.ejectionTimeMultiplier = 0;
+ }
+ }
+ this.latestConfig = lbConfig;
+ }
+ exitIdle() {
+ this.childBalancer.exitIdle();
+ }
+ resetBackoff() {
+ this.childBalancer.resetBackoff();
+ }
+ destroy() {
+ clearTimeout(this.ejectionTimer);
+ this.childBalancer.destroy();
+ }
+ getTypeName() {
+ return TYPE_NAME;
+ }
+}
+exports.OutlierDetectionLoadBalancer = OutlierDetectionLoadBalancer;
+function setup() {
+ if (OUTLIER_DETECTION_ENABLED) {
+ (0, experimental_1.registerLoadBalancerType)(TYPE_NAME, OutlierDetectionLoadBalancer, OutlierDetectionLoadBalancingConfig);
+ }
+}
+exports.setup = setup;
+//# sourceMappingURL=load-balancer-outlier-detection.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js.map
new file mode 100644
index 0000000..d9b5eef
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"load-balancer-outlier-detection.js","sourceRoot":"","sources":["../../src/load-balancer-outlier-detection.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.d.ts
new file mode 100644
index 0000000..22443d6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.d.ts
@@ -0,0 +1,97 @@
+import { LoadBalancer, ChannelControlHelper, LoadBalancingConfig } from './load-balancer';
+import { SubchannelAddress } from './subchannel-address';
+export declare class PickFirstLoadBalancingConfig implements LoadBalancingConfig {
+ private readonly shuffleAddressList;
+ constructor(shuffleAddressList: boolean);
+ getLoadBalancerName(): string;
+ toJsonObject(): object;
+ getShuffleAddressList(): boolean;
+ static createFromJson(obj: any): PickFirstLoadBalancingConfig;
+}
+/**
+ * Return a new array with the elements of the input array in a random order
+ * @param list The input array
+ * @returns A shuffled array of the elements of list
+ */
+export declare function shuffled<T>(list: T[]): T[];
+export declare class PickFirstLoadBalancer implements LoadBalancer {
+ private readonly channelControlHelper;
+ /**
+ * The list of subchannels this load balancer is currently attempting to
+ * connect to.
+ */
+ private children;
+ /**
+ * The current connectivity state of the load balancer.
+ */
+ private currentState;
+ /**
+ * The index within the `subchannels` array of the subchannel with the most
+ * recently started connection attempt.
+ */
+ private currentSubchannelIndex;
+ /**
+ * The currently picked subchannel used for making calls. Populated if
+ * and only if the load balancer's current state is READY. In that case,
+ * the subchannel's current state is also READY.
+ */
+ private currentPick;
+ /**
+ * Listener callback attached to each subchannel in the `subchannels` list
+ * while establishing a connection.
+ */
+ private subchannelStateListener;
+ /**
+ * Timer reference for the timer tracking when to start
+ */
+ private connectionDelayTimeout;
+ private triedAllSubchannels;
+ /**
+ * The LB policy enters sticky TRANSIENT_FAILURE mode when all
+ * subchannels have failed to connect at least once, and it stays in that
+ * mode until a connection attempt is successful. While in sticky TF mode,
+ * the LB policy continuously attempts to connect to all of its subchannels.
+ */
+ private stickyTransientFailureMode;
+ /**
+ * Indicates whether we called channelControlHelper.requestReresolution since
+ * the last call to updateAddressList
+ */
+ private requestedResolutionSinceLastUpdate;
+ /**
+ * The most recent error reported by any subchannel as it transitioned to
+ * TRANSIENT_FAILURE.
+ */
+ private lastError;
+ private latestAddressList;
+ /**
+ * Load balancer that attempts to connect to each backend in the address list
+ * in order, and picks the first one that connects, using it for every
+ * request.
+ * @param channelControlHelper `ChannelControlHelper` instance provided by
+ * this load balancer's owner.
+ */
+ constructor(channelControlHelper: ChannelControlHelper);
+ private allChildrenHaveReportedTF;
+ private calculateAndReportNewState;
+ private requestReresolution;
+ private maybeEnterStickyTransientFailureMode;
+ private removeCurrentPick;
+ private onSubchannelStateUpdate;
+ private startNextSubchannelConnecting;
+ /**
+ * Have a single subchannel in the `subchannels` list start connecting.
+ * @param subchannelIndex The index into the `subchannels` list.
+ */
+ private startConnecting;
+ private pickSubchannel;
+ private updateState;
+ private resetSubchannelList;
+ private connectToAddressList;
+ updateAddressList(addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig): void;
+ exitIdle(): void;
+ resetBackoff(): void;
+ destroy(): void;
+ getTypeName(): string;
+}
+export declare function setup(): void;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js
new file mode 100644
index 0000000..0bf16c6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js
@@ -0,0 +1,393 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setup = exports.PickFirstLoadBalancer = exports.shuffled = exports.PickFirstLoadBalancingConfig = void 0;
+const load_balancer_1 = require("./load-balancer");
+const connectivity_state_1 = require("./connectivity-state");
+const picker_1 = require("./picker");
+const logging = require("./logging");
+const constants_1 = require("./constants");
+const TRACER_NAME = 'pick_first';
+function trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+const TYPE_NAME = 'pick_first';
+/**
+ * Delay after starting a connection on a subchannel before starting a
+ * connection on the next subchannel in the list, for Happy Eyeballs algorithm.
+ */
+const CONNECTION_DELAY_INTERVAL_MS = 250;
+class PickFirstLoadBalancingConfig {
+ constructor(shuffleAddressList) {
+ this.shuffleAddressList = shuffleAddressList;
+ }
+ getLoadBalancerName() {
+ return TYPE_NAME;
+ }
+ toJsonObject() {
+ return {
+ [TYPE_NAME]: {
+ shuffleAddressList: this.shuffleAddressList,
+ },
+ };
+ }
+ getShuffleAddressList() {
+ return this.shuffleAddressList;
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ static createFromJson(obj) {
+ if ('shuffleAddressList' in obj &&
+ !(typeof obj.shuffleAddressList === 'boolean')) {
+ throw new Error('pick_first config field shuffleAddressList must be a boolean if provided');
+ }
+ return new PickFirstLoadBalancingConfig(obj.shuffleAddressList === true);
+ }
+}
+exports.PickFirstLoadBalancingConfig = PickFirstLoadBalancingConfig;
+/**
+ * Picker for a `PickFirstLoadBalancer` in the READY state. Always returns the
+ * picked subchannel.
+ */
+class PickFirstPicker {
+ constructor(subchannel) {
+ this.subchannel = subchannel;
+ }
+ pick(pickArgs) {
+ return {
+ pickResultType: picker_1.PickResultType.COMPLETE,
+ subchannel: this.subchannel,
+ status: null,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+}
+/**
+ * Return a new array with the elements of the input array in a random order
+ * @param list The input array
+ * @returns A shuffled array of the elements of list
+ */
+function shuffled(list) {
+ const result = list.slice();
+ for (let i = result.length - 1; i > 1; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ const temp = result[i];
+ result[i] = result[j];
+ result[j] = temp;
+ }
+ return result;
+}
+exports.shuffled = shuffled;
+class PickFirstLoadBalancer {
+ /**
+ * Load balancer that attempts to connect to each backend in the address list
+ * in order, and picks the first one that connects, using it for every
+ * request.
+ * @param channelControlHelper `ChannelControlHelper` instance provided by
+ * this load balancer's owner.
+ */
+ constructor(channelControlHelper) {
+ this.channelControlHelper = channelControlHelper;
+ /**
+ * The list of subchannels this load balancer is currently attempting to
+ * connect to.
+ */
+ this.children = [];
+ /**
+ * The current connectivity state of the load balancer.
+ */
+ this.currentState = connectivity_state_1.ConnectivityState.IDLE;
+ /**
+ * The index within the `subchannels` array of the subchannel with the most
+ * recently started connection attempt.
+ */
+ this.currentSubchannelIndex = 0;
+ /**
+ * The currently picked subchannel used for making calls. Populated if
+ * and only if the load balancer's current state is READY. In that case,
+ * the subchannel's current state is also READY.
+ */
+ this.currentPick = null;
+ /**
+ * Listener callback attached to each subchannel in the `subchannels` list
+ * while establishing a connection.
+ */
+ this.subchannelStateListener = (subchannel, previousState, newState, keepaliveTime, errorMessage) => {
+ this.onSubchannelStateUpdate(subchannel, previousState, newState, errorMessage);
+ };
+ this.triedAllSubchannels = false;
+ /**
+ * The LB policy enters sticky TRANSIENT_FAILURE mode when all
+ * subchannels have failed to connect at least once, and it stays in that
+ * mode until a connection attempt is successful. While in sticky TF mode,
+ * the LB policy continuously attempts to connect to all of its subchannels.
+ */
+ this.stickyTransientFailureMode = false;
+ /**
+ * Indicates whether we called channelControlHelper.requestReresolution since
+ * the last call to updateAddressList
+ */
+ this.requestedResolutionSinceLastUpdate = false;
+ /**
+ * The most recent error reported by any subchannel as it transitioned to
+ * TRANSIENT_FAILURE.
+ */
+ this.lastError = null;
+ this.latestAddressList = null;
+ this.connectionDelayTimeout = setTimeout(() => { }, 0);
+ clearTimeout(this.connectionDelayTimeout);
+ }
+ allChildrenHaveReportedTF() {
+ return this.children.every(child => child.hasReportedTransientFailure);
+ }
+ calculateAndReportNewState() {
+ if (this.currentPick) {
+ this.updateState(connectivity_state_1.ConnectivityState.READY, new PickFirstPicker(this.currentPick));
+ }
+ else if (this.children.length === 0) {
+ this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this));
+ }
+ else {
+ if (this.stickyTransientFailureMode) {
+ this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ details: `No connection established. Last error: ${this.lastError}` }));
+ }
+ else {
+ this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this));
+ }
+ }
+ }
+ requestReresolution() {
+ this.requestedResolutionSinceLastUpdate = true;
+ this.channelControlHelper.requestReresolution();
+ }
+ maybeEnterStickyTransientFailureMode() {
+ if (!this.allChildrenHaveReportedTF()) {
+ return;
+ }
+ if (!this.requestedResolutionSinceLastUpdate) {
+ /* Each time we get an update we reset each subchannel's
+ * hasReportedTransientFailure flag, so the next time we get to this
+ * point after that, each subchannel has reported TRANSIENT_FAILURE
+ * at least once since then. That is the trigger for requesting
+ * reresolution, whether or not the LB policy is already in sticky TF
+ * mode. */
+ this.requestReresolution();
+ }
+ if (this.stickyTransientFailureMode) {
+ return;
+ }
+ this.stickyTransientFailureMode = true;
+ for (const { subchannel } of this.children) {
+ subchannel.startConnecting();
+ }
+ this.calculateAndReportNewState();
+ }
+ removeCurrentPick() {
+ if (this.currentPick !== null) {
+ /* Unref can cause a state change, which can cause a change in the value
+ * of this.currentPick, so we hold a local reference to make sure that
+ * does not impact this function. */
+ const currentPick = this.currentPick;
+ this.currentPick = null;
+ currentPick.unref();
+ currentPick.removeConnectivityStateListener(this.subchannelStateListener);
+ this.channelControlHelper.removeChannelzChild(currentPick.getChannelzRef());
+ }
+ }
+ onSubchannelStateUpdate(subchannel, previousState, newState, errorMessage) {
+ var _a;
+ if ((_a = this.currentPick) === null || _a === void 0 ? void 0 : _a.realSubchannelEquals(subchannel)) {
+ if (newState !== connectivity_state_1.ConnectivityState.READY) {
+ this.removeCurrentPick();
+ this.calculateAndReportNewState();
+ this.requestReresolution();
+ }
+ return;
+ }
+ for (const [index, child] of this.children.entries()) {
+ if (subchannel.realSubchannelEquals(child.subchannel)) {
+ if (newState === connectivity_state_1.ConnectivityState.READY) {
+ this.pickSubchannel(child.subchannel);
+ }
+ if (newState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) {
+ child.hasReportedTransientFailure = true;
+ if (errorMessage) {
+ this.lastError = errorMessage;
+ }
+ this.maybeEnterStickyTransientFailureMode();
+ if (index === this.currentSubchannelIndex) {
+ this.startNextSubchannelConnecting(index + 1);
+ }
+ }
+ child.subchannel.startConnecting();
+ return;
+ }
+ }
+ }
+ startNextSubchannelConnecting(startIndex) {
+ clearTimeout(this.connectionDelayTimeout);
+ if (this.triedAllSubchannels) {
+ return;
+ }
+ for (const [index, child] of this.children.entries()) {
+ if (index >= startIndex) {
+ const subchannelState = child.subchannel.getConnectivityState();
+ if (subchannelState === connectivity_state_1.ConnectivityState.IDLE ||
+ subchannelState === connectivity_state_1.ConnectivityState.CONNECTING) {
+ this.startConnecting(index);
+ return;
+ }
+ }
+ }
+ this.triedAllSubchannels = true;
+ this.maybeEnterStickyTransientFailureMode();
+ }
+ /**
+ * Have a single subchannel in the `subchannels` list start connecting.
+ * @param subchannelIndex The index into the `subchannels` list.
+ */
+ startConnecting(subchannelIndex) {
+ var _a, _b;
+ clearTimeout(this.connectionDelayTimeout);
+ this.currentSubchannelIndex = subchannelIndex;
+ if (this.children[subchannelIndex].subchannel.getConnectivityState() ===
+ connectivity_state_1.ConnectivityState.IDLE) {
+ trace('Start connecting to subchannel with address ' +
+ this.children[subchannelIndex].subchannel.getAddress());
+ process.nextTick(() => {
+ var _a;
+ (_a = this.children[subchannelIndex]) === null || _a === void 0 ? void 0 : _a.subchannel.startConnecting();
+ });
+ }
+ this.connectionDelayTimeout = (_b = (_a = setTimeout(() => {
+ this.startNextSubchannelConnecting(subchannelIndex + 1);
+ }, CONNECTION_DELAY_INTERVAL_MS)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ pickSubchannel(subchannel) {
+ if (this.currentPick && subchannel.realSubchannelEquals(this.currentPick)) {
+ return;
+ }
+ trace('Pick subchannel with address ' + subchannel.getAddress());
+ this.stickyTransientFailureMode = false;
+ if (this.currentPick !== null) {
+ this.currentPick.unref();
+ this.channelControlHelper.removeChannelzChild(this.currentPick.getChannelzRef());
+ this.currentPick.removeConnectivityStateListener(this.subchannelStateListener);
+ }
+ this.currentPick = subchannel;
+ subchannel.ref();
+ this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());
+ this.resetSubchannelList();
+ clearTimeout(this.connectionDelayTimeout);
+ this.calculateAndReportNewState();
+ }
+ updateState(newState, picker) {
+ trace(connectivity_state_1.ConnectivityState[this.currentState] +
+ ' -> ' +
+ connectivity_state_1.ConnectivityState[newState]);
+ this.currentState = newState;
+ this.channelControlHelper.updateState(newState, picker);
+ }
+ resetSubchannelList() {
+ for (const child of this.children) {
+ if (!(this.currentPick && child.subchannel.realSubchannelEquals(this.currentPick))) {
+ /* The connectivity state listener is the same whether the subchannel
+ * is in the list of children or it is the currentPick, so if it is in
+ * both, removing it here would cause problems. In particular, that
+ * always happens immediately after the subchannel is picked. */
+ child.subchannel.removeConnectivityStateListener(this.subchannelStateListener);
+ }
+ /* Refs are counted independently for the children list and the
+ * currentPick, so we call unref whether or not the child is the
+ * currentPick. Channelz child references are also refcounted, so
+ * removeChannelzChild can be handled the same way. */
+ child.subchannel.unref();
+ this.channelControlHelper.removeChannelzChild(child.subchannel.getChannelzRef());
+ }
+ this.currentSubchannelIndex = 0;
+ this.children = [];
+ this.triedAllSubchannels = false;
+ this.requestedResolutionSinceLastUpdate = false;
+ }
+ connectToAddressList(addressList) {
+ const newChildrenList = addressList.map(address => ({
+ subchannel: this.channelControlHelper.createSubchannel(address, {}),
+ hasReportedTransientFailure: false,
+ }));
+ /* Ref each subchannel before resetting the list, to ensure that
+ * subchannels shared between the list don't drop to 0 refs during the
+ * transition. */
+ for (const { subchannel } of newChildrenList) {
+ subchannel.ref();
+ this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());
+ }
+ this.resetSubchannelList();
+ this.children = newChildrenList;
+ for (const { subchannel } of this.children) {
+ subchannel.addConnectivityStateListener(this.subchannelStateListener);
+ if (subchannel.getConnectivityState() === connectivity_state_1.ConnectivityState.READY) {
+ this.pickSubchannel(subchannel);
+ return;
+ }
+ }
+ for (const child of this.children) {
+ if (child.subchannel.getConnectivityState() ===
+ connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) {
+ child.hasReportedTransientFailure = true;
+ }
+ }
+ this.startNextSubchannelConnecting(0);
+ this.calculateAndReportNewState();
+ }
+ updateAddressList(addressList, lbConfig) {
+ if (!(lbConfig instanceof PickFirstLoadBalancingConfig)) {
+ return;
+ }
+ /* Previously, an update would be discarded if it was identical to the
+ * previous update, to minimize churn. Now the DNS resolver is
+ * rate-limited, so that is less of a concern. */
+ if (lbConfig.getShuffleAddressList()) {
+ addressList = shuffled(addressList);
+ }
+ this.latestAddressList = addressList;
+ this.connectToAddressList(addressList);
+ }
+ exitIdle() {
+ if (this.currentState === connectivity_state_1.ConnectivityState.IDLE && this.latestAddressList) {
+ this.connectToAddressList(this.latestAddressList);
+ }
+ }
+ resetBackoff() {
+ /* The pick first load balancer does not have a connection backoff, so this
+ * does nothing */
+ }
+ destroy() {
+ this.resetSubchannelList();
+ this.removeCurrentPick();
+ }
+ getTypeName() {
+ return TYPE_NAME;
+ }
+}
+exports.PickFirstLoadBalancer = PickFirstLoadBalancer;
+function setup() {
+ (0, load_balancer_1.registerLoadBalancerType)(TYPE_NAME, PickFirstLoadBalancer, PickFirstLoadBalancingConfig);
+ (0, load_balancer_1.registerDefaultLoadBalancerType)(TYPE_NAME);
+}
+exports.setup = setup;
+//# sourceMappingURL=load-balancer-pick-first.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js.map
new file mode 100644
index 0000000..90125e0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"load-balancer-pick-first.js","sourceRoot":"","sources":["../../src/load-balancer-pick-first.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.d.ts
new file mode 100644
index 0000000..0fa9421
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.d.ts
@@ -0,0 +1,21 @@
+import { LoadBalancer, ChannelControlHelper, LoadBalancingConfig } from './load-balancer';
+import { SubchannelAddress } from './subchannel-address';
+export declare class RoundRobinLoadBalancer implements LoadBalancer {
+ private readonly channelControlHelper;
+ private subchannels;
+ private currentState;
+ private subchannelStateListener;
+ private currentReadyPicker;
+ private lastError;
+ constructor(channelControlHelper: ChannelControlHelper);
+ private countSubchannelsWithState;
+ private calculateAndUpdateState;
+ private updateState;
+ private resetSubchannelList;
+ updateAddressList(addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig): void;
+ exitIdle(): void;
+ resetBackoff(): void;
+ destroy(): void;
+ getTypeName(): string;
+}
+export declare function setup(): void;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js
new file mode 100644
index 0000000..1f78b37
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js
@@ -0,0 +1,174 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setup = exports.RoundRobinLoadBalancer = void 0;
+const load_balancer_1 = require("./load-balancer");
+const connectivity_state_1 = require("./connectivity-state");
+const picker_1 = require("./picker");
+const subchannel_address_1 = require("./subchannel-address");
+const logging = require("./logging");
+const constants_1 = require("./constants");
+const TRACER_NAME = 'round_robin';
+function trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+const TYPE_NAME = 'round_robin';
+class RoundRobinLoadBalancingConfig {
+ getLoadBalancerName() {
+ return TYPE_NAME;
+ }
+ constructor() { }
+ toJsonObject() {
+ return {
+ [TYPE_NAME]: {},
+ };
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ static createFromJson(obj) {
+ return new RoundRobinLoadBalancingConfig();
+ }
+}
+class RoundRobinPicker {
+ constructor(subchannelList, nextIndex = 0) {
+ this.subchannelList = subchannelList;
+ this.nextIndex = nextIndex;
+ }
+ pick(pickArgs) {
+ const pickedSubchannel = this.subchannelList[this.nextIndex];
+ this.nextIndex = (this.nextIndex + 1) % this.subchannelList.length;
+ return {
+ pickResultType: picker_1.PickResultType.COMPLETE,
+ subchannel: pickedSubchannel,
+ status: null,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+ /**
+ * Check what the next subchannel returned would be. Used by the load
+ * balancer implementation to preserve this part of the picker state if
+ * possible when a subchannel connects or disconnects.
+ */
+ peekNextSubchannel() {
+ return this.subchannelList[this.nextIndex];
+ }
+}
+class RoundRobinLoadBalancer {
+ constructor(channelControlHelper) {
+ this.channelControlHelper = channelControlHelper;
+ this.subchannels = [];
+ this.currentState = connectivity_state_1.ConnectivityState.IDLE;
+ this.currentReadyPicker = null;
+ this.lastError = null;
+ this.subchannelStateListener = (subchannel, previousState, newState, keepaliveTime, errorMessage) => {
+ this.calculateAndUpdateState();
+ if (newState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE ||
+ newState === connectivity_state_1.ConnectivityState.IDLE) {
+ if (errorMessage) {
+ this.lastError = errorMessage;
+ }
+ this.channelControlHelper.requestReresolution();
+ subchannel.startConnecting();
+ }
+ };
+ }
+ countSubchannelsWithState(state) {
+ return this.subchannels.filter(subchannel => subchannel.getConnectivityState() === state).length;
+ }
+ calculateAndUpdateState() {
+ if (this.countSubchannelsWithState(connectivity_state_1.ConnectivityState.READY) > 0) {
+ const readySubchannels = this.subchannels.filter(subchannel => subchannel.getConnectivityState() === connectivity_state_1.ConnectivityState.READY);
+ let index = 0;
+ if (this.currentReadyPicker !== null) {
+ index = readySubchannels.indexOf(this.currentReadyPicker.peekNextSubchannel());
+ if (index < 0) {
+ index = 0;
+ }
+ }
+ this.updateState(connectivity_state_1.ConnectivityState.READY, new RoundRobinPicker(readySubchannels, index));
+ }
+ else if (this.countSubchannelsWithState(connectivity_state_1.ConnectivityState.CONNECTING) > 0) {
+ this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this));
+ }
+ else if (this.countSubchannelsWithState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) > 0) {
+ this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ details: `No connection established. Last error: ${this.lastError}` }));
+ }
+ else {
+ this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this));
+ }
+ }
+ updateState(newState, picker) {
+ trace(connectivity_state_1.ConnectivityState[this.currentState] +
+ ' -> ' +
+ connectivity_state_1.ConnectivityState[newState]);
+ if (newState === connectivity_state_1.ConnectivityState.READY) {
+ this.currentReadyPicker = picker;
+ }
+ else {
+ this.currentReadyPicker = null;
+ }
+ this.currentState = newState;
+ this.channelControlHelper.updateState(newState, picker);
+ }
+ resetSubchannelList() {
+ for (const subchannel of this.subchannels) {
+ subchannel.removeConnectivityStateListener(this.subchannelStateListener);
+ subchannel.unref();
+ this.channelControlHelper.removeChannelzChild(subchannel.getChannelzRef());
+ }
+ this.subchannels = [];
+ }
+ updateAddressList(addressList, lbConfig) {
+ this.resetSubchannelList();
+ trace('Connect to address list ' +
+ addressList.map(address => (0, subchannel_address_1.subchannelAddressToString)(address)));
+ this.subchannels = addressList.map(address => this.channelControlHelper.createSubchannel(address, {}));
+ for (const subchannel of this.subchannels) {
+ subchannel.ref();
+ subchannel.addConnectivityStateListener(this.subchannelStateListener);
+ this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());
+ const subchannelState = subchannel.getConnectivityState();
+ if (subchannelState === connectivity_state_1.ConnectivityState.IDLE ||
+ subchannelState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) {
+ subchannel.startConnecting();
+ }
+ }
+ this.calculateAndUpdateState();
+ }
+ exitIdle() {
+ for (const subchannel of this.subchannels) {
+ subchannel.startConnecting();
+ }
+ }
+ resetBackoff() {
+ /* The pick first load balancer does not have a connection backoff, so this
+ * does nothing */
+ }
+ destroy() {
+ this.resetSubchannelList();
+ }
+ getTypeName() {
+ return TYPE_NAME;
+ }
+}
+exports.RoundRobinLoadBalancer = RoundRobinLoadBalancer;
+function setup() {
+ (0, load_balancer_1.registerLoadBalancerType)(TYPE_NAME, RoundRobinLoadBalancer, RoundRobinLoadBalancingConfig);
+}
+exports.setup = setup;
+//# sourceMappingURL=load-balancer-round-robin.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js.map
new file mode 100644
index 0000000..def50c5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"load-balancer-round-robin.js","sourceRoot":"","sources":["../../src/load-balancer-round-robin.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts
new file mode 100644
index 0000000..52f86a2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts
@@ -0,0 +1,97 @@
+import { ChannelOptions } from './channel-options';
+import { SubchannelAddress } from './subchannel-address';
+import { ConnectivityState } from './connectivity-state';
+import { Picker } from './picker';
+import { ChannelRef, SubchannelRef } from './channelz';
+import { SubchannelInterface } from './subchannel-interface';
+/**
+ * A collection of functions associated with a channel that a load balancer
+ * can call as necessary.
+ */
+export interface ChannelControlHelper {
+ /**
+ * Returns a subchannel connected to the specified address.
+ * @param subchannelAddress The address to connect to
+ * @param subchannelArgs Extra channel arguments specified by the load balancer
+ */
+ createSubchannel(subchannelAddress: SubchannelAddress, subchannelArgs: ChannelOptions): SubchannelInterface;
+ /**
+ * Passes a new subchannel picker up to the channel. This is called if either
+ * the connectivity state changes or if a different picker is needed for any
+ * other reason.
+ * @param connectivityState New connectivity state
+ * @param picker New picker
+ */
+ updateState(connectivityState: ConnectivityState, picker: Picker): void;
+ /**
+ * Request new data from the resolver.
+ */
+ requestReresolution(): void;
+ addChannelzChild(child: ChannelRef | SubchannelRef): void;
+ removeChannelzChild(child: ChannelRef | SubchannelRef): void;
+}
+/**
+ * Create a child ChannelControlHelper that overrides some methods of the
+ * parent while letting others pass through to the parent unmodified. This
+ * allows other code to create these children without needing to know about
+ * all of the methods to be passed through.
+ * @param parent
+ * @param overrides
+ */
+export declare function createChildChannelControlHelper(parent: ChannelControlHelper, overrides: Partial<ChannelControlHelper>): ChannelControlHelper;
+/**
+ * Tracks one or more connected subchannels and determines which subchannel
+ * each request should use.
+ */
+export interface LoadBalancer {
+ /**
+ * Gives the load balancer a new list of addresses to start connecting to.
+ * The load balancer will start establishing connections with the new list,
+ * but will continue using any existing connections until the new connections
+ * are established
+ * @param addressList The new list of addresses to connect to
+ * @param lbConfig The load balancing config object from the service config,
+ * if one was provided
+ */
+ updateAddressList(addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig, attributes: {
+ [key: string]: unknown;
+ }): void;
+ /**
+ * If the load balancer is currently in the IDLE state, start connecting.
+ */
+ exitIdle(): void;
+ /**
+ * If the load balancer is currently in the CONNECTING or TRANSIENT_FAILURE
+ * state, reset the current connection backoff timeout to its base value and
+ * transition to CONNECTING if in TRANSIENT_FAILURE.
+ */
+ resetBackoff(): void;
+ /**
+ * The load balancer unrefs all of its subchannels and stops calling methods
+ * of its channel control helper.
+ */
+ destroy(): void;
+ /**
+ * Get the type name for this load balancer type. Must be constant across an
+ * entire load balancer implementation class and must match the name that the
+ * balancer implementation class was registered with.
+ */
+ getTypeName(): string;
+}
+export interface LoadBalancerConstructor {
+ new (channelControlHelper: ChannelControlHelper): LoadBalancer;
+}
+export interface LoadBalancingConfig {
+ getLoadBalancerName(): string;
+ toJsonObject(): object;
+}
+export interface LoadBalancingConfigConstructor {
+ new (...args: any): LoadBalancingConfig;
+ createFromJson(obj: any): LoadBalancingConfig;
+}
+export declare function registerLoadBalancerType(typeName: string, loadBalancerType: LoadBalancerConstructor, loadBalancingConfigType: LoadBalancingConfigConstructor): void;
+export declare function registerDefaultLoadBalancerType(typeName: string): void;
+export declare function createLoadBalancer(config: LoadBalancingConfig, channelControlHelper: ChannelControlHelper): LoadBalancer | null;
+export declare function isLoadBalancerNameRegistered(typeName: string): boolean;
+export declare function getFirstUsableConfig(configs: LoadBalancingConfig[], fallbackTodefault?: true): LoadBalancingConfig;
+export declare function validateLoadBalancingConfig(obj: any): LoadBalancingConfig;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js
new file mode 100644
index 0000000..ac4956e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js
@@ -0,0 +1,103 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.validateLoadBalancingConfig = exports.getFirstUsableConfig = exports.isLoadBalancerNameRegistered = exports.createLoadBalancer = exports.registerDefaultLoadBalancerType = exports.registerLoadBalancerType = exports.createChildChannelControlHelper = void 0;
+/**
+ * Create a child ChannelControlHelper that overrides some methods of the
+ * parent while letting others pass through to the parent unmodified. This
+ * allows other code to create these children without needing to know about
+ * all of the methods to be passed through.
+ * @param parent
+ * @param overrides
+ */
+function createChildChannelControlHelper(parent, overrides) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
+ return {
+ createSubchannel: (_b = (_a = overrides.createSubchannel) === null || _a === void 0 ? void 0 : _a.bind(overrides)) !== null && _b !== void 0 ? _b : parent.createSubchannel.bind(parent),
+ updateState: (_d = (_c = overrides.updateState) === null || _c === void 0 ? void 0 : _c.bind(overrides)) !== null && _d !== void 0 ? _d : parent.updateState.bind(parent),
+ requestReresolution: (_f = (_e = overrides.requestReresolution) === null || _e === void 0 ? void 0 : _e.bind(overrides)) !== null && _f !== void 0 ? _f : parent.requestReresolution.bind(parent),
+ addChannelzChild: (_h = (_g = overrides.addChannelzChild) === null || _g === void 0 ? void 0 : _g.bind(overrides)) !== null && _h !== void 0 ? _h : parent.addChannelzChild.bind(parent),
+ removeChannelzChild: (_k = (_j = overrides.removeChannelzChild) === null || _j === void 0 ? void 0 : _j.bind(overrides)) !== null && _k !== void 0 ? _k : parent.removeChannelzChild.bind(parent),
+ };
+}
+exports.createChildChannelControlHelper = createChildChannelControlHelper;
+const registeredLoadBalancerTypes = {};
+let defaultLoadBalancerType = null;
+function registerLoadBalancerType(typeName, loadBalancerType, loadBalancingConfigType) {
+ registeredLoadBalancerTypes[typeName] = {
+ LoadBalancer: loadBalancerType,
+ LoadBalancingConfig: loadBalancingConfigType,
+ };
+}
+exports.registerLoadBalancerType = registerLoadBalancerType;
+function registerDefaultLoadBalancerType(typeName) {
+ defaultLoadBalancerType = typeName;
+}
+exports.registerDefaultLoadBalancerType = registerDefaultLoadBalancerType;
+function createLoadBalancer(config, channelControlHelper) {
+ const typeName = config.getLoadBalancerName();
+ if (typeName in registeredLoadBalancerTypes) {
+ return new registeredLoadBalancerTypes[typeName].LoadBalancer(channelControlHelper);
+ }
+ else {
+ return null;
+ }
+}
+exports.createLoadBalancer = createLoadBalancer;
+function isLoadBalancerNameRegistered(typeName) {
+ return typeName in registeredLoadBalancerTypes;
+}
+exports.isLoadBalancerNameRegistered = isLoadBalancerNameRegistered;
+function getFirstUsableConfig(configs, fallbackTodefault = false) {
+ for (const config of configs) {
+ if (config.getLoadBalancerName() in registeredLoadBalancerTypes) {
+ return config;
+ }
+ }
+ if (fallbackTodefault) {
+ if (defaultLoadBalancerType) {
+ return new registeredLoadBalancerTypes[defaultLoadBalancerType].LoadBalancingConfig();
+ }
+ else {
+ return null;
+ }
+ }
+ else {
+ return null;
+ }
+}
+exports.getFirstUsableConfig = getFirstUsableConfig;
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function validateLoadBalancingConfig(obj) {
+ if (!(obj !== null && typeof obj === 'object')) {
+ throw new Error('Load balancing config must be an object');
+ }
+ const keys = Object.keys(obj);
+ if (keys.length !== 1) {
+ throw new Error('Provided load balancing config has multiple conflicting entries');
+ }
+ const typeName = keys[0];
+ if (typeName in registeredLoadBalancerTypes) {
+ return registeredLoadBalancerTypes[typeName].LoadBalancingConfig.createFromJson(obj[typeName]);
+ }
+ else {
+ throw new Error(`Unrecognized load balancing config name ${typeName}`);
+ }
+}
+exports.validateLoadBalancingConfig = validateLoadBalancingConfig;
+//# sourceMappingURL=load-balancer.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js.map
new file mode 100644
index 0000000..3b241bc
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"load-balancer.js","sourceRoot":"","sources":["../../src/load-balancer.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.d.ts
new file mode 100644
index 0000000..fe61f5b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.d.ts
@@ -0,0 +1,45 @@
+/// <reference types="node" />
+import { CallCredentials } from './call-credentials';
+import { Call, InterceptingListener, MessageContext, StatusObject } from './call-interface';
+import { Status } from './constants';
+import { Deadline } from './deadline';
+import { InternalChannel } from './internal-channel';
+import { Metadata } from './metadata';
+import { CallConfig } from './resolver';
+export type RpcProgress = 'NOT_STARTED' | 'DROP' | 'REFUSED' | 'PROCESSED';
+export interface StatusObjectWithProgress extends StatusObject {
+ progress: RpcProgress;
+}
+export interface LoadBalancingCallInterceptingListener extends InterceptingListener {
+ onReceiveStatus(status: StatusObjectWithProgress): void;
+}
+export declare class LoadBalancingCall implements Call {
+ private readonly channel;
+ private readonly callConfig;
+ private readonly methodName;
+ private readonly host;
+ private readonly credentials;
+ private readonly deadline;
+ private readonly callNumber;
+ private child;
+ private readPending;
+ private pendingMessage;
+ private pendingHalfClose;
+ private ended;
+ private serviceUrl;
+ private metadata;
+ private listener;
+ private onCallEnded;
+ constructor(channel: InternalChannel, callConfig: CallConfig, methodName: string, host: string, credentials: CallCredentials, deadline: Deadline, callNumber: number);
+ private trace;
+ private outputStatus;
+ doPick(): void;
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ start(metadata: Metadata, listener: LoadBalancingCallInterceptingListener): void;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ startRead(): void;
+ halfClose(): void;
+ setCredentials(credentials: CallCredentials): void;
+ getCallNumber(): number;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js
new file mode 100644
index 0000000..964891a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js
@@ -0,0 +1,269 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.LoadBalancingCall = void 0;
+const connectivity_state_1 = require("./connectivity-state");
+const constants_1 = require("./constants");
+const deadline_1 = require("./deadline");
+const metadata_1 = require("./metadata");
+const picker_1 = require("./picker");
+const uri_parser_1 = require("./uri-parser");
+const logging = require("./logging");
+const control_plane_status_1 = require("./control-plane-status");
+const http2 = require("http2");
+const TRACER_NAME = 'load_balancing_call';
+class LoadBalancingCall {
+ constructor(channel, callConfig, methodName, host, credentials, deadline, callNumber) {
+ var _a, _b;
+ this.channel = channel;
+ this.callConfig = callConfig;
+ this.methodName = methodName;
+ this.host = host;
+ this.credentials = credentials;
+ this.deadline = deadline;
+ this.callNumber = callNumber;
+ this.child = null;
+ this.readPending = false;
+ this.pendingMessage = null;
+ this.pendingHalfClose = false;
+ this.ended = false;
+ this.metadata = null;
+ this.listener = null;
+ this.onCallEnded = null;
+ const splitPath = this.methodName.split('/');
+ let serviceName = '';
+ /* The standard path format is "/{serviceName}/{methodName}", so if we split
+ * by '/', the first item should be empty and the second should be the
+ * service name */
+ if (splitPath.length >= 2) {
+ serviceName = splitPath[1];
+ }
+ const hostname = (_b = (_a = (0, uri_parser_1.splitHostPort)(this.host)) === null || _a === void 0 ? void 0 : _a.host) !== null && _b !== void 0 ? _b : 'localhost';
+ /* Currently, call credentials are only allowed on HTTPS connections, so we
+ * can assume that the scheme is "https" */
+ this.serviceUrl = `https://${hostname}/${serviceName}`;
+ }
+ trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '[' + this.callNumber + '] ' + text);
+ }
+ outputStatus(status, progress) {
+ var _a, _b;
+ if (!this.ended) {
+ this.ended = true;
+ this.trace('ended with status: code=' +
+ status.code +
+ ' details="' +
+ status.details +
+ '"');
+ const finalStatus = Object.assign(Object.assign({}, status), { progress });
+ (_a = this.listener) === null || _a === void 0 ? void 0 : _a.onReceiveStatus(finalStatus);
+ (_b = this.onCallEnded) === null || _b === void 0 ? void 0 : _b.call(this, finalStatus.code);
+ }
+ }
+ doPick() {
+ var _a, _b;
+ if (this.ended) {
+ return;
+ }
+ if (!this.metadata) {
+ throw new Error('doPick called before start');
+ }
+ this.trace('Pick called');
+ const pickResult = this.channel.doPick(this.metadata, this.callConfig.pickInformation);
+ const subchannelString = pickResult.subchannel
+ ? '(' +
+ pickResult.subchannel.getChannelzRef().id +
+ ') ' +
+ pickResult.subchannel.getAddress()
+ : '' + pickResult.subchannel;
+ this.trace('Pick result: ' +
+ picker_1.PickResultType[pickResult.pickResultType] +
+ ' subchannel: ' +
+ subchannelString +
+ ' status: ' +
+ ((_a = pickResult.status) === null || _a === void 0 ? void 0 : _a.code) +
+ ' ' +
+ ((_b = pickResult.status) === null || _b === void 0 ? void 0 : _b.details));
+ switch (pickResult.pickResultType) {
+ case picker_1.PickResultType.COMPLETE:
+ this.credentials
+ .generateMetadata({ service_url: this.serviceUrl })
+ .then(credsMetadata => {
+ var _a, _b, _c;
+ /* If this call was cancelled (e.g. by the deadline) before
+ * metadata generation finished, we shouldn't do anything with
+ * it. */
+ if (this.ended) {
+ this.trace('Credentials metadata generation finished after call ended');
+ return;
+ }
+ const finalMetadata = this.metadata.clone();
+ finalMetadata.merge(credsMetadata);
+ if (finalMetadata.get('authorization').length > 1) {
+ this.outputStatus({
+ code: constants_1.Status.INTERNAL,
+ details: '"authorization" metadata cannot have multiple values',
+ metadata: new metadata_1.Metadata(),
+ }, 'PROCESSED');
+ }
+ if (pickResult.subchannel.getConnectivityState() !==
+ connectivity_state_1.ConnectivityState.READY) {
+ this.trace('Picked subchannel ' +
+ subchannelString +
+ ' has state ' +
+ connectivity_state_1.ConnectivityState[pickResult.subchannel.getConnectivityState()] +
+ ' after getting credentials metadata. Retrying pick');
+ this.doPick();
+ return;
+ }
+ if (this.deadline !== Infinity) {
+ finalMetadata.set('grpc-timeout', (0, deadline_1.getDeadlineTimeoutString)(this.deadline));
+ }
+ try {
+ this.child = pickResult
+ .subchannel.getRealSubchannel()
+ .createCall(finalMetadata, this.host, this.methodName, {
+ onReceiveMetadata: metadata => {
+ this.trace('Received metadata');
+ this.listener.onReceiveMetadata(metadata);
+ },
+ onReceiveMessage: message => {
+ this.trace('Received message');
+ this.listener.onReceiveMessage(message);
+ },
+ onReceiveStatus: status => {
+ this.trace('Received status');
+ if (status.rstCode ===
+ http2.constants.NGHTTP2_REFUSED_STREAM) {
+ this.outputStatus(status, 'REFUSED');
+ }
+ else {
+ this.outputStatus(status, 'PROCESSED');
+ }
+ },
+ });
+ }
+ catch (error) {
+ this.trace('Failed to start call on picked subchannel ' +
+ subchannelString +
+ ' with error ' +
+ error.message);
+ this.outputStatus({
+ code: constants_1.Status.INTERNAL,
+ details: 'Failed to start HTTP/2 stream with error ' +
+ error.message,
+ metadata: new metadata_1.Metadata(),
+ }, 'NOT_STARTED');
+ return;
+ }
+ (_b = (_a = this.callConfig).onCommitted) === null || _b === void 0 ? void 0 : _b.call(_a);
+ (_c = pickResult.onCallStarted) === null || _c === void 0 ? void 0 : _c.call(pickResult);
+ this.onCallEnded = pickResult.onCallEnded;
+ this.trace('Created child call [' + this.child.getCallNumber() + ']');
+ if (this.readPending) {
+ this.child.startRead();
+ }
+ if (this.pendingMessage) {
+ this.child.sendMessageWithContext(this.pendingMessage.context, this.pendingMessage.message);
+ }
+ if (this.pendingHalfClose) {
+ this.child.halfClose();
+ }
+ }, (error) => {
+ // We assume the error code isn't 0 (Status.OK)
+ const { code, details } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(typeof error.code === 'number' ? error.code : constants_1.Status.UNKNOWN, `Getting metadata from plugin failed with error: ${error.message}`);
+ this.outputStatus({
+ code: code,
+ details: details,
+ metadata: new metadata_1.Metadata(),
+ }, 'PROCESSED');
+ });
+ break;
+ case picker_1.PickResultType.DROP:
+ const { code, details } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(pickResult.status.code, pickResult.status.details);
+ setImmediate(() => {
+ this.outputStatus({ code, details, metadata: pickResult.status.metadata }, 'DROP');
+ });
+ break;
+ case picker_1.PickResultType.TRANSIENT_FAILURE:
+ if (this.metadata.getOptions().waitForReady) {
+ this.channel.queueCallForPick(this);
+ }
+ else {
+ const { code, details } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(pickResult.status.code, pickResult.status.details);
+ setImmediate(() => {
+ this.outputStatus({ code, details, metadata: pickResult.status.metadata }, 'PROCESSED');
+ });
+ }
+ break;
+ case picker_1.PickResultType.QUEUE:
+ this.channel.queueCallForPick(this);
+ }
+ }
+ cancelWithStatus(status, details) {
+ var _a;
+ this.trace('cancelWithStatus code: ' + status + ' details: "' + details + '"');
+ (_a = this.child) === null || _a === void 0 ? void 0 : _a.cancelWithStatus(status, details);
+ this.outputStatus({ code: status, details: details, metadata: new metadata_1.Metadata() }, 'PROCESSED');
+ }
+ getPeer() {
+ var _a, _b;
+ return (_b = (_a = this.child) === null || _a === void 0 ? void 0 : _a.getPeer()) !== null && _b !== void 0 ? _b : this.channel.getTarget();
+ }
+ start(metadata, listener) {
+ this.trace('start called');
+ this.listener = listener;
+ this.metadata = metadata;
+ this.doPick();
+ }
+ sendMessageWithContext(context, message) {
+ this.trace('write() called with message of length ' + message.length);
+ if (this.child) {
+ this.child.sendMessageWithContext(context, message);
+ }
+ else {
+ this.pendingMessage = { context, message };
+ }
+ }
+ startRead() {
+ this.trace('startRead called');
+ if (this.child) {
+ this.child.startRead();
+ }
+ else {
+ this.readPending = true;
+ }
+ }
+ halfClose() {
+ this.trace('halfClose called');
+ if (this.child) {
+ this.child.halfClose();
+ }
+ else {
+ this.pendingHalfClose = true;
+ }
+ }
+ setCredentials(credentials) {
+ throw new Error('Method not implemented.');
+ }
+ getCallNumber() {
+ return this.callNumber;
+ }
+}
+exports.LoadBalancingCall = LoadBalancingCall;
+//# sourceMappingURL=load-balancing-call.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js.map
new file mode 100644
index 0000000..ebf7fd5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"load-balancing-call.js","sourceRoot":"","sources":["../../src/load-balancing-call.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.d.ts
new file mode 100644
index 0000000..7ac65fa
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.d.ts
@@ -0,0 +1,8 @@
+/// <reference types="node" />
+import { LogVerbosity } from './constants';
+export declare const getLogger: () => Partial<Console>;
+export declare const setLogger: (logger: Partial<Console>) => void;
+export declare const setLoggerVerbosity: (verbosity: LogVerbosity) => void;
+export declare const log: (severity: LogVerbosity, ...args: any[]) => void;
+export declare function trace(severity: LogVerbosity, tracer: string, text: string): void;
+export declare function isTracerEnabled(tracer: string): boolean;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js
new file mode 100644
index 0000000..3686d4d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js
@@ -0,0 +1,114 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+var _a, _b, _c, _d;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isTracerEnabled = exports.trace = exports.log = exports.setLoggerVerbosity = exports.setLogger = exports.getLogger = void 0;
+const constants_1 = require("./constants");
+const process_1 = require("process");
+const clientVersion = require('../../package.json').version;
+const DEFAULT_LOGGER = {
+ error: (message, ...optionalParams) => {
+ console.error('E ' + message, ...optionalParams);
+ },
+ info: (message, ...optionalParams) => {
+ console.error('I ' + message, ...optionalParams);
+ },
+ debug: (message, ...optionalParams) => {
+ console.error('D ' + message, ...optionalParams);
+ },
+};
+let _logger = DEFAULT_LOGGER;
+let _logVerbosity = constants_1.LogVerbosity.ERROR;
+const verbosityString = (_b = (_a = process.env.GRPC_NODE_VERBOSITY) !== null && _a !== void 0 ? _a : process.env.GRPC_VERBOSITY) !== null && _b !== void 0 ? _b : '';
+switch (verbosityString.toUpperCase()) {
+ case 'DEBUG':
+ _logVerbosity = constants_1.LogVerbosity.DEBUG;
+ break;
+ case 'INFO':
+ _logVerbosity = constants_1.LogVerbosity.INFO;
+ break;
+ case 'ERROR':
+ _logVerbosity = constants_1.LogVerbosity.ERROR;
+ break;
+ case 'NONE':
+ _logVerbosity = constants_1.LogVerbosity.NONE;
+ break;
+ default:
+ // Ignore any other values
+}
+const getLogger = () => {
+ return _logger;
+};
+exports.getLogger = getLogger;
+const setLogger = (logger) => {
+ _logger = logger;
+};
+exports.setLogger = setLogger;
+const setLoggerVerbosity = (verbosity) => {
+ _logVerbosity = verbosity;
+};
+exports.setLoggerVerbosity = setLoggerVerbosity;
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+const log = (severity, ...args) => {
+ let logFunction;
+ if (severity >= _logVerbosity) {
+ switch (severity) {
+ case constants_1.LogVerbosity.DEBUG:
+ logFunction = _logger.debug;
+ break;
+ case constants_1.LogVerbosity.INFO:
+ logFunction = _logger.info;
+ break;
+ case constants_1.LogVerbosity.ERROR:
+ logFunction = _logger.error;
+ break;
+ }
+ /* Fall back to _logger.error when other methods are not available for
+ * compatiblity with older behavior that always logged to _logger.error */
+ if (!logFunction) {
+ logFunction = _logger.error;
+ }
+ if (logFunction) {
+ logFunction.bind(_logger)(...args);
+ }
+ }
+};
+exports.log = log;
+const tracersString = (_d = (_c = process.env.GRPC_NODE_TRACE) !== null && _c !== void 0 ? _c : process.env.GRPC_TRACE) !== null && _d !== void 0 ? _d : '';
+const enabledTracers = new Set();
+const disabledTracers = new Set();
+for (const tracerName of tracersString.split(',')) {
+ if (tracerName.startsWith('-')) {
+ disabledTracers.add(tracerName.substring(1));
+ }
+ else {
+ enabledTracers.add(tracerName);
+ }
+}
+const allEnabled = enabledTracers.has('all');
+function trace(severity, tracer, text) {
+ if (isTracerEnabled(tracer)) {
+ (0, exports.log)(severity, new Date().toISOString() + ' | v' + clientVersion + ' ' + process_1.pid + ' | ' + tracer + ' | ' + text);
+ }
+}
+exports.trace = trace;
+function isTracerEnabled(tracer) {
+ return (!disabledTracers.has(tracer) && (allEnabled || enabledTracers.has(tracer)));
+}
+exports.isTracerEnabled = isTracerEnabled;
+//# sourceMappingURL=logging.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js.map
new file mode 100644
index 0000000..cf90e6f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/logging.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.d.ts
new file mode 100644
index 0000000..39b59c1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.d.ts
@@ -0,0 +1,72 @@
+/// <reference types="node" />
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { Client } from './client';
+import { UntypedServiceImplementation } from './server';
+export interface Serialize<T> {
+ (value: T): Buffer;
+}
+export interface Deserialize<T> {
+ (bytes: Buffer): T;
+}
+export interface ClientMethodDefinition<RequestType, ResponseType> {
+ path: string;
+ requestStream: boolean;
+ responseStream: boolean;
+ requestSerialize: Serialize<RequestType>;
+ responseDeserialize: Deserialize<ResponseType>;
+ originalName?: string;
+}
+export interface ServerMethodDefinition<RequestType, ResponseType> {
+ path: string;
+ requestStream: boolean;
+ responseStream: boolean;
+ responseSerialize: Serialize<ResponseType>;
+ requestDeserialize: Deserialize<RequestType>;
+ originalName?: string;
+}
+export interface MethodDefinition<RequestType, ResponseType> extends ClientMethodDefinition<RequestType, ResponseType>, ServerMethodDefinition<RequestType, ResponseType> {
+}
+export type ServiceDefinition<ImplementationType = UntypedServiceImplementation> = {
+ readonly [index in keyof ImplementationType]: MethodDefinition<any, any>;
+};
+export interface ProtobufTypeDefinition {
+ format: string;
+ type: object;
+ fileDescriptorProtos: Buffer[];
+}
+export interface PackageDefinition {
+ [index: string]: ServiceDefinition | ProtobufTypeDefinition;
+}
+export interface ServiceClient extends Client {
+ [methodName: string]: Function;
+}
+export interface ServiceClientConstructor {
+ new (address: string, credentials: ChannelCredentials, options?: Partial<ChannelOptions>): ServiceClient;
+ service: ServiceDefinition;
+ serviceName: string;
+}
+/**
+ * Creates a constructor for a client with the given methods, as specified in
+ * the methods argument. The resulting class will have an instance method for
+ * each method in the service, which is a partial application of one of the
+ * [Client]{@link grpc.Client} request methods, depending on `requestSerialize`
+ * and `responseSerialize`, with the `method`, `serialize`, and `deserialize`
+ * arguments predefined.
+ * @param methods An object mapping method names to
+ * method attributes
+ * @param serviceName The fully qualified name of the service
+ * @param classOptions An options object.
+ * @return New client constructor, which is a subclass of
+ * {@link grpc.Client}, and has the same arguments as that constructor.
+ */
+export declare function makeClientConstructor(methods: ServiceDefinition, serviceName: string, classOptions?: {}): ServiceClientConstructor;
+export interface GrpcObject {
+ [index: string]: GrpcObject | ServiceClientConstructor | ProtobufTypeDefinition;
+}
+/**
+ * Load a gRPC package definition as a gRPC object hierarchy.
+ * @param packageDef The package definition object.
+ * @return The resulting gRPC object.
+ */
+export declare function loadPackageDefinition(packageDef: PackageDefinition): GrpcObject;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js
new file mode 100644
index 0000000..6f90569
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js
@@ -0,0 +1,144 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.loadPackageDefinition = exports.makeClientConstructor = void 0;
+const client_1 = require("./client");
+/**
+ * Map with short names for each of the requester maker functions. Used in
+ * makeClientConstructor
+ * @private
+ */
+const requesterFuncs = {
+ unary: client_1.Client.prototype.makeUnaryRequest,
+ server_stream: client_1.Client.prototype.makeServerStreamRequest,
+ client_stream: client_1.Client.prototype.makeClientStreamRequest,
+ bidi: client_1.Client.prototype.makeBidiStreamRequest,
+};
+/**
+ * Returns true, if given key is included in the blacklisted
+ * keys.
+ * @param key key for check, string.
+ */
+function isPrototypePolluted(key) {
+ return ['__proto__', 'prototype', 'constructor'].includes(key);
+}
+/**
+ * Creates a constructor for a client with the given methods, as specified in
+ * the methods argument. The resulting class will have an instance method for
+ * each method in the service, which is a partial application of one of the
+ * [Client]{@link grpc.Client} request methods, depending on `requestSerialize`
+ * and `responseSerialize`, with the `method`, `serialize`, and `deserialize`
+ * arguments predefined.
+ * @param methods An object mapping method names to
+ * method attributes
+ * @param serviceName The fully qualified name of the service
+ * @param classOptions An options object.
+ * @return New client constructor, which is a subclass of
+ * {@link grpc.Client}, and has the same arguments as that constructor.
+ */
+function makeClientConstructor(methods, serviceName, classOptions) {
+ if (!classOptions) {
+ classOptions = {};
+ }
+ class ServiceClientImpl extends client_1.Client {
+ }
+ Object.keys(methods).forEach(name => {
+ if (isPrototypePolluted(name)) {
+ return;
+ }
+ const attrs = methods[name];
+ let methodType;
+ // TODO(murgatroid99): Verify that we don't need this anymore
+ if (typeof name === 'string' && name.charAt(0) === '$') {
+ throw new Error('Method names cannot start with $');
+ }
+ if (attrs.requestStream) {
+ if (attrs.responseStream) {
+ methodType = 'bidi';
+ }
+ else {
+ methodType = 'client_stream';
+ }
+ }
+ else {
+ if (attrs.responseStream) {
+ methodType = 'server_stream';
+ }
+ else {
+ methodType = 'unary';
+ }
+ }
+ const serialize = attrs.requestSerialize;
+ const deserialize = attrs.responseDeserialize;
+ const methodFunc = partial(requesterFuncs[methodType], attrs.path, serialize, deserialize);
+ ServiceClientImpl.prototype[name] = methodFunc;
+ // Associate all provided attributes with the method
+ Object.assign(ServiceClientImpl.prototype[name], attrs);
+ if (attrs.originalName && !isPrototypePolluted(attrs.originalName)) {
+ ServiceClientImpl.prototype[attrs.originalName] =
+ ServiceClientImpl.prototype[name];
+ }
+ });
+ ServiceClientImpl.service = methods;
+ ServiceClientImpl.serviceName = serviceName;
+ return ServiceClientImpl;
+}
+exports.makeClientConstructor = makeClientConstructor;
+function partial(fn, path, serialize, deserialize) {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ return function (...args) {
+ return fn.call(this, path, serialize, deserialize, ...args);
+ };
+}
+function isProtobufTypeDefinition(obj) {
+ return 'format' in obj;
+}
+/**
+ * Load a gRPC package definition as a gRPC object hierarchy.
+ * @param packageDef The package definition object.
+ * @return The resulting gRPC object.
+ */
+function loadPackageDefinition(packageDef) {
+ const result = {};
+ for (const serviceFqn in packageDef) {
+ if (Object.prototype.hasOwnProperty.call(packageDef, serviceFqn)) {
+ const service = packageDef[serviceFqn];
+ const nameComponents = serviceFqn.split('.');
+ if (nameComponents.some((comp) => isPrototypePolluted(comp))) {
+ continue;
+ }
+ const serviceName = nameComponents[nameComponents.length - 1];
+ let current = result;
+ for (const packageName of nameComponents.slice(0, -1)) {
+ if (!current[packageName]) {
+ current[packageName] = {};
+ }
+ current = current[packageName];
+ }
+ if (isProtobufTypeDefinition(service)) {
+ current[serviceName] = service;
+ }
+ else {
+ current[serviceName] = makeClientConstructor(service, serviceName, {});
+ }
+ }
+ }
+ return result;
+}
+exports.loadPackageDefinition = loadPackageDefinition;
+//# sourceMappingURL=make-client.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js.map
new file mode 100644
index 0000000..adfab3e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/make-client.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"make-client.js","sourceRoot":"","sources":["../../src/make-client.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.d.ts
new file mode 100644
index 0000000..1943b75
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.d.ts
@@ -0,0 +1,87 @@
+/// <reference types="node" />
+/// <reference types="node" />
+/// <reference types="node" />
+import * as http2 from 'http2';
+export type MetadataValue = string | Buffer;
+export type MetadataObject = Map<string, MetadataValue[]>;
+export interface MetadataOptions {
+ idempotentRequest?: boolean;
+ waitForReady?: boolean;
+ cacheableRequest?: boolean;
+ corked?: boolean;
+}
+/**
+ * A class for storing metadata. Keys are normalized to lowercase ASCII.
+ */
+export declare class Metadata {
+ protected internalRepr: MetadataObject;
+ private options;
+ constructor(options?: MetadataOptions);
+ /**
+ * Sets the given value for the given key by replacing any other values
+ * associated with that key. Normalizes the key.
+ * @param key The key to whose value should be set.
+ * @param value The value to set. Must be a buffer if and only
+ * if the normalized key ends with '-bin'.
+ */
+ set(key: string, value: MetadataValue): void;
+ /**
+ * Adds the given value for the given key by appending to a list of previous
+ * values associated with that key. Normalizes the key.
+ * @param key The key for which a new value should be appended.
+ * @param value The value to add. Must be a buffer if and only
+ * if the normalized key ends with '-bin'.
+ */
+ add(key: string, value: MetadataValue): void;
+ /**
+ * Removes the given key and any associated values. Normalizes the key.
+ * @param key The key whose values should be removed.
+ */
+ remove(key: string): void;
+ /**
+ * Gets a list of all values associated with the key. Normalizes the key.
+ * @param key The key whose value should be retrieved.
+ * @return A list of values associated with the given key.
+ */
+ get(key: string): MetadataValue[];
+ /**
+ * Gets a plain object mapping each key to the first value associated with it.
+ * This reflects the most common way that people will want to see metadata.
+ * @return A key/value mapping of the metadata.
+ */
+ getMap(): {
+ [key: string]: MetadataValue;
+ };
+ /**
+ * Clones the metadata object.
+ * @return The newly cloned object.
+ */
+ clone(): Metadata;
+ /**
+ * Merges all key-value pairs from a given Metadata object into this one.
+ * If both this object and the given object have values in the same key,
+ * values from the other Metadata object will be appended to this object's
+ * values.
+ * @param other A Metadata object.
+ */
+ merge(other: Metadata): void;
+ setOptions(options: MetadataOptions): void;
+ getOptions(): MetadataOptions;
+ /**
+ * Creates an OutgoingHttpHeaders object that can be used with the http2 API.
+ */
+ toHttp2Headers(): http2.OutgoingHttpHeaders;
+ /**
+ * This modifies the behavior of JSON.stringify to show an object
+ * representation of the metadata map.
+ */
+ toJSON(): {
+ [key: string]: MetadataValue[];
+ };
+ /**
+ * Returns a new Metadata object based fields in a given IncomingHttpHeaders
+ * object.
+ * @param headers An IncomingHttpHeaders object.
+ */
+ static fromHttp2Headers(headers: http2.IncomingHttpHeaders): Metadata;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js
new file mode 100644
index 0000000..c0ea411
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js
@@ -0,0 +1,249 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Metadata = void 0;
+const logging_1 = require("./logging");
+const constants_1 = require("./constants");
+const error_1 = require("./error");
+const LEGAL_KEY_REGEX = /^[0-9a-z_.-]+$/;
+const LEGAL_NON_BINARY_VALUE_REGEX = /^[ -~]*$/;
+function isLegalKey(key) {
+ return LEGAL_KEY_REGEX.test(key);
+}
+function isLegalNonBinaryValue(value) {
+ return LEGAL_NON_BINARY_VALUE_REGEX.test(value);
+}
+function isBinaryKey(key) {
+ return key.endsWith('-bin');
+}
+function isCustomMetadata(key) {
+ return !key.startsWith('grpc-');
+}
+function normalizeKey(key) {
+ return key.toLowerCase();
+}
+function validate(key, value) {
+ if (!isLegalKey(key)) {
+ throw new Error('Metadata key "' + key + '" contains illegal characters');
+ }
+ if (value !== null && value !== undefined) {
+ if (isBinaryKey(key)) {
+ if (!Buffer.isBuffer(value)) {
+ throw new Error("keys that end with '-bin' must have Buffer values");
+ }
+ }
+ else {
+ if (Buffer.isBuffer(value)) {
+ throw new Error("keys that don't end with '-bin' must have String values");
+ }
+ if (!isLegalNonBinaryValue(value)) {
+ throw new Error('Metadata string value "' + value + '" contains illegal characters');
+ }
+ }
+ }
+}
+/**
+ * A class for storing metadata. Keys are normalized to lowercase ASCII.
+ */
+class Metadata {
+ constructor(options = {}) {
+ this.internalRepr = new Map();
+ this.options = options;
+ }
+ /**
+ * Sets the given value for the given key by replacing any other values
+ * associated with that key. Normalizes the key.
+ * @param key The key to whose value should be set.
+ * @param value The value to set. Must be a buffer if and only
+ * if the normalized key ends with '-bin'.
+ */
+ set(key, value) {
+ key = normalizeKey(key);
+ validate(key, value);
+ this.internalRepr.set(key, [value]);
+ }
+ /**
+ * Adds the given value for the given key by appending to a list of previous
+ * values associated with that key. Normalizes the key.
+ * @param key The key for which a new value should be appended.
+ * @param value The value to add. Must be a buffer if and only
+ * if the normalized key ends with '-bin'.
+ */
+ add(key, value) {
+ key = normalizeKey(key);
+ validate(key, value);
+ const existingValue = this.internalRepr.get(key);
+ if (existingValue === undefined) {
+ this.internalRepr.set(key, [value]);
+ }
+ else {
+ existingValue.push(value);
+ }
+ }
+ /**
+ * Removes the given key and any associated values. Normalizes the key.
+ * @param key The key whose values should be removed.
+ */
+ remove(key) {
+ key = normalizeKey(key);
+ // validate(key);
+ this.internalRepr.delete(key);
+ }
+ /**
+ * Gets a list of all values associated with the key. Normalizes the key.
+ * @param key The key whose value should be retrieved.
+ * @return A list of values associated with the given key.
+ */
+ get(key) {
+ key = normalizeKey(key);
+ // validate(key);
+ return this.internalRepr.get(key) || [];
+ }
+ /**
+ * Gets a plain object mapping each key to the first value associated with it.
+ * This reflects the most common way that people will want to see metadata.
+ * @return A key/value mapping of the metadata.
+ */
+ getMap() {
+ const result = {};
+ for (const [key, values] of this.internalRepr) {
+ if (values.length > 0) {
+ const v = values[0];
+ result[key] = Buffer.isBuffer(v) ? Buffer.from(v) : v;
+ }
+ }
+ return result;
+ }
+ /**
+ * Clones the metadata object.
+ * @return The newly cloned object.
+ */
+ clone() {
+ const newMetadata = new Metadata(this.options);
+ const newInternalRepr = newMetadata.internalRepr;
+ for (const [key, value] of this.internalRepr) {
+ const clonedValue = value.map(v => {
+ if (Buffer.isBuffer(v)) {
+ return Buffer.from(v);
+ }
+ else {
+ return v;
+ }
+ });
+ newInternalRepr.set(key, clonedValue);
+ }
+ return newMetadata;
+ }
+ /**
+ * Merges all key-value pairs from a given Metadata object into this one.
+ * If both this object and the given object have values in the same key,
+ * values from the other Metadata object will be appended to this object's
+ * values.
+ * @param other A Metadata object.
+ */
+ merge(other) {
+ for (const [key, values] of other.internalRepr) {
+ const mergedValue = (this.internalRepr.get(key) || []).concat(values);
+ this.internalRepr.set(key, mergedValue);
+ }
+ }
+ setOptions(options) {
+ this.options = options;
+ }
+ getOptions() {
+ return this.options;
+ }
+ /**
+ * Creates an OutgoingHttpHeaders object that can be used with the http2 API.
+ */
+ toHttp2Headers() {
+ // NOTE: Node <8.9 formats http2 headers incorrectly.
+ const result = {};
+ for (const [key, values] of this.internalRepr) {
+ // We assume that the user's interaction with this object is limited to
+ // through its public API (i.e. keys and values are already validated).
+ result[key] = values.map(bufToString);
+ }
+ return result;
+ }
+ /**
+ * This modifies the behavior of JSON.stringify to show an object
+ * representation of the metadata map.
+ */
+ toJSON() {
+ const result = {};
+ for (const [key, values] of this.internalRepr) {
+ result[key] = values;
+ }
+ return result;
+ }
+ /**
+ * Returns a new Metadata object based fields in a given IncomingHttpHeaders
+ * object.
+ * @param headers An IncomingHttpHeaders object.
+ */
+ static fromHttp2Headers(headers) {
+ const result = new Metadata();
+ for (const key of Object.keys(headers)) {
+ // Reserved headers (beginning with `:`) are not valid keys.
+ if (key.charAt(0) === ':') {
+ continue;
+ }
+ const values = headers[key];
+ try {
+ if (isBinaryKey(key)) {
+ if (Array.isArray(values)) {
+ values.forEach(value => {
+ result.add(key, Buffer.from(value, 'base64'));
+ });
+ }
+ else if (values !== undefined) {
+ if (isCustomMetadata(key)) {
+ values.split(',').forEach(v => {
+ result.add(key, Buffer.from(v.trim(), 'base64'));
+ });
+ }
+ else {
+ result.add(key, Buffer.from(values, 'base64'));
+ }
+ }
+ }
+ else {
+ if (Array.isArray(values)) {
+ values.forEach(value => {
+ result.add(key, value);
+ });
+ }
+ else if (values !== undefined) {
+ result.add(key, values);
+ }
+ }
+ }
+ catch (error) {
+ const message = `Failed to add metadata entry ${key}: ${values}. ${(0, error_1.getErrorMessage)(error)}. For more information see https://github.com/grpc/grpc-node/issues/1173`;
+ (0, logging_1.log)(constants_1.LogVerbosity.ERROR, message);
+ }
+ }
+ return result;
+ }
+}
+exports.Metadata = Metadata;
+const bufToString = (val) => {
+ return Buffer.isBuffer(val) ? val.toString('base64') : val;
+};
+//# sourceMappingURL=metadata.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js.map
new file mode 100644
index 0000000..e3d809c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/metadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/metadata.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.d.ts
new file mode 100644
index 0000000..b424cc7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.d.ts
@@ -0,0 +1,28 @@
+/// <reference types="node" />
+import { Readable, Writable } from 'stream';
+import { EmitterAugmentation1 } from './events';
+export type WriteCallback = (error: Error | null | undefined) => void;
+export interface IntermediateObjectReadable<T> extends Readable {
+ read(size?: number): any & T;
+}
+export type ObjectReadable<T> = {
+ read(size?: number): T;
+} & EmitterAugmentation1<'data', T> & IntermediateObjectReadable<T>;
+export interface IntermediateObjectWritable<T> extends Writable {
+ _write(chunk: any & T, encoding: string, callback: Function): void;
+ write(chunk: any & T, cb?: WriteCallback): boolean;
+ write(chunk: any & T, encoding?: any, cb?: WriteCallback): boolean;
+ setDefaultEncoding(encoding: string): this;
+ end(): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(chunk: any & T, cb?: Function): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(chunk: any & T, encoding?: any, cb?: Function): ReturnType<Writable['end']> extends Writable ? this : void;
+}
+export interface ObjectWritable<T> extends IntermediateObjectWritable<T> {
+ _write(chunk: T, encoding: string, callback: Function): void;
+ write(chunk: T, cb?: Function): boolean;
+ write(chunk: T, encoding?: any, cb?: Function): boolean;
+ setDefaultEncoding(encoding: string): this;
+ end(): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(chunk: T, cb?: Function): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(chunk: T, encoding?: any, cb?: Function): ReturnType<Writable['end']> extends Writable ? this : void;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js
new file mode 100644
index 0000000..b947656
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js
@@ -0,0 +1,19 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=object-stream.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js.map
new file mode 100644
index 0000000..fe8b624
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/object-stream.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"object-stream.js","sourceRoot":"","sources":["../../src/object-stream.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.d.ts
new file mode 100644
index 0000000..3da17d6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.d.ts
@@ -0,0 +1,91 @@
+import { StatusObject } from './call-interface';
+import { Metadata } from './metadata';
+import { Status } from './constants';
+import { LoadBalancer } from './load-balancer';
+import { SubchannelInterface } from './subchannel-interface';
+export declare enum PickResultType {
+ COMPLETE = 0,
+ QUEUE = 1,
+ TRANSIENT_FAILURE = 2,
+ DROP = 3
+}
+export interface PickResult {
+ pickResultType: PickResultType;
+ /**
+ * The subchannel to use as the transport for the call. Only meaningful if
+ * `pickResultType` is COMPLETE. If null, indicates that the call should be
+ * dropped.
+ */
+ subchannel: SubchannelInterface | null;
+ /**
+ * The status object to end the call with. Populated if and only if
+ * `pickResultType` is TRANSIENT_FAILURE.
+ */
+ status: StatusObject | null;
+ onCallStarted: (() => void) | null;
+ onCallEnded: ((statusCode: Status) => void) | null;
+}
+export interface CompletePickResult extends PickResult {
+ pickResultType: PickResultType.COMPLETE;
+ subchannel: SubchannelInterface | null;
+ status: null;
+ onCallStarted: (() => void) | null;
+ onCallEnded: ((statusCode: Status) => void) | null;
+}
+export interface QueuePickResult extends PickResult {
+ pickResultType: PickResultType.QUEUE;
+ subchannel: null;
+ status: null;
+ onCallStarted: null;
+ onCallEnded: null;
+}
+export interface TransientFailurePickResult extends PickResult {
+ pickResultType: PickResultType.TRANSIENT_FAILURE;
+ subchannel: null;
+ status: StatusObject;
+ onCallStarted: null;
+ onCallEnded: null;
+}
+export interface DropCallPickResult extends PickResult {
+ pickResultType: PickResultType.DROP;
+ subchannel: null;
+ status: StatusObject;
+ onCallStarted: null;
+ onCallEnded: null;
+}
+export interface PickArgs {
+ metadata: Metadata;
+ extraPickInfo: {
+ [key: string]: string;
+ };
+}
+/**
+ * A proxy object representing the momentary state of a load balancer. Picks
+ * subchannels or returns other information based on that state. Should be
+ * replaced every time the load balancer changes state.
+ */
+export interface Picker {
+ pick(pickArgs: PickArgs): PickResult;
+}
+/**
+ * A standard picker representing a load balancer in the TRANSIENT_FAILURE
+ * state. Always responds to every pick request with an UNAVAILABLE status.
+ */
+export declare class UnavailablePicker implements Picker {
+ private status;
+ constructor(status?: Partial<StatusObject>);
+ pick(pickArgs: PickArgs): TransientFailurePickResult;
+}
+/**
+ * A standard picker representing a load balancer in the IDLE or CONNECTING
+ * state. Always responds to every pick request with a QUEUE pick result
+ * indicating that the pick should be tried again with the next `Picker`. Also
+ * reports back to the load balancer that a connection should be established
+ * once any pick is attempted.
+ */
+export declare class QueuePicker {
+ private loadBalancer;
+ private calledExitIdle;
+ constructor(loadBalancer: LoadBalancer);
+ pick(pickArgs: PickArgs): QueuePickResult;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js
new file mode 100644
index 0000000..2ae80a2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js
@@ -0,0 +1,78 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.QueuePicker = exports.UnavailablePicker = exports.PickResultType = void 0;
+const metadata_1 = require("./metadata");
+const constants_1 = require("./constants");
+var PickResultType;
+(function (PickResultType) {
+ PickResultType[PickResultType["COMPLETE"] = 0] = "COMPLETE";
+ PickResultType[PickResultType["QUEUE"] = 1] = "QUEUE";
+ PickResultType[PickResultType["TRANSIENT_FAILURE"] = 2] = "TRANSIENT_FAILURE";
+ PickResultType[PickResultType["DROP"] = 3] = "DROP";
+})(PickResultType || (exports.PickResultType = PickResultType = {}));
+/**
+ * A standard picker representing a load balancer in the TRANSIENT_FAILURE
+ * state. Always responds to every pick request with an UNAVAILABLE status.
+ */
+class UnavailablePicker {
+ constructor(status) {
+ this.status = Object.assign({ code: constants_1.Status.UNAVAILABLE, details: 'No connection established', metadata: new metadata_1.Metadata() }, status);
+ }
+ pick(pickArgs) {
+ return {
+ pickResultType: PickResultType.TRANSIENT_FAILURE,
+ subchannel: null,
+ status: this.status,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+}
+exports.UnavailablePicker = UnavailablePicker;
+/**
+ * A standard picker representing a load balancer in the IDLE or CONNECTING
+ * state. Always responds to every pick request with a QUEUE pick result
+ * indicating that the pick should be tried again with the next `Picker`. Also
+ * reports back to the load balancer that a connection should be established
+ * once any pick is attempted.
+ */
+class QueuePicker {
+ // Constructed with a load balancer. Calls exitIdle on it the first time pick is called
+ constructor(loadBalancer) {
+ this.loadBalancer = loadBalancer;
+ this.calledExitIdle = false;
+ }
+ pick(pickArgs) {
+ if (!this.calledExitIdle) {
+ process.nextTick(() => {
+ this.loadBalancer.exitIdle();
+ });
+ this.calledExitIdle = true;
+ }
+ return {
+ pickResultType: PickResultType.QUEUE,
+ subchannel: null,
+ status: null,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+}
+exports.QueuePicker = QueuePicker;
+//# sourceMappingURL=picker.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js.map
new file mode 100644
index 0000000..2d630d3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/picker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"picker.js","sourceRoot":"","sources":["../../src/picker.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAGH,yCAAsC;AACtC,2CAAqC;AAIrC,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,2DAAQ,CAAA;IACR,qDAAK,CAAA;IACL,6EAAiB,CAAA;IACjB,mDAAI,CAAA;AACN,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAiED;;;GAGG;AACH,MAAa,iBAAiB;IAE5B,YAAY,MAA8B;QACxC,IAAI,CAAC,MAAM,mBACT,IAAI,EAAE,kBAAM,CAAC,WAAW,EACxB,OAAO,EAAE,2BAA2B,EACpC,QAAQ,EAAE,IAAI,mBAAQ,EAAE,IACrB,MAAM,CACV,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAkB;QACrB,OAAO;YACL,cAAc,EAAE,cAAc,CAAC,iBAAiB;YAChD,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;CACF;AAnBD,8CAmBC;AAED;;;;;;GAMG;AACH,MAAa,WAAW;IAEtB,uFAAuF;IACvF,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAFtC,mBAAc,GAAG,KAAK,CAAC;IAEkB,CAAC;IAElD,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACpB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,OAAO;YACL,cAAc,EAAE,cAAc,CAAC,KAAK;YACpC,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;CACF;AApBD,kCAoBC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.d.ts
new file mode 100644
index 0000000..138f7f1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.d.ts
@@ -0,0 +1,13 @@
+/**
+ * The default TCP port to connect to if not explicitly specified in the target.
+ */
+export declare const DEFAULT_PORT = 443;
+/**
+ * Set up the DNS resolver class by registering it as the handler for the
+ * "dns:" prefix and as the default resolver.
+ */
+export declare function setup(): void;
+export interface DnsUrl {
+ host: string;
+ port?: string;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js
new file mode 100644
index 0000000..cfff3e5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js
@@ -0,0 +1,328 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setup = exports.DEFAULT_PORT = void 0;
+const resolver_1 = require("./resolver");
+const dns = require("dns");
+const util = require("util");
+const service_config_1 = require("./service-config");
+const constants_1 = require("./constants");
+const metadata_1 = require("./metadata");
+const logging = require("./logging");
+const constants_2 = require("./constants");
+const uri_parser_1 = require("./uri-parser");
+const net_1 = require("net");
+const backoff_timeout_1 = require("./backoff-timeout");
+const TRACER_NAME = 'dns_resolver';
+function trace(text) {
+ logging.trace(constants_2.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+/**
+ * The default TCP port to connect to if not explicitly specified in the target.
+ */
+exports.DEFAULT_PORT = 443;
+const DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS = 30000;
+const resolveTxtPromise = util.promisify(dns.resolveTxt);
+const dnsLookupPromise = util.promisify(dns.lookup);
+/**
+ * Merge any number of arrays into a single alternating array
+ * @param arrays
+ */
+function mergeArrays(...arrays) {
+ const result = [];
+ for (let i = 0; i <
+ Math.max.apply(null, arrays.map(array => array.length)); i++) {
+ for (const array of arrays) {
+ if (i < array.length) {
+ result.push(array[i]);
+ }
+ }
+ }
+ return result;
+}
+/**
+ * Resolver implementation that handles DNS names and IP addresses.
+ */
+class DnsResolver {
+ constructor(target, listener, channelOptions) {
+ var _a, _b, _c;
+ this.target = target;
+ this.listener = listener;
+ this.pendingLookupPromise = null;
+ this.pendingTxtPromise = null;
+ this.latestLookupResult = null;
+ this.latestServiceConfig = null;
+ this.latestServiceConfigError = null;
+ this.continueResolving = false;
+ this.isNextResolutionTimerRunning = false;
+ this.isServiceConfigEnabled = true;
+ this.returnedIpResult = false;
+ trace('Resolver constructed for target ' + (0, uri_parser_1.uriToString)(target));
+ const hostPort = (0, uri_parser_1.splitHostPort)(target.path);
+ if (hostPort === null) {
+ this.ipResult = null;
+ this.dnsHostname = null;
+ this.port = null;
+ }
+ else {
+ if ((0, net_1.isIPv4)(hostPort.host) || (0, net_1.isIPv6)(hostPort.host)) {
+ this.ipResult = [
+ {
+ host: hostPort.host,
+ port: (_a = hostPort.port) !== null && _a !== void 0 ? _a : exports.DEFAULT_PORT,
+ },
+ ];
+ this.dnsHostname = null;
+ this.port = null;
+ }
+ else {
+ this.ipResult = null;
+ this.dnsHostname = hostPort.host;
+ this.port = (_b = hostPort.port) !== null && _b !== void 0 ? _b : exports.DEFAULT_PORT;
+ }
+ }
+ this.percentage = Math.random() * 100;
+ if (channelOptions['grpc.service_config_disable_resolution'] === 1) {
+ this.isServiceConfigEnabled = false;
+ }
+ this.defaultResolutionError = {
+ code: constants_1.Status.UNAVAILABLE,
+ details: `Name resolution failed for target ${(0, uri_parser_1.uriToString)(this.target)}`,
+ metadata: new metadata_1.Metadata(),
+ };
+ const backoffOptions = {
+ initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],
+ maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],
+ };
+ this.backoff = new backoff_timeout_1.BackoffTimeout(() => {
+ if (this.continueResolving) {
+ this.startResolutionWithBackoff();
+ }
+ }, backoffOptions);
+ this.backoff.unref();
+ this.minTimeBetweenResolutionsMs =
+ (_c = channelOptions['grpc.dns_min_time_between_resolutions_ms']) !== null && _c !== void 0 ? _c : DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS;
+ this.nextResolutionTimer = setTimeout(() => { }, 0);
+ clearTimeout(this.nextResolutionTimer);
+ }
+ /**
+ * If the target is an IP address, just provide that address as a result.
+ * Otherwise, initiate A, AAAA, and TXT lookups
+ */
+ startResolution() {
+ if (this.ipResult !== null) {
+ if (!this.returnedIpResult) {
+ trace('Returning IP address for target ' + (0, uri_parser_1.uriToString)(this.target));
+ setImmediate(() => {
+ this.listener.onSuccessfulResolution(this.ipResult, null, null, null, {});
+ });
+ this.returnedIpResult = true;
+ }
+ this.backoff.stop();
+ this.backoff.reset();
+ this.stopNextResolutionTimer();
+ return;
+ }
+ if (this.dnsHostname === null) {
+ trace('Failed to parse DNS address ' + (0, uri_parser_1.uriToString)(this.target));
+ setImmediate(() => {
+ this.listener.onError({
+ code: constants_1.Status.UNAVAILABLE,
+ details: `Failed to parse DNS address ${(0, uri_parser_1.uriToString)(this.target)}`,
+ metadata: new metadata_1.Metadata(),
+ });
+ });
+ this.stopNextResolutionTimer();
+ }
+ else {
+ if (this.pendingLookupPromise !== null) {
+ return;
+ }
+ trace('Looking up DNS hostname ' + this.dnsHostname);
+ /* We clear out latestLookupResult here to ensure that it contains the
+ * latest result since the last time we started resolving. That way, the
+ * TXT resolution handler can use it, but only if it finishes second. We
+ * don't clear out any previous service config results because it's
+ * better to use a service config that's slightly out of date than to
+ * revert to an effectively blank one. */
+ this.latestLookupResult = null;
+ const hostname = this.dnsHostname;
+ /* We lookup both address families here and then split them up later
+ * because when looking up a single family, dns.lookup outputs an error
+ * if the name exists but there are no records for that family, and that
+ * error is indistinguishable from other kinds of errors */
+ this.pendingLookupPromise = dnsLookupPromise(hostname, { all: true });
+ this.pendingLookupPromise.then(addressList => {
+ if (this.pendingLookupPromise === null) {
+ return;
+ }
+ this.pendingLookupPromise = null;
+ this.backoff.reset();
+ this.backoff.stop();
+ const ip4Addresses = addressList.filter(addr => addr.family === 4);
+ const ip6Addresses = addressList.filter(addr => addr.family === 6);
+ this.latestLookupResult = mergeArrays(ip6Addresses, ip4Addresses).map(addr => ({ host: addr.address, port: +this.port }));
+ const allAddressesString = '[' +
+ this.latestLookupResult
+ .map(addr => addr.host + ':' + addr.port)
+ .join(',') +
+ ']';
+ trace('Resolved addresses for target ' +
+ (0, uri_parser_1.uriToString)(this.target) +
+ ': ' +
+ allAddressesString);
+ if (this.latestLookupResult.length === 0) {
+ this.listener.onError(this.defaultResolutionError);
+ return;
+ }
+ /* If the TXT lookup has not yet finished, both of the last two
+ * arguments will be null, which is the equivalent of getting an
+ * empty TXT response. When the TXT lookup does finish, its handler
+ * can update the service config by using the same address list */
+ this.listener.onSuccessfulResolution(this.latestLookupResult, this.latestServiceConfig, this.latestServiceConfigError, null, {});
+ }, err => {
+ if (this.pendingLookupPromise === null) {
+ return;
+ }
+ trace('Resolution error for target ' +
+ (0, uri_parser_1.uriToString)(this.target) +
+ ': ' +
+ err.message);
+ this.pendingLookupPromise = null;
+ this.stopNextResolutionTimer();
+ this.listener.onError(this.defaultResolutionError);
+ });
+ /* If there already is a still-pending TXT resolution, we can just use
+ * that result when it comes in */
+ if (this.isServiceConfigEnabled && this.pendingTxtPromise === null) {
+ /* We handle the TXT query promise differently than the others because
+ * the name resolution attempt as a whole is a success even if the TXT
+ * lookup fails */
+ this.pendingTxtPromise = resolveTxtPromise(hostname);
+ this.pendingTxtPromise.then(txtRecord => {
+ if (this.pendingTxtPromise === null) {
+ return;
+ }
+ this.pendingTxtPromise = null;
+ try {
+ this.latestServiceConfig = (0, service_config_1.extractAndSelectServiceConfig)(txtRecord, this.percentage);
+ }
+ catch (err) {
+ this.latestServiceConfigError = {
+ code: constants_1.Status.UNAVAILABLE,
+ details: `Parsing service config failed with error ${err.message}`,
+ metadata: new metadata_1.Metadata(),
+ };
+ }
+ if (this.latestLookupResult !== null) {
+ /* We rely here on the assumption that calling this function with
+ * identical parameters will be essentialy idempotent, and calling
+ * it with the same address list and a different service config
+ * should result in a fast and seamless switchover. */
+ this.listener.onSuccessfulResolution(this.latestLookupResult, this.latestServiceConfig, this.latestServiceConfigError, null, {});
+ }
+ }, err => {
+ /* If TXT lookup fails we should do nothing, which means that we
+ * continue to use the result of the most recent successful lookup,
+ * or the default null config object if there has never been a
+ * successful lookup. We do not set the latestServiceConfigError
+ * here because that is specifically used for response validation
+ * errors. We still need to handle this error so that it does not
+ * bubble up as an unhandled promise rejection. */
+ });
+ }
+ }
+ }
+ startNextResolutionTimer() {
+ var _a, _b;
+ clearTimeout(this.nextResolutionTimer);
+ this.nextResolutionTimer = (_b = (_a = setTimeout(() => {
+ this.stopNextResolutionTimer();
+ if (this.continueResolving) {
+ this.startResolutionWithBackoff();
+ }
+ }, this.minTimeBetweenResolutionsMs)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ this.isNextResolutionTimerRunning = true;
+ }
+ stopNextResolutionTimer() {
+ clearTimeout(this.nextResolutionTimer);
+ this.isNextResolutionTimerRunning = false;
+ }
+ startResolutionWithBackoff() {
+ if (this.pendingLookupPromise === null) {
+ this.continueResolving = false;
+ this.backoff.runOnce();
+ this.startNextResolutionTimer();
+ this.startResolution();
+ }
+ }
+ updateResolution() {
+ /* If there is a pending lookup, just let it finish. Otherwise, if the
+ * nextResolutionTimer or backoff timer is running, set the
+ * continueResolving flag to resolve when whichever of those timers
+ * fires. Otherwise, start resolving immediately. */
+ if (this.pendingLookupPromise === null) {
+ if (this.isNextResolutionTimerRunning || this.backoff.isRunning()) {
+ if (this.isNextResolutionTimerRunning) {
+ trace('resolution update delayed by "min time between resolutions" rate limit');
+ }
+ else {
+ trace('resolution update delayed by backoff timer until ' + this.backoff.getEndTime().toISOString());
+ }
+ this.continueResolving = true;
+ }
+ else {
+ this.startResolutionWithBackoff();
+ }
+ }
+ }
+ /**
+ * Reset the resolver to the same state it had when it was created. In-flight
+ * DNS requests cannot be cancelled, but they are discarded and their results
+ * will be ignored.
+ */
+ destroy() {
+ this.continueResolving = false;
+ this.backoff.reset();
+ this.backoff.stop();
+ this.stopNextResolutionTimer();
+ this.pendingLookupPromise = null;
+ this.pendingTxtPromise = null;
+ this.latestLookupResult = null;
+ this.latestServiceConfig = null;
+ this.latestServiceConfigError = null;
+ this.returnedIpResult = false;
+ }
+ /**
+ * Get the default authority for the given target. For IP targets, that is
+ * the IP address. For DNS targets, it is the hostname.
+ * @param target
+ */
+ static getDefaultAuthority(target) {
+ return target.path;
+ }
+}
+/**
+ * Set up the DNS resolver class by registering it as the handler for the
+ * "dns:" prefix and as the default resolver.
+ */
+function setup() {
+ (0, resolver_1.registerResolver)('dns', DnsResolver);
+ (0, resolver_1.registerDefaultScheme)('dns');
+}
+exports.setup = setup;
+//# sourceMappingURL=resolver-dns.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js.map
new file mode 100644
index 0000000..dda65e8
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-dns.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"resolver-dns.js","sourceRoot":"","sources":["../../src/resolver-dns.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.d.ts
new file mode 100644
index 0000000..2bec678
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.d.ts
@@ -0,0 +1 @@
+export declare function setup(): void;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js
new file mode 100644
index 0000000..c9c8a5d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js
@@ -0,0 +1,105 @@
+"use strict";
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setup = void 0;
+const net_1 = require("net");
+const constants_1 = require("./constants");
+const metadata_1 = require("./metadata");
+const resolver_1 = require("./resolver");
+const uri_parser_1 = require("./uri-parser");
+const logging = require("./logging");
+const TRACER_NAME = 'ip_resolver';
+function trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+const IPV4_SCHEME = 'ipv4';
+const IPV6_SCHEME = 'ipv6';
+/**
+ * The default TCP port to connect to if not explicitly specified in the target.
+ */
+const DEFAULT_PORT = 443;
+class IpResolver {
+ constructor(target, listener, channelOptions) {
+ var _a;
+ this.listener = listener;
+ this.addresses = [];
+ this.error = null;
+ this.hasReturnedResult = false;
+ trace('Resolver constructed for target ' + (0, uri_parser_1.uriToString)(target));
+ const addresses = [];
+ if (!(target.scheme === IPV4_SCHEME || target.scheme === IPV6_SCHEME)) {
+ this.error = {
+ code: constants_1.Status.UNAVAILABLE,
+ details: `Unrecognized scheme ${target.scheme} in IP resolver`,
+ metadata: new metadata_1.Metadata(),
+ };
+ return;
+ }
+ const pathList = target.path.split(',');
+ for (const path of pathList) {
+ const hostPort = (0, uri_parser_1.splitHostPort)(path);
+ if (hostPort === null) {
+ this.error = {
+ code: constants_1.Status.UNAVAILABLE,
+ details: `Failed to parse ${target.scheme} address ${path}`,
+ metadata: new metadata_1.Metadata(),
+ };
+ return;
+ }
+ if ((target.scheme === IPV4_SCHEME && !(0, net_1.isIPv4)(hostPort.host)) ||
+ (target.scheme === IPV6_SCHEME && !(0, net_1.isIPv6)(hostPort.host))) {
+ this.error = {
+ code: constants_1.Status.UNAVAILABLE,
+ details: `Failed to parse ${target.scheme} address ${path}`,
+ metadata: new metadata_1.Metadata(),
+ };
+ return;
+ }
+ addresses.push({
+ host: hostPort.host,
+ port: (_a = hostPort.port) !== null && _a !== void 0 ? _a : DEFAULT_PORT,
+ });
+ }
+ this.addresses = addresses;
+ trace('Parsed ' + target.scheme + ' address list ' + this.addresses);
+ }
+ updateResolution() {
+ if (!this.hasReturnedResult) {
+ this.hasReturnedResult = true;
+ process.nextTick(() => {
+ if (this.error) {
+ this.listener.onError(this.error);
+ }
+ else {
+ this.listener.onSuccessfulResolution(this.addresses, null, null, null, {});
+ }
+ });
+ }
+ }
+ destroy() {
+ this.hasReturnedResult = false;
+ }
+ static getDefaultAuthority(target) {
+ return target.path.split(',')[0];
+ }
+}
+function setup() {
+ (0, resolver_1.registerResolver)(IPV4_SCHEME, IpResolver);
+ (0, resolver_1.registerResolver)(IPV6_SCHEME, IpResolver);
+}
+exports.setup = setup;
+//# sourceMappingURL=resolver-ip.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js.map
new file mode 100644
index 0000000..6a8cfa0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-ip.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"resolver-ip.js","sourceRoot":"","sources":["../../src/resolver-ip.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.d.ts
new file mode 100644
index 0000000..2bec678
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.d.ts
@@ -0,0 +1 @@
+export declare function setup(): void;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js
new file mode 100644
index 0000000..5937fce
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js
@@ -0,0 +1,51 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setup = void 0;
+const resolver_1 = require("./resolver");
+class UdsResolver {
+ constructor(target, listener, channelOptions) {
+ this.listener = listener;
+ this.addresses = [];
+ this.hasReturnedResult = false;
+ let path;
+ if (target.authority === '') {
+ path = '/' + target.path;
+ }
+ else {
+ path = target.path;
+ }
+ this.addresses = [{ path }];
+ }
+ updateResolution() {
+ if (!this.hasReturnedResult) {
+ this.hasReturnedResult = true;
+ process.nextTick(this.listener.onSuccessfulResolution, this.addresses, null, null, null, {});
+ }
+ }
+ destroy() {
+ // This resolver owns no resources, so we do nothing here.
+ }
+ static getDefaultAuthority(target) {
+ return 'localhost';
+ }
+}
+function setup() {
+ (0, resolver_1.registerResolver)('unix', UdsResolver);
+}
+exports.setup = setup;
+//# sourceMappingURL=resolver-uds.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js.map
new file mode 100644
index 0000000..ce7f3bd
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver-uds.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"resolver-uds.js","sourceRoot":"","sources":["../../src/resolver-uds.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,yCAA0E;AAK1E,MAAM,WAAW;IAGf,YACE,MAAe,EACP,QAA0B,EAClC,cAA8B;QADtB,aAAQ,GAAR,QAAQ,CAAkB;QAJ5B,cAAS,GAAwB,EAAE,CAAC;QACpC,sBAAiB,GAAG,KAAK,CAAC;QAMhC,IAAI,IAAY,CAAC;QACjB,IAAI,MAAM,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,OAAO,CAAC,QAAQ,CACd,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EACpC,IAAI,CAAC,SAAS,EACd,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,0DAA0D;IAC5D,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,MAAe;QACxC,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED,SAAgB,KAAK;IACnB,IAAA,2BAAgB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAFD,sBAEC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.d.ts
new file mode 100644
index 0000000..35d2c74
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.d.ts
@@ -0,0 +1,105 @@
+import { MethodConfig, ServiceConfig } from './service-config';
+import { StatusObject } from './call-interface';
+import { SubchannelAddress } from './subchannel-address';
+import { GrpcUri } from './uri-parser';
+import { ChannelOptions } from './channel-options';
+import { Metadata } from './metadata';
+import { Status } from './constants';
+import { Filter, FilterFactory } from './filter';
+export interface CallConfig {
+ methodConfig: MethodConfig;
+ onCommitted?: () => void;
+ pickInformation: {
+ [key: string]: string;
+ };
+ status: Status;
+ dynamicFilterFactories: FilterFactory<Filter>[];
+}
+/**
+ * Selects a configuration for a method given the name and metadata. Defined in
+ * https://github.com/grpc/proposal/blob/master/A31-xds-timeout-support-and-config-selector.md#new-functionality-in-grpc
+ */
+export interface ConfigSelector {
+ (methodName: string, metadata: Metadata): CallConfig;
+}
+/**
+ * A listener object passed to the resolver's constructor that provides name
+ * resolution updates back to the resolver's owner.
+ */
+export interface ResolverListener {
+ /**
+ * Called whenever the resolver has new name resolution results to report
+ * @param addressList The new list of backend addresses
+ * @param serviceConfig The new service configuration corresponding to the
+ * `addressList`. Will be `null` if no service configuration was
+ * retrieved or if the service configuration was invalid
+ * @param serviceConfigError If non-`null`, indicates that the retrieved
+ * service configuration was invalid
+ */
+ onSuccessfulResolution(addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null, configSelector: ConfigSelector | null, attributes: {
+ [key: string]: unknown;
+ }): void;
+ /**
+ * Called whenever a name resolution attempt fails.
+ * @param error Describes how resolution failed
+ */
+ onError(error: StatusObject): void;
+}
+/**
+ * A resolver class that handles one or more of the name syntax schemes defined
+ * in the [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)
+ */
+export interface Resolver {
+ /**
+ * Indicates that the caller wants new name resolution data. Calling this
+ * function may eventually result in calling one of the `ResolverListener`
+ * functions, but that is not guaranteed. Those functions will never be
+ * called synchronously with the constructor or updateResolution.
+ */
+ updateResolution(): void;
+ /**
+ * Discard all resources owned by the resolver. A later call to
+ * `updateResolution` should reinitialize those resources. No
+ * `ResolverListener` callbacks should be called after `destroy` is called
+ * until `updateResolution` is called again.
+ */
+ destroy(): void;
+}
+export interface ResolverConstructor {
+ new (target: GrpcUri, listener: ResolverListener, channelOptions: ChannelOptions): Resolver;
+ /**
+ * Get the default authority for a target. This loosely corresponds to that
+ * target's hostname. Throws an error if this resolver class cannot parse the
+ * `target`.
+ * @param target
+ */
+ getDefaultAuthority(target: GrpcUri): string;
+}
+/**
+ * Register a resolver class to handle target names prefixed with the `prefix`
+ * string. This prefix should correspond to a URI scheme name listed in the
+ * [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)
+ * @param prefix
+ * @param resolverClass
+ */
+export declare function registerResolver(scheme: string, resolverClass: ResolverConstructor): void;
+/**
+ * Register a default resolver to handle target names that do not start with
+ * any registered prefix.
+ * @param resolverClass
+ */
+export declare function registerDefaultScheme(scheme: string): void;
+/**
+ * Create a name resolver for the specified target, if possible. Throws an
+ * error if no such name resolver can be created.
+ * @param target
+ * @param listener
+ */
+export declare function createResolver(target: GrpcUri, listener: ResolverListener, options: ChannelOptions): Resolver;
+/**
+ * Get the default authority for the specified target, if possible. Throws an
+ * error if no registered name resolver can parse that target string.
+ * @param target
+ */
+export declare function getDefaultAuthority(target: GrpcUri): string;
+export declare function mapUriDefaultScheme(target: GrpcUri): GrpcUri | null;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js
new file mode 100644
index 0000000..530cb83
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js
@@ -0,0 +1,88 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.mapUriDefaultScheme = exports.getDefaultAuthority = exports.createResolver = exports.registerDefaultScheme = exports.registerResolver = void 0;
+const uri_parser_1 = require("./uri-parser");
+const registeredResolvers = {};
+let defaultScheme = null;
+/**
+ * Register a resolver class to handle target names prefixed with the `prefix`
+ * string. This prefix should correspond to a URI scheme name listed in the
+ * [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)
+ * @param prefix
+ * @param resolverClass
+ */
+function registerResolver(scheme, resolverClass) {
+ registeredResolvers[scheme] = resolverClass;
+}
+exports.registerResolver = registerResolver;
+/**
+ * Register a default resolver to handle target names that do not start with
+ * any registered prefix.
+ * @param resolverClass
+ */
+function registerDefaultScheme(scheme) {
+ defaultScheme = scheme;
+}
+exports.registerDefaultScheme = registerDefaultScheme;
+/**
+ * Create a name resolver for the specified target, if possible. Throws an
+ * error if no such name resolver can be created.
+ * @param target
+ * @param listener
+ */
+function createResolver(target, listener, options) {
+ if (target.scheme !== undefined && target.scheme in registeredResolvers) {
+ return new registeredResolvers[target.scheme](target, listener, options);
+ }
+ else {
+ throw new Error(`No resolver could be created for target ${(0, uri_parser_1.uriToString)(target)}`);
+ }
+}
+exports.createResolver = createResolver;
+/**
+ * Get the default authority for the specified target, if possible. Throws an
+ * error if no registered name resolver can parse that target string.
+ * @param target
+ */
+function getDefaultAuthority(target) {
+ if (target.scheme !== undefined && target.scheme in registeredResolvers) {
+ return registeredResolvers[target.scheme].getDefaultAuthority(target);
+ }
+ else {
+ throw new Error(`Invalid target ${(0, uri_parser_1.uriToString)(target)}`);
+ }
+}
+exports.getDefaultAuthority = getDefaultAuthority;
+function mapUriDefaultScheme(target) {
+ if (target.scheme === undefined || !(target.scheme in registeredResolvers)) {
+ if (defaultScheme !== null) {
+ return {
+ scheme: defaultScheme,
+ authority: undefined,
+ path: (0, uri_parser_1.uriToString)(target),
+ };
+ }
+ else {
+ return null;
+ }
+ }
+ return target;
+}
+exports.mapUriDefaultScheme = mapUriDefaultScheme;
+//# sourceMappingURL=resolver.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js.map
new file mode 100644
index 0000000..93bb3bb
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolver.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/resolver.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAKH,6CAAoD;AAuFpD,MAAM,mBAAmB,GAA8C,EAAE,CAAC;AAC1E,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,MAAc,EACd,aAAkC;IAElC,mBAAmB,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;AAC9C,CAAC;AALD,4CAKC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,MAAc;IAClD,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAFD,sDAEC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAC5B,MAAe,EACf,QAA0B,EAC1B,OAAuB;IAEvB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACxE,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAA,wBAAW,EAAC,MAAM,CAAC,EAAE,CACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAZD,wCAYC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,MAAe;IACjD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACxE,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAA,wBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAND,kDAMC;AAED,SAAgB,mBAAmB,CAAC,MAAe;IACjD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,mBAAmB,CAAC,EAAE,CAAC;QAC3E,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,SAAS,EAAE,SAAS;gBACpB,IAAI,EAAE,IAAA,wBAAW,EAAC,MAAM,CAAC;aAC1B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAbD,kDAaC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.d.ts
new file mode 100644
index 0000000..6d98b81
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.d.ts
@@ -0,0 +1,45 @@
+/// <reference types="node" />
+import { CallCredentials } from './call-credentials';
+import { Call, CallStreamOptions, InterceptingListener, MessageContext, StatusObject } from './call-interface';
+import { Status } from './constants';
+import { FilterStackFactory } from './filter-stack';
+import { InternalChannel } from './internal-channel';
+import { Metadata } from './metadata';
+export declare class ResolvingCall implements Call {
+ private readonly channel;
+ private readonly method;
+ private readonly filterStackFactory;
+ private credentials;
+ private callNumber;
+ private child;
+ private readPending;
+ private pendingMessage;
+ private pendingHalfClose;
+ private ended;
+ private readFilterPending;
+ private writeFilterPending;
+ private pendingChildStatus;
+ private metadata;
+ private listener;
+ private deadline;
+ private host;
+ private statusWatchers;
+ private deadlineTimer;
+ private filterStack;
+ constructor(channel: InternalChannel, method: string, options: CallStreamOptions, filterStackFactory: FilterStackFactory, credentials: CallCredentials, callNumber: number);
+ private trace;
+ private runDeadlineTimer;
+ private outputStatus;
+ private sendMessageOnChild;
+ getConfig(): void;
+ reportResolverError(status: StatusObject): void;
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ start(metadata: Metadata, listener: InterceptingListener): void;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ startRead(): void;
+ halfClose(): void;
+ setCredentials(credentials: CallCredentials): void;
+ addStatusWatcher(watcher: (status: StatusObject) => void): void;
+ getCallNumber(): number;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js
new file mode 100644
index 0000000..061d4e6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js
@@ -0,0 +1,273 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ResolvingCall = void 0;
+const constants_1 = require("./constants");
+const deadline_1 = require("./deadline");
+const metadata_1 = require("./metadata");
+const logging = require("./logging");
+const control_plane_status_1 = require("./control-plane-status");
+const TRACER_NAME = 'resolving_call';
+class ResolvingCall {
+ constructor(channel, method, options, filterStackFactory, credentials, callNumber) {
+ this.channel = channel;
+ this.method = method;
+ this.filterStackFactory = filterStackFactory;
+ this.credentials = credentials;
+ this.callNumber = callNumber;
+ this.child = null;
+ this.readPending = false;
+ this.pendingMessage = null;
+ this.pendingHalfClose = false;
+ this.ended = false;
+ this.readFilterPending = false;
+ this.writeFilterPending = false;
+ this.pendingChildStatus = null;
+ this.metadata = null;
+ this.listener = null;
+ this.statusWatchers = [];
+ this.deadlineTimer = setTimeout(() => { }, 0);
+ this.filterStack = null;
+ this.deadline = options.deadline;
+ this.host = options.host;
+ if (options.parentCall) {
+ if (options.flags & constants_1.Propagate.CANCELLATION) {
+ options.parentCall.on('cancelled', () => {
+ this.cancelWithStatus(constants_1.Status.CANCELLED, 'Cancelled by parent call');
+ });
+ }
+ if (options.flags & constants_1.Propagate.DEADLINE) {
+ this.trace('Propagating deadline from parent: ' +
+ options.parentCall.getDeadline());
+ this.deadline = (0, deadline_1.minDeadline)(this.deadline, options.parentCall.getDeadline());
+ }
+ }
+ this.trace('Created');
+ this.runDeadlineTimer();
+ }
+ trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '[' + this.callNumber + '] ' + text);
+ }
+ runDeadlineTimer() {
+ clearTimeout(this.deadlineTimer);
+ this.trace('Deadline: ' + (0, deadline_1.deadlineToString)(this.deadline));
+ const timeout = (0, deadline_1.getRelativeTimeout)(this.deadline);
+ if (timeout !== Infinity) {
+ this.trace('Deadline will be reached in ' + timeout + 'ms');
+ const handleDeadline = () => {
+ this.cancelWithStatus(constants_1.Status.DEADLINE_EXCEEDED, 'Deadline exceeded');
+ };
+ if (timeout <= 0) {
+ process.nextTick(handleDeadline);
+ }
+ else {
+ this.deadlineTimer = setTimeout(handleDeadline, timeout);
+ }
+ }
+ }
+ outputStatus(status) {
+ if (!this.ended) {
+ this.ended = true;
+ if (!this.filterStack) {
+ this.filterStack = this.filterStackFactory.createFilter();
+ }
+ clearTimeout(this.deadlineTimer);
+ const filteredStatus = this.filterStack.receiveTrailers(status);
+ this.trace('ended with status: code=' +
+ filteredStatus.code +
+ ' details="' +
+ filteredStatus.details +
+ '"');
+ this.statusWatchers.forEach(watcher => watcher(filteredStatus));
+ process.nextTick(() => {
+ var _a;
+ (_a = this.listener) === null || _a === void 0 ? void 0 : _a.onReceiveStatus(filteredStatus);
+ });
+ }
+ }
+ sendMessageOnChild(context, message) {
+ if (!this.child) {
+ throw new Error('sendMessageonChild called with child not populated');
+ }
+ const child = this.child;
+ this.writeFilterPending = true;
+ this.filterStack.sendMessage(Promise.resolve({ message: message, flags: context.flags })).then(filteredMessage => {
+ this.writeFilterPending = false;
+ child.sendMessageWithContext(context, filteredMessage.message);
+ if (this.pendingHalfClose) {
+ child.halfClose();
+ }
+ }, (status) => {
+ this.cancelWithStatus(status.code, status.details);
+ });
+ }
+ getConfig() {
+ if (this.ended) {
+ return;
+ }
+ if (!this.metadata || !this.listener) {
+ throw new Error('getConfig called before start');
+ }
+ const configResult = this.channel.getConfig(this.method, this.metadata);
+ if (configResult.type === 'NONE') {
+ this.channel.queueCallForConfig(this);
+ return;
+ }
+ else if (configResult.type === 'ERROR') {
+ if (this.metadata.getOptions().waitForReady) {
+ this.channel.queueCallForConfig(this);
+ }
+ else {
+ this.outputStatus(configResult.error);
+ }
+ return;
+ }
+ // configResult.type === 'SUCCESS'
+ const config = configResult.config;
+ if (config.status !== constants_1.Status.OK) {
+ const { code, details } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(config.status, 'Failed to route call to method ' + this.method);
+ this.outputStatus({
+ code: code,
+ details: details,
+ metadata: new metadata_1.Metadata(),
+ });
+ return;
+ }
+ if (config.methodConfig.timeout) {
+ const configDeadline = new Date();
+ configDeadline.setSeconds(configDeadline.getSeconds() + config.methodConfig.timeout.seconds);
+ configDeadline.setMilliseconds(configDeadline.getMilliseconds() +
+ config.methodConfig.timeout.nanos / 1000000);
+ this.deadline = (0, deadline_1.minDeadline)(this.deadline, configDeadline);
+ this.runDeadlineTimer();
+ }
+ this.filterStackFactory.push(config.dynamicFilterFactories);
+ this.filterStack = this.filterStackFactory.createFilter();
+ this.filterStack.sendMetadata(Promise.resolve(this.metadata)).then(filteredMetadata => {
+ this.child = this.channel.createInnerCall(config, this.method, this.host, this.credentials, this.deadline);
+ this.trace('Created child [' + this.child.getCallNumber() + ']');
+ this.child.start(filteredMetadata, {
+ onReceiveMetadata: metadata => {
+ this.trace('Received metadata');
+ this.listener.onReceiveMetadata(this.filterStack.receiveMetadata(metadata));
+ },
+ onReceiveMessage: message => {
+ this.trace('Received message');
+ this.readFilterPending = true;
+ this.filterStack.receiveMessage(message).then(filteredMesssage => {
+ this.trace('Finished filtering received message');
+ this.readFilterPending = false;
+ this.listener.onReceiveMessage(filteredMesssage);
+ if (this.pendingChildStatus) {
+ this.outputStatus(this.pendingChildStatus);
+ }
+ }, (status) => {
+ this.cancelWithStatus(status.code, status.details);
+ });
+ },
+ onReceiveStatus: status => {
+ this.trace('Received status');
+ if (this.readFilterPending) {
+ this.pendingChildStatus = status;
+ }
+ else {
+ this.outputStatus(status);
+ }
+ },
+ });
+ if (this.readPending) {
+ this.child.startRead();
+ }
+ if (this.pendingMessage) {
+ this.sendMessageOnChild(this.pendingMessage.context, this.pendingMessage.message);
+ }
+ else if (this.pendingHalfClose) {
+ this.child.halfClose();
+ }
+ }, (status) => {
+ this.outputStatus(status);
+ });
+ }
+ reportResolverError(status) {
+ var _a;
+ if ((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.getOptions().waitForReady) {
+ this.channel.queueCallForConfig(this);
+ }
+ else {
+ this.outputStatus(status);
+ }
+ }
+ cancelWithStatus(status, details) {
+ var _a;
+ this.trace('cancelWithStatus code: ' + status + ' details: "' + details + '"');
+ (_a = this.child) === null || _a === void 0 ? void 0 : _a.cancelWithStatus(status, details);
+ this.outputStatus({
+ code: status,
+ details: details,
+ metadata: new metadata_1.Metadata(),
+ });
+ }
+ getPeer() {
+ var _a, _b;
+ return (_b = (_a = this.child) === null || _a === void 0 ? void 0 : _a.getPeer()) !== null && _b !== void 0 ? _b : this.channel.getTarget();
+ }
+ start(metadata, listener) {
+ this.trace('start called');
+ this.metadata = metadata.clone();
+ this.listener = listener;
+ this.getConfig();
+ }
+ sendMessageWithContext(context, message) {
+ this.trace('write() called with message of length ' + message.length);
+ if (this.child) {
+ this.sendMessageOnChild(context, message);
+ }
+ else {
+ this.pendingMessage = { context, message };
+ }
+ }
+ startRead() {
+ this.trace('startRead called');
+ if (this.child) {
+ this.child.startRead();
+ }
+ else {
+ this.readPending = true;
+ }
+ }
+ halfClose() {
+ this.trace('halfClose called');
+ if (this.child && !this.writeFilterPending) {
+ this.child.halfClose();
+ }
+ else {
+ this.pendingHalfClose = true;
+ }
+ }
+ setCredentials(credentials) {
+ this.credentials = this.credentials.compose(credentials);
+ }
+ addStatusWatcher(watcher) {
+ this.statusWatchers.push(watcher);
+ }
+ getCallNumber() {
+ return this.callNumber;
+ }
+}
+exports.ResolvingCall = ResolvingCall;
+//# sourceMappingURL=resolving-call.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js.map
new file mode 100644
index 0000000..4fd2a73
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-call.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"resolving-call.js","sourceRoot":"","sources":["../../src/resolving-call.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.d.ts
new file mode 100644
index 0000000..1f697fb
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.d.ts
@@ -0,0 +1,67 @@
+import { ChannelControlHelper, LoadBalancer, LoadBalancingConfig } from './load-balancer';
+import { ServiceConfig } from './service-config';
+import { ConfigSelector } from './resolver';
+import { StatusObject } from './call-interface';
+import { SubchannelAddress } from './subchannel-address';
+import { GrpcUri } from './uri-parser';
+import { ChannelOptions } from './channel-options';
+export interface ResolutionCallback {
+ (serviceConfig: ServiceConfig, configSelector: ConfigSelector): void;
+}
+export interface ResolutionFailureCallback {
+ (status: StatusObject): void;
+}
+export declare class ResolvingLoadBalancer implements LoadBalancer {
+ private readonly target;
+ private readonly channelControlHelper;
+ private readonly onSuccessfulResolution;
+ private readonly onFailedResolution;
+ /**
+ * The resolver class constructed for the target address.
+ */
+ private readonly innerResolver;
+ private readonly childLoadBalancer;
+ private latestChildState;
+ private latestChildPicker;
+ /**
+ * This resolving load balancer's current connectivity state.
+ */
+ private currentState;
+ private readonly defaultServiceConfig;
+ /**
+ * The service config object from the last successful resolution, if
+ * available. A value of null indicates that we have not yet received a valid
+ * service config from the resolver.
+ */
+ private previousServiceConfig;
+ /**
+ * The backoff timer for handling name resolution failures.
+ */
+ private readonly backoffTimeout;
+ /**
+ * Indicates whether we should attempt to resolve again after the backoff
+ * timer runs out.
+ */
+ private continueResolving;
+ /**
+ * Wrapper class that behaves like a `LoadBalancer` and also handles name
+ * resolution internally.
+ * @param target The address of the backend to connect to.
+ * @param channelControlHelper `ChannelControlHelper` instance provided by
+ * this load balancer's owner.
+ * @param defaultServiceConfig The default service configuration to be used
+ * if none is provided by the name resolver. A `null` value indicates
+ * that the default behavior should be the default unconfigured behavior.
+ * In practice, that means using the "pick first" load balancer
+ * implmentation
+ */
+ constructor(target: GrpcUri, channelControlHelper: ChannelControlHelper, channelOptions: ChannelOptions, onSuccessfulResolution: ResolutionCallback, onFailedResolution: ResolutionFailureCallback);
+ private updateResolution;
+ private updateState;
+ private handleResolutionFailure;
+ exitIdle(): void;
+ updateAddressList(addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig | null): never;
+ resetBackoff(): void;
+ destroy(): void;
+ getTypeName(): string;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js
new file mode 100644
index 0000000..6867faf
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js
@@ -0,0 +1,304 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ResolvingLoadBalancer = void 0;
+const load_balancer_1 = require("./load-balancer");
+const service_config_1 = require("./service-config");
+const connectivity_state_1 = require("./connectivity-state");
+const resolver_1 = require("./resolver");
+const picker_1 = require("./picker");
+const backoff_timeout_1 = require("./backoff-timeout");
+const constants_1 = require("./constants");
+const metadata_1 = require("./metadata");
+const logging = require("./logging");
+const constants_2 = require("./constants");
+const uri_parser_1 = require("./uri-parser");
+const load_balancer_child_handler_1 = require("./load-balancer-child-handler");
+const TRACER_NAME = 'resolving_load_balancer';
+function trace(text) {
+ logging.trace(constants_2.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+/**
+ * Name match levels in order from most to least specific. This is the order in
+ * which searches will be performed.
+ */
+const NAME_MATCH_LEVEL_ORDER = [
+ 'SERVICE_AND_METHOD',
+ 'SERVICE',
+ 'EMPTY',
+];
+function hasMatchingName(service, method, methodConfig, matchLevel) {
+ for (const name of methodConfig.name) {
+ switch (matchLevel) {
+ case 'EMPTY':
+ if (!name.service && !name.method) {
+ return true;
+ }
+ break;
+ case 'SERVICE':
+ if (name.service === service && !name.method) {
+ return true;
+ }
+ break;
+ case 'SERVICE_AND_METHOD':
+ if (name.service === service && name.method === method) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+function findMatchingConfig(service, method, methodConfigs, matchLevel) {
+ for (const config of methodConfigs) {
+ if (hasMatchingName(service, method, config, matchLevel)) {
+ return config;
+ }
+ }
+ return null;
+}
+function getDefaultConfigSelector(serviceConfig) {
+ return function defaultConfigSelector(methodName, metadata) {
+ var _a, _b;
+ const splitName = methodName.split('/').filter(x => x.length > 0);
+ const service = (_a = splitName[0]) !== null && _a !== void 0 ? _a : '';
+ const method = (_b = splitName[1]) !== null && _b !== void 0 ? _b : '';
+ if (serviceConfig && serviceConfig.methodConfig) {
+ /* Check for the following in order, and return the first method
+ * config that matches:
+ * 1. A name that exactly matches the service and method
+ * 2. A name with no method set that matches the service
+ * 3. An empty name
+ */
+ for (const matchLevel of NAME_MATCH_LEVEL_ORDER) {
+ const matchingConfig = findMatchingConfig(service, method, serviceConfig.methodConfig, matchLevel);
+ if (matchingConfig) {
+ return {
+ methodConfig: matchingConfig,
+ pickInformation: {},
+ status: constants_1.Status.OK,
+ dynamicFilterFactories: [],
+ };
+ }
+ }
+ }
+ return {
+ methodConfig: { name: [] },
+ pickInformation: {},
+ status: constants_1.Status.OK,
+ dynamicFilterFactories: [],
+ };
+ };
+}
+class ResolvingLoadBalancer {
+ /**
+ * Wrapper class that behaves like a `LoadBalancer` and also handles name
+ * resolution internally.
+ * @param target The address of the backend to connect to.
+ * @param channelControlHelper `ChannelControlHelper` instance provided by
+ * this load balancer's owner.
+ * @param defaultServiceConfig The default service configuration to be used
+ * if none is provided by the name resolver. A `null` value indicates
+ * that the default behavior should be the default unconfigured behavior.
+ * In practice, that means using the "pick first" load balancer
+ * implmentation
+ */
+ constructor(target, channelControlHelper, channelOptions, onSuccessfulResolution, onFailedResolution) {
+ this.target = target;
+ this.channelControlHelper = channelControlHelper;
+ this.onSuccessfulResolution = onSuccessfulResolution;
+ this.onFailedResolution = onFailedResolution;
+ this.latestChildState = connectivity_state_1.ConnectivityState.IDLE;
+ this.latestChildPicker = new picker_1.QueuePicker(this);
+ /**
+ * This resolving load balancer's current connectivity state.
+ */
+ this.currentState = connectivity_state_1.ConnectivityState.IDLE;
+ /**
+ * The service config object from the last successful resolution, if
+ * available. A value of null indicates that we have not yet received a valid
+ * service config from the resolver.
+ */
+ this.previousServiceConfig = null;
+ /**
+ * Indicates whether we should attempt to resolve again after the backoff
+ * timer runs out.
+ */
+ this.continueResolving = false;
+ if (channelOptions['grpc.service_config']) {
+ this.defaultServiceConfig = (0, service_config_1.validateServiceConfig)(JSON.parse(channelOptions['grpc.service_config']));
+ }
+ else {
+ this.defaultServiceConfig = {
+ loadBalancingConfig: [],
+ methodConfig: [],
+ };
+ }
+ this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this));
+ this.childLoadBalancer = new load_balancer_child_handler_1.ChildLoadBalancerHandler({
+ createSubchannel: channelControlHelper.createSubchannel.bind(channelControlHelper),
+ requestReresolution: () => {
+ /* If the backoffTimeout is running, we're still backing off from
+ * making resolve requests, so we shouldn't make another one here.
+ * In that case, the backoff timer callback will call
+ * updateResolution */
+ if (this.backoffTimeout.isRunning()) {
+ trace('requestReresolution delayed by backoff timer until ' + this.backoffTimeout.getEndTime().toISOString());
+ this.continueResolving = true;
+ }
+ else {
+ this.updateResolution();
+ }
+ },
+ updateState: (newState, picker) => {
+ this.latestChildState = newState;
+ this.latestChildPicker = picker;
+ this.updateState(newState, picker);
+ },
+ addChannelzChild: channelControlHelper.addChannelzChild.bind(channelControlHelper),
+ removeChannelzChild: channelControlHelper.removeChannelzChild.bind(channelControlHelper),
+ });
+ this.innerResolver = (0, resolver_1.createResolver)(target, {
+ onSuccessfulResolution: (addressList, serviceConfig, serviceConfigError, configSelector, attributes) => {
+ var _a;
+ this.backoffTimeout.stop();
+ this.backoffTimeout.reset();
+ let workingServiceConfig = null;
+ /* This first group of conditionals implements the algorithm described
+ * in https://github.com/grpc/proposal/blob/master/A21-service-config-error-handling.md
+ * in the section called "Behavior on receiving a new gRPC Config".
+ */
+ if (serviceConfig === null) {
+ // Step 4 and 5
+ if (serviceConfigError === null) {
+ // Step 5
+ this.previousServiceConfig = null;
+ workingServiceConfig = this.defaultServiceConfig;
+ }
+ else {
+ // Step 4
+ if (this.previousServiceConfig === null) {
+ // Step 4.ii
+ this.handleResolutionFailure(serviceConfigError);
+ }
+ else {
+ // Step 4.i
+ workingServiceConfig = this.previousServiceConfig;
+ }
+ }
+ }
+ else {
+ // Step 3
+ workingServiceConfig = serviceConfig;
+ this.previousServiceConfig = serviceConfig;
+ }
+ const workingConfigList = (_a = workingServiceConfig === null || workingServiceConfig === void 0 ? void 0 : workingServiceConfig.loadBalancingConfig) !== null && _a !== void 0 ? _a : [];
+ const loadBalancingConfig = (0, load_balancer_1.getFirstUsableConfig)(workingConfigList, true);
+ if (loadBalancingConfig === null) {
+ // There were load balancing configs but none are supported. This counts as a resolution failure
+ this.handleResolutionFailure({
+ code: constants_1.Status.UNAVAILABLE,
+ details: 'All load balancer options in service config are not compatible',
+ metadata: new metadata_1.Metadata(),
+ });
+ return;
+ }
+ this.childLoadBalancer.updateAddressList(addressList, loadBalancingConfig, attributes);
+ const finalServiceConfig = workingServiceConfig !== null && workingServiceConfig !== void 0 ? workingServiceConfig : this.defaultServiceConfig;
+ this.onSuccessfulResolution(finalServiceConfig, configSelector !== null && configSelector !== void 0 ? configSelector : getDefaultConfigSelector(finalServiceConfig));
+ },
+ onError: (error) => {
+ this.handleResolutionFailure(error);
+ },
+ }, channelOptions);
+ const backoffOptions = {
+ initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],
+ maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],
+ };
+ this.backoffTimeout = new backoff_timeout_1.BackoffTimeout(() => {
+ if (this.continueResolving) {
+ this.updateResolution();
+ this.continueResolving = false;
+ }
+ else {
+ this.updateState(this.latestChildState, this.latestChildPicker);
+ }
+ }, backoffOptions);
+ this.backoffTimeout.unref();
+ }
+ updateResolution() {
+ this.innerResolver.updateResolution();
+ if (this.currentState === connectivity_state_1.ConnectivityState.IDLE) {
+ this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this));
+ }
+ this.backoffTimeout.runOnce();
+ }
+ updateState(connectivityState, picker) {
+ trace((0, uri_parser_1.uriToString)(this.target) +
+ ' ' +
+ connectivity_state_1.ConnectivityState[this.currentState] +
+ ' -> ' +
+ connectivity_state_1.ConnectivityState[connectivityState]);
+ // Ensure that this.exitIdle() is called by the picker
+ if (connectivityState === connectivity_state_1.ConnectivityState.IDLE) {
+ picker = new picker_1.QueuePicker(this);
+ }
+ this.currentState = connectivityState;
+ this.channelControlHelper.updateState(connectivityState, picker);
+ }
+ handleResolutionFailure(error) {
+ if (this.latestChildState === connectivity_state_1.ConnectivityState.IDLE) {
+ this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(error));
+ this.onFailedResolution(error);
+ }
+ }
+ exitIdle() {
+ if (this.currentState === connectivity_state_1.ConnectivityState.IDLE ||
+ this.currentState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) {
+ if (this.backoffTimeout.isRunning()) {
+ this.continueResolving = true;
+ }
+ else {
+ this.updateResolution();
+ }
+ }
+ this.childLoadBalancer.exitIdle();
+ }
+ updateAddressList(addressList, lbConfig) {
+ throw new Error('updateAddressList not supported on ResolvingLoadBalancer');
+ }
+ resetBackoff() {
+ this.backoffTimeout.reset();
+ this.childLoadBalancer.resetBackoff();
+ }
+ destroy() {
+ this.childLoadBalancer.destroy();
+ this.innerResolver.destroy();
+ this.backoffTimeout.reset();
+ this.backoffTimeout.stop();
+ this.latestChildState = connectivity_state_1.ConnectivityState.IDLE;
+ this.latestChildPicker = new picker_1.QueuePicker(this);
+ this.currentState = connectivity_state_1.ConnectivityState.IDLE;
+ this.previousServiceConfig = null;
+ this.continueResolving = false;
+ }
+ getTypeName() {
+ return 'resolving_load_balancer';
+ }
+}
+exports.ResolvingLoadBalancer = ResolvingLoadBalancer;
+//# sourceMappingURL=resolving-load-balancer.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js.map
new file mode 100644
index 0000000..863c3f9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"resolving-load-balancer.js","sourceRoot":"","sources":["../../src/resolving-load-balancer.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.d.ts
new file mode 100644
index 0000000..cc80bd0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.d.ts
@@ -0,0 +1,95 @@
+/// <reference types="node" />
+import { CallCredentials } from './call-credentials';
+import { Status } from './constants';
+import { Deadline } from './deadline';
+import { Metadata } from './metadata';
+import { CallConfig } from './resolver';
+import { Call, InterceptingListener, MessageContext } from './call-interface';
+import { InternalChannel } from './internal-channel';
+export declare class RetryThrottler {
+ private readonly maxTokens;
+ private readonly tokenRatio;
+ private tokens;
+ constructor(maxTokens: number, tokenRatio: number, previousRetryThrottler?: RetryThrottler);
+ addCallSucceeded(): void;
+ addCallFailed(): void;
+ canRetryCall(): boolean;
+}
+export declare class MessageBufferTracker {
+ private totalLimit;
+ private limitPerCall;
+ private totalAllocated;
+ private allocatedPerCall;
+ constructor(totalLimit: number, limitPerCall: number);
+ allocate(size: number, callId: number): boolean;
+ free(size: number, callId: number): void;
+ freeAll(callId: number): void;
+}
+export declare class RetryingCall implements Call {
+ private readonly channel;
+ private readonly callConfig;
+ private readonly methodName;
+ private readonly host;
+ private readonly credentials;
+ private readonly deadline;
+ private readonly callNumber;
+ private readonly bufferTracker;
+ private readonly retryThrottler?;
+ private state;
+ private listener;
+ private initialMetadata;
+ private underlyingCalls;
+ private writeBuffer;
+ /**
+ * The offset of message indices in the writeBuffer. For example, if
+ * writeBufferOffset is 10, message 10 is in writeBuffer[0] and message 15
+ * is in writeBuffer[5].
+ */
+ private writeBufferOffset;
+ /**
+ * Tracks whether a read has been started, so that we know whether to start
+ * reads on new child calls. This only matters for the first read, because
+ * once a message comes in the child call becomes committed and there will
+ * be no new child calls.
+ */
+ private readStarted;
+ private transparentRetryUsed;
+ /**
+ * Number of attempts so far
+ */
+ private attempts;
+ private hedgingTimer;
+ private committedCallIndex;
+ private initialRetryBackoffSec;
+ private nextRetryBackoffSec;
+ constructor(channel: InternalChannel, callConfig: CallConfig, methodName: string, host: string, credentials: CallCredentials, deadline: Deadline, callNumber: number, bufferTracker: MessageBufferTracker, retryThrottler?: RetryThrottler | undefined);
+ getCallNumber(): number;
+ private trace;
+ private reportStatus;
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ private getBufferEntry;
+ private getNextBufferIndex;
+ private clearSentMessages;
+ private commitCall;
+ private commitCallWithMostMessages;
+ private isStatusCodeInList;
+ private getNextRetryBackoffMs;
+ private maybeRetryCall;
+ private countActiveCalls;
+ private handleProcessedStatus;
+ private getPushback;
+ private handleChildStatus;
+ private maybeStartHedgingAttempt;
+ private maybeStartHedgingTimer;
+ private startNewAttempt;
+ start(metadata: Metadata, listener: InterceptingListener): void;
+ private handleChildWriteCompleted;
+ private sendNextChildMessage;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ startRead(): void;
+ halfClose(): void;
+ setCredentials(newCredentials: CallCredentials): void;
+ getMethod(): string;
+ getHost(): string;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js
new file mode 100644
index 0000000..6db6ce9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js
@@ -0,0 +1,639 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RetryingCall = exports.MessageBufferTracker = exports.RetryThrottler = void 0;
+const constants_1 = require("./constants");
+const metadata_1 = require("./metadata");
+const logging = require("./logging");
+const TRACER_NAME = 'retrying_call';
+class RetryThrottler {
+ constructor(maxTokens, tokenRatio, previousRetryThrottler) {
+ this.maxTokens = maxTokens;
+ this.tokenRatio = tokenRatio;
+ if (previousRetryThrottler) {
+ /* When carrying over tokens from a previous config, rescale them to the
+ * new max value */
+ this.tokens =
+ previousRetryThrottler.tokens *
+ (maxTokens / previousRetryThrottler.maxTokens);
+ }
+ else {
+ this.tokens = maxTokens;
+ }
+ }
+ addCallSucceeded() {
+ this.tokens = Math.max(this.tokens + this.tokenRatio, this.maxTokens);
+ }
+ addCallFailed() {
+ this.tokens = Math.min(this.tokens - 1, 0);
+ }
+ canRetryCall() {
+ return this.tokens > this.maxTokens / 2;
+ }
+}
+exports.RetryThrottler = RetryThrottler;
+class MessageBufferTracker {
+ constructor(totalLimit, limitPerCall) {
+ this.totalLimit = totalLimit;
+ this.limitPerCall = limitPerCall;
+ this.totalAllocated = 0;
+ this.allocatedPerCall = new Map();
+ }
+ allocate(size, callId) {
+ var _a;
+ const currentPerCall = (_a = this.allocatedPerCall.get(callId)) !== null && _a !== void 0 ? _a : 0;
+ if (this.limitPerCall - currentPerCall < size ||
+ this.totalLimit - this.totalAllocated < size) {
+ return false;
+ }
+ this.allocatedPerCall.set(callId, currentPerCall + size);
+ this.totalAllocated += size;
+ return true;
+ }
+ free(size, callId) {
+ var _a;
+ if (this.totalAllocated < size) {
+ throw new Error(`Invalid buffer allocation state: call ${callId} freed ${size} > total allocated ${this.totalAllocated}`);
+ }
+ this.totalAllocated -= size;
+ const currentPerCall = (_a = this.allocatedPerCall.get(callId)) !== null && _a !== void 0 ? _a : 0;
+ if (currentPerCall < size) {
+ throw new Error(`Invalid buffer allocation state: call ${callId} freed ${size} > allocated for call ${currentPerCall}`);
+ }
+ this.allocatedPerCall.set(callId, currentPerCall - size);
+ }
+ freeAll(callId) {
+ var _a;
+ const currentPerCall = (_a = this.allocatedPerCall.get(callId)) !== null && _a !== void 0 ? _a : 0;
+ if (this.totalAllocated < currentPerCall) {
+ throw new Error(`Invalid buffer allocation state: call ${callId} allocated ${currentPerCall} > total allocated ${this.totalAllocated}`);
+ }
+ this.totalAllocated -= currentPerCall;
+ this.allocatedPerCall.delete(callId);
+ }
+}
+exports.MessageBufferTracker = MessageBufferTracker;
+const PREVIONS_RPC_ATTEMPTS_METADATA_KEY = 'grpc-previous-rpc-attempts';
+class RetryingCall {
+ constructor(channel, callConfig, methodName, host, credentials, deadline, callNumber, bufferTracker, retryThrottler) {
+ this.channel = channel;
+ this.callConfig = callConfig;
+ this.methodName = methodName;
+ this.host = host;
+ this.credentials = credentials;
+ this.deadline = deadline;
+ this.callNumber = callNumber;
+ this.bufferTracker = bufferTracker;
+ this.retryThrottler = retryThrottler;
+ this.listener = null;
+ this.initialMetadata = null;
+ this.underlyingCalls = [];
+ this.writeBuffer = [];
+ /**
+ * The offset of message indices in the writeBuffer. For example, if
+ * writeBufferOffset is 10, message 10 is in writeBuffer[0] and message 15
+ * is in writeBuffer[5].
+ */
+ this.writeBufferOffset = 0;
+ /**
+ * Tracks whether a read has been started, so that we know whether to start
+ * reads on new child calls. This only matters for the first read, because
+ * once a message comes in the child call becomes committed and there will
+ * be no new child calls.
+ */
+ this.readStarted = false;
+ this.transparentRetryUsed = false;
+ /**
+ * Number of attempts so far
+ */
+ this.attempts = 0;
+ this.hedgingTimer = null;
+ this.committedCallIndex = null;
+ this.initialRetryBackoffSec = 0;
+ this.nextRetryBackoffSec = 0;
+ if (callConfig.methodConfig.retryPolicy) {
+ this.state = 'RETRY';
+ const retryPolicy = callConfig.methodConfig.retryPolicy;
+ this.nextRetryBackoffSec = this.initialRetryBackoffSec = Number(retryPolicy.initialBackoff.substring(0, retryPolicy.initialBackoff.length - 1));
+ }
+ else if (callConfig.methodConfig.hedgingPolicy) {
+ this.state = 'HEDGING';
+ }
+ else {
+ this.state = 'TRANSPARENT_ONLY';
+ }
+ }
+ getCallNumber() {
+ return this.callNumber;
+ }
+ trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '[' + this.callNumber + '] ' + text);
+ }
+ reportStatus(statusObject) {
+ this.trace('ended with status: code=' +
+ statusObject.code +
+ ' details="' +
+ statusObject.details +
+ '"');
+ this.bufferTracker.freeAll(this.callNumber);
+ this.writeBufferOffset = this.writeBufferOffset + this.writeBuffer.length;
+ this.writeBuffer = [];
+ process.nextTick(() => {
+ var _a;
+ // Explicitly construct status object to remove progress field
+ (_a = this.listener) === null || _a === void 0 ? void 0 : _a.onReceiveStatus({
+ code: statusObject.code,
+ details: statusObject.details,
+ metadata: statusObject.metadata,
+ });
+ });
+ }
+ cancelWithStatus(status, details) {
+ this.trace('cancelWithStatus code: ' + status + ' details: "' + details + '"');
+ this.reportStatus({ code: status, details, metadata: new metadata_1.Metadata() });
+ for (const { call } of this.underlyingCalls) {
+ call.cancelWithStatus(status, details);
+ }
+ }
+ getPeer() {
+ if (this.committedCallIndex !== null) {
+ return this.underlyingCalls[this.committedCallIndex].call.getPeer();
+ }
+ else {
+ return 'unknown';
+ }
+ }
+ getBufferEntry(messageIndex) {
+ var _a;
+ return ((_a = this.writeBuffer[messageIndex - this.writeBufferOffset]) !== null && _a !== void 0 ? _a : {
+ entryType: 'FREED',
+ allocated: false,
+ });
+ }
+ getNextBufferIndex() {
+ return this.writeBufferOffset + this.writeBuffer.length;
+ }
+ clearSentMessages() {
+ if (this.state !== 'COMMITTED') {
+ return;
+ }
+ const earliestNeededMessageIndex = this.underlyingCalls[this.committedCallIndex].nextMessageToSend;
+ for (let messageIndex = this.writeBufferOffset; messageIndex < earliestNeededMessageIndex; messageIndex++) {
+ const bufferEntry = this.getBufferEntry(messageIndex);
+ if (bufferEntry.allocated) {
+ this.bufferTracker.free(bufferEntry.message.message.length, this.callNumber);
+ }
+ }
+ this.writeBuffer = this.writeBuffer.slice(earliestNeededMessageIndex - this.writeBufferOffset);
+ this.writeBufferOffset = earliestNeededMessageIndex;
+ }
+ commitCall(index) {
+ if (this.state === 'COMMITTED') {
+ return;
+ }
+ if (this.underlyingCalls[index].state === 'COMPLETED') {
+ return;
+ }
+ this.trace('Committing call [' +
+ this.underlyingCalls[index].call.getCallNumber() +
+ '] at index ' +
+ index);
+ this.state = 'COMMITTED';
+ this.committedCallIndex = index;
+ for (let i = 0; i < this.underlyingCalls.length; i++) {
+ if (i === index) {
+ continue;
+ }
+ if (this.underlyingCalls[i].state === 'COMPLETED') {
+ continue;
+ }
+ this.underlyingCalls[i].state = 'COMPLETED';
+ this.underlyingCalls[i].call.cancelWithStatus(constants_1.Status.CANCELLED, 'Discarded in favor of other hedged attempt');
+ }
+ this.clearSentMessages();
+ }
+ commitCallWithMostMessages() {
+ if (this.state === 'COMMITTED') {
+ return;
+ }
+ let mostMessages = -1;
+ let callWithMostMessages = -1;
+ for (const [index, childCall] of this.underlyingCalls.entries()) {
+ if (childCall.state === 'ACTIVE' &&
+ childCall.nextMessageToSend > mostMessages) {
+ mostMessages = childCall.nextMessageToSend;
+ callWithMostMessages = index;
+ }
+ }
+ if (callWithMostMessages === -1) {
+ /* There are no active calls, disable retries to force the next call that
+ * is started to be committed. */
+ this.state = 'TRANSPARENT_ONLY';
+ }
+ else {
+ this.commitCall(callWithMostMessages);
+ }
+ }
+ isStatusCodeInList(list, code) {
+ return list.some(value => value === code ||
+ value.toString().toLowerCase() === constants_1.Status[code].toLowerCase());
+ }
+ getNextRetryBackoffMs() {
+ var _a;
+ const retryPolicy = (_a = this.callConfig) === null || _a === void 0 ? void 0 : _a.methodConfig.retryPolicy;
+ if (!retryPolicy) {
+ return 0;
+ }
+ const nextBackoffMs = Math.random() * this.nextRetryBackoffSec * 1000;
+ const maxBackoffSec = Number(retryPolicy.maxBackoff.substring(0, retryPolicy.maxBackoff.length - 1));
+ this.nextRetryBackoffSec = Math.min(this.nextRetryBackoffSec * retryPolicy.backoffMultiplier, maxBackoffSec);
+ return nextBackoffMs;
+ }
+ maybeRetryCall(pushback, callback) {
+ if (this.state !== 'RETRY') {
+ callback(false);
+ return;
+ }
+ const retryPolicy = this.callConfig.methodConfig.retryPolicy;
+ if (this.attempts >= Math.min(retryPolicy.maxAttempts, 5)) {
+ callback(false);
+ return;
+ }
+ let retryDelayMs;
+ if (pushback === null) {
+ retryDelayMs = this.getNextRetryBackoffMs();
+ }
+ else if (pushback < 0) {
+ this.state = 'TRANSPARENT_ONLY';
+ callback(false);
+ return;
+ }
+ else {
+ retryDelayMs = pushback;
+ this.nextRetryBackoffSec = this.initialRetryBackoffSec;
+ }
+ setTimeout(() => {
+ var _a, _b;
+ if (this.state !== 'RETRY') {
+ callback(false);
+ return;
+ }
+ if ((_b = (_a = this.retryThrottler) === null || _a === void 0 ? void 0 : _a.canRetryCall()) !== null && _b !== void 0 ? _b : true) {
+ callback(true);
+ this.attempts += 1;
+ this.startNewAttempt();
+ }
+ }, retryDelayMs);
+ }
+ countActiveCalls() {
+ let count = 0;
+ for (const call of this.underlyingCalls) {
+ if ((call === null || call === void 0 ? void 0 : call.state) === 'ACTIVE') {
+ count += 1;
+ }
+ }
+ return count;
+ }
+ handleProcessedStatus(status, callIndex, pushback) {
+ var _a, _b, _c;
+ switch (this.state) {
+ case 'COMMITTED':
+ case 'TRANSPARENT_ONLY':
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ break;
+ case 'HEDGING':
+ if (this.isStatusCodeInList((_a = this.callConfig.methodConfig.hedgingPolicy.nonFatalStatusCodes) !== null && _a !== void 0 ? _a : [], status.code)) {
+ (_b = this.retryThrottler) === null || _b === void 0 ? void 0 : _b.addCallFailed();
+ let delayMs;
+ if (pushback === null) {
+ delayMs = 0;
+ }
+ else if (pushback < 0) {
+ this.state = 'TRANSPARENT_ONLY';
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ return;
+ }
+ else {
+ delayMs = pushback;
+ }
+ setTimeout(() => {
+ this.maybeStartHedgingAttempt();
+ // If after trying to start a call there are no active calls, this was the last one
+ if (this.countActiveCalls() === 0) {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ }, delayMs);
+ }
+ else {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ break;
+ case 'RETRY':
+ if (this.isStatusCodeInList(this.callConfig.methodConfig.retryPolicy.retryableStatusCodes, status.code)) {
+ (_c = this.retryThrottler) === null || _c === void 0 ? void 0 : _c.addCallFailed();
+ this.maybeRetryCall(pushback, retried => {
+ if (!retried) {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ });
+ }
+ else {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ break;
+ }
+ }
+ getPushback(metadata) {
+ const mdValue = metadata.get('grpc-retry-pushback-ms');
+ if (mdValue.length === 0) {
+ return null;
+ }
+ try {
+ return parseInt(mdValue[0]);
+ }
+ catch (e) {
+ return -1;
+ }
+ }
+ handleChildStatus(status, callIndex) {
+ var _a;
+ if (this.underlyingCalls[callIndex].state === 'COMPLETED') {
+ return;
+ }
+ this.trace('state=' +
+ this.state +
+ ' handling status with progress ' +
+ status.progress +
+ ' from child [' +
+ this.underlyingCalls[callIndex].call.getCallNumber() +
+ '] in state ' +
+ this.underlyingCalls[callIndex].state);
+ this.underlyingCalls[callIndex].state = 'COMPLETED';
+ if (status.code === constants_1.Status.OK) {
+ (_a = this.retryThrottler) === null || _a === void 0 ? void 0 : _a.addCallSucceeded();
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ return;
+ }
+ if (this.state === 'COMMITTED') {
+ this.reportStatus(status);
+ return;
+ }
+ const pushback = this.getPushback(status.metadata);
+ switch (status.progress) {
+ case 'NOT_STARTED':
+ // RPC never leaves the client, always safe to retry
+ this.startNewAttempt();
+ break;
+ case 'REFUSED':
+ // RPC reaches the server library, but not the server application logic
+ if (this.transparentRetryUsed) {
+ this.handleProcessedStatus(status, callIndex, pushback);
+ }
+ else {
+ this.transparentRetryUsed = true;
+ this.startNewAttempt();
+ }
+ break;
+ case 'DROP':
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ break;
+ case 'PROCESSED':
+ this.handleProcessedStatus(status, callIndex, pushback);
+ break;
+ }
+ }
+ maybeStartHedgingAttempt() {
+ if (this.state !== 'HEDGING') {
+ return;
+ }
+ if (!this.callConfig.methodConfig.hedgingPolicy) {
+ return;
+ }
+ const hedgingPolicy = this.callConfig.methodConfig.hedgingPolicy;
+ if (this.attempts >= Math.min(hedgingPolicy.maxAttempts, 5)) {
+ return;
+ }
+ this.attempts += 1;
+ this.startNewAttempt();
+ this.maybeStartHedgingTimer();
+ }
+ maybeStartHedgingTimer() {
+ var _a, _b, _c;
+ if (this.hedgingTimer) {
+ clearTimeout(this.hedgingTimer);
+ }
+ if (this.state !== 'HEDGING') {
+ return;
+ }
+ if (!this.callConfig.methodConfig.hedgingPolicy) {
+ return;
+ }
+ const hedgingPolicy = this.callConfig.methodConfig.hedgingPolicy;
+ if (this.attempts >= Math.min(hedgingPolicy.maxAttempts, 5)) {
+ return;
+ }
+ const hedgingDelayString = (_a = hedgingPolicy.hedgingDelay) !== null && _a !== void 0 ? _a : '0s';
+ const hedgingDelaySec = Number(hedgingDelayString.substring(0, hedgingDelayString.length - 1));
+ this.hedgingTimer = setTimeout(() => {
+ this.maybeStartHedgingAttempt();
+ }, hedgingDelaySec * 1000);
+ (_c = (_b = this.hedgingTimer).unref) === null || _c === void 0 ? void 0 : _c.call(_b);
+ }
+ startNewAttempt() {
+ const child = this.channel.createLoadBalancingCall(this.callConfig, this.methodName, this.host, this.credentials, this.deadline);
+ this.trace('Created child call [' +
+ child.getCallNumber() +
+ '] for attempt ' +
+ this.attempts);
+ const index = this.underlyingCalls.length;
+ this.underlyingCalls.push({
+ state: 'ACTIVE',
+ call: child,
+ nextMessageToSend: 0,
+ });
+ const previousAttempts = this.attempts - 1;
+ const initialMetadata = this.initialMetadata.clone();
+ if (previousAttempts > 0) {
+ initialMetadata.set(PREVIONS_RPC_ATTEMPTS_METADATA_KEY, `${previousAttempts}`);
+ }
+ let receivedMetadata = false;
+ child.start(initialMetadata, {
+ onReceiveMetadata: metadata => {
+ this.trace('Received metadata from child [' + child.getCallNumber() + ']');
+ this.commitCall(index);
+ receivedMetadata = true;
+ if (previousAttempts > 0) {
+ metadata.set(PREVIONS_RPC_ATTEMPTS_METADATA_KEY, `${previousAttempts}`);
+ }
+ if (this.underlyingCalls[index].state === 'ACTIVE') {
+ this.listener.onReceiveMetadata(metadata);
+ }
+ },
+ onReceiveMessage: message => {
+ this.trace('Received message from child [' + child.getCallNumber() + ']');
+ this.commitCall(index);
+ if (this.underlyingCalls[index].state === 'ACTIVE') {
+ this.listener.onReceiveMessage(message);
+ }
+ },
+ onReceiveStatus: status => {
+ this.trace('Received status from child [' + child.getCallNumber() + ']');
+ if (!receivedMetadata && previousAttempts > 0) {
+ status.metadata.set(PREVIONS_RPC_ATTEMPTS_METADATA_KEY, `${previousAttempts}`);
+ }
+ this.handleChildStatus(status, index);
+ },
+ });
+ this.sendNextChildMessage(index);
+ if (this.readStarted) {
+ child.startRead();
+ }
+ }
+ start(metadata, listener) {
+ this.trace('start called');
+ this.listener = listener;
+ this.initialMetadata = metadata;
+ this.attempts += 1;
+ this.startNewAttempt();
+ this.maybeStartHedgingTimer();
+ }
+ handleChildWriteCompleted(childIndex) {
+ var _a, _b;
+ const childCall = this.underlyingCalls[childIndex];
+ const messageIndex = childCall.nextMessageToSend;
+ (_b = (_a = this.getBufferEntry(messageIndex)).callback) === null || _b === void 0 ? void 0 : _b.call(_a);
+ this.clearSentMessages();
+ childCall.nextMessageToSend += 1;
+ this.sendNextChildMessage(childIndex);
+ }
+ sendNextChildMessage(childIndex) {
+ const childCall = this.underlyingCalls[childIndex];
+ if (childCall.state === 'COMPLETED') {
+ return;
+ }
+ if (this.getBufferEntry(childCall.nextMessageToSend)) {
+ const bufferEntry = this.getBufferEntry(childCall.nextMessageToSend);
+ switch (bufferEntry.entryType) {
+ case 'MESSAGE':
+ childCall.call.sendMessageWithContext({
+ callback: error => {
+ // Ignore error
+ this.handleChildWriteCompleted(childIndex);
+ },
+ }, bufferEntry.message.message);
+ break;
+ case 'HALF_CLOSE':
+ childCall.nextMessageToSend += 1;
+ childCall.call.halfClose();
+ break;
+ case 'FREED':
+ // Should not be possible
+ break;
+ }
+ }
+ }
+ sendMessageWithContext(context, message) {
+ var _a;
+ this.trace('write() called with message of length ' + message.length);
+ const writeObj = {
+ message,
+ flags: context.flags,
+ };
+ const messageIndex = this.getNextBufferIndex();
+ const bufferEntry = {
+ entryType: 'MESSAGE',
+ message: writeObj,
+ allocated: this.bufferTracker.allocate(message.length, this.callNumber),
+ };
+ this.writeBuffer.push(bufferEntry);
+ if (bufferEntry.allocated) {
+ (_a = context.callback) === null || _a === void 0 ? void 0 : _a.call(context);
+ for (const [callIndex, call] of this.underlyingCalls.entries()) {
+ if (call.state === 'ACTIVE' &&
+ call.nextMessageToSend === messageIndex) {
+ call.call.sendMessageWithContext({
+ callback: error => {
+ // Ignore error
+ this.handleChildWriteCompleted(callIndex);
+ },
+ }, message);
+ }
+ }
+ }
+ else {
+ this.commitCallWithMostMessages();
+ // commitCallWithMostMessages can fail if we are between ping attempts
+ if (this.committedCallIndex === null) {
+ return;
+ }
+ const call = this.underlyingCalls[this.committedCallIndex];
+ bufferEntry.callback = context.callback;
+ if (call.state === 'ACTIVE' && call.nextMessageToSend === messageIndex) {
+ call.call.sendMessageWithContext({
+ callback: error => {
+ // Ignore error
+ this.handleChildWriteCompleted(this.committedCallIndex);
+ },
+ }, message);
+ }
+ }
+ }
+ startRead() {
+ this.trace('startRead called');
+ this.readStarted = true;
+ for (const underlyingCall of this.underlyingCalls) {
+ if ((underlyingCall === null || underlyingCall === void 0 ? void 0 : underlyingCall.state) === 'ACTIVE') {
+ underlyingCall.call.startRead();
+ }
+ }
+ }
+ halfClose() {
+ this.trace('halfClose called');
+ const halfCloseIndex = this.getNextBufferIndex();
+ this.writeBuffer.push({
+ entryType: 'HALF_CLOSE',
+ allocated: false,
+ });
+ for (const call of this.underlyingCalls) {
+ if ((call === null || call === void 0 ? void 0 : call.state) === 'ACTIVE' &&
+ call.nextMessageToSend === halfCloseIndex) {
+ call.nextMessageToSend += 1;
+ call.call.halfClose();
+ }
+ }
+ }
+ setCredentials(newCredentials) {
+ throw new Error('Method not implemented.');
+ }
+ getMethod() {
+ return this.methodName;
+ }
+ getHost() {
+ return this.host;
+ }
+}
+exports.RetryingCall = RetryingCall;
+//# sourceMappingURL=retrying-call.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js.map
new file mode 100644
index 0000000..0ff9673
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/retrying-call.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"retrying-call.js","sourceRoot":"","sources":["../../src/retrying-call.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.d.ts
new file mode 100644
index 0000000..b923fd5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.d.ts
@@ -0,0 +1,162 @@
+/// <reference types="node" />
+/// <reference types="node" />
+/// <reference types="node" />
+/// <reference types="node" />
+/// <reference types="node" />
+import { EventEmitter } from 'events';
+import * as http2 from 'http2';
+import { Duplex, Readable, Writable } from 'stream';
+import { Deserialize, Serialize } from './make-client';
+import { Metadata } from './metadata';
+import { ObjectReadable, ObjectWritable } from './object-stream';
+import { ChannelOptions } from './channel-options';
+import { StatusObject, PartialStatusObject } from './call-interface';
+import { Deadline } from './deadline';
+export type ServerStatusResponse = Partial<StatusObject>;
+export type ServerErrorResponse = ServerStatusResponse & Error;
+export type ServerSurfaceCall = {
+ cancelled: boolean;
+ readonly metadata: Metadata;
+ getPeer(): string;
+ sendMetadata(responseMetadata: Metadata): void;
+ getDeadline(): Deadline;
+ getPath(): string;
+} & EventEmitter;
+export type ServerUnaryCall<RequestType, ResponseType> = ServerSurfaceCall & {
+ request: RequestType;
+};
+export type ServerReadableStream<RequestType, ResponseType> = ServerSurfaceCall & ObjectReadable<RequestType>;
+export type ServerWritableStream<RequestType, ResponseType> = ServerSurfaceCall & ObjectWritable<ResponseType> & {
+ request: RequestType;
+ end: (metadata?: Metadata) => void;
+};
+export type ServerDuplexStream<RequestType, ResponseType> = ServerSurfaceCall & ObjectReadable<RequestType> & ObjectWritable<ResponseType> & {
+ end: (metadata?: Metadata) => void;
+};
+export declare class ServerUnaryCallImpl<RequestType, ResponseType> extends EventEmitter implements ServerUnaryCall<RequestType, ResponseType> {
+ private call;
+ metadata: Metadata;
+ request: RequestType;
+ cancelled: boolean;
+ constructor(call: Http2ServerCallStream<RequestType, ResponseType>, metadata: Metadata, request: RequestType);
+ getPeer(): string;
+ sendMetadata(responseMetadata: Metadata): void;
+ getDeadline(): Deadline;
+ getPath(): string;
+}
+export declare class ServerReadableStreamImpl<RequestType, ResponseType> extends Readable implements ServerReadableStream<RequestType, ResponseType> {
+ private call;
+ metadata: Metadata;
+ deserialize: Deserialize<RequestType>;
+ cancelled: boolean;
+ constructor(call: Http2ServerCallStream<RequestType, ResponseType>, metadata: Metadata, deserialize: Deserialize<RequestType>, encoding: string);
+ _read(size: number): void;
+ getPeer(): string;
+ sendMetadata(responseMetadata: Metadata): void;
+ getDeadline(): Deadline;
+ getPath(): string;
+}
+export declare class ServerWritableStreamImpl<RequestType, ResponseType> extends Writable implements ServerWritableStream<RequestType, ResponseType> {
+ private call;
+ metadata: Metadata;
+ serialize: Serialize<ResponseType>;
+ request: RequestType;
+ cancelled: boolean;
+ private trailingMetadata;
+ constructor(call: Http2ServerCallStream<RequestType, ResponseType>, metadata: Metadata, serialize: Serialize<ResponseType>, request: RequestType);
+ getPeer(): string;
+ sendMetadata(responseMetadata: Metadata): void;
+ getDeadline(): Deadline;
+ getPath(): string;
+ _write(chunk: ResponseType, encoding: string, callback: (...args: any[]) => void): void;
+ _final(callback: Function): void;
+ end(metadata?: any): this;
+}
+export declare class ServerDuplexStreamImpl<RequestType, ResponseType> extends Duplex implements ServerDuplexStream<RequestType, ResponseType> {
+ private call;
+ metadata: Metadata;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ cancelled: boolean;
+ private trailingMetadata;
+ constructor(call: Http2ServerCallStream<RequestType, ResponseType>, metadata: Metadata, serialize: Serialize<ResponseType>, deserialize: Deserialize<RequestType>, encoding: string);
+ getPeer(): string;
+ sendMetadata(responseMetadata: Metadata): void;
+ getDeadline(): Deadline;
+ getPath(): string;
+ end(metadata?: any): this;
+}
+export type sendUnaryData<ResponseType> = (error: ServerErrorResponse | ServerStatusResponse | null, value?: ResponseType | null, trailer?: Metadata, flags?: number) => void;
+export type handleUnaryCall<RequestType, ResponseType> = (call: ServerUnaryCall<RequestType, ResponseType>, callback: sendUnaryData<ResponseType>) => void;
+export type handleClientStreamingCall<RequestType, ResponseType> = (call: ServerReadableStream<RequestType, ResponseType>, callback: sendUnaryData<ResponseType>) => void;
+export type handleServerStreamingCall<RequestType, ResponseType> = (call: ServerWritableStream<RequestType, ResponseType>) => void;
+export type handleBidiStreamingCall<RequestType, ResponseType> = (call: ServerDuplexStream<RequestType, ResponseType>) => void;
+export type HandleCall<RequestType, ResponseType> = handleUnaryCall<RequestType, ResponseType> | handleClientStreamingCall<RequestType, ResponseType> | handleServerStreamingCall<RequestType, ResponseType> | handleBidiStreamingCall<RequestType, ResponseType>;
+export interface UnaryHandler<RequestType, ResponseType> {
+ func: handleUnaryCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+export interface ClientStreamingHandler<RequestType, ResponseType> {
+ func: handleClientStreamingCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+export interface ServerStreamingHandler<RequestType, ResponseType> {
+ func: handleServerStreamingCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+export interface BidiStreamingHandler<RequestType, ResponseType> {
+ func: handleBidiStreamingCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+export type Handler<RequestType, ResponseType> = UnaryHandler<RequestType, ResponseType> | ClientStreamingHandler<RequestType, ResponseType> | ServerStreamingHandler<RequestType, ResponseType> | BidiStreamingHandler<RequestType, ResponseType>;
+export type HandlerType = 'bidi' | 'clientStream' | 'serverStream' | 'unary';
+export declare class Http2ServerCallStream<RequestType, ResponseType> extends EventEmitter {
+ private stream;
+ private handler;
+ cancelled: boolean;
+ deadlineTimer: NodeJS.Timeout | null;
+ private statusSent;
+ private deadline;
+ private wantTrailers;
+ private metadataSent;
+ private canPush;
+ private isPushPending;
+ private bufferedMessages;
+ private messagesToPush;
+ private maxSendMessageSize;
+ private maxReceiveMessageSize;
+ constructor(stream: http2.ServerHttp2Stream, handler: Handler<RequestType, ResponseType>, options: ChannelOptions);
+ private checkCancelled;
+ private getDecompressedMessage;
+ sendMetadata(customMetadata?: Metadata): void;
+ receiveMetadata(headers: http2.IncomingHttpHeaders): Metadata;
+ receiveUnaryMessage(encoding: string): Promise<RequestType>;
+ private deserializeMessageWithInternalError;
+ serializeMessage(value: ResponseType): Buffer;
+ deserializeMessage(bytes: Buffer): RequestType;
+ sendUnaryMessage(err: ServerErrorResponse | ServerStatusResponse | null, value?: ResponseType | null, metadata?: Metadata | null, flags?: number): Promise<void>;
+ sendStatus(statusObj: PartialStatusObject): void;
+ sendError(error: ServerErrorResponse | ServerStatusResponse): void;
+ write(chunk: Buffer): boolean | undefined;
+ resume(): void;
+ setupSurfaceCall(call: ServerSurfaceCall): void;
+ setupReadable(readable: ServerReadableStream<RequestType, ResponseType> | ServerDuplexStream<RequestType, ResponseType>, encoding: string): void;
+ consumeUnpushedMessages(readable: ServerReadableStream<RequestType, ResponseType> | ServerDuplexStream<RequestType, ResponseType>): boolean;
+ private pushOrBufferMessage;
+ private pushMessage;
+ getPeer(): string;
+ getDeadline(): Deadline;
+ getPath(): string;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js
new file mode 100644
index 0000000..05ca531
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js
@@ -0,0 +1,695 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Http2ServerCallStream = exports.ServerDuplexStreamImpl = exports.ServerWritableStreamImpl = exports.ServerReadableStreamImpl = exports.ServerUnaryCallImpl = void 0;
+const events_1 = require("events");
+const http2 = require("http2");
+const stream_1 = require("stream");
+const zlib = require("zlib");
+const constants_1 = require("./constants");
+const metadata_1 = require("./metadata");
+const stream_decoder_1 = require("./stream-decoder");
+const logging = require("./logging");
+const error_1 = require("./error");
+const TRACER_NAME = 'server_call';
+function trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+const GRPC_ACCEPT_ENCODING_HEADER = 'grpc-accept-encoding';
+const GRPC_ENCODING_HEADER = 'grpc-encoding';
+const GRPC_MESSAGE_HEADER = 'grpc-message';
+const GRPC_STATUS_HEADER = 'grpc-status';
+const GRPC_TIMEOUT_HEADER = 'grpc-timeout';
+const DEADLINE_REGEX = /(\d{1,8})\s*([HMSmun])/;
+const deadlineUnitsToMs = {
+ H: 3600000,
+ M: 60000,
+ S: 1000,
+ m: 1,
+ u: 0.001,
+ n: 0.000001,
+};
+const defaultCompressionHeaders = {
+ // TODO(cjihrig): Remove these encoding headers from the default response
+ // once compression is integrated.
+ [GRPC_ACCEPT_ENCODING_HEADER]: 'identity,deflate,gzip',
+ [GRPC_ENCODING_HEADER]: 'identity',
+};
+const defaultResponseHeaders = {
+ [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK,
+ [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: 'application/grpc+proto',
+};
+const defaultResponseOptions = {
+ waitForTrailers: true,
+};
+class ServerUnaryCallImpl extends events_1.EventEmitter {
+ constructor(call, metadata, request) {
+ super();
+ this.call = call;
+ this.metadata = metadata;
+ this.request = request;
+ this.cancelled = false;
+ this.call.setupSurfaceCall(this);
+ }
+ getPeer() {
+ return this.call.getPeer();
+ }
+ sendMetadata(responseMetadata) {
+ this.call.sendMetadata(responseMetadata);
+ }
+ getDeadline() {
+ return this.call.getDeadline();
+ }
+ getPath() {
+ return this.call.getPath();
+ }
+}
+exports.ServerUnaryCallImpl = ServerUnaryCallImpl;
+class ServerReadableStreamImpl extends stream_1.Readable {
+ constructor(call, metadata, deserialize, encoding) {
+ super({ objectMode: true });
+ this.call = call;
+ this.metadata = metadata;
+ this.deserialize = deserialize;
+ this.cancelled = false;
+ this.call.setupSurfaceCall(this);
+ this.call.setupReadable(this, encoding);
+ }
+ _read(size) {
+ if (!this.call.consumeUnpushedMessages(this)) {
+ return;
+ }
+ this.call.resume();
+ }
+ getPeer() {
+ return this.call.getPeer();
+ }
+ sendMetadata(responseMetadata) {
+ this.call.sendMetadata(responseMetadata);
+ }
+ getDeadline() {
+ return this.call.getDeadline();
+ }
+ getPath() {
+ return this.call.getPath();
+ }
+}
+exports.ServerReadableStreamImpl = ServerReadableStreamImpl;
+class ServerWritableStreamImpl extends stream_1.Writable {
+ constructor(call, metadata, serialize, request) {
+ super({ objectMode: true });
+ this.call = call;
+ this.metadata = metadata;
+ this.serialize = serialize;
+ this.request = request;
+ this.cancelled = false;
+ this.trailingMetadata = new metadata_1.Metadata();
+ this.call.setupSurfaceCall(this);
+ this.on('error', err => {
+ this.call.sendError(err);
+ this.end();
+ });
+ }
+ getPeer() {
+ return this.call.getPeer();
+ }
+ sendMetadata(responseMetadata) {
+ this.call.sendMetadata(responseMetadata);
+ }
+ getDeadline() {
+ return this.call.getDeadline();
+ }
+ getPath() {
+ return this.call.getPath();
+ }
+ _write(chunk, encoding,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ callback) {
+ try {
+ const response = this.call.serializeMessage(chunk);
+ if (!this.call.write(response)) {
+ this.call.once('drain', callback);
+ return;
+ }
+ }
+ catch (err) {
+ this.emit('error', {
+ details: (0, error_1.getErrorMessage)(err),
+ code: constants_1.Status.INTERNAL,
+ });
+ }
+ callback();
+ }
+ _final(callback) {
+ this.call.sendStatus({
+ code: constants_1.Status.OK,
+ details: 'OK',
+ metadata: this.trailingMetadata,
+ });
+ callback(null);
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ end(metadata) {
+ if (metadata) {
+ this.trailingMetadata = metadata;
+ }
+ return super.end();
+ }
+}
+exports.ServerWritableStreamImpl = ServerWritableStreamImpl;
+class ServerDuplexStreamImpl extends stream_1.Duplex {
+ constructor(call, metadata, serialize, deserialize, encoding) {
+ super({ objectMode: true });
+ this.call = call;
+ this.metadata = metadata;
+ this.serialize = serialize;
+ this.deserialize = deserialize;
+ this.cancelled = false;
+ this.trailingMetadata = new metadata_1.Metadata();
+ this.call.setupSurfaceCall(this);
+ this.call.setupReadable(this, encoding);
+ this.on('error', err => {
+ this.call.sendError(err);
+ this.end();
+ });
+ }
+ getPeer() {
+ return this.call.getPeer();
+ }
+ sendMetadata(responseMetadata) {
+ this.call.sendMetadata(responseMetadata);
+ }
+ getDeadline() {
+ return this.call.getDeadline();
+ }
+ getPath() {
+ return this.call.getPath();
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ end(metadata) {
+ if (metadata) {
+ this.trailingMetadata = metadata;
+ }
+ return super.end();
+ }
+}
+exports.ServerDuplexStreamImpl = ServerDuplexStreamImpl;
+ServerDuplexStreamImpl.prototype._read =
+ ServerReadableStreamImpl.prototype._read;
+ServerDuplexStreamImpl.prototype._write =
+ ServerWritableStreamImpl.prototype._write;
+ServerDuplexStreamImpl.prototype._final =
+ ServerWritableStreamImpl.prototype._final;
+// Internal class that wraps the HTTP2 request.
+class Http2ServerCallStream extends events_1.EventEmitter {
+ constructor(stream, handler, options) {
+ super();
+ this.stream = stream;
+ this.handler = handler;
+ this.cancelled = false;
+ this.deadlineTimer = null;
+ this.statusSent = false;
+ this.deadline = Infinity;
+ this.wantTrailers = false;
+ this.metadataSent = false;
+ this.canPush = false;
+ this.isPushPending = false;
+ this.bufferedMessages = [];
+ this.messagesToPush = [];
+ this.maxSendMessageSize = constants_1.DEFAULT_MAX_SEND_MESSAGE_LENGTH;
+ this.maxReceiveMessageSize = constants_1.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;
+ this.stream.once('error', (err) => {
+ /* We need an error handler to avoid uncaught error event exceptions, but
+ * there is nothing we can reasonably do here. Any error event should
+ * have a corresponding close event, which handles emitting the cancelled
+ * event. And the stream is now in a bad state, so we can't reasonably
+ * expect to be able to send an error over it. */
+ });
+ this.stream.once('close', () => {
+ var _a;
+ trace('Request to method ' +
+ ((_a = this.handler) === null || _a === void 0 ? void 0 : _a.path) +
+ ' stream closed with rstCode ' +
+ this.stream.rstCode);
+ if (!this.statusSent) {
+ this.cancelled = true;
+ this.emit('cancelled', 'cancelled');
+ this.emit('streamEnd', false);
+ this.sendStatus({
+ code: constants_1.Status.CANCELLED,
+ details: 'Cancelled by client',
+ metadata: null,
+ });
+ if (this.deadlineTimer)
+ clearTimeout(this.deadlineTimer);
+ }
+ });
+ this.stream.on('drain', () => {
+ this.emit('drain');
+ });
+ if ('grpc.max_send_message_length' in options) {
+ this.maxSendMessageSize = options['grpc.max_send_message_length'];
+ }
+ if ('grpc.max_receive_message_length' in options) {
+ this.maxReceiveMessageSize = options['grpc.max_receive_message_length'];
+ }
+ }
+ checkCancelled() {
+ /* In some cases the stream can become destroyed before the close event
+ * fires. That creates a race condition that this check works around */
+ if (this.stream.destroyed || this.stream.closed) {
+ this.cancelled = true;
+ }
+ return this.cancelled;
+ }
+ getDecompressedMessage(message, encoding) {
+ const messageContents = message.subarray(5);
+ if (encoding === 'identity') {
+ return messageContents;
+ }
+ else if (encoding === 'deflate' || encoding === 'gzip') {
+ let decompresser;
+ if (encoding === 'deflate') {
+ decompresser = zlib.createInflate();
+ }
+ else {
+ decompresser = zlib.createGunzip();
+ }
+ return new Promise((resolve, reject) => {
+ let totalLength = 0;
+ const messageParts = [];
+ decompresser.on('data', (chunk) => {
+ messageParts.push(chunk);
+ totalLength += chunk.byteLength;
+ if (this.maxReceiveMessageSize !== -1 && totalLength > this.maxReceiveMessageSize) {
+ decompresser.destroy();
+ reject({
+ code: constants_1.Status.RESOURCE_EXHAUSTED,
+ details: `Received message that decompresses to a size larger than ${this.maxReceiveMessageSize}`
+ });
+ }
+ });
+ decompresser.on('end', () => {
+ resolve(Buffer.concat(messageParts));
+ });
+ decompresser.write(messageContents);
+ decompresser.end();
+ });
+ }
+ else {
+ return Promise.reject({
+ code: constants_1.Status.UNIMPLEMENTED,
+ details: `Received message compressed with unsupported encoding "${encoding}"`,
+ });
+ }
+ }
+ sendMetadata(customMetadata) {
+ if (this.checkCancelled()) {
+ return;
+ }
+ if (this.metadataSent) {
+ return;
+ }
+ this.metadataSent = true;
+ const custom = customMetadata ? customMetadata.toHttp2Headers() : null;
+ // TODO(cjihrig): Include compression headers.
+ const headers = Object.assign(Object.assign(Object.assign({}, defaultResponseHeaders), defaultCompressionHeaders), custom);
+ this.stream.respond(headers, defaultResponseOptions);
+ }
+ receiveMetadata(headers) {
+ const metadata = metadata_1.Metadata.fromHttp2Headers(headers);
+ if (logging.isTracerEnabled(TRACER_NAME)) {
+ trace('Request to ' +
+ this.handler.path +
+ ' received headers ' +
+ JSON.stringify(metadata.toJSON()));
+ }
+ // TODO(cjihrig): Receive compression metadata.
+ const timeoutHeader = metadata.get(GRPC_TIMEOUT_HEADER);
+ if (timeoutHeader.length > 0) {
+ const match = timeoutHeader[0].toString().match(DEADLINE_REGEX);
+ if (match === null) {
+ const err = new Error('Invalid deadline');
+ err.code = constants_1.Status.OUT_OF_RANGE;
+ this.sendError(err);
+ return metadata;
+ }
+ const timeout = (+match[1] * deadlineUnitsToMs[match[2]]) | 0;
+ const now = new Date();
+ this.deadline = now.setMilliseconds(now.getMilliseconds() + timeout);
+ this.deadlineTimer = setTimeout(handleExpiredDeadline, timeout, this);
+ metadata.remove(GRPC_TIMEOUT_HEADER);
+ }
+ // Remove several headers that should not be propagated to the application
+ metadata.remove(http2.constants.HTTP2_HEADER_ACCEPT_ENCODING);
+ metadata.remove(http2.constants.HTTP2_HEADER_TE);
+ metadata.remove(http2.constants.HTTP2_HEADER_CONTENT_TYPE);
+ metadata.remove('grpc-accept-encoding');
+ return metadata;
+ }
+ receiveUnaryMessage(encoding) {
+ return new Promise((resolve, reject) => {
+ const { stream } = this;
+ let receivedLength = 0;
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
+ const call = this;
+ const body = [];
+ const limit = this.maxReceiveMessageSize;
+ this.stream.on('data', onData);
+ this.stream.on('end', onEnd);
+ this.stream.on('error', onEnd);
+ function onData(chunk) {
+ receivedLength += chunk.byteLength;
+ if (limit !== -1 && receivedLength > limit) {
+ stream.removeListener('data', onData);
+ stream.removeListener('end', onEnd);
+ stream.removeListener('error', onEnd);
+ reject({
+ code: constants_1.Status.RESOURCE_EXHAUSTED,
+ details: `Received message larger than max (${receivedLength} vs. ${limit})`,
+ });
+ return;
+ }
+ body.push(chunk);
+ }
+ function onEnd(err) {
+ stream.removeListener('data', onData);
+ stream.removeListener('end', onEnd);
+ stream.removeListener('error', onEnd);
+ if (err !== undefined) {
+ reject({ code: constants_1.Status.INTERNAL, details: err.message });
+ return;
+ }
+ if (receivedLength === 0) {
+ reject({
+ code: constants_1.Status.INTERNAL,
+ details: 'received empty unary message',
+ });
+ return;
+ }
+ call.emit('receiveMessage');
+ const requestBytes = Buffer.concat(body, receivedLength);
+ const compressed = requestBytes.readUInt8(0) === 1;
+ const compressedMessageEncoding = compressed ? encoding : 'identity';
+ const decompressedMessage = call.getDecompressedMessage(requestBytes, compressedMessageEncoding);
+ if (Buffer.isBuffer(decompressedMessage)) {
+ resolve(call.deserializeMessageWithInternalError(decompressedMessage));
+ return;
+ }
+ decompressedMessage.then(decompressed => resolve(call.deserializeMessageWithInternalError(decompressed)), (err) => reject(err.code
+ ? err
+ : {
+ code: constants_1.Status.INTERNAL,
+ details: `Received "grpc-encoding" header "${encoding}" but ${encoding} decompression failed`,
+ }));
+ }
+ });
+ }
+ async deserializeMessageWithInternalError(buffer) {
+ try {
+ return this.deserializeMessage(buffer);
+ }
+ catch (err) {
+ throw {
+ details: (0, error_1.getErrorMessage)(err),
+ code: constants_1.Status.INTERNAL,
+ };
+ }
+ }
+ serializeMessage(value) {
+ const messageBuffer = this.handler.serialize(value);
+ // TODO(cjihrig): Call compression aware serializeMessage().
+ const byteLength = messageBuffer.byteLength;
+ const output = Buffer.allocUnsafe(byteLength + 5);
+ output.writeUInt8(0, 0);
+ output.writeUInt32BE(byteLength, 1);
+ messageBuffer.copy(output, 5);
+ return output;
+ }
+ deserializeMessage(bytes) {
+ return this.handler.deserialize(bytes);
+ }
+ async sendUnaryMessage(err, value, metadata, flags) {
+ if (this.checkCancelled()) {
+ return;
+ }
+ if (metadata === undefined) {
+ metadata = null;
+ }
+ if (err) {
+ if (!Object.prototype.hasOwnProperty.call(err, 'metadata') && metadata) {
+ err.metadata = metadata;
+ }
+ this.sendError(err);
+ return;
+ }
+ try {
+ const response = this.serializeMessage(value);
+ this.write(response);
+ this.sendStatus({ code: constants_1.Status.OK, details: 'OK', metadata });
+ }
+ catch (err) {
+ this.sendError({
+ details: (0, error_1.getErrorMessage)(err),
+ code: constants_1.Status.INTERNAL,
+ });
+ }
+ }
+ sendStatus(statusObj) {
+ var _a, _b;
+ this.emit('callEnd', statusObj.code);
+ this.emit('streamEnd', statusObj.code === constants_1.Status.OK);
+ if (this.checkCancelled()) {
+ return;
+ }
+ trace('Request to method ' +
+ ((_a = this.handler) === null || _a === void 0 ? void 0 : _a.path) +
+ ' ended with status code: ' +
+ constants_1.Status[statusObj.code] +
+ ' details: ' +
+ statusObj.details);
+ if (this.deadlineTimer)
+ clearTimeout(this.deadlineTimer);
+ if (this.stream.headersSent) {
+ if (!this.wantTrailers) {
+ this.wantTrailers = true;
+ this.stream.once('wantTrailers', () => {
+ var _a;
+ const trailersToSend = Object.assign({ [GRPC_STATUS_HEADER]: statusObj.code, [GRPC_MESSAGE_HEADER]: encodeURI(statusObj.details) }, (_a = statusObj.metadata) === null || _a === void 0 ? void 0 : _a.toHttp2Headers());
+ this.stream.sendTrailers(trailersToSend);
+ this.statusSent = true;
+ });
+ this.stream.end();
+ }
+ }
+ else {
+ // Trailers-only response
+ const trailersToSend = Object.assign(Object.assign({ [GRPC_STATUS_HEADER]: statusObj.code, [GRPC_MESSAGE_HEADER]: encodeURI(statusObj.details) }, defaultResponseHeaders), (_b = statusObj.metadata) === null || _b === void 0 ? void 0 : _b.toHttp2Headers());
+ this.stream.respond(trailersToSend, { endStream: true });
+ this.statusSent = true;
+ }
+ }
+ sendError(error) {
+ const status = {
+ code: constants_1.Status.UNKNOWN,
+ details: 'message' in error ? error.message : 'Unknown Error',
+ metadata: 'metadata' in error && error.metadata !== undefined
+ ? error.metadata
+ : null,
+ };
+ if ('code' in error &&
+ typeof error.code === 'number' &&
+ Number.isInteger(error.code)) {
+ status.code = error.code;
+ if ('details' in error && typeof error.details === 'string') {
+ status.details = error.details;
+ }
+ }
+ this.sendStatus(status);
+ }
+ write(chunk) {
+ if (this.checkCancelled()) {
+ return;
+ }
+ if (this.maxSendMessageSize !== -1 &&
+ chunk.length > this.maxSendMessageSize) {
+ this.sendError({
+ code: constants_1.Status.RESOURCE_EXHAUSTED,
+ details: `Sent message larger than max (${chunk.length} vs. ${this.maxSendMessageSize})`,
+ });
+ return;
+ }
+ this.sendMetadata();
+ this.emit('sendMessage');
+ return this.stream.write(chunk);
+ }
+ resume() {
+ this.stream.resume();
+ }
+ setupSurfaceCall(call) {
+ this.once('cancelled', reason => {
+ call.cancelled = true;
+ call.emit('cancelled', reason);
+ });
+ this.once('callEnd', status => call.emit('callEnd', status));
+ }
+ setupReadable(readable, encoding) {
+ const decoder = new stream_decoder_1.StreamDecoder(this.maxReceiveMessageSize);
+ let readsDone = false;
+ let pendingMessageProcessing = false;
+ let pushedEnd = false;
+ const maybePushEnd = async () => {
+ if (!pushedEnd && readsDone && !pendingMessageProcessing) {
+ pushedEnd = true;
+ await this.pushOrBufferMessage(readable, null);
+ }
+ };
+ this.stream.on('data', async (data) => {
+ let messages;
+ try {
+ messages = decoder.write(data);
+ }
+ catch (e) {
+ this.sendError({
+ code: constants_1.Status.RESOURCE_EXHAUSTED,
+ details: e.message
+ });
+ return;
+ }
+ pendingMessageProcessing = true;
+ this.stream.pause();
+ for (const message of messages) {
+ this.emit('receiveMessage');
+ const compressed = message.readUInt8(0) === 1;
+ const compressedMessageEncoding = compressed ? encoding : 'identity';
+ let decompressedMessage;
+ try {
+ decompressedMessage = await this.getDecompressedMessage(message, compressedMessageEncoding);
+ }
+ catch (e) {
+ this.sendError(e);
+ return;
+ }
+ // Encountered an error with decompression; it'll already have been propogated back
+ // Just return early
+ if (!decompressedMessage)
+ return;
+ await this.pushOrBufferMessage(readable, decompressedMessage);
+ }
+ pendingMessageProcessing = false;
+ this.stream.resume();
+ await maybePushEnd();
+ });
+ this.stream.once('end', async () => {
+ readsDone = true;
+ await maybePushEnd();
+ });
+ }
+ consumeUnpushedMessages(readable) {
+ this.canPush = true;
+ while (this.messagesToPush.length > 0) {
+ const nextMessage = this.messagesToPush.shift();
+ const canPush = readable.push(nextMessage);
+ if (nextMessage === null || canPush === false) {
+ this.canPush = false;
+ break;
+ }
+ }
+ return this.canPush;
+ }
+ async pushOrBufferMessage(readable, messageBytes) {
+ if (this.isPushPending) {
+ this.bufferedMessages.push(messageBytes);
+ }
+ else {
+ await this.pushMessage(readable, messageBytes);
+ }
+ }
+ async pushMessage(readable, messageBytes) {
+ if (messageBytes === null) {
+ trace('Received end of stream');
+ if (this.canPush) {
+ readable.push(null);
+ }
+ else {
+ this.messagesToPush.push(null);
+ }
+ return;
+ }
+ trace('Received message of length ' + messageBytes.length);
+ this.isPushPending = true;
+ try {
+ const deserialized = await this.deserializeMessage(messageBytes);
+ if (this.canPush) {
+ if (!readable.push(deserialized)) {
+ this.canPush = false;
+ this.stream.pause();
+ }
+ }
+ else {
+ this.messagesToPush.push(deserialized);
+ }
+ }
+ catch (error) {
+ // Ignore any remaining messages when errors occur.
+ this.bufferedMessages.length = 0;
+ let code = (0, error_1.getErrorCode)(error);
+ if (code === null || code < constants_1.Status.OK || code > constants_1.Status.UNAUTHENTICATED) {
+ code = constants_1.Status.INTERNAL;
+ }
+ readable.emit('error', {
+ details: (0, error_1.getErrorMessage)(error),
+ code: code,
+ });
+ }
+ this.isPushPending = false;
+ if (this.bufferedMessages.length > 0) {
+ await this.pushMessage(readable, this.bufferedMessages.shift());
+ }
+ }
+ getPeer() {
+ var _a;
+ const socket = (_a = this.stream.session) === null || _a === void 0 ? void 0 : _a.socket;
+ if (socket === null || socket === void 0 ? void 0 : socket.remoteAddress) {
+ if (socket.remotePort) {
+ return `${socket.remoteAddress}:${socket.remotePort}`;
+ }
+ else {
+ return socket.remoteAddress;
+ }
+ }
+ else {
+ return 'unknown';
+ }
+ }
+ getDeadline() {
+ return this.deadline;
+ }
+ getPath() {
+ return this.handler.path;
+ }
+}
+exports.Http2ServerCallStream = Http2ServerCallStream;
+function handleExpiredDeadline(call) {
+ const err = new Error('Deadline exceeded');
+ err.code = constants_1.Status.DEADLINE_EXCEEDED;
+ call.sendError(err);
+ call.cancelled = true;
+ call.emit('cancelled', 'deadline');
+}
+//# sourceMappingURL=server-call.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js.map
new file mode 100644
index 0000000..59a1804
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-call.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"server-call.js","sourceRoot":"","sources":["../../src/server-call.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts
new file mode 100644
index 0000000..ab98e65
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts
@@ -0,0 +1,13 @@
+/// <reference types="node" />
+/// <reference types="node" />
+import { SecureServerOptions } from 'http2';
+export interface KeyCertPair {
+ private_key: Buffer;
+ cert_chain: Buffer;
+}
+export declare abstract class ServerCredentials {
+ abstract _isSecure(): boolean;
+ abstract _getSettings(): SecureServerOptions | null;
+ static createInsecure(): ServerCredentials;
+ static createSsl(rootCerts: Buffer | null, keyCertPairs: KeyCertPair[], checkClientCertificate?: boolean): ServerCredentials;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js
new file mode 100644
index 0000000..f1d3f96
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js
@@ -0,0 +1,81 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ServerCredentials = void 0;
+const tls_helpers_1 = require("./tls-helpers");
+class ServerCredentials {
+ static createInsecure() {
+ return new InsecureServerCredentials();
+ }
+ static createSsl(rootCerts, keyCertPairs, checkClientCertificate = false) {
+ if (rootCerts !== null && !Buffer.isBuffer(rootCerts)) {
+ throw new TypeError('rootCerts must be null or a Buffer');
+ }
+ if (!Array.isArray(keyCertPairs)) {
+ throw new TypeError('keyCertPairs must be an array');
+ }
+ if (typeof checkClientCertificate !== 'boolean') {
+ throw new TypeError('checkClientCertificate must be a boolean');
+ }
+ const cert = [];
+ const key = [];
+ for (let i = 0; i < keyCertPairs.length; i++) {
+ const pair = keyCertPairs[i];
+ if (pair === null || typeof pair !== 'object') {
+ throw new TypeError(`keyCertPair[${i}] must be an object`);
+ }
+ if (!Buffer.isBuffer(pair.private_key)) {
+ throw new TypeError(`keyCertPair[${i}].private_key must be a Buffer`);
+ }
+ if (!Buffer.isBuffer(pair.cert_chain)) {
+ throw new TypeError(`keyCertPair[${i}].cert_chain must be a Buffer`);
+ }
+ cert.push(pair.cert_chain);
+ key.push(pair.private_key);
+ }
+ return new SecureServerCredentials({
+ ca: rootCerts || (0, tls_helpers_1.getDefaultRootsData)() || undefined,
+ cert,
+ key,
+ requestCert: checkClientCertificate,
+ ciphers: tls_helpers_1.CIPHER_SUITES,
+ });
+ }
+}
+exports.ServerCredentials = ServerCredentials;
+class InsecureServerCredentials extends ServerCredentials {
+ _isSecure() {
+ return false;
+ }
+ _getSettings() {
+ return null;
+ }
+}
+class SecureServerCredentials extends ServerCredentials {
+ constructor(options) {
+ super();
+ this.options = options;
+ }
+ _isSecure() {
+ return true;
+ }
+ _getSettings() {
+ return this.options;
+ }
+}
+//# sourceMappingURL=server-credentials.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js.map
new file mode 100644
index 0000000..41d4226
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server-credentials.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"server-credentials.js","sourceRoot":"","sources":["../../src/server-credentials.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAGH,+CAAmE;AAOnE,MAAsB,iBAAiB;IAIrC,MAAM,CAAC,cAAc;QACnB,OAAO,IAAI,yBAAyB,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,SAAS,CACd,SAAwB,EACxB,YAA2B,EAC3B,sBAAsB,GAAG,KAAK;QAE9B,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,sBAAsB,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,EAAE,CAAC;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9C,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;YAC7D,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,gCAAgC,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,uBAAuB,CAAC;YACjC,EAAE,EAAE,SAAS,IAAI,IAAA,iCAAmB,GAAE,IAAI,SAAS;YACnD,IAAI;YACJ,GAAG;YACH,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,2BAAa;SACvB,CAAC,CAAC;IACL,CAAC;CACF;AAvDD,8CAuDC;AAED,MAAM,yBAA0B,SAAQ,iBAAiB;IACvD,SAAS;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,uBAAwB,SAAQ,iBAAiB;IAGrD,YAAY,OAA4B;QACtC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/server.d.ts
new file mode 100644
index 0000000..b360fd9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server.d.ts
@@ -0,0 +1,56 @@
+import { Deserialize, Serialize, ServiceDefinition } from './make-client';
+import { HandleCall } from './server-call';
+import { ServerCredentials } from './server-credentials';
+import { ChannelOptions } from './channel-options';
+import { ServerRef } from './channelz';
+export type UntypedHandleCall = HandleCall<any, any>;
+export interface UntypedServiceImplementation {
+ [name: string]: UntypedHandleCall;
+}
+export declare class Server {
+ private http2ServerList;
+ private handlers;
+ private sessions;
+ private started;
+ private shutdown;
+ private options;
+ private serverAddressString;
+ private readonly channelzEnabled;
+ private channelzRef;
+ private channelzTrace;
+ private callTracker;
+ private listenerChildrenTracker;
+ private sessionChildrenTracker;
+ private readonly maxConnectionAgeMs;
+ private readonly maxConnectionAgeGraceMs;
+ private readonly keepaliveTimeMs;
+ private readonly keepaliveTimeoutMs;
+ constructor(options?: ChannelOptions);
+ private getChannelzInfo;
+ private getChannelzSessionInfoGetter;
+ private trace;
+ addProtoService(): never;
+ addService(service: ServiceDefinition, implementation: UntypedServiceImplementation): void;
+ removeService(service: ServiceDefinition): void;
+ bind(port: string, creds: ServerCredentials): never;
+ bindAsync(port: string, creds: ServerCredentials, callback: (error: Error | null, port: number) => void): void;
+ forceShutdown(): void;
+ register<RequestType, ResponseType>(name: string, handler: HandleCall<RequestType, ResponseType>, serialize: Serialize<ResponseType>, deserialize: Deserialize<RequestType>, type: string): boolean;
+ unregister(name: string): boolean;
+ start(): void;
+ tryShutdown(callback: (error?: Error) => void): void;
+ addHttp2Port(): never;
+ /**
+ * Get the channelz reference object for this server. The returned value is
+ * garbage if channelz is disabled for this server.
+ * @returns
+ */
+ getChannelzRef(): ServerRef;
+ private _verifyContentType;
+ private _retrieveHandler;
+ private _respondWithError;
+ private _channelzHandler;
+ private _streamHandler;
+ private _runHandlerForCall;
+ private _setupHandlers;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/server.js
new file mode 100644
index 0000000..a6c80ff
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server.js
@@ -0,0 +1,892 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Server = void 0;
+const http2 = require("http2");
+const constants_1 = require("./constants");
+const server_call_1 = require("./server-call");
+const server_credentials_1 = require("./server-credentials");
+const resolver_1 = require("./resolver");
+const logging = require("./logging");
+const subchannel_address_1 = require("./subchannel-address");
+const uri_parser_1 = require("./uri-parser");
+const channelz_1 = require("./channelz");
+const UNLIMITED_CONNECTION_AGE_MS = ~(1 << 31);
+const KEEPALIVE_MAX_TIME_MS = ~(1 << 31);
+const KEEPALIVE_TIMEOUT_MS = 20000;
+const { HTTP2_HEADER_PATH } = http2.constants;
+const TRACER_NAME = 'server';
+function noop() { }
+function getUnimplementedStatusResponse(methodName) {
+ return {
+ code: constants_1.Status.UNIMPLEMENTED,
+ details: `The server does not implement the method ${methodName}`,
+ };
+}
+function getDefaultHandler(handlerType, methodName) {
+ const unimplementedStatusResponse = getUnimplementedStatusResponse(methodName);
+ switch (handlerType) {
+ case 'unary':
+ return (call, callback) => {
+ callback(unimplementedStatusResponse, null);
+ };
+ case 'clientStream':
+ return (call, callback) => {
+ callback(unimplementedStatusResponse, null);
+ };
+ case 'serverStream':
+ return (call) => {
+ call.emit('error', unimplementedStatusResponse);
+ };
+ case 'bidi':
+ return (call) => {
+ call.emit('error', unimplementedStatusResponse);
+ };
+ default:
+ throw new Error(`Invalid handlerType ${handlerType}`);
+ }
+}
+class Server {
+ constructor(options) {
+ var _a, _b, _c, _d;
+ this.http2ServerList = [];
+ this.handlers = new Map();
+ this.sessions = new Map();
+ this.started = false;
+ this.shutdown = false;
+ this.serverAddressString = 'null';
+ // Channelz Info
+ this.channelzEnabled = true;
+ this.channelzTrace = new channelz_1.ChannelzTrace();
+ this.callTracker = new channelz_1.ChannelzCallTracker();
+ this.listenerChildrenTracker = new channelz_1.ChannelzChildrenTracker();
+ this.sessionChildrenTracker = new channelz_1.ChannelzChildrenTracker();
+ this.options = options !== null && options !== void 0 ? options : {};
+ if (this.options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+ this.channelzRef = (0, channelz_1.registerChannelzServer)(() => this.getChannelzInfo(), this.channelzEnabled);
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Server created');
+ }
+ this.maxConnectionAgeMs =
+ (_a = this.options['grpc.max_connection_age_ms']) !== null && _a !== void 0 ? _a : UNLIMITED_CONNECTION_AGE_MS;
+ this.maxConnectionAgeGraceMs =
+ (_b = this.options['grpc.max_connection_age_grace_ms']) !== null && _b !== void 0 ? _b : UNLIMITED_CONNECTION_AGE_MS;
+ this.keepaliveTimeMs =
+ (_c = this.options['grpc.keepalive_time_ms']) !== null && _c !== void 0 ? _c : KEEPALIVE_MAX_TIME_MS;
+ this.keepaliveTimeoutMs =
+ (_d = this.options['grpc.keepalive_timeout_ms']) !== null && _d !== void 0 ? _d : KEEPALIVE_TIMEOUT_MS;
+ this.trace('Server constructed');
+ }
+ getChannelzInfo() {
+ return {
+ trace: this.channelzTrace,
+ callTracker: this.callTracker,
+ listenerChildren: this.listenerChildrenTracker.getChildLists(),
+ sessionChildren: this.sessionChildrenTracker.getChildLists(),
+ };
+ }
+ getChannelzSessionInfoGetter(session) {
+ return () => {
+ var _a, _b, _c;
+ const sessionInfo = this.sessions.get(session);
+ const sessionSocket = session.socket;
+ const remoteAddress = sessionSocket.remoteAddress
+ ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.remoteAddress, sessionSocket.remotePort)
+ : null;
+ const localAddress = sessionSocket.localAddress
+ ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.localAddress, sessionSocket.localPort)
+ : null;
+ let tlsInfo;
+ if (session.encrypted) {
+ const tlsSocket = sessionSocket;
+ const cipherInfo = tlsSocket.getCipher();
+ const certificate = tlsSocket.getCertificate();
+ const peerCertificate = tlsSocket.getPeerCertificate();
+ tlsInfo = {
+ cipherSuiteStandardName: (_a = cipherInfo.standardName) !== null && _a !== void 0 ? _a : null,
+ cipherSuiteOtherName: cipherInfo.standardName
+ ? null
+ : cipherInfo.name,
+ localCertificate: certificate && 'raw' in certificate ? certificate.raw : null,
+ remoteCertificate: peerCertificate && 'raw' in peerCertificate
+ ? peerCertificate.raw
+ : null,
+ };
+ }
+ else {
+ tlsInfo = null;
+ }
+ const socketInfo = {
+ remoteAddress: remoteAddress,
+ localAddress: localAddress,
+ security: tlsInfo,
+ remoteName: null,
+ streamsStarted: sessionInfo.streamTracker.callsStarted,
+ streamsSucceeded: sessionInfo.streamTracker.callsSucceeded,
+ streamsFailed: sessionInfo.streamTracker.callsFailed,
+ messagesSent: sessionInfo.messagesSent,
+ messagesReceived: sessionInfo.messagesReceived,
+ keepAlivesSent: 0,
+ lastLocalStreamCreatedTimestamp: null,
+ lastRemoteStreamCreatedTimestamp: sessionInfo.streamTracker.lastCallStartedTimestamp,
+ lastMessageSentTimestamp: sessionInfo.lastMessageSentTimestamp,
+ lastMessageReceivedTimestamp: sessionInfo.lastMessageReceivedTimestamp,
+ localFlowControlWindow: (_b = session.state.localWindowSize) !== null && _b !== void 0 ? _b : null,
+ remoteFlowControlWindow: (_c = session.state.remoteWindowSize) !== null && _c !== void 0 ? _c : null,
+ };
+ return socketInfo;
+ };
+ }
+ trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '(' + this.channelzRef.id + ') ' + text);
+ }
+ addProtoService() {
+ throw new Error('Not implemented. Use addService() instead');
+ }
+ addService(service, implementation) {
+ if (service === null ||
+ typeof service !== 'object' ||
+ implementation === null ||
+ typeof implementation !== 'object') {
+ throw new Error('addService() requires two objects as arguments');
+ }
+ const serviceKeys = Object.keys(service);
+ if (serviceKeys.length === 0) {
+ throw new Error('Cannot add an empty service to a server');
+ }
+ serviceKeys.forEach(name => {
+ const attrs = service[name];
+ let methodType;
+ if (attrs.requestStream) {
+ if (attrs.responseStream) {
+ methodType = 'bidi';
+ }
+ else {
+ methodType = 'clientStream';
+ }
+ }
+ else {
+ if (attrs.responseStream) {
+ methodType = 'serverStream';
+ }
+ else {
+ methodType = 'unary';
+ }
+ }
+ let implFn = implementation[name];
+ let impl;
+ if (implFn === undefined && typeof attrs.originalName === 'string') {
+ implFn = implementation[attrs.originalName];
+ }
+ if (implFn !== undefined) {
+ impl = implFn.bind(implementation);
+ }
+ else {
+ impl = getDefaultHandler(methodType, name);
+ }
+ const success = this.register(attrs.path, impl, attrs.responseSerialize, attrs.requestDeserialize, methodType);
+ if (success === false) {
+ throw new Error(`Method handler for ${attrs.path} already provided.`);
+ }
+ });
+ }
+ removeService(service) {
+ if (service === null || typeof service !== 'object') {
+ throw new Error('removeService() requires object as argument');
+ }
+ const serviceKeys = Object.keys(service);
+ serviceKeys.forEach(name => {
+ const attrs = service[name];
+ this.unregister(attrs.path);
+ });
+ }
+ bind(port, creds) {
+ throw new Error('Not implemented. Use bindAsync() instead');
+ }
+ bindAsync(port, creds, callback) {
+ if (this.started === true) {
+ throw new Error('server is already started');
+ }
+ if (this.shutdown) {
+ throw new Error('bindAsync called after shutdown');
+ }
+ if (typeof port !== 'string') {
+ throw new TypeError('port must be a string');
+ }
+ if (creds === null || !(creds instanceof server_credentials_1.ServerCredentials)) {
+ throw new TypeError('creds must be a ServerCredentials object');
+ }
+ if (typeof callback !== 'function') {
+ throw new TypeError('callback must be a function');
+ }
+ const initialPortUri = (0, uri_parser_1.parseUri)(port);
+ if (initialPortUri === null) {
+ throw new Error(`Could not parse port "${port}"`);
+ }
+ const portUri = (0, resolver_1.mapUriDefaultScheme)(initialPortUri);
+ if (portUri === null) {
+ throw new Error(`Could not get a default scheme for port "${port}"`);
+ }
+ const serverOptions = {
+ maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER,
+ };
+ if ('grpc-node.max_session_memory' in this.options) {
+ serverOptions.maxSessionMemory =
+ this.options['grpc-node.max_session_memory'];
+ }
+ else {
+ /* By default, set a very large max session memory limit, to effectively
+ * disable enforcement of the limit. Some testing indicates that Node's
+ * behavior degrades badly when this limit is reached, so we solve that
+ * by disabling the check entirely. */
+ serverOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER;
+ }
+ if ('grpc.max_concurrent_streams' in this.options) {
+ serverOptions.settings = {
+ maxConcurrentStreams: this.options['grpc.max_concurrent_streams'],
+ };
+ }
+ const deferredCallback = (error, port) => {
+ process.nextTick(() => callback(error, port));
+ };
+ const setupServer = () => {
+ let http2Server;
+ if (creds._isSecure()) {
+ const secureServerOptions = Object.assign(serverOptions, creds._getSettings());
+ secureServerOptions.enableTrace =
+ this.options['grpc-node.tls_enable_trace'] === 1;
+ http2Server = http2.createSecureServer(secureServerOptions);
+ http2Server.on('secureConnection', (socket) => {
+ /* These errors need to be handled by the user of Http2SecureServer,
+ * according to https://github.com/nodejs/node/issues/35824 */
+ socket.on('error', (e) => {
+ this.trace('An incoming TLS connection closed with error: ' + e.message);
+ });
+ });
+ }
+ else {
+ http2Server = http2.createServer(serverOptions);
+ }
+ http2Server.setTimeout(0, noop);
+ this._setupHandlers(http2Server);
+ return http2Server;
+ };
+ const bindSpecificPort = (addressList, portNum, previousCount) => {
+ if (addressList.length === 0) {
+ return Promise.resolve({ port: portNum, count: previousCount });
+ }
+ return Promise.all(addressList.map(address => {
+ this.trace('Attempting to bind ' + (0, subchannel_address_1.subchannelAddressToString)(address));
+ let addr;
+ if ((0, subchannel_address_1.isTcpSubchannelAddress)(address)) {
+ addr = {
+ host: address.host,
+ port: portNum,
+ };
+ }
+ else {
+ addr = address;
+ }
+ const http2Server = setupServer();
+ return new Promise((resolve, reject) => {
+ const onError = (err) => {
+ this.trace('Failed to bind ' +
+ (0, subchannel_address_1.subchannelAddressToString)(address) +
+ ' with error ' +
+ err.message);
+ resolve(err);
+ };
+ http2Server.once('error', onError);
+ http2Server.listen(addr, () => {
+ if (this.shutdown) {
+ http2Server.close();
+ resolve(new Error('bindAsync failed because server is shutdown'));
+ return;
+ }
+ const boundAddress = http2Server.address();
+ let boundSubchannelAddress;
+ if (typeof boundAddress === 'string') {
+ boundSubchannelAddress = {
+ path: boundAddress,
+ };
+ }
+ else {
+ boundSubchannelAddress = {
+ host: boundAddress.address,
+ port: boundAddress.port,
+ };
+ }
+ const channelzRef = (0, channelz_1.registerChannelzSocket)((0, subchannel_address_1.subchannelAddressToString)(boundSubchannelAddress), () => {
+ return {
+ localAddress: boundSubchannelAddress,
+ remoteAddress: null,
+ security: null,
+ remoteName: null,
+ streamsStarted: 0,
+ streamsSucceeded: 0,
+ streamsFailed: 0,
+ messagesSent: 0,
+ messagesReceived: 0,
+ keepAlivesSent: 0,
+ lastLocalStreamCreatedTimestamp: null,
+ lastRemoteStreamCreatedTimestamp: null,
+ lastMessageSentTimestamp: null,
+ lastMessageReceivedTimestamp: null,
+ localFlowControlWindow: null,
+ remoteFlowControlWindow: null,
+ };
+ }, this.channelzEnabled);
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.refChild(channelzRef);
+ }
+ this.http2ServerList.push({
+ server: http2Server,
+ channelzRef: channelzRef,
+ });
+ this.trace('Successfully bound ' +
+ (0, subchannel_address_1.subchannelAddressToString)(boundSubchannelAddress));
+ resolve('port' in boundSubchannelAddress
+ ? boundSubchannelAddress.port
+ : portNum);
+ http2Server.removeListener('error', onError);
+ });
+ });
+ })).then(results => {
+ let count = 0;
+ for (const result of results) {
+ if (typeof result === 'number') {
+ count += 1;
+ if (result !== portNum) {
+ throw new Error('Invalid state: multiple port numbers added from single address');
+ }
+ }
+ }
+ return {
+ port: portNum,
+ count: count + previousCount,
+ };
+ });
+ };
+ const bindWildcardPort = (addressList) => {
+ if (addressList.length === 0) {
+ return Promise.resolve({ port: 0, count: 0 });
+ }
+ const address = addressList[0];
+ const http2Server = setupServer();
+ return new Promise((resolve, reject) => {
+ const onError = (err) => {
+ this.trace('Failed to bind ' +
+ (0, subchannel_address_1.subchannelAddressToString)(address) +
+ ' with error ' +
+ err.message);
+ resolve(bindWildcardPort(addressList.slice(1)));
+ };
+ http2Server.once('error', onError);
+ http2Server.listen(address, () => {
+ if (this.shutdown) {
+ http2Server.close();
+ resolve({ port: 0, count: 0 });
+ return;
+ }
+ const boundAddress = http2Server.address();
+ const boundSubchannelAddress = {
+ host: boundAddress.address,
+ port: boundAddress.port,
+ };
+ const channelzRef = (0, channelz_1.registerChannelzSocket)((0, subchannel_address_1.subchannelAddressToString)(boundSubchannelAddress), () => {
+ return {
+ localAddress: boundSubchannelAddress,
+ remoteAddress: null,
+ security: null,
+ remoteName: null,
+ streamsStarted: 0,
+ streamsSucceeded: 0,
+ streamsFailed: 0,
+ messagesSent: 0,
+ messagesReceived: 0,
+ keepAlivesSent: 0,
+ lastLocalStreamCreatedTimestamp: null,
+ lastRemoteStreamCreatedTimestamp: null,
+ lastMessageSentTimestamp: null,
+ lastMessageReceivedTimestamp: null,
+ localFlowControlWindow: null,
+ remoteFlowControlWindow: null,
+ };
+ }, this.channelzEnabled);
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.refChild(channelzRef);
+ }
+ this.http2ServerList.push({
+ server: http2Server,
+ channelzRef: channelzRef,
+ });
+ this.trace('Successfully bound ' +
+ (0, subchannel_address_1.subchannelAddressToString)(boundSubchannelAddress));
+ resolve(bindSpecificPort(addressList.slice(1), boundAddress.port, 1));
+ http2Server.removeListener('error', onError);
+ });
+ });
+ };
+ const resolverListener = {
+ onSuccessfulResolution: (addressList, serviceConfig, serviceConfigError) => {
+ // We only want one resolution result. Discard all future results
+ resolverListener.onSuccessfulResolution = () => { };
+ if (this.shutdown) {
+ deferredCallback(new Error(`bindAsync failed because server is shutdown`), 0);
+ }
+ if (addressList.length === 0) {
+ deferredCallback(new Error(`No addresses resolved for port ${port}`), 0);
+ return;
+ }
+ let bindResultPromise;
+ if ((0, subchannel_address_1.isTcpSubchannelAddress)(addressList[0])) {
+ if (addressList[0].port === 0) {
+ bindResultPromise = bindWildcardPort(addressList);
+ }
+ else {
+ bindResultPromise = bindSpecificPort(addressList, addressList[0].port, 0);
+ }
+ }
+ else {
+ // Use an arbitrary non-zero port for non-TCP addresses
+ bindResultPromise = bindSpecificPort(addressList, 1, 0);
+ }
+ bindResultPromise.then(bindResult => {
+ if (bindResult.count === 0) {
+ const errorString = `No address added out of total ${addressList.length} resolved`;
+ logging.log(constants_1.LogVerbosity.ERROR, errorString);
+ deferredCallback(new Error(errorString), 0);
+ }
+ else {
+ if (bindResult.count < addressList.length) {
+ logging.log(constants_1.LogVerbosity.INFO, `WARNING Only ${bindResult.count} addresses added out of total ${addressList.length} resolved`);
+ }
+ deferredCallback(null, bindResult.port);
+ }
+ }, error => {
+ const errorString = `No address added out of total ${addressList.length} resolved`;
+ logging.log(constants_1.LogVerbosity.ERROR, errorString);
+ deferredCallback(new Error(errorString), 0);
+ });
+ },
+ onError: error => {
+ deferredCallback(new Error(error.details), 0);
+ },
+ };
+ const resolver = (0, resolver_1.createResolver)(portUri, resolverListener, this.options);
+ resolver.updateResolution();
+ }
+ forceShutdown() {
+ // Close the server if it is still running.
+ for (const { server: http2Server, channelzRef: ref } of this
+ .http2ServerList) {
+ if (http2Server.listening) {
+ http2Server.close(() => {
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.unrefChild(ref);
+ (0, channelz_1.unregisterChannelzRef)(ref);
+ }
+ });
+ }
+ }
+ this.started = false;
+ this.shutdown = true;
+ // Always destroy any available sessions. It's possible that one or more
+ // tryShutdown() calls are in progress. Don't wait on them to finish.
+ this.sessions.forEach((channelzInfo, session) => {
+ // Cast NGHTTP2_CANCEL to any because TypeScript doesn't seem to
+ // recognize destroy(code) as a valid signature.
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ session.destroy(http2.constants.NGHTTP2_CANCEL);
+ });
+ this.sessions.clear();
+ if (this.channelzEnabled) {
+ (0, channelz_1.unregisterChannelzRef)(this.channelzRef);
+ }
+ }
+ register(name, handler, serialize, deserialize, type) {
+ if (this.handlers.has(name)) {
+ return false;
+ }
+ this.handlers.set(name, {
+ func: handler,
+ serialize,
+ deserialize,
+ type,
+ path: name,
+ });
+ return true;
+ }
+ unregister(name) {
+ return this.handlers.delete(name);
+ }
+ start() {
+ if (this.http2ServerList.length === 0 ||
+ this.http2ServerList.every(({ server: http2Server }) => http2Server.listening !== true)) {
+ throw new Error('server must be bound in order to start');
+ }
+ if (this.started === true) {
+ throw new Error('server is already started');
+ }
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Starting');
+ }
+ this.started = true;
+ }
+ tryShutdown(callback) {
+ const wrappedCallback = (error) => {
+ if (this.channelzEnabled) {
+ (0, channelz_1.unregisterChannelzRef)(this.channelzRef);
+ }
+ callback(error);
+ };
+ let pendingChecks = 0;
+ function maybeCallback() {
+ pendingChecks--;
+ if (pendingChecks === 0) {
+ wrappedCallback();
+ }
+ }
+ // Close the server if necessary.
+ this.started = false;
+ this.shutdown = true;
+ for (const { server: http2Server, channelzRef: ref } of this
+ .http2ServerList) {
+ if (http2Server.listening) {
+ pendingChecks++;
+ http2Server.close(() => {
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.unrefChild(ref);
+ (0, channelz_1.unregisterChannelzRef)(ref);
+ }
+ maybeCallback();
+ });
+ }
+ }
+ this.sessions.forEach((channelzInfo, session) => {
+ if (!session.closed) {
+ pendingChecks += 1;
+ session.close(maybeCallback);
+ }
+ });
+ if (pendingChecks === 0) {
+ wrappedCallback();
+ }
+ }
+ addHttp2Port() {
+ throw new Error('Not yet implemented');
+ }
+ /**
+ * Get the channelz reference object for this server. The returned value is
+ * garbage if channelz is disabled for this server.
+ * @returns
+ */
+ getChannelzRef() {
+ return this.channelzRef;
+ }
+ _verifyContentType(stream, headers) {
+ const contentType = headers[http2.constants.HTTP2_HEADER_CONTENT_TYPE];
+ if (typeof contentType !== 'string' ||
+ !contentType.startsWith('application/grpc')) {
+ stream.respond({
+ [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
+ }, { endStream: true });
+ return false;
+ }
+ return true;
+ }
+ _retrieveHandler(path) {
+ this.trace('Received call to method ' +
+ path +
+ ' at address ' +
+ this.serverAddressString);
+ const handler = this.handlers.get(path);
+ if (handler === undefined) {
+ this.trace('No handler registered for method ' +
+ path +
+ '. Sending UNIMPLEMENTED status.');
+ return null;
+ }
+ return handler;
+ }
+ _respondWithError(err, stream, channelzSessionInfo = null) {
+ const call = new server_call_1.Http2ServerCallStream(stream, null, this.options);
+ if (err.code === undefined) {
+ err.code = constants_1.Status.INTERNAL;
+ }
+ if (this.channelzEnabled) {
+ this.callTracker.addCallFailed();
+ channelzSessionInfo === null || channelzSessionInfo === void 0 ? void 0 : channelzSessionInfo.streamTracker.addCallFailed();
+ }
+ call.sendError(err);
+ }
+ _channelzHandler(stream, headers) {
+ const channelzSessionInfo = this.sessions.get(stream.session);
+ this.callTracker.addCallStarted();
+ channelzSessionInfo === null || channelzSessionInfo === void 0 ? void 0 : channelzSessionInfo.streamTracker.addCallStarted();
+ if (!this._verifyContentType(stream, headers)) {
+ this.callTracker.addCallFailed();
+ channelzSessionInfo === null || channelzSessionInfo === void 0 ? void 0 : channelzSessionInfo.streamTracker.addCallFailed();
+ return;
+ }
+ const path = headers[HTTP2_HEADER_PATH];
+ const handler = this._retrieveHandler(path);
+ if (!handler) {
+ this._respondWithError(getUnimplementedStatusResponse(path), stream, channelzSessionInfo);
+ return;
+ }
+ const call = new server_call_1.Http2ServerCallStream(stream, handler, this.options);
+ call.once('callEnd', (code) => {
+ if (code === constants_1.Status.OK) {
+ this.callTracker.addCallSucceeded();
+ }
+ else {
+ this.callTracker.addCallFailed();
+ }
+ });
+ if (channelzSessionInfo) {
+ call.once('streamEnd', (success) => {
+ if (success) {
+ channelzSessionInfo.streamTracker.addCallSucceeded();
+ }
+ else {
+ channelzSessionInfo.streamTracker.addCallFailed();
+ }
+ });
+ call.on('sendMessage', () => {
+ channelzSessionInfo.messagesSent += 1;
+ channelzSessionInfo.lastMessageSentTimestamp = new Date();
+ });
+ call.on('receiveMessage', () => {
+ channelzSessionInfo.messagesReceived += 1;
+ channelzSessionInfo.lastMessageReceivedTimestamp = new Date();
+ });
+ }
+ if (!this._runHandlerForCall(call, handler, headers)) {
+ this.callTracker.addCallFailed();
+ channelzSessionInfo === null || channelzSessionInfo === void 0 ? void 0 : channelzSessionInfo.streamTracker.addCallFailed();
+ call.sendError({
+ code: constants_1.Status.INTERNAL,
+ details: `Unknown handler type: ${handler.type}`,
+ });
+ }
+ }
+ _streamHandler(stream, headers) {
+ if (this._verifyContentType(stream, headers) !== true) {
+ return;
+ }
+ const path = headers[HTTP2_HEADER_PATH];
+ const handler = this._retrieveHandler(path);
+ if (!handler) {
+ this._respondWithError(getUnimplementedStatusResponse(path), stream, null);
+ return;
+ }
+ const call = new server_call_1.Http2ServerCallStream(stream, handler, this.options);
+ if (!this._runHandlerForCall(call, handler, headers)) {
+ call.sendError({
+ code: constants_1.Status.INTERNAL,
+ details: `Unknown handler type: ${handler.type}`,
+ });
+ }
+ }
+ _runHandlerForCall(call, handler, headers) {
+ var _a;
+ const metadata = call.receiveMetadata(headers);
+ const encoding = (_a = metadata.get('grpc-encoding')[0]) !== null && _a !== void 0 ? _a : 'identity';
+ metadata.remove('grpc-encoding');
+ const { type } = handler;
+ if (type === 'unary') {
+ handleUnary(call, handler, metadata, encoding);
+ }
+ else if (type === 'clientStream') {
+ handleClientStreaming(call, handler, metadata, encoding);
+ }
+ else if (type === 'serverStream') {
+ handleServerStreaming(call, handler, metadata, encoding);
+ }
+ else if (type === 'bidi') {
+ handleBidiStreaming(call, handler, metadata, encoding);
+ }
+ else {
+ return false;
+ }
+ return true;
+ }
+ _setupHandlers(http2Server) {
+ if (http2Server === null) {
+ return;
+ }
+ const serverAddress = http2Server.address();
+ let serverAddressString = 'null';
+ if (serverAddress) {
+ if (typeof serverAddress === 'string') {
+ serverAddressString = serverAddress;
+ }
+ else {
+ serverAddressString = serverAddress.address + ':' + serverAddress.port;
+ }
+ }
+ this.serverAddressString = serverAddressString;
+ const handler = this.channelzEnabled
+ ? this._channelzHandler
+ : this._streamHandler;
+ http2Server.on('stream', handler.bind(this));
+ http2Server.on('session', session => {
+ var _a, _b, _c, _d, _e;
+ if (!this.started) {
+ session.destroy();
+ return;
+ }
+ const channelzRef = (0, channelz_1.registerChannelzSocket)((_a = session.socket.remoteAddress) !== null && _a !== void 0 ? _a : 'unknown', this.getChannelzSessionInfoGetter(session), this.channelzEnabled);
+ const channelzSessionInfo = {
+ ref: channelzRef,
+ streamTracker: new channelz_1.ChannelzCallTracker(),
+ messagesSent: 0,
+ messagesReceived: 0,
+ lastMessageSentTimestamp: null,
+ lastMessageReceivedTimestamp: null,
+ };
+ this.sessions.set(session, channelzSessionInfo);
+ const clientAddress = session.socket.remoteAddress;
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Connection established by client ' + clientAddress);
+ this.sessionChildrenTracker.refChild(channelzRef);
+ }
+ let connectionAgeTimer = null;
+ let connectionAgeGraceTimer = null;
+ let sessionClosedByServer = false;
+ if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) {
+ // Apply a random jitter within a +/-10% range
+ const jitterMagnitude = this.maxConnectionAgeMs / 10;
+ const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude;
+ connectionAgeTimer = (_c = (_b = setTimeout(() => {
+ var _a, _b;
+ sessionClosedByServer = true;
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Connection dropped by max connection age from ' + clientAddress);
+ }
+ try {
+ session.goaway(http2.constants.NGHTTP2_NO_ERROR, ~(1 << 31), Buffer.from('max_age'));
+ }
+ catch (e) {
+ // The goaway can't be sent because the session is already closed
+ session.destroy();
+ return;
+ }
+ session.close();
+ /* Allow a grace period after sending the GOAWAY before forcibly
+ * closing the connection. */
+ if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) {
+ connectionAgeGraceTimer = (_b = (_a = setTimeout(() => {
+ session.destroy();
+ }, this.maxConnectionAgeGraceMs)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ }, this.maxConnectionAgeMs + jitter)).unref) === null || _c === void 0 ? void 0 : _c.call(_b);
+ }
+ const keeapliveTimeTimer = (_e = (_d = setInterval(() => {
+ var _a, _b;
+ const timeoutTImer = (_b = (_a = setTimeout(() => {
+ sessionClosedByServer = true;
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Connection dropped by keepalive timeout from ' + clientAddress);
+ }
+ session.close();
+ }, this.keepaliveTimeoutMs)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ try {
+ session.ping((err, duration, payload) => {
+ clearTimeout(timeoutTImer);
+ });
+ }
+ catch (e) {
+ // The ping can't be sent because the session is already closed
+ session.destroy();
+ }
+ }, this.keepaliveTimeMs)).unref) === null || _e === void 0 ? void 0 : _e.call(_d);
+ session.on('close', () => {
+ if (this.channelzEnabled) {
+ if (!sessionClosedByServer) {
+ this.channelzTrace.addTrace('CT_INFO', 'Connection dropped by client ' + clientAddress);
+ }
+ this.sessionChildrenTracker.unrefChild(channelzRef);
+ (0, channelz_1.unregisterChannelzRef)(channelzRef);
+ }
+ if (connectionAgeTimer) {
+ clearTimeout(connectionAgeTimer);
+ }
+ if (connectionAgeGraceTimer) {
+ clearTimeout(connectionAgeGraceTimer);
+ }
+ if (keeapliveTimeTimer) {
+ clearTimeout(keeapliveTimeTimer);
+ }
+ this.sessions.delete(session);
+ });
+ });
+ }
+}
+exports.Server = Server;
+async function handleUnary(call, handler, metadata, encoding) {
+ try {
+ const request = await call.receiveUnaryMessage(encoding);
+ if (request === undefined || call.cancelled) {
+ return;
+ }
+ const emitter = new server_call_1.ServerUnaryCallImpl(call, metadata, request);
+ handler.func(emitter, (err, value, trailer, flags) => {
+ call.sendUnaryMessage(err, value, trailer, flags);
+ });
+ }
+ catch (err) {
+ call.sendError(err);
+ }
+}
+function handleClientStreaming(call, handler, metadata, encoding) {
+ const stream = new server_call_1.ServerReadableStreamImpl(call, metadata, handler.deserialize, encoding);
+ function respond(err, value, trailer, flags) {
+ stream.destroy();
+ call.sendUnaryMessage(err, value, trailer, flags);
+ }
+ if (call.cancelled) {
+ return;
+ }
+ stream.on('error', respond);
+ handler.func(stream, respond);
+}
+async function handleServerStreaming(call, handler, metadata, encoding) {
+ try {
+ const request = await call.receiveUnaryMessage(encoding);
+ if (request === undefined || call.cancelled) {
+ return;
+ }
+ const stream = new server_call_1.ServerWritableStreamImpl(call, metadata, handler.serialize, request);
+ handler.func(stream);
+ }
+ catch (err) {
+ call.sendError(err);
+ }
+}
+function handleBidiStreaming(call, handler, metadata, encoding) {
+ const stream = new server_call_1.ServerDuplexStreamImpl(call, metadata, handler.serialize, handler.deserialize, encoding);
+ if (call.cancelled) {
+ return;
+ }
+ handler.func(stream);
+}
+//# sourceMappingURL=server.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/server.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/server.js.map
new file mode 100644
index 0000000..85ddc5b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/server.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.d.ts
new file mode 100644
index 0000000..4006426
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.d.ts
@@ -0,0 +1,56 @@
+import { Status } from './constants';
+import { Duration } from './duration';
+import { LoadBalancingConfig } from './load-balancer';
+export interface MethodConfigName {
+ service?: string;
+ method?: string;
+}
+export interface RetryPolicy {
+ maxAttempts: number;
+ initialBackoff: string;
+ maxBackoff: string;
+ backoffMultiplier: number;
+ retryableStatusCodes: (Status | string)[];
+}
+export interface HedgingPolicy {
+ maxAttempts: number;
+ hedgingDelay?: string;
+ nonFatalStatusCodes?: (Status | string)[];
+}
+export interface MethodConfig {
+ name: MethodConfigName[];
+ waitForReady?: boolean;
+ timeout?: Duration;
+ maxRequestBytes?: number;
+ maxResponseBytes?: number;
+ retryPolicy?: RetryPolicy;
+ hedgingPolicy?: HedgingPolicy;
+}
+export interface RetryThrottling {
+ maxTokens: number;
+ tokenRatio: number;
+}
+export interface ServiceConfig {
+ loadBalancingPolicy?: string;
+ loadBalancingConfig: LoadBalancingConfig[];
+ methodConfig: MethodConfig[];
+ retryThrottling?: RetryThrottling;
+}
+export interface ServiceConfigCanaryConfig {
+ clientLanguage?: string[];
+ percentage?: number;
+ clientHostname?: string[];
+ serviceConfig: ServiceConfig;
+}
+export declare function validateRetryThrottling(obj: any): RetryThrottling;
+export declare function validateServiceConfig(obj: any): ServiceConfig;
+/**
+ * Find the "grpc_config" record among the TXT records, parse its value as JSON, validate its contents,
+ * and select a service config with selection fields that all match this client. Most of these steps
+ * can fail with an error; the caller must handle any errors thrown this way.
+ * @param txtRecord The TXT record array that is output from a successful call to dns.resolveTxt
+ * @param percentage A number chosen from the range [0, 100) that is used to select which config to use
+ * @return The service configuration to use, given the percentage value, or null if the service config
+ * data has a valid format but none of the options match the current client.
+ */
+export declare function extractAndSelectServiceConfig(txtRecord: string[][], percentage: number): ServiceConfig | null;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js
new file mode 100644
index 0000000..165585c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js
@@ -0,0 +1,417 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.extractAndSelectServiceConfig = exports.validateServiceConfig = exports.validateRetryThrottling = void 0;
+/* This file implements gRFC A2 and the service config spec:
+ * https://github.com/grpc/proposal/blob/master/A2-service-configs-in-dns.md
+ * https://github.com/grpc/grpc/blob/master/doc/service_config.md. Each
+ * function here takes an object with unknown structure and returns its
+ * specific object type if the input has the right structure, and throws an
+ * error otherwise. */
+/* The any type is purposely used here. All functions validate their input at
+ * runtime */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+const os = require("os");
+const constants_1 = require("./constants");
+const load_balancer_1 = require("./load-balancer");
+/**
+ * Recognizes a number with up to 9 digits after the decimal point, followed by
+ * an "s", representing a number of seconds.
+ */
+const DURATION_REGEX = /^\d+(\.\d{1,9})?s$/;
+/**
+ * Client language name used for determining whether this client matches a
+ * `ServiceConfigCanaryConfig`'s `clientLanguage` list.
+ */
+const CLIENT_LANGUAGE_STRING = 'node';
+function validateName(obj) {
+ // In this context, and unset field and '' are considered the same
+ if ('service' in obj && obj.service !== '') {
+ if (typeof obj.service !== 'string') {
+ throw new Error(`Invalid method config name: invalid service: expected type string, got ${typeof obj.service}`);
+ }
+ if ('method' in obj && obj.method !== '') {
+ if (typeof obj.method !== 'string') {
+ throw new Error(`Invalid method config name: invalid method: expected type string, got ${typeof obj.service}`);
+ }
+ return {
+ service: obj.service,
+ method: obj.method,
+ };
+ }
+ else {
+ return {
+ service: obj.service,
+ };
+ }
+ }
+ else {
+ if ('method' in obj && obj.method !== undefined) {
+ throw new Error(`Invalid method config name: method set with empty or unset service`);
+ }
+ return {};
+ }
+}
+function validateRetryPolicy(obj) {
+ if (!('maxAttempts' in obj) ||
+ !Number.isInteger(obj.maxAttempts) ||
+ obj.maxAttempts < 2) {
+ throw new Error('Invalid method config retry policy: maxAttempts must be an integer at least 2');
+ }
+ if (!('initialBackoff' in obj) ||
+ typeof obj.initialBackoff !== 'string' ||
+ !DURATION_REGEX.test(obj.initialBackoff)) {
+ throw new Error('Invalid method config retry policy: initialBackoff must be a string consisting of a positive integer followed by s');
+ }
+ if (!('maxBackoff' in obj) ||
+ typeof obj.maxBackoff !== 'string' ||
+ !DURATION_REGEX.test(obj.maxBackoff)) {
+ throw new Error('Invalid method config retry policy: maxBackoff must be a string consisting of a positive integer followed by s');
+ }
+ if (!('backoffMultiplier' in obj) ||
+ typeof obj.backoffMultiplier !== 'number' ||
+ obj.backoffMultiplier <= 0) {
+ throw new Error('Invalid method config retry policy: backoffMultiplier must be a number greater than 0');
+ }
+ if (!('retryableStatusCodes' in obj && Array.isArray(obj.retryableStatusCodes))) {
+ throw new Error('Invalid method config retry policy: retryableStatusCodes is required');
+ }
+ if (obj.retryableStatusCodes.length === 0) {
+ throw new Error('Invalid method config retry policy: retryableStatusCodes must be non-empty');
+ }
+ for (const value of obj.retryableStatusCodes) {
+ if (typeof value === 'number') {
+ if (!Object.values(constants_1.Status).includes(value)) {
+ throw new Error('Invalid method config retry policy: retryableStatusCodes value not in status code range');
+ }
+ }
+ else if (typeof value === 'string') {
+ if (!Object.values(constants_1.Status).includes(value.toUpperCase())) {
+ throw new Error('Invalid method config retry policy: retryableStatusCodes value not a status code name');
+ }
+ }
+ else {
+ throw new Error('Invalid method config retry policy: retryableStatusCodes value must be a string or number');
+ }
+ }
+ return {
+ maxAttempts: obj.maxAttempts,
+ initialBackoff: obj.initialBackoff,
+ maxBackoff: obj.maxBackoff,
+ backoffMultiplier: obj.backoffMultiplier,
+ retryableStatusCodes: obj.retryableStatusCodes,
+ };
+}
+function validateHedgingPolicy(obj) {
+ if (!('maxAttempts' in obj) ||
+ !Number.isInteger(obj.maxAttempts) ||
+ obj.maxAttempts < 2) {
+ throw new Error('Invalid method config hedging policy: maxAttempts must be an integer at least 2');
+ }
+ if ('hedgingDelay' in obj &&
+ (typeof obj.hedgingDelay !== 'string' ||
+ !DURATION_REGEX.test(obj.hedgingDelay))) {
+ throw new Error('Invalid method config hedging policy: hedgingDelay must be a string consisting of a positive integer followed by s');
+ }
+ if ('nonFatalStatusCodes' in obj && Array.isArray(obj.nonFatalStatusCodes)) {
+ for (const value of obj.nonFatalStatusCodes) {
+ if (typeof value === 'number') {
+ if (!Object.values(constants_1.Status).includes(value)) {
+ throw new Error('Invlid method config hedging policy: nonFatalStatusCodes value not in status code range');
+ }
+ }
+ else if (typeof value === 'string') {
+ if (!Object.values(constants_1.Status).includes(value.toUpperCase())) {
+ throw new Error('Invlid method config hedging policy: nonFatalStatusCodes value not a status code name');
+ }
+ }
+ else {
+ throw new Error('Invlid method config hedging policy: nonFatalStatusCodes value must be a string or number');
+ }
+ }
+ }
+ const result = {
+ maxAttempts: obj.maxAttempts,
+ };
+ if (obj.hedgingDelay) {
+ result.hedgingDelay = obj.hedgingDelay;
+ }
+ if (obj.nonFatalStatusCodes) {
+ result.nonFatalStatusCodes = obj.nonFatalStatusCodes;
+ }
+ return result;
+}
+function validateMethodConfig(obj) {
+ var _a;
+ const result = {
+ name: [],
+ };
+ if (!('name' in obj) || !Array.isArray(obj.name)) {
+ throw new Error('Invalid method config: invalid name array');
+ }
+ for (const name of obj.name) {
+ result.name.push(validateName(name));
+ }
+ if ('waitForReady' in obj) {
+ if (typeof obj.waitForReady !== 'boolean') {
+ throw new Error('Invalid method config: invalid waitForReady');
+ }
+ result.waitForReady = obj.waitForReady;
+ }
+ if ('timeout' in obj) {
+ if (typeof obj.timeout === 'object') {
+ if (!('seconds' in obj.timeout) ||
+ !(typeof obj.timeout.seconds === 'number')) {
+ throw new Error('Invalid method config: invalid timeout.seconds');
+ }
+ if (!('nanos' in obj.timeout) ||
+ !(typeof obj.timeout.nanos === 'number')) {
+ throw new Error('Invalid method config: invalid timeout.nanos');
+ }
+ result.timeout = obj.timeout;
+ }
+ else if (typeof obj.timeout === 'string' &&
+ DURATION_REGEX.test(obj.timeout)) {
+ const timeoutParts = obj.timeout
+ .substring(0, obj.timeout.length - 1)
+ .split('.');
+ result.timeout = {
+ seconds: timeoutParts[0] | 0,
+ nanos: ((_a = timeoutParts[1]) !== null && _a !== void 0 ? _a : 0) | 0,
+ };
+ }
+ else {
+ throw new Error('Invalid method config: invalid timeout');
+ }
+ }
+ if ('maxRequestBytes' in obj) {
+ if (typeof obj.maxRequestBytes !== 'number') {
+ throw new Error('Invalid method config: invalid maxRequestBytes');
+ }
+ result.maxRequestBytes = obj.maxRequestBytes;
+ }
+ if ('maxResponseBytes' in obj) {
+ if (typeof obj.maxResponseBytes !== 'number') {
+ throw new Error('Invalid method config: invalid maxRequestBytes');
+ }
+ result.maxResponseBytes = obj.maxResponseBytes;
+ }
+ if ('retryPolicy' in obj) {
+ if ('hedgingPolicy' in obj) {
+ throw new Error('Invalid method config: retryPolicy and hedgingPolicy cannot both be specified');
+ }
+ else {
+ result.retryPolicy = validateRetryPolicy(obj.retryPolicy);
+ }
+ }
+ else if ('hedgingPolicy' in obj) {
+ result.hedgingPolicy = validateHedgingPolicy(obj.hedgingPolicy);
+ }
+ return result;
+}
+function validateRetryThrottling(obj) {
+ if (!('maxTokens' in obj) ||
+ typeof obj.maxTokens !== 'number' ||
+ obj.maxTokens <= 0 ||
+ obj.maxTokens > 1000) {
+ throw new Error('Invalid retryThrottling: maxTokens must be a number in (0, 1000]');
+ }
+ if (!('tokenRatio' in obj) ||
+ typeof obj.tokenRatio !== 'number' ||
+ obj.tokenRatio <= 0) {
+ throw new Error('Invalid retryThrottling: tokenRatio must be a number greater than 0');
+ }
+ return {
+ maxTokens: +obj.maxTokens.toFixed(3),
+ tokenRatio: +obj.tokenRatio.toFixed(3),
+ };
+}
+exports.validateRetryThrottling = validateRetryThrottling;
+function validateServiceConfig(obj) {
+ const result = {
+ loadBalancingConfig: [],
+ methodConfig: [],
+ };
+ if ('loadBalancingPolicy' in obj) {
+ if (typeof obj.loadBalancingPolicy === 'string') {
+ result.loadBalancingPolicy = obj.loadBalancingPolicy;
+ }
+ else {
+ throw new Error('Invalid service config: invalid loadBalancingPolicy');
+ }
+ }
+ if ('loadBalancingConfig' in obj) {
+ if (Array.isArray(obj.loadBalancingConfig)) {
+ for (const config of obj.loadBalancingConfig) {
+ result.loadBalancingConfig.push((0, load_balancer_1.validateLoadBalancingConfig)(config));
+ }
+ }
+ else {
+ throw new Error('Invalid service config: invalid loadBalancingConfig');
+ }
+ }
+ if ('methodConfig' in obj) {
+ if (Array.isArray(obj.methodConfig)) {
+ for (const methodConfig of obj.methodConfig) {
+ result.methodConfig.push(validateMethodConfig(methodConfig));
+ }
+ }
+ }
+ if ('retryThrottling' in obj) {
+ result.retryThrottling = validateRetryThrottling(obj.retryThrottling);
+ }
+ // Validate method name uniqueness
+ const seenMethodNames = [];
+ for (const methodConfig of result.methodConfig) {
+ for (const name of methodConfig.name) {
+ for (const seenName of seenMethodNames) {
+ if (name.service === seenName.service &&
+ name.method === seenName.method) {
+ throw new Error(`Invalid service config: duplicate name ${name.service}/${name.method}`);
+ }
+ }
+ seenMethodNames.push(name);
+ }
+ }
+ return result;
+}
+exports.validateServiceConfig = validateServiceConfig;
+function validateCanaryConfig(obj) {
+ if (!('serviceConfig' in obj)) {
+ throw new Error('Invalid service config choice: missing service config');
+ }
+ const result = {
+ serviceConfig: validateServiceConfig(obj.serviceConfig),
+ };
+ if ('clientLanguage' in obj) {
+ if (Array.isArray(obj.clientLanguage)) {
+ result.clientLanguage = [];
+ for (const lang of obj.clientLanguage) {
+ if (typeof lang === 'string') {
+ result.clientLanguage.push(lang);
+ }
+ else {
+ throw new Error('Invalid service config choice: invalid clientLanguage');
+ }
+ }
+ }
+ else {
+ throw new Error('Invalid service config choice: invalid clientLanguage');
+ }
+ }
+ if ('clientHostname' in obj) {
+ if (Array.isArray(obj.clientHostname)) {
+ result.clientHostname = [];
+ for (const lang of obj.clientHostname) {
+ if (typeof lang === 'string') {
+ result.clientHostname.push(lang);
+ }
+ else {
+ throw new Error('Invalid service config choice: invalid clientHostname');
+ }
+ }
+ }
+ else {
+ throw new Error('Invalid service config choice: invalid clientHostname');
+ }
+ }
+ if ('percentage' in obj) {
+ if (typeof obj.percentage === 'number' &&
+ 0 <= obj.percentage &&
+ obj.percentage <= 100) {
+ result.percentage = obj.percentage;
+ }
+ else {
+ throw new Error('Invalid service config choice: invalid percentage');
+ }
+ }
+ // Validate that no unexpected fields are present
+ const allowedFields = [
+ 'clientLanguage',
+ 'percentage',
+ 'clientHostname',
+ 'serviceConfig',
+ ];
+ for (const field in obj) {
+ if (!allowedFields.includes(field)) {
+ throw new Error(`Invalid service config choice: unexpected field ${field}`);
+ }
+ }
+ return result;
+}
+function validateAndSelectCanaryConfig(obj, percentage) {
+ if (!Array.isArray(obj)) {
+ throw new Error('Invalid service config list');
+ }
+ for (const config of obj) {
+ const validatedConfig = validateCanaryConfig(config);
+ /* For each field, we check if it is present, then only discard the
+ * config if the field value does not match the current client */
+ if (typeof validatedConfig.percentage === 'number' &&
+ percentage > validatedConfig.percentage) {
+ continue;
+ }
+ if (Array.isArray(validatedConfig.clientHostname)) {
+ let hostnameMatched = false;
+ for (const hostname of validatedConfig.clientHostname) {
+ if (hostname === os.hostname()) {
+ hostnameMatched = true;
+ }
+ }
+ if (!hostnameMatched) {
+ continue;
+ }
+ }
+ if (Array.isArray(validatedConfig.clientLanguage)) {
+ let languageMatched = false;
+ for (const language of validatedConfig.clientLanguage) {
+ if (language === CLIENT_LANGUAGE_STRING) {
+ languageMatched = true;
+ }
+ }
+ if (!languageMatched) {
+ continue;
+ }
+ }
+ return validatedConfig.serviceConfig;
+ }
+ throw new Error('No matching service config found');
+}
+/**
+ * Find the "grpc_config" record among the TXT records, parse its value as JSON, validate its contents,
+ * and select a service config with selection fields that all match this client. Most of these steps
+ * can fail with an error; the caller must handle any errors thrown this way.
+ * @param txtRecord The TXT record array that is output from a successful call to dns.resolveTxt
+ * @param percentage A number chosen from the range [0, 100) that is used to select which config to use
+ * @return The service configuration to use, given the percentage value, or null if the service config
+ * data has a valid format but none of the options match the current client.
+ */
+function extractAndSelectServiceConfig(txtRecord, percentage) {
+ for (const record of txtRecord) {
+ if (record.length > 0 && record[0].startsWith('grpc_config=')) {
+ /* Treat the list of strings in this record as a single string and remove
+ * "grpc_config=" from the beginning. The rest should be a JSON string */
+ const recordString = record.join('').substring('grpc_config='.length);
+ const recordJson = JSON.parse(recordString);
+ return validateAndSelectCanaryConfig(recordJson, percentage);
+ }
+ }
+ return null;
+}
+exports.extractAndSelectServiceConfig = extractAndSelectServiceConfig;
+//# sourceMappingURL=service-config.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js.map
new file mode 100644
index 0000000..803e488
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/service-config.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"service-config.js","sourceRoot":"","sources":["../../src/service-config.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.d.ts
new file mode 100644
index 0000000..5628226
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.d.ts
@@ -0,0 +1,28 @@
+import { StatusObject } from './call-interface';
+import { Status } from './constants';
+import { Metadata } from './metadata';
+/**
+ * A builder for gRPC status objects.
+ */
+export declare class StatusBuilder {
+ private code;
+ private details;
+ private metadata;
+ constructor();
+ /**
+ * Adds a status code to the builder.
+ */
+ withCode(code: Status): this;
+ /**
+ * Adds details to the builder.
+ */
+ withDetails(details: string): this;
+ /**
+ * Adds metadata to the builder.
+ */
+ withMetadata(metadata: Metadata): this;
+ /**
+ * Builds the status object.
+ */
+ build(): Partial<StatusObject>;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js
new file mode 100644
index 0000000..7426e54
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js
@@ -0,0 +1,68 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.StatusBuilder = void 0;
+/**
+ * A builder for gRPC status objects.
+ */
+class StatusBuilder {
+ constructor() {
+ this.code = null;
+ this.details = null;
+ this.metadata = null;
+ }
+ /**
+ * Adds a status code to the builder.
+ */
+ withCode(code) {
+ this.code = code;
+ return this;
+ }
+ /**
+ * Adds details to the builder.
+ */
+ withDetails(details) {
+ this.details = details;
+ return this;
+ }
+ /**
+ * Adds metadata to the builder.
+ */
+ withMetadata(metadata) {
+ this.metadata = metadata;
+ return this;
+ }
+ /**
+ * Builds the status object.
+ */
+ build() {
+ const status = {};
+ if (this.code !== null) {
+ status.code = this.code;
+ }
+ if (this.details !== null) {
+ status.details = this.details;
+ }
+ if (this.metadata !== null) {
+ status.metadata = this.metadata;
+ }
+ return status;
+ }
+}
+exports.StatusBuilder = StatusBuilder;
+//# sourceMappingURL=status-builder.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js.map
new file mode 100644
index 0000000..33277b2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/status-builder.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"status-builder.js","sourceRoot":"","sources":["../../src/status-builder.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAMH;;GAEG;AACH,MAAa,aAAa;IAKxB;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAkB;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,MAAM,MAAM,GAA0B,EAAE,CAAC;QAEzC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAvDD,sCAuDC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.d.ts
new file mode 100644
index 0000000..28fef54
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.d.ts
@@ -0,0 +1,13 @@
+/// <reference types="node" />
+export declare class StreamDecoder {
+ private maxReadMessageLength;
+ private readState;
+ private readCompressFlag;
+ private readPartialSize;
+ private readSizeRemaining;
+ private readMessageSize;
+ private readPartialMessage;
+ private readMessageRemaining;
+ constructor(maxReadMessageLength: number);
+ write(data: Buffer): Buffer[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js
new file mode 100644
index 0000000..b3857c0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js
@@ -0,0 +1,100 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.StreamDecoder = void 0;
+var ReadState;
+(function (ReadState) {
+ ReadState[ReadState["NO_DATA"] = 0] = "NO_DATA";
+ ReadState[ReadState["READING_SIZE"] = 1] = "READING_SIZE";
+ ReadState[ReadState["READING_MESSAGE"] = 2] = "READING_MESSAGE";
+})(ReadState || (ReadState = {}));
+class StreamDecoder {
+ constructor(maxReadMessageLength) {
+ this.maxReadMessageLength = maxReadMessageLength;
+ this.readState = ReadState.NO_DATA;
+ this.readCompressFlag = Buffer.alloc(1);
+ this.readPartialSize = Buffer.alloc(4);
+ this.readSizeRemaining = 4;
+ this.readMessageSize = 0;
+ this.readPartialMessage = [];
+ this.readMessageRemaining = 0;
+ }
+ write(data) {
+ let readHead = 0;
+ let toRead;
+ const result = [];
+ while (readHead < data.length) {
+ switch (this.readState) {
+ case ReadState.NO_DATA:
+ this.readCompressFlag = data.slice(readHead, readHead + 1);
+ readHead += 1;
+ this.readState = ReadState.READING_SIZE;
+ this.readPartialSize.fill(0);
+ this.readSizeRemaining = 4;
+ this.readMessageSize = 0;
+ this.readMessageRemaining = 0;
+ this.readPartialMessage = [];
+ break;
+ case ReadState.READING_SIZE:
+ toRead = Math.min(data.length - readHead, this.readSizeRemaining);
+ data.copy(this.readPartialSize, 4 - this.readSizeRemaining, readHead, readHead + toRead);
+ this.readSizeRemaining -= toRead;
+ readHead += toRead;
+ // readSizeRemaining >=0 here
+ if (this.readSizeRemaining === 0) {
+ this.readMessageSize = this.readPartialSize.readUInt32BE(0);
+ if (this.maxReadMessageLength !== -1 && this.readMessageSize > this.maxReadMessageLength) {
+ throw new Error(`Received message larger than max (${this.readMessageSize} vs ${this.maxReadMessageLength})`);
+ }
+ this.readMessageRemaining = this.readMessageSize;
+ if (this.readMessageRemaining > 0) {
+ this.readState = ReadState.READING_MESSAGE;
+ }
+ else {
+ const message = Buffer.concat([this.readCompressFlag, this.readPartialSize], 5);
+ this.readState = ReadState.NO_DATA;
+ result.push(message);
+ }
+ }
+ break;
+ case ReadState.READING_MESSAGE:
+ toRead = Math.min(data.length - readHead, this.readMessageRemaining);
+ this.readPartialMessage.push(data.slice(readHead, readHead + toRead));
+ this.readMessageRemaining -= toRead;
+ readHead += toRead;
+ // readMessageRemaining >=0 here
+ if (this.readMessageRemaining === 0) {
+ // At this point, we have read a full message
+ const framedMessageBuffers = [
+ this.readCompressFlag,
+ this.readPartialSize,
+ ].concat(this.readPartialMessage);
+ const framedMessage = Buffer.concat(framedMessageBuffers, this.readMessageSize + 5);
+ this.readState = ReadState.NO_DATA;
+ result.push(framedMessage);
+ }
+ break;
+ default:
+ throw new Error('Unexpected read state');
+ }
+ }
+ return result;
+ }
+}
+exports.StreamDecoder = StreamDecoder;
+//# sourceMappingURL=stream-decoder.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js.map
new file mode 100644
index 0000000..fc6498a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/stream-decoder.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"stream-decoder.js","sourceRoot":"","sources":["../../src/stream-decoder.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts
new file mode 100644
index 0000000..8e94e10
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts
@@ -0,0 +1,18 @@
+export interface TcpSubchannelAddress {
+ port: number;
+ host: string;
+}
+export interface IpcSubchannelAddress {
+ path: string;
+}
+/**
+ * This represents a single backend address to connect to. This interface is a
+ * subset of net.SocketConnectOpts, i.e. the options described at
+ * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener.
+ * Those are in turn a subset of the options that can be passed to http2.connect.
+ */
+export type SubchannelAddress = TcpSubchannelAddress | IpcSubchannelAddress;
+export declare function isTcpSubchannelAddress(address: SubchannelAddress): address is TcpSubchannelAddress;
+export declare function subchannelAddressEqual(address1?: SubchannelAddress, address2?: SubchannelAddress): boolean;
+export declare function subchannelAddressToString(address: SubchannelAddress): string;
+export declare function stringToSubchannelAddress(addressString: string, port?: number): SubchannelAddress;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js
new file mode 100644
index 0000000..4cf660d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js
@@ -0,0 +1,66 @@
+"use strict";
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.stringToSubchannelAddress = exports.subchannelAddressToString = exports.subchannelAddressEqual = exports.isTcpSubchannelAddress = void 0;
+const net_1 = require("net");
+function isTcpSubchannelAddress(address) {
+ return 'port' in address;
+}
+exports.isTcpSubchannelAddress = isTcpSubchannelAddress;
+function subchannelAddressEqual(address1, address2) {
+ if (!address1 && !address2) {
+ return true;
+ }
+ if (!address1 || !address2) {
+ return false;
+ }
+ if (isTcpSubchannelAddress(address1)) {
+ return (isTcpSubchannelAddress(address2) &&
+ address1.host === address2.host &&
+ address1.port === address2.port);
+ }
+ else {
+ return !isTcpSubchannelAddress(address2) && address1.path === address2.path;
+ }
+}
+exports.subchannelAddressEqual = subchannelAddressEqual;
+function subchannelAddressToString(address) {
+ if (isTcpSubchannelAddress(address)) {
+ return address.host + ':' + address.port;
+ }
+ else {
+ return address.path;
+ }
+}
+exports.subchannelAddressToString = subchannelAddressToString;
+const DEFAULT_PORT = 443;
+function stringToSubchannelAddress(addressString, port) {
+ if ((0, net_1.isIP)(addressString)) {
+ return {
+ host: addressString,
+ port: port !== null && port !== void 0 ? port : DEFAULT_PORT,
+ };
+ }
+ else {
+ return {
+ path: addressString,
+ };
+ }
+}
+exports.stringToSubchannelAddress = stringToSubchannelAddress;
+//# sourceMappingURL=subchannel-address.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js.map
new file mode 100644
index 0000000..5ca14aa
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-address.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"subchannel-address.js","sourceRoot":"","sources":["../../src/subchannel-address.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,6BAA2B;AAmB3B,SAAgB,sBAAsB,CACpC,OAA0B;IAE1B,OAAO,MAAM,IAAI,OAAO,CAAC;AAC3B,CAAC;AAJD,wDAIC;AAED,SAAgB,sBAAsB,CACpC,QAA4B,EAC5B,QAA4B;IAE5B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,CACL,sBAAsB,CAAC,QAAQ,CAAC;YAChC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;YAC/B,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAChC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;IAC9E,CAAC;AACH,CAAC;AAnBD,wDAmBC;AAED,SAAgB,yBAAyB,CAAC,OAA0B;IAClE,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;AACH,CAAC;AAND,8DAMC;AAED,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,SAAgB,yBAAyB,CACvC,aAAqB,EACrB,IAAa;IAEb,IAAI,IAAA,UAAI,EAAC,aAAa,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,YAAY;SAC3B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,IAAI,EAAE,aAAa;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAdD,8DAcC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.d.ts
new file mode 100644
index 0000000..1a6bb17
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.d.ts
@@ -0,0 +1,63 @@
+/// <reference types="node" />
+/// <reference types="node" />
+import * as http2 from 'http2';
+import { Status } from './constants';
+import { InterceptingListener, MessageContext, StatusObject } from './call-interface';
+import { CallEventTracker, Transport } from './transport';
+export interface SubchannelCall {
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ startRead(): void;
+ halfClose(): void;
+ getCallNumber(): number;
+}
+export interface StatusObjectWithRstCode extends StatusObject {
+ rstCode?: number;
+}
+export interface SubchannelCallInterceptingListener extends InterceptingListener {
+ onReceiveStatus(status: StatusObjectWithRstCode): void;
+}
+export declare class Http2SubchannelCall implements SubchannelCall {
+ private readonly http2Stream;
+ private readonly callEventTracker;
+ private readonly listener;
+ private readonly transport;
+ private readonly callId;
+ private decoder;
+ private isReadFilterPending;
+ private isPushPending;
+ private canPush;
+ /**
+ * Indicates that an 'end' event has come from the http2 stream, so there
+ * will be no more data events.
+ */
+ private readsClosed;
+ private statusOutput;
+ private unpushedReadMessages;
+ private mappedStatusCode;
+ private finalStatus;
+ private internalError;
+ constructor(http2Stream: http2.ClientHttp2Stream, callEventTracker: CallEventTracker, listener: SubchannelCallInterceptingListener, transport: Transport, callId: number);
+ onDisconnect(): void;
+ private outputStatus;
+ private trace;
+ /**
+ * On first call, emits a 'status' event with the given StatusObject.
+ * Subsequent calls are no-ops.
+ * @param status The status of the call.
+ */
+ private endCall;
+ private maybeOutputStatus;
+ private push;
+ private tryPush;
+ private handleTrailers;
+ private destroyHttp2Stream;
+ cancelWithStatus(status: Status, details: string): void;
+ getStatus(): StatusObject | null;
+ getPeer(): string;
+ getCallNumber(): number;
+ startRead(): void;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ halfClose(): void;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js
new file mode 100644
index 0000000..d19e0c4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js
@@ -0,0 +1,470 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Http2SubchannelCall = void 0;
+const http2 = require("http2");
+const os = require("os");
+const constants_1 = require("./constants");
+const metadata_1 = require("./metadata");
+const stream_decoder_1 = require("./stream-decoder");
+const logging = require("./logging");
+const constants_2 = require("./constants");
+const TRACER_NAME = 'subchannel_call';
+/**
+ * Should do approximately the same thing as util.getSystemErrorName but the
+ * TypeScript types don't have that function for some reason so I just made my
+ * own.
+ * @param errno
+ */
+function getSystemErrorName(errno) {
+ for (const [name, num] of Object.entries(os.constants.errno)) {
+ if (num === errno) {
+ return name;
+ }
+ }
+ return 'Unknown system error ' + errno;
+}
+class Http2SubchannelCall {
+ constructor(http2Stream, callEventTracker, listener, transport, callId) {
+ var _a;
+ this.http2Stream = http2Stream;
+ this.callEventTracker = callEventTracker;
+ this.listener = listener;
+ this.transport = transport;
+ this.callId = callId;
+ this.isReadFilterPending = false;
+ this.isPushPending = false;
+ this.canPush = false;
+ /**
+ * Indicates that an 'end' event has come from the http2 stream, so there
+ * will be no more data events.
+ */
+ this.readsClosed = false;
+ this.statusOutput = false;
+ this.unpushedReadMessages = [];
+ // Status code mapped from :status. To be used if grpc-status is not received
+ this.mappedStatusCode = constants_1.Status.UNKNOWN;
+ // This is populated (non-null) if and only if the call has ended
+ this.finalStatus = null;
+ this.internalError = null;
+ const maxReceiveMessageLength = (_a = transport.getOptions()['grpc.max_receive_message_length']) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;
+ this.decoder = new stream_decoder_1.StreamDecoder(maxReceiveMessageLength);
+ http2Stream.on('response', (headers, flags) => {
+ let headersString = '';
+ for (const header of Object.keys(headers)) {
+ headersString += '\t\t' + header + ': ' + headers[header] + '\n';
+ }
+ this.trace('Received server headers:\n' + headersString);
+ switch (headers[':status']) {
+ // TODO(murgatroid99): handle 100 and 101
+ case 400:
+ this.mappedStatusCode = constants_1.Status.INTERNAL;
+ break;
+ case 401:
+ this.mappedStatusCode = constants_1.Status.UNAUTHENTICATED;
+ break;
+ case 403:
+ this.mappedStatusCode = constants_1.Status.PERMISSION_DENIED;
+ break;
+ case 404:
+ this.mappedStatusCode = constants_1.Status.UNIMPLEMENTED;
+ break;
+ case 429:
+ case 502:
+ case 503:
+ case 504:
+ this.mappedStatusCode = constants_1.Status.UNAVAILABLE;
+ break;
+ default:
+ this.mappedStatusCode = constants_1.Status.UNKNOWN;
+ }
+ if (flags & http2.constants.NGHTTP2_FLAG_END_STREAM) {
+ this.handleTrailers(headers);
+ }
+ else {
+ let metadata;
+ try {
+ metadata = metadata_1.Metadata.fromHttp2Headers(headers);
+ }
+ catch (error) {
+ this.endCall({
+ code: constants_1.Status.UNKNOWN,
+ details: error.message,
+ metadata: new metadata_1.Metadata(),
+ });
+ return;
+ }
+ this.listener.onReceiveMetadata(metadata);
+ }
+ });
+ http2Stream.on('trailers', (headers) => {
+ this.handleTrailers(headers);
+ });
+ http2Stream.on('data', (data) => {
+ /* If the status has already been output, allow the http2 stream to
+ * drain without processing the data. */
+ if (this.statusOutput) {
+ return;
+ }
+ this.trace('receive HTTP/2 data frame of length ' + data.length);
+ let messages;
+ try {
+ messages = this.decoder.write(data);
+ }
+ catch (e) {
+ this.cancelWithStatus(constants_1.Status.RESOURCE_EXHAUSTED, e.message);
+ return;
+ }
+ for (const message of messages) {
+ this.trace('parsed message of length ' + message.length);
+ this.callEventTracker.addMessageReceived();
+ this.tryPush(message);
+ }
+ });
+ http2Stream.on('end', () => {
+ this.readsClosed = true;
+ this.maybeOutputStatus();
+ });
+ http2Stream.on('close', () => {
+ /* Use process.next tick to ensure that this code happens after any
+ * "error" event that may be emitted at about the same time, so that
+ * we can bubble up the error message from that event. */
+ process.nextTick(() => {
+ var _a;
+ this.trace('HTTP/2 stream closed with code ' + http2Stream.rstCode);
+ /* If we have a final status with an OK status code, that means that
+ * we have received all of the messages and we have processed the
+ * trailers and the call completed successfully, so it doesn't matter
+ * how the stream ends after that */
+ if (((_a = this.finalStatus) === null || _a === void 0 ? void 0 : _a.code) === constants_1.Status.OK) {
+ return;
+ }
+ let code;
+ let details = '';
+ switch (http2Stream.rstCode) {
+ case http2.constants.NGHTTP2_NO_ERROR:
+ /* If we get a NO_ERROR code and we already have a status, the
+ * stream completed properly and we just haven't fully processed
+ * it yet */
+ if (this.finalStatus !== null) {
+ return;
+ }
+ code = constants_1.Status.INTERNAL;
+ details = `Received RST_STREAM with code ${http2Stream.rstCode}`;
+ break;
+ case http2.constants.NGHTTP2_REFUSED_STREAM:
+ code = constants_1.Status.UNAVAILABLE;
+ details = 'Stream refused by server';
+ break;
+ case http2.constants.NGHTTP2_CANCEL:
+ code = constants_1.Status.CANCELLED;
+ details = 'Call cancelled';
+ break;
+ case http2.constants.NGHTTP2_ENHANCE_YOUR_CALM:
+ code = constants_1.Status.RESOURCE_EXHAUSTED;
+ details = 'Bandwidth exhausted or memory limit exceeded';
+ break;
+ case http2.constants.NGHTTP2_INADEQUATE_SECURITY:
+ code = constants_1.Status.PERMISSION_DENIED;
+ details = 'Protocol not secure enough';
+ break;
+ case http2.constants.NGHTTP2_INTERNAL_ERROR:
+ code = constants_1.Status.INTERNAL;
+ if (this.internalError === null) {
+ /* This error code was previously handled in the default case, and
+ * there are several instances of it online, so I wanted to
+ * preserve the original error message so that people find existing
+ * information in searches, but also include the more recognizable
+ * "Internal server error" message. */
+ details = `Received RST_STREAM with code ${http2Stream.rstCode} (Internal server error)`;
+ }
+ else {
+ if (this.internalError.code === 'ECONNRESET' ||
+ this.internalError.code === 'ETIMEDOUT') {
+ code = constants_1.Status.UNAVAILABLE;
+ details = this.internalError.message;
+ }
+ else {
+ /* The "Received RST_STREAM with code ..." error is preserved
+ * here for continuity with errors reported online, but the
+ * error message at the end will probably be more relevant in
+ * most cases. */
+ details = `Received RST_STREAM with code ${http2Stream.rstCode} triggered by internal client error: ${this.internalError.message}`;
+ }
+ }
+ break;
+ default:
+ code = constants_1.Status.INTERNAL;
+ details = `Received RST_STREAM with code ${http2Stream.rstCode}`;
+ }
+ // This is a no-op if trailers were received at all.
+ // This is OK, because status codes emitted here correspond to more
+ // catastrophic issues that prevent us from receiving trailers in the
+ // first place.
+ this.endCall({
+ code,
+ details,
+ metadata: new metadata_1.Metadata(),
+ rstCode: http2Stream.rstCode,
+ });
+ });
+ });
+ http2Stream.on('error', (err) => {
+ /* We need an error handler here to stop "Uncaught Error" exceptions
+ * from bubbling up. However, errors here should all correspond to
+ * "close" events, where we will handle the error more granularly */
+ /* Specifically looking for stream errors that were *not* constructed
+ * from a RST_STREAM response here:
+ * https://github.com/nodejs/node/blob/8b8620d580314050175983402dfddf2674e8e22a/lib/internal/http2/core.js#L2267
+ */
+ if (err.code !== 'ERR_HTTP2_STREAM_ERROR') {
+ this.trace('Node error event: message=' +
+ err.message +
+ ' code=' +
+ err.code +
+ ' errno=' +
+ getSystemErrorName(err.errno) +
+ ' syscall=' +
+ err.syscall);
+ this.internalError = err;
+ }
+ this.callEventTracker.onStreamEnd(false);
+ });
+ }
+ onDisconnect() {
+ this.endCall({
+ code: constants_1.Status.UNAVAILABLE,
+ details: 'Connection dropped',
+ metadata: new metadata_1.Metadata(),
+ });
+ }
+ outputStatus() {
+ /* Precondition: this.finalStatus !== null */
+ if (!this.statusOutput) {
+ this.statusOutput = true;
+ this.trace('ended with status: code=' +
+ this.finalStatus.code +
+ ' details="' +
+ this.finalStatus.details +
+ '"');
+ this.callEventTracker.onCallEnd(this.finalStatus);
+ /* We delay the actual action of bubbling up the status to insulate the
+ * cleanup code in this class from any errors that may be thrown in the
+ * upper layers as a result of bubbling up the status. In particular,
+ * if the status is not OK, the "error" event may be emitted
+ * synchronously at the top level, which will result in a thrown error if
+ * the user does not handle that event. */
+ process.nextTick(() => {
+ this.listener.onReceiveStatus(this.finalStatus);
+ });
+ /* Leave the http2 stream in flowing state to drain incoming messages, to
+ * ensure that the stream closure completes. The call stream already does
+ * not push more messages after the status is output, so the messages go
+ * nowhere either way. */
+ this.http2Stream.resume();
+ }
+ }
+ trace(text) {
+ logging.trace(constants_2.LogVerbosity.DEBUG, TRACER_NAME, '[' + this.callId + '] ' + text);
+ }
+ /**
+ * On first call, emits a 'status' event with the given StatusObject.
+ * Subsequent calls are no-ops.
+ * @param status The status of the call.
+ */
+ endCall(status) {
+ /* If the status is OK and a new status comes in (e.g. from a
+ * deserialization failure), that new status takes priority */
+ if (this.finalStatus === null || this.finalStatus.code === constants_1.Status.OK) {
+ this.finalStatus = status;
+ this.maybeOutputStatus();
+ }
+ this.destroyHttp2Stream();
+ }
+ maybeOutputStatus() {
+ if (this.finalStatus !== null) {
+ /* The combination check of readsClosed and that the two message buffer
+ * arrays are empty checks that there all incoming data has been fully
+ * processed */
+ if (this.finalStatus.code !== constants_1.Status.OK ||
+ (this.readsClosed &&
+ this.unpushedReadMessages.length === 0 &&
+ !this.isReadFilterPending &&
+ !this.isPushPending)) {
+ this.outputStatus();
+ }
+ }
+ }
+ push(message) {
+ this.trace('pushing to reader message of length ' +
+ (message instanceof Buffer ? message.length : null));
+ this.canPush = false;
+ this.isPushPending = true;
+ process.nextTick(() => {
+ this.isPushPending = false;
+ /* If we have already output the status any later messages should be
+ * ignored, and can cause out-of-order operation errors higher up in the
+ * stack. Checking as late as possible here to avoid any race conditions.
+ */
+ if (this.statusOutput) {
+ return;
+ }
+ this.listener.onReceiveMessage(message);
+ this.maybeOutputStatus();
+ });
+ }
+ tryPush(messageBytes) {
+ if (this.canPush) {
+ this.http2Stream.pause();
+ this.push(messageBytes);
+ }
+ else {
+ this.trace('unpushedReadMessages.push message of length ' + messageBytes.length);
+ this.unpushedReadMessages.push(messageBytes);
+ }
+ }
+ handleTrailers(headers) {
+ this.callEventTracker.onStreamEnd(true);
+ let headersString = '';
+ for (const header of Object.keys(headers)) {
+ headersString += '\t\t' + header + ': ' + headers[header] + '\n';
+ }
+ this.trace('Received server trailers:\n' + headersString);
+ let metadata;
+ try {
+ metadata = metadata_1.Metadata.fromHttp2Headers(headers);
+ }
+ catch (e) {
+ metadata = new metadata_1.Metadata();
+ }
+ const metadataMap = metadata.getMap();
+ let code = this.mappedStatusCode;
+ if (code === constants_1.Status.UNKNOWN &&
+ typeof metadataMap['grpc-status'] === 'string') {
+ const receivedStatus = Number(metadataMap['grpc-status']);
+ if (receivedStatus in constants_1.Status) {
+ code = receivedStatus;
+ this.trace('received status code ' + receivedStatus + ' from server');
+ }
+ metadata.remove('grpc-status');
+ }
+ let details = '';
+ if (typeof metadataMap['grpc-message'] === 'string') {
+ try {
+ details = decodeURI(metadataMap['grpc-message']);
+ }
+ catch (e) {
+ details = metadataMap['grpc-message'];
+ }
+ metadata.remove('grpc-message');
+ this.trace('received status details string "' + details + '" from server');
+ }
+ const status = { code, details, metadata };
+ // This is a no-op if the call was already ended when handling headers.
+ this.endCall(status);
+ }
+ destroyHttp2Stream() {
+ var _a;
+ // The http2 stream could already have been destroyed if cancelWithStatus
+ // is called in response to an internal http2 error.
+ if (!this.http2Stream.destroyed) {
+ /* If the call has ended with an OK status, communicate that when closing
+ * the stream, partly to avoid a situation in which we detect an error
+ * RST_STREAM as a result after we have the status */
+ let code;
+ if (((_a = this.finalStatus) === null || _a === void 0 ? void 0 : _a.code) === constants_1.Status.OK) {
+ code = http2.constants.NGHTTP2_NO_ERROR;
+ }
+ else {
+ code = http2.constants.NGHTTP2_CANCEL;
+ }
+ this.trace('close http2 stream with code ' + code);
+ this.http2Stream.close(code);
+ }
+ }
+ cancelWithStatus(status, details) {
+ this.trace('cancelWithStatus code: ' + status + ' details: "' + details + '"');
+ this.endCall({ code: status, details, metadata: new metadata_1.Metadata() });
+ }
+ getStatus() {
+ return this.finalStatus;
+ }
+ getPeer() {
+ return this.transport.getPeerName();
+ }
+ getCallNumber() {
+ return this.callId;
+ }
+ startRead() {
+ /* If the stream has ended with an error, we should not emit any more
+ * messages and we should communicate that the stream has ended */
+ if (this.finalStatus !== null && this.finalStatus.code !== constants_1.Status.OK) {
+ this.readsClosed = true;
+ this.maybeOutputStatus();
+ return;
+ }
+ this.canPush = true;
+ if (this.unpushedReadMessages.length > 0) {
+ const nextMessage = this.unpushedReadMessages.shift();
+ this.push(nextMessage);
+ return;
+ }
+ /* Only resume reading from the http2Stream if we don't have any pending
+ * messages to emit */
+ this.http2Stream.resume();
+ }
+ sendMessageWithContext(context, message) {
+ this.trace('write() called with message of length ' + message.length);
+ const cb = (error) => {
+ /* nextTick here ensures that no stream action can be taken in the call
+ * stack of the write callback, in order to hopefully work around
+ * https://github.com/nodejs/node/issues/49147 */
+ process.nextTick(() => {
+ var _a;
+ let code = constants_1.Status.UNAVAILABLE;
+ if ((error === null || error === void 0 ? void 0 : error.code) ===
+ 'ERR_STREAM_WRITE_AFTER_END') {
+ code = constants_1.Status.INTERNAL;
+ }
+ if (error) {
+ this.cancelWithStatus(code, `Write error: ${error.message}`);
+ }
+ (_a = context.callback) === null || _a === void 0 ? void 0 : _a.call(context);
+ });
+ };
+ this.trace('sending data chunk of length ' + message.length);
+ this.callEventTracker.addMessageSent();
+ try {
+ this.http2Stream.write(message, cb);
+ }
+ catch (error) {
+ this.endCall({
+ code: constants_1.Status.UNAVAILABLE,
+ details: `Write failed with error ${error.message}`,
+ metadata: new metadata_1.Metadata(),
+ });
+ }
+ }
+ halfClose() {
+ this.trace('end() called');
+ this.trace('calling end() on HTTP/2 stream');
+ this.http2Stream.end();
+ }
+}
+exports.Http2SubchannelCall = Http2SubchannelCall;
+//# sourceMappingURL=subchannel-call.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js.map
new file mode 100644
index 0000000..d0983c7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-call.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"subchannel-call.js","sourceRoot":"","sources":["../../src/subchannel-call.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts
new file mode 100644
index 0000000..9c13f53
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts
@@ -0,0 +1,49 @@
+import { SubchannelRef } from './channelz';
+import { ConnectivityState } from './connectivity-state';
+import { Subchannel } from './subchannel';
+export type ConnectivityStateListener = (subchannel: SubchannelInterface, previousState: ConnectivityState, newState: ConnectivityState, keepaliveTime: number, errorMessage?: string) => void;
+/**
+ * This is an interface for load balancing policies to use to interact with
+ * subchannels. This allows load balancing policies to wrap and unwrap
+ * subchannels.
+ *
+ * Any load balancing policy that wraps subchannels must unwrap the subchannel
+ * in the picker, so that other load balancing policies consistently have
+ * access to their own wrapper objects.
+ */
+export interface SubchannelInterface {
+ getConnectivityState(): ConnectivityState;
+ addConnectivityStateListener(listener: ConnectivityStateListener): void;
+ removeConnectivityStateListener(listener: ConnectivityStateListener): void;
+ startConnecting(): void;
+ getAddress(): string;
+ throttleKeepalive(newKeepaliveTime: number): void;
+ ref(): void;
+ unref(): void;
+ getChannelzRef(): SubchannelRef;
+ /**
+ * If this is a wrapper, return the wrapped subchannel, otherwise return this
+ */
+ getRealSubchannel(): Subchannel;
+ /**
+ * Returns true if this and other both proxy the same underlying subchannel.
+ * Can be used instead of directly accessing getRealSubchannel to allow mocks
+ * to avoid implementing getRealSubchannel
+ */
+ realSubchannelEquals(other: SubchannelInterface): boolean;
+}
+export declare abstract class BaseSubchannelWrapper implements SubchannelInterface {
+ protected child: SubchannelInterface;
+ constructor(child: SubchannelInterface);
+ getConnectivityState(): ConnectivityState;
+ addConnectivityStateListener(listener: ConnectivityStateListener): void;
+ removeConnectivityStateListener(listener: ConnectivityStateListener): void;
+ startConnecting(): void;
+ getAddress(): string;
+ throttleKeepalive(newKeepaliveTime: number): void;
+ ref(): void;
+ unref(): void;
+ getChannelzRef(): SubchannelRef;
+ getRealSubchannel(): Subchannel;
+ realSubchannelEquals(other: SubchannelInterface): boolean;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js
new file mode 100644
index 0000000..2446a01
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js
@@ -0,0 +1,59 @@
+"use strict";
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BaseSubchannelWrapper = void 0;
+class BaseSubchannelWrapper {
+ constructor(child) {
+ this.child = child;
+ }
+ getConnectivityState() {
+ return this.child.getConnectivityState();
+ }
+ addConnectivityStateListener(listener) {
+ this.child.addConnectivityStateListener(listener);
+ }
+ removeConnectivityStateListener(listener) {
+ this.child.removeConnectivityStateListener(listener);
+ }
+ startConnecting() {
+ this.child.startConnecting();
+ }
+ getAddress() {
+ return this.child.getAddress();
+ }
+ throttleKeepalive(newKeepaliveTime) {
+ this.child.throttleKeepalive(newKeepaliveTime);
+ }
+ ref() {
+ this.child.ref();
+ }
+ unref() {
+ this.child.unref();
+ }
+ getChannelzRef() {
+ return this.child.getChannelzRef();
+ }
+ getRealSubchannel() {
+ return this.child.getRealSubchannel();
+ }
+ realSubchannelEquals(other) {
+ return this.getRealSubchannel() === other.getRealSubchannel();
+ }
+}
+exports.BaseSubchannelWrapper = BaseSubchannelWrapper;
+//# sourceMappingURL=subchannel-interface.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js.map
new file mode 100644
index 0000000..f36ecd5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"subchannel-interface.js","sourceRoot":"","sources":["../../src/subchannel-interface.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AA6CH,MAAsB,qBAAqB;IACzC,YAAsB,KAA0B;QAA1B,UAAK,GAAL,KAAK,CAAqB;IAAG,CAAC;IAEpD,oBAAoB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAC3C,CAAC;IACD,4BAA4B,CAAC,QAAmC;QAC9D,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IACD,+BAA+B,CAAC,QAAmC;QACjE,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IACD,eAAe;QACb,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;IAC/B,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IACD,iBAAiB,CAAC,gBAAwB;QACxC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACjD,CAAC;IACD,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,cAAc;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IACrC,CAAC;IACD,iBAAiB;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACxC,CAAC;IACD,oBAAoB,CAAC,KAA0B;QAC7C,OAAO,IAAI,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAChE,CAAC;CACF;AApCD,sDAoCC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.d.ts
new file mode 100644
index 0000000..9c00300
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.d.ts
@@ -0,0 +1,40 @@
+import { ChannelOptions } from './channel-options';
+import { Subchannel } from './subchannel';
+import { SubchannelAddress } from './subchannel-address';
+import { ChannelCredentials } from './channel-credentials';
+import { GrpcUri } from './uri-parser';
+export declare class SubchannelPool {
+ private pool;
+ /**
+ * A timer of a task performing a periodic subchannel cleanup.
+ */
+ private cleanupTimer;
+ /**
+ * A pool of subchannels use for making connections. Subchannels with the
+ * exact same parameters will be reused.
+ */
+ constructor();
+ /**
+ * Unrefs all unused subchannels and cancels the cleanup task if all
+ * subchannels have been unrefed.
+ */
+ unrefUnusedSubchannels(): void;
+ /**
+ * Ensures that the cleanup task is spawned.
+ */
+ ensureCleanupTask(): void;
+ /**
+ * Get a subchannel if one already exists with exactly matching parameters.
+ * Otherwise, create and save a subchannel with those parameters.
+ * @param channelTarget
+ * @param subchannelTarget
+ * @param channelArguments
+ * @param channelCredentials
+ */
+ getOrCreateSubchannel(channelTargetUri: GrpcUri, subchannelTarget: SubchannelAddress, channelArguments: ChannelOptions, channelCredentials: ChannelCredentials): Subchannel;
+}
+/**
+ * Get either the global subchannel pool, or a new subchannel pool.
+ * @param global
+ */
+export declare function getSubchannelPool(global: boolean): SubchannelPool;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js
new file mode 100644
index 0000000..9061607
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js
@@ -0,0 +1,137 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getSubchannelPool = exports.SubchannelPool = void 0;
+const channel_options_1 = require("./channel-options");
+const subchannel_1 = require("./subchannel");
+const subchannel_address_1 = require("./subchannel-address");
+const uri_parser_1 = require("./uri-parser");
+const transport_1 = require("./transport");
+// 10 seconds in milliseconds. This value is arbitrary.
+/**
+ * The amount of time in between checks for dropping subchannels that have no
+ * other references
+ */
+const REF_CHECK_INTERVAL = 10000;
+class SubchannelPool {
+ /**
+ * A pool of subchannels use for making connections. Subchannels with the
+ * exact same parameters will be reused.
+ */
+ constructor() {
+ this.pool = Object.create(null);
+ /**
+ * A timer of a task performing a periodic subchannel cleanup.
+ */
+ this.cleanupTimer = null;
+ }
+ /**
+ * Unrefs all unused subchannels and cancels the cleanup task if all
+ * subchannels have been unrefed.
+ */
+ unrefUnusedSubchannels() {
+ let allSubchannelsUnrefed = true;
+ /* These objects are created with Object.create(null), so they do not
+ * have a prototype, which means that for (... in ...) loops over them
+ * do not need to be filtered */
+ // eslint-disable-disable-next-line:forin
+ for (const channelTarget in this.pool) {
+ const subchannelObjArray = this.pool[channelTarget];
+ const refedSubchannels = subchannelObjArray.filter(value => !value.subchannel.unrefIfOneRef());
+ if (refedSubchannels.length > 0) {
+ allSubchannelsUnrefed = false;
+ }
+ /* For each subchannel in the pool, try to unref it if it has
+ * exactly one ref (which is the ref from the pool itself). If that
+ * does happen, remove the subchannel from the pool */
+ this.pool[channelTarget] = refedSubchannels;
+ }
+ /* Currently we do not delete keys with empty values. If that results
+ * in significant memory usage we should change it. */
+ // Cancel the cleanup task if all subchannels have been unrefed.
+ if (allSubchannelsUnrefed && this.cleanupTimer !== null) {
+ clearInterval(this.cleanupTimer);
+ this.cleanupTimer = null;
+ }
+ }
+ /**
+ * Ensures that the cleanup task is spawned.
+ */
+ ensureCleanupTask() {
+ var _a, _b;
+ if (this.cleanupTimer === null) {
+ this.cleanupTimer = setInterval(() => {
+ this.unrefUnusedSubchannels();
+ }, REF_CHECK_INTERVAL);
+ // Unref because this timer should not keep the event loop running.
+ // Call unref only if it exists to address electron/electron#21162
+ (_b = (_a = this.cleanupTimer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ }
+ /**
+ * Get a subchannel if one already exists with exactly matching parameters.
+ * Otherwise, create and save a subchannel with those parameters.
+ * @param channelTarget
+ * @param subchannelTarget
+ * @param channelArguments
+ * @param channelCredentials
+ */
+ getOrCreateSubchannel(channelTargetUri, subchannelTarget, channelArguments, channelCredentials) {
+ this.ensureCleanupTask();
+ const channelTarget = (0, uri_parser_1.uriToString)(channelTargetUri);
+ if (channelTarget in this.pool) {
+ const subchannelObjArray = this.pool[channelTarget];
+ for (const subchannelObj of subchannelObjArray) {
+ if ((0, subchannel_address_1.subchannelAddressEqual)(subchannelTarget, subchannelObj.subchannelAddress) &&
+ (0, channel_options_1.channelOptionsEqual)(channelArguments, subchannelObj.channelArguments) &&
+ channelCredentials._equals(subchannelObj.channelCredentials)) {
+ return subchannelObj.subchannel;
+ }
+ }
+ }
+ // If we get here, no matching subchannel was found
+ const subchannel = new subchannel_1.Subchannel(channelTargetUri, subchannelTarget, channelArguments, channelCredentials, new transport_1.Http2SubchannelConnector(channelTargetUri));
+ if (!(channelTarget in this.pool)) {
+ this.pool[channelTarget] = [];
+ }
+ this.pool[channelTarget].push({
+ subchannelAddress: subchannelTarget,
+ channelArguments,
+ channelCredentials,
+ subchannel,
+ });
+ subchannel.ref();
+ return subchannel;
+ }
+}
+exports.SubchannelPool = SubchannelPool;
+const globalSubchannelPool = new SubchannelPool();
+/**
+ * Get either the global subchannel pool, or a new subchannel pool.
+ * @param global
+ */
+function getSubchannelPool(global) {
+ if (global) {
+ return globalSubchannelPool;
+ }
+ else {
+ return new SubchannelPool();
+ }
+}
+exports.getSubchannelPool = getSubchannelPool;
+//# sourceMappingURL=subchannel-pool.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js.map
new file mode 100644
index 0000000..dfb1ebf
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"subchannel-pool.js","sourceRoot":"","sources":["../../src/subchannel-pool.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.d.ts
new file mode 100644
index 0000000..f042583
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.d.ts
@@ -0,0 +1,119 @@
+import { ChannelCredentials } from './channel-credentials';
+import { Metadata } from './metadata';
+import { ChannelOptions } from './channel-options';
+import { ConnectivityState } from './connectivity-state';
+import { GrpcUri } from './uri-parser';
+import { SubchannelAddress } from './subchannel-address';
+import { SubchannelRef } from './channelz';
+import { ConnectivityStateListener, SubchannelInterface } from './subchannel-interface';
+import { SubchannelCallInterceptingListener } from './subchannel-call';
+import { SubchannelCall } from './subchannel-call';
+import { SubchannelConnector } from './transport';
+export declare class Subchannel {
+ private channelTarget;
+ private subchannelAddress;
+ private options;
+ private credentials;
+ private connector;
+ /**
+ * The subchannel's current connectivity state. Invariant: `session` === `null`
+ * if and only if `connectivityState` is IDLE or TRANSIENT_FAILURE.
+ */
+ private connectivityState;
+ /**
+ * The underlying http2 session used to make requests.
+ */
+ private transport;
+ /**
+ * Indicates that the subchannel should transition from TRANSIENT_FAILURE to
+ * CONNECTING instead of IDLE when the backoff timeout ends.
+ */
+ private continueConnecting;
+ /**
+ * A list of listener functions that will be called whenever the connectivity
+ * state changes. Will be modified by `addConnectivityStateListener` and
+ * `removeConnectivityStateListener`
+ */
+ private stateListeners;
+ private backoffTimeout;
+ private keepaliveTime;
+ /**
+ * Tracks channels and subchannel pools with references to this subchannel
+ */
+ private refcount;
+ /**
+ * A string representation of the subchannel address, for logging/tracing
+ */
+ private subchannelAddressString;
+ private readonly channelzEnabled;
+ private channelzRef;
+ private channelzTrace;
+ private callTracker;
+ private childrenTracker;
+ private streamTracker;
+ /**
+ * A class representing a connection to a single backend.
+ * @param channelTarget The target string for the channel as a whole
+ * @param subchannelAddress The address for the backend that this subchannel
+ * will connect to
+ * @param options The channel options, plus any specific subchannel options
+ * for this subchannel
+ * @param credentials The channel credentials used to establish this
+ * connection
+ */
+ constructor(channelTarget: GrpcUri, subchannelAddress: SubchannelAddress, options: ChannelOptions, credentials: ChannelCredentials, connector: SubchannelConnector);
+ private getChannelzInfo;
+ private trace;
+ private refTrace;
+ private handleBackoffTimer;
+ /**
+ * Start a backoff timer with the current nextBackoff timeout
+ */
+ private startBackoff;
+ private stopBackoff;
+ private startConnectingInternal;
+ /**
+ * Initiate a state transition from any element of oldStates to the new
+ * state. If the current connectivityState is not in oldStates, do nothing.
+ * @param oldStates The set of states to transition from
+ * @param newState The state to transition to
+ * @returns True if the state changed, false otherwise
+ */
+ private transitionToState;
+ ref(): void;
+ unref(): void;
+ unrefIfOneRef(): boolean;
+ createCall(metadata: Metadata, host: string, method: string, listener: SubchannelCallInterceptingListener): SubchannelCall;
+ /**
+ * If the subchannel is currently IDLE, start connecting and switch to the
+ * CONNECTING state. If the subchannel is current in TRANSIENT_FAILURE,
+ * the next time it would transition to IDLE, start connecting again instead.
+ * Otherwise, do nothing.
+ */
+ startConnecting(): void;
+ /**
+ * Get the subchannel's current connectivity state.
+ */
+ getConnectivityState(): ConnectivityState;
+ /**
+ * Add a listener function to be called whenever the subchannel's
+ * connectivity state changes.
+ * @param listener
+ */
+ addConnectivityStateListener(listener: ConnectivityStateListener): void;
+ /**
+ * Remove a listener previously added with `addConnectivityStateListener`
+ * @param listener A reference to a function previously passed to
+ * `addConnectivityStateListener`
+ */
+ removeConnectivityStateListener(listener: ConnectivityStateListener): void;
+ /**
+ * Reset the backoff timeout, and immediately start connecting if in backoff.
+ */
+ resetBackoff(): void;
+ getAddress(): string;
+ getChannelzRef(): SubchannelRef;
+ getRealSubchannel(): this;
+ realSubchannelEquals(other: SubchannelInterface): boolean;
+ throttleKeepalive(newKeepaliveTime: number): void;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js
new file mode 100644
index 0000000..b638ce6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js
@@ -0,0 +1,353 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Subchannel = void 0;
+const connectivity_state_1 = require("./connectivity-state");
+const backoff_timeout_1 = require("./backoff-timeout");
+const logging = require("./logging");
+const constants_1 = require("./constants");
+const uri_parser_1 = require("./uri-parser");
+const subchannel_address_1 = require("./subchannel-address");
+const channelz_1 = require("./channelz");
+const TRACER_NAME = 'subchannel';
+/* setInterval and setTimeout only accept signed 32 bit integers. JS doesn't
+ * have a constant for the max signed 32 bit integer, so this is a simple way
+ * to calculate it */
+const KEEPALIVE_MAX_TIME_MS = ~(1 << 31);
+class Subchannel {
+ /**
+ * A class representing a connection to a single backend.
+ * @param channelTarget The target string for the channel as a whole
+ * @param subchannelAddress The address for the backend that this subchannel
+ * will connect to
+ * @param options The channel options, plus any specific subchannel options
+ * for this subchannel
+ * @param credentials The channel credentials used to establish this
+ * connection
+ */
+ constructor(channelTarget, subchannelAddress, options, credentials, connector) {
+ var _a;
+ this.channelTarget = channelTarget;
+ this.subchannelAddress = subchannelAddress;
+ this.options = options;
+ this.credentials = credentials;
+ this.connector = connector;
+ /**
+ * The subchannel's current connectivity state. Invariant: `session` === `null`
+ * if and only if `connectivityState` is IDLE or TRANSIENT_FAILURE.
+ */
+ this.connectivityState = connectivity_state_1.ConnectivityState.IDLE;
+ /**
+ * The underlying http2 session used to make requests.
+ */
+ this.transport = null;
+ /**
+ * Indicates that the subchannel should transition from TRANSIENT_FAILURE to
+ * CONNECTING instead of IDLE when the backoff timeout ends.
+ */
+ this.continueConnecting = false;
+ /**
+ * A list of listener functions that will be called whenever the connectivity
+ * state changes. Will be modified by `addConnectivityStateListener` and
+ * `removeConnectivityStateListener`
+ */
+ this.stateListeners = new Set();
+ /**
+ * Tracks channels and subchannel pools with references to this subchannel
+ */
+ this.refcount = 0;
+ // Channelz info
+ this.channelzEnabled = true;
+ this.callTracker = new channelz_1.ChannelzCallTracker();
+ this.childrenTracker = new channelz_1.ChannelzChildrenTracker();
+ // Channelz socket info
+ this.streamTracker = new channelz_1.ChannelzCallTracker();
+ const backoffOptions = {
+ initialDelay: options['grpc.initial_reconnect_backoff_ms'],
+ maxDelay: options['grpc.max_reconnect_backoff_ms'],
+ };
+ this.backoffTimeout = new backoff_timeout_1.BackoffTimeout(() => {
+ this.handleBackoffTimer();
+ }, backoffOptions);
+ this.backoffTimeout.unref();
+ this.subchannelAddressString = (0, subchannel_address_1.subchannelAddressToString)(subchannelAddress);
+ this.keepaliveTime = (_a = options['grpc.keepalive_time_ms']) !== null && _a !== void 0 ? _a : -1;
+ if (options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+ this.channelzTrace = new channelz_1.ChannelzTrace();
+ this.channelzRef = (0, channelz_1.registerChannelzSubchannel)(this.subchannelAddressString, () => this.getChannelzInfo(), this.channelzEnabled);
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Subchannel created');
+ }
+ this.trace('Subchannel constructed with options ' +
+ JSON.stringify(options, undefined, 2));
+ }
+ getChannelzInfo() {
+ return {
+ state: this.connectivityState,
+ trace: this.channelzTrace,
+ callTracker: this.callTracker,
+ children: this.childrenTracker.getChildLists(),
+ target: this.subchannelAddressString,
+ };
+ }
+ trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text);
+ }
+ refTrace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, 'subchannel_refcount', '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text);
+ }
+ handleBackoffTimer() {
+ if (this.continueConnecting) {
+ this.transitionToState([connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE], connectivity_state_1.ConnectivityState.CONNECTING);
+ }
+ else {
+ this.transitionToState([connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE], connectivity_state_1.ConnectivityState.IDLE);
+ }
+ }
+ /**
+ * Start a backoff timer with the current nextBackoff timeout
+ */
+ startBackoff() {
+ this.backoffTimeout.runOnce();
+ }
+ stopBackoff() {
+ this.backoffTimeout.stop();
+ this.backoffTimeout.reset();
+ }
+ startConnectingInternal() {
+ let options = this.options;
+ if (options['grpc.keepalive_time_ms']) {
+ const adjustedKeepaliveTime = Math.min(this.keepaliveTime, KEEPALIVE_MAX_TIME_MS);
+ options = Object.assign(Object.assign({}, options), { 'grpc.keepalive_time_ms': adjustedKeepaliveTime });
+ }
+ this.connector
+ .connect(this.subchannelAddress, this.credentials, options)
+ .then(transport => {
+ if (this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING], connectivity_state_1.ConnectivityState.READY)) {
+ this.transport = transport;
+ if (this.channelzEnabled) {
+ this.childrenTracker.refChild(transport.getChannelzRef());
+ }
+ transport.addDisconnectListener(tooManyPings => {
+ this.transitionToState([connectivity_state_1.ConnectivityState.READY], connectivity_state_1.ConnectivityState.IDLE);
+ if (tooManyPings && this.keepaliveTime > 0) {
+ this.keepaliveTime *= 2;
+ logging.log(constants_1.LogVerbosity.ERROR, `Connection to ${(0, uri_parser_1.uriToString)(this.channelTarget)} at ${this.subchannelAddressString} rejected by server because of excess pings. Increasing ping interval to ${this.keepaliveTime} ms`);
+ }
+ });
+ }
+ else {
+ /* If we can't transition from CONNECTING to READY here, we will
+ * not be using this transport, so release its resources. */
+ transport.shutdown();
+ }
+ }, error => {
+ this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING], connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, `${error}`);
+ });
+ }
+ /**
+ * Initiate a state transition from any element of oldStates to the new
+ * state. If the current connectivityState is not in oldStates, do nothing.
+ * @param oldStates The set of states to transition from
+ * @param newState The state to transition to
+ * @returns True if the state changed, false otherwise
+ */
+ transitionToState(oldStates, newState, errorMessage) {
+ var _a, _b;
+ if (oldStates.indexOf(this.connectivityState) === -1) {
+ return false;
+ }
+ this.trace(connectivity_state_1.ConnectivityState[this.connectivityState] +
+ ' -> ' +
+ connectivity_state_1.ConnectivityState[newState]);
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Connectivity state change to ' + connectivity_state_1.ConnectivityState[newState]);
+ }
+ const previousState = this.connectivityState;
+ this.connectivityState = newState;
+ switch (newState) {
+ case connectivity_state_1.ConnectivityState.READY:
+ this.stopBackoff();
+ break;
+ case connectivity_state_1.ConnectivityState.CONNECTING:
+ this.startBackoff();
+ this.startConnectingInternal();
+ this.continueConnecting = false;
+ break;
+ case connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE:
+ if (this.channelzEnabled && this.transport) {
+ this.childrenTracker.unrefChild(this.transport.getChannelzRef());
+ }
+ (_a = this.transport) === null || _a === void 0 ? void 0 : _a.shutdown();
+ this.transport = null;
+ /* If the backoff timer has already ended by the time we get to the
+ * TRANSIENT_FAILURE state, we want to immediately transition out of
+ * TRANSIENT_FAILURE as though the backoff timer is ending right now */
+ if (!this.backoffTimeout.isRunning()) {
+ process.nextTick(() => {
+ this.handleBackoffTimer();
+ });
+ }
+ break;
+ case connectivity_state_1.ConnectivityState.IDLE:
+ if (this.channelzEnabled && this.transport) {
+ this.childrenTracker.unrefChild(this.transport.getChannelzRef());
+ }
+ (_b = this.transport) === null || _b === void 0 ? void 0 : _b.shutdown();
+ this.transport = null;
+ break;
+ default:
+ throw new Error(`Invalid state: unknown ConnectivityState ${newState}`);
+ }
+ for (const listener of this.stateListeners) {
+ listener(this, previousState, newState, this.keepaliveTime, errorMessage);
+ }
+ return true;
+ }
+ ref() {
+ this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount + 1));
+ this.refcount += 1;
+ }
+ unref() {
+ this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount - 1));
+ this.refcount -= 1;
+ if (this.refcount === 0) {
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Shutting down');
+ }
+ if (this.channelzEnabled) {
+ (0, channelz_1.unregisterChannelzRef)(this.channelzRef);
+ }
+ process.nextTick(() => {
+ this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING, connectivity_state_1.ConnectivityState.READY], connectivity_state_1.ConnectivityState.IDLE);
+ });
+ }
+ }
+ unrefIfOneRef() {
+ if (this.refcount === 1) {
+ this.unref();
+ return true;
+ }
+ return false;
+ }
+ createCall(metadata, host, method, listener) {
+ if (!this.transport) {
+ throw new Error('Cannot create call, subchannel not READY');
+ }
+ let statsTracker;
+ if (this.channelzEnabled) {
+ this.callTracker.addCallStarted();
+ this.streamTracker.addCallStarted();
+ statsTracker = {
+ onCallEnd: status => {
+ if (status.code === constants_1.Status.OK) {
+ this.callTracker.addCallSucceeded();
+ }
+ else {
+ this.callTracker.addCallFailed();
+ }
+ },
+ };
+ }
+ else {
+ statsTracker = {};
+ }
+ return this.transport.createCall(metadata, host, method, listener, statsTracker);
+ }
+ /**
+ * If the subchannel is currently IDLE, start connecting and switch to the
+ * CONNECTING state. If the subchannel is current in TRANSIENT_FAILURE,
+ * the next time it would transition to IDLE, start connecting again instead.
+ * Otherwise, do nothing.
+ */
+ startConnecting() {
+ process.nextTick(() => {
+ /* First, try to transition from IDLE to connecting. If that doesn't happen
+ * because the state is not currently IDLE, check if it is
+ * TRANSIENT_FAILURE, and if so indicate that it should go back to
+ * connecting after the backoff timer ends. Otherwise do nothing */
+ if (!this.transitionToState([connectivity_state_1.ConnectivityState.IDLE], connectivity_state_1.ConnectivityState.CONNECTING)) {
+ if (this.connectivityState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) {
+ this.continueConnecting = true;
+ }
+ }
+ });
+ }
+ /**
+ * Get the subchannel's current connectivity state.
+ */
+ getConnectivityState() {
+ return this.connectivityState;
+ }
+ /**
+ * Add a listener function to be called whenever the subchannel's
+ * connectivity state changes.
+ * @param listener
+ */
+ addConnectivityStateListener(listener) {
+ this.stateListeners.add(listener);
+ }
+ /**
+ * Remove a listener previously added with `addConnectivityStateListener`
+ * @param listener A reference to a function previously passed to
+ * `addConnectivityStateListener`
+ */
+ removeConnectivityStateListener(listener) {
+ this.stateListeners.delete(listener);
+ }
+ /**
+ * Reset the backoff timeout, and immediately start connecting if in backoff.
+ */
+ resetBackoff() {
+ process.nextTick(() => {
+ this.backoffTimeout.reset();
+ this.transitionToState([connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE], connectivity_state_1.ConnectivityState.CONNECTING);
+ });
+ }
+ getAddress() {
+ return this.subchannelAddressString;
+ }
+ getChannelzRef() {
+ return this.channelzRef;
+ }
+ getRealSubchannel() {
+ return this;
+ }
+ realSubchannelEquals(other) {
+ return other.getRealSubchannel() === this;
+ }
+ throttleKeepalive(newKeepaliveTime) {
+ if (newKeepaliveTime > this.keepaliveTime) {
+ this.keepaliveTime = newKeepaliveTime;
+ }
+ }
+}
+exports.Subchannel = Subchannel;
+//# sourceMappingURL=subchannel.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js.map
new file mode 100644
index 0000000..0c91945
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/subchannel.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"subchannel.js","sourceRoot":"","sources":["../../src/subchannel.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.d.ts
new file mode 100644
index 0000000..54f2dba
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.d.ts
@@ -0,0 +1,3 @@
+/// <reference types="node" />
+export declare const CIPHER_SUITES: string | undefined;
+export declare function getDefaultRootsData(): Buffer | null;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js
new file mode 100644
index 0000000..d118344
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js
@@ -0,0 +1,34 @@
+"use strict";
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getDefaultRootsData = exports.CIPHER_SUITES = void 0;
+const fs = require("fs");
+exports.CIPHER_SUITES = process.env.GRPC_SSL_CIPHER_SUITES;
+const DEFAULT_ROOTS_FILE_PATH = process.env.GRPC_DEFAULT_SSL_ROOTS_FILE_PATH;
+let defaultRootsData = null;
+function getDefaultRootsData() {
+ if (DEFAULT_ROOTS_FILE_PATH) {
+ if (defaultRootsData === null) {
+ defaultRootsData = fs.readFileSync(DEFAULT_ROOTS_FILE_PATH);
+ }
+ return defaultRootsData;
+ }
+ return null;
+}
+exports.getDefaultRootsData = getDefaultRootsData;
+//# sourceMappingURL=tls-helpers.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js.map
new file mode 100644
index 0000000..0e08214
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/tls-helpers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"tls-helpers.js","sourceRoot":"","sources":["../../src/tls-helpers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,yBAAyB;AAEZ,QAAA,aAAa,GACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAErC,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAE7E,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAE3C,SAAgB,mBAAmB;IACjC,IAAI,uBAAuB,EAAE,CAAC;QAC5B,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAC9B,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AARD,kDAQC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.d.ts
new file mode 100644
index 0000000..1869dbb
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.d.ts
@@ -0,0 +1,134 @@
+/// <reference types="node" />
+import * as http2 from 'http2';
+import { StatusObject } from './call-interface';
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { SocketRef } from './channelz';
+import { SubchannelAddress } from './subchannel-address';
+import { GrpcUri } from './uri-parser';
+import { Http2SubchannelCall, SubchannelCall, SubchannelCallInterceptingListener } from './subchannel-call';
+import { Metadata } from './metadata';
+export interface CallEventTracker {
+ addMessageSent(): void;
+ addMessageReceived(): void;
+ onCallEnd(status: StatusObject): void;
+ onStreamEnd(success: boolean): void;
+}
+export interface TransportDisconnectListener {
+ (tooManyPings: boolean): void;
+}
+export interface Transport {
+ getChannelzRef(): SocketRef;
+ getPeerName(): string;
+ getOptions(): ChannelOptions;
+ createCall(metadata: Metadata, host: string, method: string, listener: SubchannelCallInterceptingListener, subchannelCallStatsTracker: Partial<CallEventTracker>): SubchannelCall;
+ addDisconnectListener(listener: TransportDisconnectListener): void;
+ shutdown(): void;
+}
+declare class Http2Transport implements Transport {
+ private session;
+ private options;
+ /**
+ * Name of the remote server, if it is not the same as the subchannel
+ * address, i.e. if connecting through an HTTP CONNECT proxy.
+ */
+ private remoteName;
+ /**
+ * The amount of time in between sending pings
+ */
+ private keepaliveTimeMs;
+ /**
+ * The amount of time to wait for an acknowledgement after sending a ping
+ */
+ private keepaliveTimeoutMs;
+ /**
+ * Timer reference for timeout that indicates when to send the next ping
+ */
+ private keepaliveTimerId;
+ /**
+ * Indicates that the keepalive timer ran out while there were no active
+ * calls, and a ping should be sent the next time a call starts.
+ */
+ private pendingSendKeepalivePing;
+ /**
+ * Timer reference tracking when the most recent ping will be considered lost
+ */
+ private keepaliveTimeoutId;
+ /**
+ * Indicates whether keepalive pings should be sent without any active calls
+ */
+ private keepaliveWithoutCalls;
+ private userAgent;
+ private activeCalls;
+ private subchannelAddressString;
+ private disconnectListeners;
+ private disconnectHandled;
+ private channelzRef;
+ private readonly channelzEnabled;
+ private streamTracker;
+ private keepalivesSent;
+ private messagesSent;
+ private messagesReceived;
+ private lastMessageSentTimestamp;
+ private lastMessageReceivedTimestamp;
+ constructor(session: http2.ClientHttp2Session, subchannelAddress: SubchannelAddress, options: ChannelOptions,
+ /**
+ * Name of the remote server, if it is not the same as the subchannel
+ * address, i.e. if connecting through an HTTP CONNECT proxy.
+ */
+ remoteName: string | null);
+ private getChannelzInfo;
+ private trace;
+ private keepaliveTrace;
+ private flowControlTrace;
+ private internalsTrace;
+ /**
+ * Indicate to the owner of this object that this transport should no longer
+ * be used. That happens if the connection drops, or if the server sends a
+ * GOAWAY.
+ * @param tooManyPings If true, this was triggered by a GOAWAY with data
+ * indicating that the session was closed becaues the client sent too many
+ * pings.
+ * @returns
+ */
+ private reportDisconnectToOwner;
+ /**
+ * Handle connection drops, but not GOAWAYs.
+ */
+ private handleDisconnect;
+ addDisconnectListener(listener: TransportDisconnectListener): void;
+ private clearKeepaliveTimer;
+ private clearKeepaliveTimeout;
+ private canSendPing;
+ private maybeSendPing;
+ /**
+ * Starts the keepalive ping timer if appropriate. If the timer already ran
+ * out while there were no active requests, instead send a ping immediately.
+ * If the ping timer is already running or a ping is currently in flight,
+ * instead do nothing and wait for them to resolve.
+ */
+ private maybeStartKeepalivePingTimer;
+ private stopKeepalivePings;
+ private removeActiveCall;
+ private addActiveCall;
+ createCall(metadata: Metadata, host: string, method: string, listener: SubchannelCallInterceptingListener, subchannelCallStatsTracker: Partial<CallEventTracker>): Http2SubchannelCall;
+ getChannelzRef(): SocketRef;
+ getPeerName(): string;
+ getOptions(): ChannelOptions;
+ shutdown(): void;
+}
+export interface SubchannelConnector {
+ connect(address: SubchannelAddress, credentials: ChannelCredentials, options: ChannelOptions): Promise<Transport>;
+ shutdown(): void;
+}
+export declare class Http2SubchannelConnector implements SubchannelConnector {
+ private channelTarget;
+ private session;
+ private isShutdown;
+ constructor(channelTarget: GrpcUri);
+ private trace;
+ private createSession;
+ connect(address: SubchannelAddress, credentials: ChannelCredentials, options: ChannelOptions): Promise<Http2Transport>;
+ shutdown(): void;
+}
+export {};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js
new file mode 100644
index 0000000..01af3ab
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js
@@ -0,0 +1,644 @@
+"use strict";
+/*
+ * Copyright 2023 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Http2SubchannelConnector = void 0;
+const http2 = require("http2");
+const tls_1 = require("tls");
+const channelz_1 = require("./channelz");
+const constants_1 = require("./constants");
+const http_proxy_1 = require("./http_proxy");
+const logging = require("./logging");
+const resolver_1 = require("./resolver");
+const subchannel_address_1 = require("./subchannel-address");
+const uri_parser_1 = require("./uri-parser");
+const net = require("net");
+const subchannel_call_1 = require("./subchannel-call");
+const call_number_1 = require("./call-number");
+const TRACER_NAME = 'transport';
+const FLOW_CONTROL_TRACER_NAME = 'transport_flowctrl';
+const clientVersion = require('../../package.json').version;
+const { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_CONTENT_TYPE, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_TE, HTTP2_HEADER_USER_AGENT, } = http2.constants;
+const KEEPALIVE_TIMEOUT_MS = 20000;
+const tooManyPingsData = Buffer.from('too_many_pings', 'ascii');
+class Http2Transport {
+ constructor(session, subchannelAddress, options,
+ /**
+ * Name of the remote server, if it is not the same as the subchannel
+ * address, i.e. if connecting through an HTTP CONNECT proxy.
+ */
+ remoteName) {
+ this.session = session;
+ this.options = options;
+ this.remoteName = remoteName;
+ /**
+ * The amount of time in between sending pings
+ */
+ this.keepaliveTimeMs = -1;
+ /**
+ * The amount of time to wait for an acknowledgement after sending a ping
+ */
+ this.keepaliveTimeoutMs = KEEPALIVE_TIMEOUT_MS;
+ /**
+ * Timer reference for timeout that indicates when to send the next ping
+ */
+ this.keepaliveTimerId = null;
+ /**
+ * Indicates that the keepalive timer ran out while there were no active
+ * calls, and a ping should be sent the next time a call starts.
+ */
+ this.pendingSendKeepalivePing = false;
+ /**
+ * Timer reference tracking when the most recent ping will be considered lost
+ */
+ this.keepaliveTimeoutId = null;
+ /**
+ * Indicates whether keepalive pings should be sent without any active calls
+ */
+ this.keepaliveWithoutCalls = false;
+ this.activeCalls = new Set();
+ this.disconnectListeners = [];
+ this.disconnectHandled = false;
+ this.channelzEnabled = true;
+ this.streamTracker = new channelz_1.ChannelzCallTracker();
+ this.keepalivesSent = 0;
+ this.messagesSent = 0;
+ this.messagesReceived = 0;
+ this.lastMessageSentTimestamp = null;
+ this.lastMessageReceivedTimestamp = null;
+ /* Populate subchannelAddressString and channelzRef before doing anything
+ * else, because they are used in the trace methods. */
+ this.subchannelAddressString = (0, subchannel_address_1.subchannelAddressToString)(subchannelAddress);
+ if (options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+ this.channelzRef = (0, channelz_1.registerChannelzSocket)(this.subchannelAddressString, () => this.getChannelzInfo(), this.channelzEnabled);
+ // Build user-agent string.
+ this.userAgent = [
+ options['grpc.primary_user_agent'],
+ `grpc-node-js/${clientVersion}`,
+ options['grpc.secondary_user_agent'],
+ ]
+ .filter(e => e)
+ .join(' '); // remove falsey values first
+ if ('grpc.keepalive_time_ms' in options) {
+ this.keepaliveTimeMs = options['grpc.keepalive_time_ms'];
+ }
+ if ('grpc.keepalive_timeout_ms' in options) {
+ this.keepaliveTimeoutMs = options['grpc.keepalive_timeout_ms'];
+ }
+ if ('grpc.keepalive_permit_without_calls' in options) {
+ this.keepaliveWithoutCalls =
+ options['grpc.keepalive_permit_without_calls'] === 1;
+ }
+ else {
+ this.keepaliveWithoutCalls = false;
+ }
+ session.once('close', () => {
+ this.trace('session closed');
+ this.stopKeepalivePings();
+ this.handleDisconnect();
+ });
+ session.once('goaway', (errorCode, lastStreamID, opaqueData) => {
+ let tooManyPings = false;
+ /* See the last paragraph of
+ * https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md#basic-keepalive */
+ if (errorCode === http2.constants.NGHTTP2_ENHANCE_YOUR_CALM &&
+ opaqueData &&
+ opaqueData.equals(tooManyPingsData)) {
+ tooManyPings = true;
+ }
+ this.trace('connection closed by GOAWAY with code ' + errorCode + ' and data ' + (opaqueData === null || opaqueData === void 0 ? void 0 : opaqueData.toString()));
+ this.reportDisconnectToOwner(tooManyPings);
+ });
+ session.once('error', error => {
+ /* Do nothing here. Any error should also trigger a close event, which is
+ * where we want to handle that. */
+ this.trace('connection closed with error ' + error.message);
+ });
+ if (logging.isTracerEnabled(TRACER_NAME)) {
+ session.on('remoteSettings', (settings) => {
+ this.trace('new settings received' +
+ (this.session !== session ? ' on the old connection' : '') +
+ ': ' +
+ JSON.stringify(settings));
+ });
+ session.on('localSettings', (settings) => {
+ this.trace('local settings acknowledged by remote' +
+ (this.session !== session ? ' on the old connection' : '') +
+ ': ' +
+ JSON.stringify(settings));
+ });
+ }
+ /* Start the keepalive timer last, because this can trigger trace logs,
+ * which should only happen after everything else is set up. */
+ if (this.keepaliveWithoutCalls) {
+ this.maybeStartKeepalivePingTimer();
+ }
+ }
+ getChannelzInfo() {
+ var _a, _b, _c;
+ const sessionSocket = this.session.socket;
+ const remoteAddress = sessionSocket.remoteAddress
+ ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.remoteAddress, sessionSocket.remotePort)
+ : null;
+ const localAddress = sessionSocket.localAddress
+ ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.localAddress, sessionSocket.localPort)
+ : null;
+ let tlsInfo;
+ if (this.session.encrypted) {
+ const tlsSocket = sessionSocket;
+ const cipherInfo = tlsSocket.getCipher();
+ const certificate = tlsSocket.getCertificate();
+ const peerCertificate = tlsSocket.getPeerCertificate();
+ tlsInfo = {
+ cipherSuiteStandardName: (_a = cipherInfo.standardName) !== null && _a !== void 0 ? _a : null,
+ cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name,
+ localCertificate: certificate && 'raw' in certificate ? certificate.raw : null,
+ remoteCertificate: peerCertificate && 'raw' in peerCertificate
+ ? peerCertificate.raw
+ : null,
+ };
+ }
+ else {
+ tlsInfo = null;
+ }
+ const socketInfo = {
+ remoteAddress: remoteAddress,
+ localAddress: localAddress,
+ security: tlsInfo,
+ remoteName: this.remoteName,
+ streamsStarted: this.streamTracker.callsStarted,
+ streamsSucceeded: this.streamTracker.callsSucceeded,
+ streamsFailed: this.streamTracker.callsFailed,
+ messagesSent: this.messagesSent,
+ messagesReceived: this.messagesReceived,
+ keepAlivesSent: this.keepalivesSent,
+ lastLocalStreamCreatedTimestamp: this.streamTracker.lastCallStartedTimestamp,
+ lastRemoteStreamCreatedTimestamp: null,
+ lastMessageSentTimestamp: this.lastMessageSentTimestamp,
+ lastMessageReceivedTimestamp: this.lastMessageReceivedTimestamp,
+ localFlowControlWindow: (_b = this.session.state.localWindowSize) !== null && _b !== void 0 ? _b : null,
+ remoteFlowControlWindow: (_c = this.session.state.remoteWindowSize) !== null && _c !== void 0 ? _c : null,
+ };
+ return socketInfo;
+ }
+ trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text);
+ }
+ keepaliveTrace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, 'keepalive', '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text);
+ }
+ flowControlTrace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, FLOW_CONTROL_TRACER_NAME, '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text);
+ }
+ internalsTrace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, 'transport_internals', '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text);
+ }
+ /**
+ * Indicate to the owner of this object that this transport should no longer
+ * be used. That happens if the connection drops, or if the server sends a
+ * GOAWAY.
+ * @param tooManyPings If true, this was triggered by a GOAWAY with data
+ * indicating that the session was closed becaues the client sent too many
+ * pings.
+ * @returns
+ */
+ reportDisconnectToOwner(tooManyPings) {
+ if (this.disconnectHandled) {
+ return;
+ }
+ this.disconnectHandled = true;
+ this.disconnectListeners.forEach(listener => listener(tooManyPings));
+ }
+ /**
+ * Handle connection drops, but not GOAWAYs.
+ */
+ handleDisconnect() {
+ this.reportDisconnectToOwner(false);
+ /* Give calls an event loop cycle to finish naturally before reporting the
+ * disconnnection to them. */
+ setImmediate(() => {
+ for (const call of this.activeCalls) {
+ call.onDisconnect();
+ }
+ });
+ }
+ addDisconnectListener(listener) {
+ this.disconnectListeners.push(listener);
+ }
+ clearKeepaliveTimer() {
+ if (!this.keepaliveTimerId) {
+ return;
+ }
+ clearTimeout(this.keepaliveTimerId);
+ this.keepaliveTimerId = null;
+ }
+ clearKeepaliveTimeout() {
+ if (!this.keepaliveTimeoutId) {
+ return;
+ }
+ clearTimeout(this.keepaliveTimeoutId);
+ this.keepaliveTimeoutId = null;
+ }
+ canSendPing() {
+ return (this.keepaliveTimeMs > 0 &&
+ (this.keepaliveWithoutCalls || this.activeCalls.size > 0));
+ }
+ maybeSendPing() {
+ var _a, _b;
+ this.clearKeepaliveTimer();
+ if (!this.canSendPing()) {
+ this.pendingSendKeepalivePing = true;
+ return;
+ }
+ if (this.channelzEnabled) {
+ this.keepalivesSent += 1;
+ }
+ this.keepaliveTrace('Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms');
+ if (!this.keepaliveTimeoutId) {
+ this.keepaliveTimeoutId = setTimeout(() => {
+ this.keepaliveTrace('Ping timeout passed without response');
+ this.handleDisconnect();
+ }, this.keepaliveTimeoutMs);
+ (_b = (_a = this.keepaliveTimeoutId).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ try {
+ this.session.ping((err, duration, payload) => {
+ if (err) {
+ this.keepaliveTrace('Ping failed with error ' + err.message);
+ this.handleDisconnect();
+ }
+ this.keepaliveTrace('Received ping response');
+ this.clearKeepaliveTimeout();
+ this.maybeStartKeepalivePingTimer();
+ });
+ }
+ catch (e) {
+ /* If we fail to send a ping, the connection is no longer functional, so
+ * we should discard it. */
+ this.handleDisconnect();
+ }
+ }
+ /**
+ * Starts the keepalive ping timer if appropriate. If the timer already ran
+ * out while there were no active requests, instead send a ping immediately.
+ * If the ping timer is already running or a ping is currently in flight,
+ * instead do nothing and wait for them to resolve.
+ */
+ maybeStartKeepalivePingTimer() {
+ var _a, _b;
+ if (!this.canSendPing()) {
+ return;
+ }
+ if (this.pendingSendKeepalivePing) {
+ this.pendingSendKeepalivePing = false;
+ this.maybeSendPing();
+ }
+ else if (!this.keepaliveTimerId && !this.keepaliveTimeoutId) {
+ this.keepaliveTrace('Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms');
+ this.keepaliveTimerId = (_b = (_a = setTimeout(() => {
+ this.maybeSendPing();
+ }, this.keepaliveTimeMs)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
+ }
+ /* Otherwise, there is already either a keepalive timer or a ping pending,
+ * wait for those to resolve. */
+ }
+ stopKeepalivePings() {
+ if (this.keepaliveTimerId) {
+ clearTimeout(this.keepaliveTimerId);
+ this.keepaliveTimerId = null;
+ }
+ this.clearKeepaliveTimeout();
+ }
+ removeActiveCall(call) {
+ this.activeCalls.delete(call);
+ if (this.activeCalls.size === 0) {
+ this.session.unref();
+ }
+ }
+ addActiveCall(call) {
+ this.activeCalls.add(call);
+ if (this.activeCalls.size === 1) {
+ this.session.ref();
+ if (!this.keepaliveWithoutCalls) {
+ this.maybeStartKeepalivePingTimer();
+ }
+ }
+ }
+ createCall(metadata, host, method, listener, subchannelCallStatsTracker) {
+ const headers = metadata.toHttp2Headers();
+ headers[HTTP2_HEADER_AUTHORITY] = host;
+ headers[HTTP2_HEADER_USER_AGENT] = this.userAgent;
+ headers[HTTP2_HEADER_CONTENT_TYPE] = 'application/grpc';
+ headers[HTTP2_HEADER_METHOD] = 'POST';
+ headers[HTTP2_HEADER_PATH] = method;
+ headers[HTTP2_HEADER_TE] = 'trailers';
+ let http2Stream;
+ /* In theory, if an error is thrown by session.request because session has
+ * become unusable (e.g. because it has received a goaway), this subchannel
+ * should soon see the corresponding close or goaway event anyway and leave
+ * READY. But we have seen reports that this does not happen
+ * (https://github.com/googleapis/nodejs-firestore/issues/1023#issuecomment-653204096)
+ * so for defense in depth, we just discard the session when we see an
+ * error here.
+ */
+ try {
+ http2Stream = this.session.request(headers);
+ }
+ catch (e) {
+ this.handleDisconnect();
+ throw e;
+ }
+ this.flowControlTrace('local window size: ' +
+ this.session.state.localWindowSize +
+ ' remote window size: ' +
+ this.session.state.remoteWindowSize);
+ this.internalsTrace('session.closed=' +
+ this.session.closed +
+ ' session.destroyed=' +
+ this.session.destroyed +
+ ' session.socket.destroyed=' +
+ this.session.socket.destroyed);
+ let eventTracker;
+ // eslint-disable-next-line prefer-const
+ let call;
+ if (this.channelzEnabled) {
+ this.streamTracker.addCallStarted();
+ eventTracker = {
+ addMessageSent: () => {
+ var _a;
+ this.messagesSent += 1;
+ this.lastMessageSentTimestamp = new Date();
+ (_a = subchannelCallStatsTracker.addMessageSent) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
+ },
+ addMessageReceived: () => {
+ var _a;
+ this.messagesReceived += 1;
+ this.lastMessageReceivedTimestamp = new Date();
+ (_a = subchannelCallStatsTracker.addMessageReceived) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
+ },
+ onCallEnd: status => {
+ var _a;
+ (_a = subchannelCallStatsTracker.onCallEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, status);
+ this.removeActiveCall(call);
+ },
+ onStreamEnd: success => {
+ var _a;
+ if (success) {
+ this.streamTracker.addCallSucceeded();
+ }
+ else {
+ this.streamTracker.addCallFailed();
+ }
+ (_a = subchannelCallStatsTracker.onStreamEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, success);
+ },
+ };
+ }
+ else {
+ eventTracker = {
+ addMessageSent: () => {
+ var _a;
+ (_a = subchannelCallStatsTracker.addMessageSent) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
+ },
+ addMessageReceived: () => {
+ var _a;
+ (_a = subchannelCallStatsTracker.addMessageReceived) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
+ },
+ onCallEnd: status => {
+ var _a;
+ (_a = subchannelCallStatsTracker.onCallEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, status);
+ this.removeActiveCall(call);
+ },
+ onStreamEnd: success => {
+ var _a;
+ (_a = subchannelCallStatsTracker.onStreamEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, success);
+ },
+ };
+ }
+ call = new subchannel_call_1.Http2SubchannelCall(http2Stream, eventTracker, listener, this, (0, call_number_1.getNextCallNumber)());
+ this.addActiveCall(call);
+ return call;
+ }
+ getChannelzRef() {
+ return this.channelzRef;
+ }
+ getPeerName() {
+ return this.subchannelAddressString;
+ }
+ getOptions() {
+ return this.options;
+ }
+ shutdown() {
+ this.session.close();
+ (0, channelz_1.unregisterChannelzRef)(this.channelzRef);
+ }
+}
+class Http2SubchannelConnector {
+ constructor(channelTarget) {
+ this.channelTarget = channelTarget;
+ this.session = null;
+ this.isShutdown = false;
+ }
+ trace(text) {
+ logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, (0, uri_parser_1.uriToString)(this.channelTarget) + ' ' + text);
+ }
+ createSession(address, credentials, options, proxyConnectionResult) {
+ if (this.isShutdown) {
+ return Promise.reject();
+ }
+ return new Promise((resolve, reject) => {
+ var _a, _b, _c;
+ let remoteName;
+ if (proxyConnectionResult.realTarget) {
+ remoteName = (0, uri_parser_1.uriToString)(proxyConnectionResult.realTarget);
+ this.trace('creating HTTP/2 session through proxy to ' +
+ (0, uri_parser_1.uriToString)(proxyConnectionResult.realTarget));
+ }
+ else {
+ remoteName = null;
+ this.trace('creating HTTP/2 session to ' + (0, subchannel_address_1.subchannelAddressToString)(address));
+ }
+ const targetAuthority = (0, resolver_1.getDefaultAuthority)((_a = proxyConnectionResult.realTarget) !== null && _a !== void 0 ? _a : this.channelTarget);
+ let connectionOptions = credentials._getConnectionOptions() || {};
+ connectionOptions.maxSendHeaderBlockLength = Number.MAX_SAFE_INTEGER;
+ if ('grpc-node.max_session_memory' in options) {
+ connectionOptions.maxSessionMemory =
+ options['grpc-node.max_session_memory'];
+ }
+ else {
+ /* By default, set a very large max session memory limit, to effectively
+ * disable enforcement of the limit. Some testing indicates that Node's
+ * behavior degrades badly when this limit is reached, so we solve that
+ * by disabling the check entirely. */
+ connectionOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER;
+ }
+ let addressScheme = 'http://';
+ if ('secureContext' in connectionOptions) {
+ addressScheme = 'https://';
+ // If provided, the value of grpc.ssl_target_name_override should be used
+ // to override the target hostname when checking server identity.
+ // This option is used for testing only.
+ if (options['grpc.ssl_target_name_override']) {
+ const sslTargetNameOverride = options['grpc.ssl_target_name_override'];
+ connectionOptions.checkServerIdentity = (host, cert) => {
+ return (0, tls_1.checkServerIdentity)(sslTargetNameOverride, cert);
+ };
+ connectionOptions.servername = sslTargetNameOverride;
+ }
+ else {
+ const authorityHostname = (_c = (_b = (0, uri_parser_1.splitHostPort)(targetAuthority)) === null || _b === void 0 ? void 0 : _b.host) !== null && _c !== void 0 ? _c : 'localhost';
+ // We want to always set servername to support SNI
+ connectionOptions.servername = authorityHostname;
+ }
+ if (proxyConnectionResult.socket) {
+ /* This is part of the workaround for
+ * https://github.com/nodejs/node/issues/32922. Without that bug,
+ * proxyConnectionResult.socket would always be a plaintext socket and
+ * this would say
+ * connectionOptions.socket = proxyConnectionResult.socket; */
+ connectionOptions.createConnection = (authority, option) => {
+ return proxyConnectionResult.socket;
+ };
+ }
+ }
+ else {
+ /* In all but the most recent versions of Node, http2.connect does not use
+ * the options when establishing plaintext connections, so we need to
+ * establish that connection explicitly. */
+ connectionOptions.createConnection = (authority, option) => {
+ if (proxyConnectionResult.socket) {
+ return proxyConnectionResult.socket;
+ }
+ else {
+ /* net.NetConnectOpts is declared in a way that is more restrictive
+ * than what net.connect will actually accept, so we use the type
+ * assertion to work around that. */
+ return net.connect(address);
+ }
+ };
+ }
+ connectionOptions = Object.assign(Object.assign(Object.assign({}, connectionOptions), address), { enableTrace: options['grpc-node.tls_enable_trace'] === 1 });
+ /* http2.connect uses the options here:
+ * https://github.com/nodejs/node/blob/70c32a6d190e2b5d7b9ff9d5b6a459d14e8b7d59/lib/internal/http2/core.js#L3028-L3036
+ * The spread operator overides earlier values with later ones, so any port
+ * or host values in the options will be used rather than any values extracted
+ * from the first argument. In addition, the path overrides the host and port,
+ * as documented for plaintext connections here:
+ * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener
+ * and for TLS connections here:
+ * https://nodejs.org/api/tls.html#tls_tls_connect_options_callback. In
+ * earlier versions of Node, http2.connect passes these options to
+ * tls.connect but not net.connect, so in the insecure case we still need
+ * to set the createConnection option above to create the connection
+ * explicitly. We cannot do that in the TLS case because http2.connect
+ * passes necessary additional options to tls.connect.
+ * The first argument just needs to be parseable as a URL and the scheme
+ * determines whether the connection will be established over TLS or not.
+ */
+ const session = http2.connect(addressScheme + targetAuthority, connectionOptions);
+ this.session = session;
+ let errorMessage = 'Failed to connect';
+ session.unref();
+ session.once('connect', () => {
+ session.removeAllListeners();
+ resolve(new Http2Transport(session, address, options, remoteName));
+ this.session = null;
+ });
+ session.once('close', () => {
+ this.session = null;
+ // Leave time for error event to happen before rejecting
+ setImmediate(() => {
+ reject(`${errorMessage} (${new Date().toISOString()})`);
+ });
+ });
+ session.once('error', error => {
+ errorMessage = error.message;
+ this.trace('connection failed with error ' + errorMessage);
+ });
+ });
+ }
+ connect(address, credentials, options) {
+ var _a, _b;
+ if (this.isShutdown) {
+ return Promise.reject();
+ }
+ /* Pass connection options through to the proxy so that it's able to
+ * upgrade it's connection to support tls if needed.
+ * This is a workaround for https://github.com/nodejs/node/issues/32922
+ * See https://github.com/grpc/grpc-node/pull/1369 for more info. */
+ const connectionOptions = credentials._getConnectionOptions() || {};
+ if ('secureContext' in connectionOptions) {
+ connectionOptions.ALPNProtocols = ['h2'];
+ // If provided, the value of grpc.ssl_target_name_override should be used
+ // to override the target hostname when checking server identity.
+ // This option is used for testing only.
+ if (options['grpc.ssl_target_name_override']) {
+ const sslTargetNameOverride = options['grpc.ssl_target_name_override'];
+ connectionOptions.checkServerIdentity = (host, cert) => {
+ return (0, tls_1.checkServerIdentity)(sslTargetNameOverride, cert);
+ };
+ connectionOptions.servername = sslTargetNameOverride;
+ }
+ else {
+ if ('grpc.http_connect_target' in options) {
+ /* This is more or less how servername will be set in createSession
+ * if a connection is successfully established through the proxy.
+ * If the proxy is not used, these connectionOptions are discarded
+ * anyway */
+ const targetPath = (0, resolver_1.getDefaultAuthority)((_a = (0, uri_parser_1.parseUri)(options['grpc.http_connect_target'])) !== null && _a !== void 0 ? _a : {
+ path: 'localhost',
+ });
+ const hostPort = (0, uri_parser_1.splitHostPort)(targetPath);
+ connectionOptions.servername = (_b = hostPort === null || hostPort === void 0 ? void 0 : hostPort.host) !== null && _b !== void 0 ? _b : targetPath;
+ }
+ }
+ if (options['grpc-node.tls_enable_trace']) {
+ connectionOptions.enableTrace = true;
+ }
+ }
+ return (0, http_proxy_1.getProxiedConnection)(address, options, connectionOptions).then(result => this.createSession(address, credentials, options, result));
+ }
+ shutdown() {
+ var _a;
+ this.isShutdown = true;
+ (_a = this.session) === null || _a === void 0 ? void 0 : _a.close();
+ this.session = null;
+ }
+}
+exports.Http2SubchannelConnector = Http2SubchannelConnector;
+//# sourceMappingURL=transport.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js.map
new file mode 100644
index 0000000..7c9bb90
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/transport.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts b/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts
new file mode 100644
index 0000000..c4d71aa
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts
@@ -0,0 +1,12 @@
+export interface GrpcUri {
+ scheme?: string;
+ authority?: string;
+ path: string;
+}
+export declare function parseUri(uriString: string): GrpcUri | null;
+export interface HostPort {
+ host: string;
+ port?: number;
+}
+export declare function splitHostPort(path: string): HostPort | null;
+export declare function uriToString(uri: GrpcUri): string;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js b/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js
new file mode 100644
index 0000000..0a85d6d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js
@@ -0,0 +1,111 @@
+"use strict";
+/*
+ * Copyright 2020 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.uriToString = exports.splitHostPort = exports.parseUri = void 0;
+/*
+ * The groups correspond to URI parts as follows:
+ * 1. scheme
+ * 2. authority
+ * 3. path
+ */
+const URI_REGEX = /^(?:([A-Za-z0-9+.-]+):)?(?:\/\/([^/]*)\/)?(.+)$/;
+function parseUri(uriString) {
+ const parsedUri = URI_REGEX.exec(uriString);
+ if (parsedUri === null) {
+ return null;
+ }
+ return {
+ scheme: parsedUri[1],
+ authority: parsedUri[2],
+ path: parsedUri[3],
+ };
+}
+exports.parseUri = parseUri;
+const NUMBER_REGEX = /^\d+$/;
+function splitHostPort(path) {
+ if (path.startsWith('[')) {
+ const hostEnd = path.indexOf(']');
+ if (hostEnd === -1) {
+ return null;
+ }
+ const host = path.substring(1, hostEnd);
+ /* Only an IPv6 address should be in bracketed notation, and an IPv6
+ * address should have at least one colon */
+ if (host.indexOf(':') === -1) {
+ return null;
+ }
+ if (path.length > hostEnd + 1) {
+ if (path[hostEnd + 1] === ':') {
+ const portString = path.substring(hostEnd + 2);
+ if (NUMBER_REGEX.test(portString)) {
+ return {
+ host: host,
+ port: +portString,
+ };
+ }
+ else {
+ return null;
+ }
+ }
+ else {
+ return null;
+ }
+ }
+ else {
+ return {
+ host,
+ };
+ }
+ }
+ else {
+ const splitPath = path.split(':');
+ /* Exactly one colon means that this is host:port. Zero colons means that
+ * there is no port. And multiple colons means that this is a bare IPv6
+ * address with no port */
+ if (splitPath.length === 2) {
+ if (NUMBER_REGEX.test(splitPath[1])) {
+ return {
+ host: splitPath[0],
+ port: +splitPath[1],
+ };
+ }
+ else {
+ return null;
+ }
+ }
+ else {
+ return {
+ host: path,
+ };
+ }
+ }
+}
+exports.splitHostPort = splitHostPort;
+function uriToString(uri) {
+ let result = '';
+ if (uri.scheme !== undefined) {
+ result += uri.scheme + ':';
+ }
+ if (uri.authority !== undefined) {
+ result += '//' + uri.authority + '/';
+ }
+ result += uri.path;
+ return result;
+}
+exports.uriToString = uriToString;
+//# sourceMappingURL=uri-parser.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js.map b/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js.map
new file mode 100644
index 0000000..884dbf1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/build/src/uri-parser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uri-parser.js","sourceRoot":"","sources":["../../src/uri-parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/package.json b/frontend-old/node_modules/@grpc/grpc-js/package.json
new file mode 100644
index 0000000..0473c21
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "@grpc/grpc-js",
+ "version": "1.9.15",
+ "description": "gRPC Library for Node - pure JS implementation",
+ "homepage": "https://grpc.io/",
+ "repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js",
+ "main": "build/src/index.js",
+ "engines": {
+ "node": "^8.13.0 || >=10.10.0"
+ },
+ "keywords": [],
+ "author": {
+ "name": "Google Inc."
+ },
+ "types": "build/src/index.d.ts",
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "@types/gulp": "^4.0.6",
+ "@types/gulp-mocha": "0.0.32",
+ "@types/lodash": "^4.14.186",
+ "@types/mocha": "^5.2.6",
+ "@types/ncp": "^2.0.1",
+ "@types/pify": "^3.0.2",
+ "@types/semver": "^7.3.9",
+ "@typescript-eslint/eslint-plugin": "^5.59.11",
+ "@typescript-eslint/parser": "^5.59.11",
+ "@typescript-eslint/typescript-estree": "^5.59.11",
+ "clang-format": "^1.0.55",
+ "eslint": "^8.42.0",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-prettier": "^4.2.1",
+ "execa": "^2.0.3",
+ "gulp": "^4.0.2",
+ "gulp-mocha": "^6.0.0",
+ "lodash": "^4.17.4",
+ "madge": "^5.0.1",
+ "mocha-jenkins-reporter": "^0.4.1",
+ "ncp": "^2.0.0",
+ "pify": "^4.0.1",
+ "prettier": "^2.8.8",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "ts-node": "^10.9.1",
+ "typescript": "^5.1.3"
+ },
+ "contributors": [
+ {
+ "name": "Google Inc."
+ }
+ ],
+ "scripts": {
+ "build": "npm run compile",
+ "clean": "rimraf ./build",
+ "compile": "tsc -p .",
+ "format": "clang-format -i -style=\"{Language: JavaScript, BasedOnStyle: Google, ColumnLimit: 80}\" src/*.ts test/*.ts",
+ "lint": "eslint src/*.ts test/*.ts",
+ "prepare": "npm run generate-types && npm run compile",
+ "test": "gulp test",
+ "check": "npm run lint",
+ "fix": "eslint --fix src/*.ts test/*.ts",
+ "pretest": "npm run generate-types && npm run generate-test-types && npm run compile",
+ "posttest": "npm run check && madge -c ./build/src",
+ "generate-types": "proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --includeDirs proto/ --include-dirs test/fixtures/ -O src/generated/ --grpcLib ../index channelz.proto",
+ "generate-test-types": "proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --include-dirs test/fixtures/ -O test/generated/ --grpcLib ../../src/index test_service.proto"
+ },
+ "dependencies": {
+ "@grpc/proto-loader": "^0.7.8",
+ "@types/node": ">=12.12.47"
+ },
+ "files": [
+ "src/**/*.ts",
+ "build/src/**/*.{js,d.ts,js.map}",
+ "proto/*.proto",
+ "LICENSE",
+ "deps/envoy-api/envoy/api/v2/**/*.proto",
+ "deps/envoy-api/envoy/config/**/*.proto",
+ "deps/envoy-api/envoy/service/**/*.proto",
+ "deps/envoy-api/envoy/type/**/*.proto",
+ "deps/udpa/udpa/**/*.proto",
+ "deps/googleapis/google/api/*.proto",
+ "deps/googleapis/google/rpc/*.proto",
+ "deps/protoc-gen-validate/validate/**/*.proto"
+ ]
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/proto/channelz.proto b/frontend-old/node_modules/@grpc/grpc-js/proto/channelz.proto
new file mode 100644
index 0000000..446e979
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/proto/channelz.proto
@@ -0,0 +1,564 @@
+// Copyright 2018 The gRPC Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file defines an interface for exporting monitoring information
+// out of gRPC servers. See the full design at
+// https://github.com/grpc/proposal/blob/master/A14-channelz.md
+//
+// The canonical version of this proto can be found at
+// https://github.com/grpc/grpc-proto/blob/master/grpc/channelz/v1/channelz.proto
+
+syntax = "proto3";
+
+package grpc.channelz.v1;
+
+import "google/protobuf/any.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/wrappers.proto";
+
+option go_package = "google.golang.org/grpc/channelz/grpc_channelz_v1";
+option java_multiple_files = true;
+option java_package = "io.grpc.channelz.v1";
+option java_outer_classname = "ChannelzProto";
+
+// Channel is a logical grouping of channels, subchannels, and sockets.
+message Channel {
+ // The identifier for this channel. This should bet set.
+ ChannelRef ref = 1;
+ // Data specific to this channel.
+ ChannelData data = 2;
+ // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+
+ // There are no ordering guarantees on the order of channel refs.
+ // There may not be cycles in the ref graph.
+ // A channel ref may be present in more than one channel or subchannel.
+ repeated ChannelRef channel_ref = 3;
+
+ // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ // There are no ordering guarantees on the order of subchannel refs.
+ // There may not be cycles in the ref graph.
+ // A sub channel ref may be present in more than one channel or subchannel.
+ repeated SubchannelRef subchannel_ref = 4;
+
+ // There are no ordering guarantees on the order of sockets.
+ repeated SocketRef socket_ref = 5;
+}
+
+// Subchannel is a logical grouping of channels, subchannels, and sockets.
+// A subchannel is load balanced over by it's ancestor
+message Subchannel {
+ // The identifier for this channel.
+ SubchannelRef ref = 1;
+ // Data specific to this channel.
+ ChannelData data = 2;
+ // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+
+ // There are no ordering guarantees on the order of channel refs.
+ // There may not be cycles in the ref graph.
+ // A channel ref may be present in more than one channel or subchannel.
+ repeated ChannelRef channel_ref = 3;
+
+ // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ // There are no ordering guarantees on the order of subchannel refs.
+ // There may not be cycles in the ref graph.
+ // A sub channel ref may be present in more than one channel or subchannel.
+ repeated SubchannelRef subchannel_ref = 4;
+
+ // There are no ordering guarantees on the order of sockets.
+ repeated SocketRef socket_ref = 5;
+}
+
+// These come from the specified states in this document:
+// https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
+message ChannelConnectivityState {
+ enum State {
+ UNKNOWN = 0;
+ IDLE = 1;
+ CONNECTING = 2;
+ READY = 3;
+ TRANSIENT_FAILURE = 4;
+ SHUTDOWN = 5;
+ }
+ State state = 1;
+}
+
+// Channel data is data related to a specific Channel or Subchannel.
+message ChannelData {
+ // The connectivity state of the channel or subchannel. Implementations
+ // should always set this.
+ ChannelConnectivityState state = 1;
+
+ // The target this channel originally tried to connect to. May be absent
+ string target = 2;
+
+ // A trace of recent events on the channel. May be absent.
+ ChannelTrace trace = 3;
+
+ // The number of calls started on the channel
+ int64 calls_started = 4;
+ // The number of calls that have completed with an OK status
+ int64 calls_succeeded = 5;
+ // The number of calls that have completed with a non-OK status
+ int64 calls_failed = 6;
+
+ // The last time a call was started on the channel.
+ google.protobuf.Timestamp last_call_started_timestamp = 7;
+}
+
+// A trace event is an interesting thing that happened to a channel or
+// subchannel, such as creation, address resolution, subchannel creation, etc.
+message ChannelTraceEvent {
+ // High level description of the event.
+ string description = 1;
+ // The supported severity levels of trace events.
+ enum Severity {
+ CT_UNKNOWN = 0;
+ CT_INFO = 1;
+ CT_WARNING = 2;
+ CT_ERROR = 3;
+ }
+ // the severity of the trace event
+ Severity severity = 2;
+ // When this event occurred.
+ google.protobuf.Timestamp timestamp = 3;
+ // ref of referenced channel or subchannel.
+ // Optional, only present if this event refers to a child object. For example,
+ // this field would be filled if this trace event was for a subchannel being
+ // created.
+ oneof child_ref {
+ ChannelRef channel_ref = 4;
+ SubchannelRef subchannel_ref = 5;
+ }
+}
+
+// ChannelTrace represents the recent events that have occurred on the channel.
+message ChannelTrace {
+ // Number of events ever logged in this tracing object. This can differ from
+ // events.size() because events can be overwritten or garbage collected by
+ // implementations.
+ int64 num_events_logged = 1;
+ // Time that this channel was created.
+ google.protobuf.Timestamp creation_timestamp = 2;
+ // List of events that have occurred on this channel.
+ repeated ChannelTraceEvent events = 3;
+}
+
+// ChannelRef is a reference to a Channel.
+message ChannelRef {
+ // The globally unique id for this channel. Must be a positive number.
+ int64 channel_id = 1;
+ // An optional name associated with the channel.
+ string name = 2;
+ // Intentionally don't use field numbers from other refs.
+ reserved 3, 4, 5, 6, 7, 8;
+}
+
+// SubchannelRef is a reference to a Subchannel.
+message SubchannelRef {
+ // The globally unique id for this subchannel. Must be a positive number.
+ int64 subchannel_id = 7;
+ // An optional name associated with the subchannel.
+ string name = 8;
+ // Intentionally don't use field numbers from other refs.
+ reserved 1, 2, 3, 4, 5, 6;
+}
+
+// SocketRef is a reference to a Socket.
+message SocketRef {
+ // The globally unique id for this socket. Must be a positive number.
+ int64 socket_id = 3;
+ // An optional name associated with the socket.
+ string name = 4;
+ // Intentionally don't use field numbers from other refs.
+ reserved 1, 2, 5, 6, 7, 8;
+}
+
+// ServerRef is a reference to a Server.
+message ServerRef {
+ // A globally unique identifier for this server. Must be a positive number.
+ int64 server_id = 5;
+ // An optional name associated with the server.
+ string name = 6;
+ // Intentionally don't use field numbers from other refs.
+ reserved 1, 2, 3, 4, 7, 8;
+}
+
+// Server represents a single server. There may be multiple servers in a single
+// program.
+message Server {
+ // The identifier for a Server. This should be set.
+ ServerRef ref = 1;
+ // The associated data of the Server.
+ ServerData data = 2;
+
+ // The sockets that the server is listening on. There are no ordering
+ // guarantees. This may be absent.
+ repeated SocketRef listen_socket = 3;
+}
+
+// ServerData is data for a specific Server.
+message ServerData {
+ // A trace of recent events on the server. May be absent.
+ ChannelTrace trace = 1;
+
+ // The number of incoming calls started on the server
+ int64 calls_started = 2;
+ // The number of incoming calls that have completed with an OK status
+ int64 calls_succeeded = 3;
+ // The number of incoming calls that have a completed with a non-OK status
+ int64 calls_failed = 4;
+
+ // The last time a call was started on the server.
+ google.protobuf.Timestamp last_call_started_timestamp = 5;
+}
+
+// Information about an actual connection. Pronounced "sock-ay".
+message Socket {
+ // The identifier for the Socket.
+ SocketRef ref = 1;
+
+ // Data specific to this Socket.
+ SocketData data = 2;
+ // The locally bound address.
+ Address local = 3;
+ // The remote bound address. May be absent.
+ Address remote = 4;
+ // Security details for this socket. May be absent if not available, or
+ // there is no security on the socket.
+ Security security = 5;
+
+ // Optional, represents the name of the remote endpoint, if different than
+ // the original target name.
+ string remote_name = 6;
+}
+
+// SocketData is data associated for a specific Socket. The fields present
+// are specific to the implementation, so there may be minor differences in
+// the semantics. (e.g. flow control windows)
+message SocketData {
+ // The number of streams that have been started.
+ int64 streams_started = 1;
+ // The number of streams that have ended successfully:
+ // On client side, received frame with eos bit set;
+ // On server side, sent frame with eos bit set.
+ int64 streams_succeeded = 2;
+ // The number of streams that have ended unsuccessfully:
+ // On client side, ended without receiving frame with eos bit set;
+ // On server side, ended without sending frame with eos bit set.
+ int64 streams_failed = 3;
+ // The number of grpc messages successfully sent on this socket.
+ int64 messages_sent = 4;
+ // The number of grpc messages received on this socket.
+ int64 messages_received = 5;
+
+ // The number of keep alives sent. This is typically implemented with HTTP/2
+ // ping messages.
+ int64 keep_alives_sent = 6;
+
+ // The last time a stream was created by this endpoint. Usually unset for
+ // servers.
+ google.protobuf.Timestamp last_local_stream_created_timestamp = 7;
+ // The last time a stream was created by the remote endpoint. Usually unset
+ // for clients.
+ google.protobuf.Timestamp last_remote_stream_created_timestamp = 8;
+
+ // The last time a message was sent by this endpoint.
+ google.protobuf.Timestamp last_message_sent_timestamp = 9;
+ // The last time a message was received by this endpoint.
+ google.protobuf.Timestamp last_message_received_timestamp = 10;
+
+ // The amount of window, granted to the local endpoint by the remote endpoint.
+ // This may be slightly out of date due to network latency. This does NOT
+ // include stream level or TCP level flow control info.
+ google.protobuf.Int64Value local_flow_control_window = 11;
+
+ // The amount of window, granted to the remote endpoint by the local endpoint.
+ // This may be slightly out of date due to network latency. This does NOT
+ // include stream level or TCP level flow control info.
+ google.protobuf.Int64Value remote_flow_control_window = 12;
+
+ // Socket options set on this socket. May be absent if 'summary' is set
+ // on GetSocketRequest.
+ repeated SocketOption option = 13;
+}
+
+// Address represents the address used to create the socket.
+message Address {
+ message TcpIpAddress {
+ // Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16
+ // bytes in length.
+ bytes ip_address = 1;
+ // 0-64k, or -1 if not appropriate.
+ int32 port = 2;
+ }
+ // A Unix Domain Socket address.
+ message UdsAddress {
+ string filename = 1;
+ }
+ // An address type not included above.
+ message OtherAddress {
+ // The human readable version of the value. This value should be set.
+ string name = 1;
+ // The actual address message.
+ google.protobuf.Any value = 2;
+ }
+
+ oneof address {
+ TcpIpAddress tcpip_address = 1;
+ UdsAddress uds_address = 2;
+ OtherAddress other_address = 3;
+ }
+}
+
+// Security represents details about how secure the socket is.
+message Security {
+ message Tls {
+ oneof cipher_suite {
+ // The cipher suite name in the RFC 4346 format:
+ // https://tools.ietf.org/html/rfc4346#appendix-C
+ string standard_name = 1;
+ // Some other way to describe the cipher suite if
+ // the RFC 4346 name is not available.
+ string other_name = 2;
+ }
+ // the certificate used by this endpoint.
+ bytes local_certificate = 3;
+ // the certificate used by the remote endpoint.
+ bytes remote_certificate = 4;
+ }
+ message OtherSecurity {
+ // The human readable version of the value.
+ string name = 1;
+ // The actual security details message.
+ google.protobuf.Any value = 2;
+ }
+ oneof model {
+ Tls tls = 1;
+ OtherSecurity other = 2;
+ }
+}
+
+// SocketOption represents socket options for a socket. Specifically, these
+// are the options returned by getsockopt().
+message SocketOption {
+ // The full name of the socket option. Typically this will be the upper case
+ // name, such as "SO_REUSEPORT".
+ string name = 1;
+ // The human readable value of this socket option. At least one of value or
+ // additional will be set.
+ string value = 2;
+ // Additional data associated with the socket option. At least one of value
+ // or additional will be set.
+ google.protobuf.Any additional = 3;
+}
+
+// For use with SocketOption's additional field. This is primarily used for
+// SO_RCVTIMEO and SO_SNDTIMEO
+message SocketOptionTimeout {
+ google.protobuf.Duration duration = 1;
+}
+
+// For use with SocketOption's additional field. This is primarily used for
+// SO_LINGER.
+message SocketOptionLinger {
+ // active maps to `struct linger.l_onoff`
+ bool active = 1;
+ // duration maps to `struct linger.l_linger`
+ google.protobuf.Duration duration = 2;
+}
+
+// For use with SocketOption's additional field. Tcp info for
+// SOL_TCP and TCP_INFO.
+message SocketOptionTcpInfo {
+ uint32 tcpi_state = 1;
+
+ uint32 tcpi_ca_state = 2;
+ uint32 tcpi_retransmits = 3;
+ uint32 tcpi_probes = 4;
+ uint32 tcpi_backoff = 5;
+ uint32 tcpi_options = 6;
+ uint32 tcpi_snd_wscale = 7;
+ uint32 tcpi_rcv_wscale = 8;
+
+ uint32 tcpi_rto = 9;
+ uint32 tcpi_ato = 10;
+ uint32 tcpi_snd_mss = 11;
+ uint32 tcpi_rcv_mss = 12;
+
+ uint32 tcpi_unacked = 13;
+ uint32 tcpi_sacked = 14;
+ uint32 tcpi_lost = 15;
+ uint32 tcpi_retrans = 16;
+ uint32 tcpi_fackets = 17;
+
+ uint32 tcpi_last_data_sent = 18;
+ uint32 tcpi_last_ack_sent = 19;
+ uint32 tcpi_last_data_recv = 20;
+ uint32 tcpi_last_ack_recv = 21;
+
+ uint32 tcpi_pmtu = 22;
+ uint32 tcpi_rcv_ssthresh = 23;
+ uint32 tcpi_rtt = 24;
+ uint32 tcpi_rttvar = 25;
+ uint32 tcpi_snd_ssthresh = 26;
+ uint32 tcpi_snd_cwnd = 27;
+ uint32 tcpi_advmss = 28;
+ uint32 tcpi_reordering = 29;
+}
+
+// Channelz is a service exposed by gRPC servers that provides detailed debug
+// information.
+service Channelz {
+ // Gets all root channels (i.e. channels the application has directly
+ // created). This does not include subchannels nor non-top level channels.
+ rpc GetTopChannels(GetTopChannelsRequest) returns (GetTopChannelsResponse);
+ // Gets all servers that exist in the process.
+ rpc GetServers(GetServersRequest) returns (GetServersResponse);
+ // Returns a single Server, or else a NOT_FOUND code.
+ rpc GetServer(GetServerRequest) returns (GetServerResponse);
+ // Gets all server sockets that exist in the process.
+ rpc GetServerSockets(GetServerSocketsRequest) returns (GetServerSocketsResponse);
+ // Returns a single Channel, or else a NOT_FOUND code.
+ rpc GetChannel(GetChannelRequest) returns (GetChannelResponse);
+ // Returns a single Subchannel, or else a NOT_FOUND code.
+ rpc GetSubchannel(GetSubchannelRequest) returns (GetSubchannelResponse);
+ // Returns a single Socket or else a NOT_FOUND code.
+ rpc GetSocket(GetSocketRequest) returns (GetSocketResponse);
+}
+
+message GetTopChannelsRequest {
+ // start_channel_id indicates that only channels at or above this id should be
+ // included in the results.
+ // To request the first page, this should be set to 0. To request
+ // subsequent pages, the client generates this value by adding 1 to
+ // the highest seen result ID.
+ int64 start_channel_id = 1;
+
+ // If non-zero, the server will return a page of results containing
+ // at most this many items. If zero, the server will choose a
+ // reasonable page size. Must never be negative.
+ int64 max_results = 2;
+}
+
+message GetTopChannelsResponse {
+ // list of channels that the connection detail service knows about. Sorted in
+ // ascending channel_id order.
+ // Must contain at least 1 result, otherwise 'end' must be true.
+ repeated Channel channel = 1;
+ // If set, indicates that the list of channels is the final list. Requesting
+ // more channels can only return more if they are created after this RPC
+ // completes.
+ bool end = 2;
+}
+
+message GetServersRequest {
+ // start_server_id indicates that only servers at or above this id should be
+ // included in the results.
+ // To request the first page, this must be set to 0. To request
+ // subsequent pages, the client generates this value by adding 1 to
+ // the highest seen result ID.
+ int64 start_server_id = 1;
+
+ // If non-zero, the server will return a page of results containing
+ // at most this many items. If zero, the server will choose a
+ // reasonable page size. Must never be negative.
+ int64 max_results = 2;
+}
+
+message GetServersResponse {
+ // list of servers that the connection detail service knows about. Sorted in
+ // ascending server_id order.
+ // Must contain at least 1 result, otherwise 'end' must be true.
+ repeated Server server = 1;
+ // If set, indicates that the list of servers is the final list. Requesting
+ // more servers will only return more if they are created after this RPC
+ // completes.
+ bool end = 2;
+}
+
+message GetServerRequest {
+ // server_id is the identifier of the specific server to get.
+ int64 server_id = 1;
+}
+
+message GetServerResponse {
+ // The Server that corresponds to the requested server_id. This field
+ // should be set.
+ Server server = 1;
+}
+
+message GetServerSocketsRequest {
+ int64 server_id = 1;
+ // start_socket_id indicates that only sockets at or above this id should be
+ // included in the results.
+ // To request the first page, this must be set to 0. To request
+ // subsequent pages, the client generates this value by adding 1 to
+ // the highest seen result ID.
+ int64 start_socket_id = 2;
+
+ // If non-zero, the server will return a page of results containing
+ // at most this many items. If zero, the server will choose a
+ // reasonable page size. Must never be negative.
+ int64 max_results = 3;
+}
+
+message GetServerSocketsResponse {
+ // list of socket refs that the connection detail service knows about. Sorted in
+ // ascending socket_id order.
+ // Must contain at least 1 result, otherwise 'end' must be true.
+ repeated SocketRef socket_ref = 1;
+ // If set, indicates that the list of sockets is the final list. Requesting
+ // more sockets will only return more if they are created after this RPC
+ // completes.
+ bool end = 2;
+}
+
+message GetChannelRequest {
+ // channel_id is the identifier of the specific channel to get.
+ int64 channel_id = 1;
+}
+
+message GetChannelResponse {
+ // The Channel that corresponds to the requested channel_id. This field
+ // should be set.
+ Channel channel = 1;
+}
+
+message GetSubchannelRequest {
+ // subchannel_id is the identifier of the specific subchannel to get.
+ int64 subchannel_id = 1;
+}
+
+message GetSubchannelResponse {
+ // The Subchannel that corresponds to the requested subchannel_id. This
+ // field should be set.
+ Subchannel subchannel = 1;
+}
+
+message GetSocketRequest {
+ // socket_id is the identifier of the specific socket to get.
+ int64 socket_id = 1;
+
+ // If true, the response will contain only high level information
+ // that is inexpensive to obtain. Fields thay may be omitted are
+ // documented.
+ bool summary = 2;
+}
+
+message GetSocketResponse {
+ // The Socket that corresponds to the requested socket_id. This field
+ // should be set.
+ Socket socket = 1;
+} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/admin.ts b/frontend-old/node_modules/@grpc/grpc-js/src/admin.ts
new file mode 100644
index 0000000..4d26b89
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/admin.ts
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ServiceDefinition } from './make-client';
+import { Server, UntypedServiceImplementation } from './server';
+
+interface GetServiceDefinition {
+ (): ServiceDefinition;
+}
+
+interface GetHandlers {
+ (): UntypedServiceImplementation;
+}
+
+const registeredAdminServices: {
+ getServiceDefinition: GetServiceDefinition;
+ getHandlers: GetHandlers;
+}[] = [];
+
+export function registerAdminService(
+ getServiceDefinition: GetServiceDefinition,
+ getHandlers: GetHandlers
+) {
+ registeredAdminServices.push({ getServiceDefinition, getHandlers });
+}
+
+export function addAdminServicesToServer(server: Server): void {
+ for (const { getServiceDefinition, getHandlers } of registeredAdminServices) {
+ server.addService(getServiceDefinition(), getHandlers());
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/backoff-timeout.ts b/frontend-old/node_modules/@grpc/grpc-js/src/backoff-timeout.ts
new file mode 100644
index 0000000..78318d1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/backoff-timeout.ts
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+const INITIAL_BACKOFF_MS = 1000;
+const BACKOFF_MULTIPLIER = 1.6;
+const MAX_BACKOFF_MS = 120000;
+const BACKOFF_JITTER = 0.2;
+
+/**
+ * Get a number uniformly at random in the range [min, max)
+ * @param min
+ * @param max
+ */
+function uniformRandom(min: number, max: number) {
+ return Math.random() * (max - min) + min;
+}
+
+export interface BackoffOptions {
+ initialDelay?: number;
+ multiplier?: number;
+ jitter?: number;
+ maxDelay?: number;
+}
+
+export class BackoffTimeout {
+ /**
+ * The delay time at the start, and after each reset.
+ */
+ private readonly initialDelay: number = INITIAL_BACKOFF_MS;
+ /**
+ * The exponential backoff multiplier.
+ */
+ private readonly multiplier: number = BACKOFF_MULTIPLIER;
+ /**
+ * The maximum delay time
+ */
+ private readonly maxDelay: number = MAX_BACKOFF_MS;
+ /**
+ * The maximum fraction by which the delay time can randomly vary after
+ * applying the multiplier.
+ */
+ private readonly jitter: number = BACKOFF_JITTER;
+ /**
+ * The delay time for the next time the timer runs.
+ */
+ private nextDelay: number;
+ /**
+ * The handle of the underlying timer. If running is false, this value refers
+ * to an object representing a timer that has ended, but it can still be
+ * interacted with without error.
+ */
+ private timerId: NodeJS.Timeout;
+ /**
+ * Indicates whether the timer is currently running.
+ */
+ private running = false;
+ /**
+ * Indicates whether the timer should keep the Node process running if no
+ * other async operation is doing so.
+ */
+ private hasRef = true;
+ /**
+ * The time that the currently running timer was started. Only valid if
+ * running is true.
+ */
+ private startTime: Date = new Date();
+ /**
+ * The approximate time that the currently running timer will end. Only valid
+ * if running is true.
+ */
+ private endTime: Date = new Date();
+
+ constructor(private callback: () => void, options?: BackoffOptions) {
+ if (options) {
+ if (options.initialDelay) {
+ this.initialDelay = options.initialDelay;
+ }
+ if (options.multiplier) {
+ this.multiplier = options.multiplier;
+ }
+ if (options.jitter) {
+ this.jitter = options.jitter;
+ }
+ if (options.maxDelay) {
+ this.maxDelay = options.maxDelay;
+ }
+ }
+ this.nextDelay = this.initialDelay;
+ this.timerId = setTimeout(() => {}, 0);
+ clearTimeout(this.timerId);
+ }
+
+ private runTimer(delay: number) {
+ this.endTime = this.startTime;
+ this.endTime.setMilliseconds(this.endTime.getMilliseconds() + this.nextDelay);
+ clearTimeout(this.timerId);
+ this.timerId = setTimeout(() => {
+ this.callback();
+ this.running = false;
+ }, delay);
+ if (!this.hasRef) {
+ this.timerId.unref?.();
+ }
+ }
+
+ /**
+ * Call the callback after the current amount of delay time
+ */
+ runOnce() {
+ this.running = true;
+ this.startTime = new Date();
+ this.runTimer(this.nextDelay);
+ const nextBackoff = Math.min(
+ this.nextDelay * this.multiplier,
+ this.maxDelay
+ );
+ const jitterMagnitude = nextBackoff * this.jitter;
+ this.nextDelay =
+ nextBackoff + uniformRandom(-jitterMagnitude, jitterMagnitude);
+ }
+
+ /**
+ * Stop the timer. The callback will not be called until `runOnce` is called
+ * again.
+ */
+ stop() {
+ clearTimeout(this.timerId);
+ this.running = false;
+ }
+
+ /**
+ * Reset the delay time to its initial value. If the timer is still running,
+ * retroactively apply that reset to the current timer.
+ */
+ reset() {
+ this.nextDelay = this.initialDelay;
+ if (this.running) {
+ const now = new Date();
+ const newEndTime = this.startTime;
+ newEndTime.setMilliseconds(newEndTime.getMilliseconds() + this.nextDelay);
+ clearTimeout(this.timerId);
+ if (now < newEndTime) {
+ this.runTimer(newEndTime.getTime() - now.getTime());
+ } else {
+ this.running = false;
+ }
+ }
+ }
+
+ /**
+ * Check whether the timer is currently running.
+ */
+ isRunning() {
+ return this.running;
+ }
+
+ /**
+ * Set that while the timer is running, it should keep the Node process
+ * running.
+ */
+ ref() {
+ this.hasRef = true;
+ this.timerId.ref?.();
+ }
+
+ /**
+ * Set that while the timer is running, it should not keep the Node process
+ * running.
+ */
+ unref() {
+ this.hasRef = false;
+ this.timerId.unref?.();
+ }
+
+ /**
+ * Get the approximate timestamp of when the timer will fire. Only valid if
+ * this.isRunning() is true.
+ */
+ getEndTime() {
+ return this.endTime;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/call-credentials.ts b/frontend-old/node_modules/@grpc/grpc-js/src/call-credentials.ts
new file mode 100644
index 0000000..b0013ee
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/call-credentials.ts
@@ -0,0 +1,226 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { Metadata } from './metadata';
+
+export interface CallMetadataOptions {
+ service_url: string;
+}
+
+export type CallMetadataGenerator = (
+ options: CallMetadataOptions,
+ cb: (err: Error | null, metadata?: Metadata) => void
+) => void;
+
+// google-auth-library pre-v2.0.0 does not have getRequestHeaders
+// but has getRequestMetadata, which is deprecated in v2.0.0
+export interface OldOAuth2Client {
+ getRequestMetadata: (
+ url: string,
+ callback: (
+ err: Error | null,
+ headers?: {
+ [index: string]: string;
+ }
+ ) => void
+ ) => void;
+}
+
+export interface CurrentOAuth2Client {
+ getRequestHeaders: (url?: string) => Promise<{ [index: string]: string }>;
+}
+
+export type OAuth2Client = OldOAuth2Client | CurrentOAuth2Client;
+
+function isCurrentOauth2Client(
+ client: OAuth2Client
+): client is CurrentOAuth2Client {
+ return (
+ 'getRequestHeaders' in client &&
+ typeof client.getRequestHeaders === 'function'
+ );
+}
+
+/**
+ * A class that represents a generic method of adding authentication-related
+ * metadata on a per-request basis.
+ */
+export abstract class CallCredentials {
+ /**
+ * Asynchronously generates a new Metadata object.
+ * @param options Options used in generating the Metadata object.
+ */
+ abstract generateMetadata(options: CallMetadataOptions): Promise<Metadata>;
+ /**
+ * Creates a new CallCredentials object from properties of both this and
+ * another CallCredentials object. This object's metadata generator will be
+ * called first.
+ * @param callCredentials The other CallCredentials object.
+ */
+ abstract compose(callCredentials: CallCredentials): CallCredentials;
+
+ /**
+ * Check whether two call credentials objects are equal. Separate
+ * SingleCallCredentials with identical metadata generator functions are
+ * equal.
+ * @param other The other CallCredentials object to compare with.
+ */
+ abstract _equals(other: CallCredentials): boolean;
+
+ /**
+ * Creates a new CallCredentials object from a given function that generates
+ * Metadata objects.
+ * @param metadataGenerator A function that accepts a set of options, and
+ * generates a Metadata object based on these options, which is passed back
+ * to the caller via a supplied (err, metadata) callback.
+ */
+ static createFromMetadataGenerator(
+ metadataGenerator: CallMetadataGenerator
+ ): CallCredentials {
+ return new SingleCallCredentials(metadataGenerator);
+ }
+
+ /**
+ * Create a gRPC credential from a Google credential object.
+ * @param googleCredentials The authentication client to use.
+ * @return The resulting CallCredentials object.
+ */
+ static createFromGoogleCredential(
+ googleCredentials: OAuth2Client
+ ): CallCredentials {
+ return CallCredentials.createFromMetadataGenerator((options, callback) => {
+ let getHeaders: Promise<{ [index: string]: string }>;
+ if (isCurrentOauth2Client(googleCredentials)) {
+ getHeaders = googleCredentials.getRequestHeaders(options.service_url);
+ } else {
+ getHeaders = new Promise((resolve, reject) => {
+ googleCredentials.getRequestMetadata(
+ options.service_url,
+ (err, headers) => {
+ if (err) {
+ reject(err);
+ return;
+ }
+ if (!headers) {
+ reject(new Error('Headers not set by metadata plugin'));
+ return;
+ }
+ resolve(headers);
+ }
+ );
+ });
+ }
+ getHeaders.then(
+ headers => {
+ const metadata = new Metadata();
+ for (const key of Object.keys(headers)) {
+ metadata.add(key, headers[key]);
+ }
+ callback(null, metadata);
+ },
+ err => {
+ callback(err);
+ }
+ );
+ });
+ }
+
+ static createEmpty(): CallCredentials {
+ return new EmptyCallCredentials();
+ }
+}
+
+class ComposedCallCredentials extends CallCredentials {
+ constructor(private creds: CallCredentials[]) {
+ super();
+ }
+
+ async generateMetadata(options: CallMetadataOptions): Promise<Metadata> {
+ const base: Metadata = new Metadata();
+ const generated: Metadata[] = await Promise.all(
+ this.creds.map(cred => cred.generateMetadata(options))
+ );
+ for (const gen of generated) {
+ base.merge(gen);
+ }
+ return base;
+ }
+
+ compose(other: CallCredentials): CallCredentials {
+ return new ComposedCallCredentials(this.creds.concat([other]));
+ }
+
+ _equals(other: CallCredentials): boolean {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof ComposedCallCredentials) {
+ return this.creds.every((value, index) =>
+ value._equals(other.creds[index])
+ );
+ } else {
+ return false;
+ }
+ }
+}
+
+class SingleCallCredentials extends CallCredentials {
+ constructor(private metadataGenerator: CallMetadataGenerator) {
+ super();
+ }
+
+ generateMetadata(options: CallMetadataOptions): Promise<Metadata> {
+ return new Promise<Metadata>((resolve, reject) => {
+ this.metadataGenerator(options, (err, metadata) => {
+ if (metadata !== undefined) {
+ resolve(metadata);
+ } else {
+ reject(err);
+ }
+ });
+ });
+ }
+
+ compose(other: CallCredentials): CallCredentials {
+ return new ComposedCallCredentials([this, other]);
+ }
+
+ _equals(other: CallCredentials): boolean {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof SingleCallCredentials) {
+ return this.metadataGenerator === other.metadataGenerator;
+ } else {
+ return false;
+ }
+ }
+}
+
+class EmptyCallCredentials extends CallCredentials {
+ generateMetadata(options: CallMetadataOptions): Promise<Metadata> {
+ return Promise.resolve(new Metadata());
+ }
+
+ compose(other: CallCredentials): CallCredentials {
+ return other;
+ }
+
+ _equals(other: CallCredentials): boolean {
+ return other instanceof EmptyCallCredentials;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/call-interface.ts b/frontend-old/node_modules/@grpc/grpc-js/src/call-interface.ts
new file mode 100644
index 0000000..15035ae
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/call-interface.ts
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { CallCredentials } from './call-credentials';
+import { Status } from './constants';
+import { Deadline } from './deadline';
+import { Metadata } from './metadata';
+import { ServerSurfaceCall } from './server-call';
+
+export interface CallStreamOptions {
+ deadline: Deadline;
+ flags: number;
+ host: string;
+ parentCall: ServerSurfaceCall | null;
+}
+
+export type PartialCallStreamOptions = Partial<CallStreamOptions>;
+
+export interface StatusObject {
+ code: Status;
+ details: string;
+ metadata: Metadata;
+}
+
+export type PartialStatusObject = Pick<StatusObject, 'code' | 'details'> & {
+ metadata: Metadata | null;
+};
+
+export const enum WriteFlags {
+ BufferHint = 1,
+ NoCompress = 2,
+ WriteThrough = 4,
+}
+
+export interface WriteObject {
+ message: Buffer;
+ flags?: number;
+}
+
+export interface MetadataListener {
+ (metadata: Metadata, next: (metadata: Metadata) => void): void;
+}
+
+export interface MessageListener {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ (message: any, next: (message: any) => void): void;
+}
+
+export interface StatusListener {
+ (status: StatusObject, next: (status: StatusObject) => void): void;
+}
+
+export interface FullListener {
+ onReceiveMetadata: MetadataListener;
+ onReceiveMessage: MessageListener;
+ onReceiveStatus: StatusListener;
+}
+
+export type Listener = Partial<FullListener>;
+
+/**
+ * An object with methods for handling the responses to a call.
+ */
+export interface InterceptingListener {
+ onReceiveMetadata(metadata: Metadata): void;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message: any): void;
+ onReceiveStatus(status: StatusObject): void;
+}
+
+export function isInterceptingListener(
+ listener: Listener | InterceptingListener
+): listener is InterceptingListener {
+ return (
+ listener.onReceiveMetadata !== undefined &&
+ listener.onReceiveMetadata.length === 1
+ );
+}
+
+export class InterceptingListenerImpl implements InterceptingListener {
+ private processingMetadata = false;
+ private hasPendingMessage = false;
+ private pendingMessage: any;
+ private processingMessage = false;
+ private pendingStatus: StatusObject | null = null;
+ constructor(
+ private listener: FullListener,
+ private nextListener: InterceptingListener
+ ) {}
+
+ private processPendingMessage() {
+ if (this.hasPendingMessage) {
+ this.nextListener.onReceiveMessage(this.pendingMessage);
+ this.pendingMessage = null;
+ this.hasPendingMessage = false;
+ }
+ }
+
+ private processPendingStatus() {
+ if (this.pendingStatus) {
+ this.nextListener.onReceiveStatus(this.pendingStatus);
+ }
+ }
+
+ onReceiveMetadata(metadata: Metadata): void {
+ this.processingMetadata = true;
+ this.listener.onReceiveMetadata(metadata, metadata => {
+ this.processingMetadata = false;
+ this.nextListener.onReceiveMetadata(metadata);
+ this.processPendingMessage();
+ this.processPendingStatus();
+ });
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message: any): void {
+ /* If this listener processes messages asynchronously, the last message may
+ * be reordered with respect to the status */
+ this.processingMessage = true;
+ this.listener.onReceiveMessage(message, msg => {
+ this.processingMessage = false;
+ if (this.processingMetadata) {
+ this.pendingMessage = msg;
+ this.hasPendingMessage = true;
+ } else {
+ this.nextListener.onReceiveMessage(msg);
+ this.processPendingStatus();
+ }
+ });
+ }
+ onReceiveStatus(status: StatusObject): void {
+ this.listener.onReceiveStatus(status, processedStatus => {
+ if (this.processingMetadata || this.processingMessage) {
+ this.pendingStatus = processedStatus;
+ } else {
+ this.nextListener.onReceiveStatus(processedStatus);
+ }
+ });
+ }
+}
+
+export interface WriteCallback {
+ (error?: Error | null): void;
+}
+
+export interface MessageContext {
+ callback?: WriteCallback;
+ flags?: number;
+}
+
+export interface Call {
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ start(metadata: Metadata, listener: InterceptingListener): void;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ startRead(): void;
+ halfClose(): void;
+ getCallNumber(): number;
+ setCredentials(credentials: CallCredentials): void;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/call-number.ts b/frontend-old/node_modules/@grpc/grpc-js/src/call-number.ts
new file mode 100644
index 0000000..8c37d3f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/call-number.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+let nextCallNumber = 0;
+
+export function getNextCallNumber() {
+ return nextCallNumber++;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/call.ts b/frontend-old/node_modules/@grpc/grpc-js/src/call.ts
new file mode 100644
index 0000000..a147c98
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/call.ts
@@ -0,0 +1,200 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { EventEmitter } from 'events';
+import { Duplex, Readable, Writable } from 'stream';
+
+import { StatusObject, MessageContext } from './call-interface';
+import { Status } from './constants';
+import { EmitterAugmentation1 } from './events';
+import { Metadata } from './metadata';
+import { ObjectReadable, ObjectWritable, WriteCallback } from './object-stream';
+import { InterceptingCallInterface } from './client-interceptors';
+
+/**
+ * A type extending the built-in Error object with additional fields.
+ */
+export type ServiceError = StatusObject & Error;
+
+/**
+ * A base type for all user-facing values returned by client-side method calls.
+ */
+export type SurfaceCall = {
+ call?: InterceptingCallInterface;
+ cancel(): void;
+ getPeer(): string;
+} & EmitterAugmentation1<'metadata', Metadata> &
+ EmitterAugmentation1<'status', StatusObject> &
+ EventEmitter;
+
+/**
+ * A type representing the return value of a unary method call.
+ */
+export type ClientUnaryCall = SurfaceCall;
+
+/**
+ * A type representing the return value of a server stream method call.
+ */
+export type ClientReadableStream<ResponseType> = {
+ deserialize: (chunk: Buffer) => ResponseType;
+} & SurfaceCall &
+ ObjectReadable<ResponseType>;
+
+/**
+ * A type representing the return value of a client stream method call.
+ */
+export type ClientWritableStream<RequestType> = {
+ serialize: (value: RequestType) => Buffer;
+} & SurfaceCall &
+ ObjectWritable<RequestType>;
+
+/**
+ * A type representing the return value of a bidirectional stream method call.
+ */
+export type ClientDuplexStream<RequestType, ResponseType> =
+ ClientWritableStream<RequestType> & ClientReadableStream<ResponseType>;
+
+/**
+ * Construct a ServiceError from a StatusObject. This function exists primarily
+ * as an attempt to make the error stack trace clearly communicate that the
+ * error is not necessarily a problem in gRPC itself.
+ * @param status
+ */
+export function callErrorFromStatus(
+ status: StatusObject,
+ callerStack: string
+): ServiceError {
+ const message = `${status.code} ${Status[status.code]}: ${status.details}`;
+ const error = new Error(message);
+ const stack = `${error.stack}\nfor call at\n${callerStack}`;
+ return Object.assign(new Error(message), status, { stack });
+}
+
+export class ClientUnaryCallImpl
+ extends EventEmitter
+ implements ClientUnaryCall
+{
+ public call?: InterceptingCallInterface;
+ constructor() {
+ super();
+ }
+
+ cancel(): void {
+ this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');
+ }
+
+ getPeer(): string {
+ return this.call?.getPeer() ?? 'unknown';
+ }
+}
+
+export class ClientReadableStreamImpl<ResponseType>
+ extends Readable
+ implements ClientReadableStream<ResponseType>
+{
+ public call?: InterceptingCallInterface;
+ constructor(readonly deserialize: (chunk: Buffer) => ResponseType) {
+ super({ objectMode: true });
+ }
+
+ cancel(): void {
+ this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');
+ }
+
+ getPeer(): string {
+ return this.call?.getPeer() ?? 'unknown';
+ }
+
+ _read(_size: number): void {
+ this.call?.startRead();
+ }
+}
+
+export class ClientWritableStreamImpl<RequestType>
+ extends Writable
+ implements ClientWritableStream<RequestType>
+{
+ public call?: InterceptingCallInterface;
+ constructor(readonly serialize: (value: RequestType) => Buffer) {
+ super({ objectMode: true });
+ }
+
+ cancel(): void {
+ this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');
+ }
+
+ getPeer(): string {
+ return this.call?.getPeer() ?? 'unknown';
+ }
+
+ _write(chunk: RequestType, encoding: string, cb: WriteCallback) {
+ const context: MessageContext = {
+ callback: cb,
+ };
+ const flags = Number(encoding);
+ if (!Number.isNaN(flags)) {
+ context.flags = flags;
+ }
+ this.call?.sendMessageWithContext(context, chunk);
+ }
+
+ _final(cb: Function) {
+ this.call?.halfClose();
+ cb();
+ }
+}
+
+export class ClientDuplexStreamImpl<RequestType, ResponseType>
+ extends Duplex
+ implements ClientDuplexStream<RequestType, ResponseType>
+{
+ public call?: InterceptingCallInterface;
+ constructor(
+ readonly serialize: (value: RequestType) => Buffer,
+ readonly deserialize: (chunk: Buffer) => ResponseType
+ ) {
+ super({ objectMode: true });
+ }
+
+ cancel(): void {
+ this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');
+ }
+
+ getPeer(): string {
+ return this.call?.getPeer() ?? 'unknown';
+ }
+
+ _read(_size: number): void {
+ this.call?.startRead();
+ }
+
+ _write(chunk: RequestType, encoding: string, cb: WriteCallback) {
+ const context: MessageContext = {
+ callback: cb,
+ };
+ const flags = Number(encoding);
+ if (!Number.isNaN(flags)) {
+ context.flags = flags;
+ }
+ this.call?.sendMessageWithContext(context, chunk);
+ }
+
+ _final(cb: Function) {
+ this.call?.halfClose();
+ cb();
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/channel-credentials.ts b/frontend-old/node_modules/@grpc/grpc-js/src/channel-credentials.ts
new file mode 100644
index 0000000..72b19d6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/channel-credentials.ts
@@ -0,0 +1,267 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {
+ ConnectionOptions,
+ createSecureContext,
+ PeerCertificate,
+ SecureContext,
+} from 'tls';
+
+import { CallCredentials } from './call-credentials';
+import { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers';
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function verifyIsBufferOrNull(obj: any, friendlyName: string): void {
+ if (obj && !(obj instanceof Buffer)) {
+ throw new TypeError(`${friendlyName}, if provided, must be a Buffer.`);
+ }
+}
+
+/**
+ * A callback that will receive the expected hostname and presented peer
+ * certificate as parameters. The callback should return an error to
+ * indicate that the presented certificate is considered invalid and
+ * otherwise returned undefined.
+ */
+export type CheckServerIdentityCallback = (
+ hostname: string,
+ cert: PeerCertificate
+) => Error | undefined;
+
+/**
+ * Additional peer verification options that can be set when creating
+ * SSL credentials.
+ */
+export interface VerifyOptions {
+ /**
+ * If set, this callback will be invoked after the usual hostname verification
+ * has been performed on the peer certificate.
+ */
+ checkServerIdentity?: CheckServerIdentityCallback;
+}
+
+/**
+ * A class that contains credentials for communicating over a channel, as well
+ * as a set of per-call credentials, which are applied to every method call made
+ * over a channel initialized with an instance of this class.
+ */
+export abstract class ChannelCredentials {
+ protected callCredentials: CallCredentials;
+
+ protected constructor(callCredentials?: CallCredentials) {
+ this.callCredentials = callCredentials || CallCredentials.createEmpty();
+ }
+ /**
+ * Returns a copy of this object with the included set of per-call credentials
+ * expanded to include callCredentials.
+ * @param callCredentials A CallCredentials object to associate with this
+ * instance.
+ */
+ abstract compose(callCredentials: CallCredentials): ChannelCredentials;
+
+ /**
+ * Gets the set of per-call credentials associated with this instance.
+ */
+ _getCallCredentials(): CallCredentials {
+ return this.callCredentials;
+ }
+
+ /**
+ * Gets a SecureContext object generated from input parameters if this
+ * instance was created with createSsl, or null if this instance was created
+ * with createInsecure.
+ */
+ abstract _getConnectionOptions(): ConnectionOptions | null;
+
+ /**
+ * Indicates whether this credentials object creates a secure channel.
+ */
+ abstract _isSecure(): boolean;
+
+ /**
+ * Check whether two channel credentials objects are equal. Two secure
+ * credentials are equal if they were constructed with the same parameters.
+ * @param other The other ChannelCredentials Object
+ */
+ abstract _equals(other: ChannelCredentials): boolean;
+
+ /**
+ * Return a new ChannelCredentials instance with a given set of credentials.
+ * The resulting instance can be used to construct a Channel that communicates
+ * over TLS.
+ * @param rootCerts The root certificate data.
+ * @param privateKey The client certificate private key, if available.
+ * @param certChain The client certificate key chain, if available.
+ * @param verifyOptions Additional options to modify certificate verification
+ */
+ static createSsl(
+ rootCerts?: Buffer | null,
+ privateKey?: Buffer | null,
+ certChain?: Buffer | null,
+ verifyOptions?: VerifyOptions
+ ): ChannelCredentials {
+ verifyIsBufferOrNull(rootCerts, 'Root certificate');
+ verifyIsBufferOrNull(privateKey, 'Private key');
+ verifyIsBufferOrNull(certChain, 'Certificate chain');
+ if (privateKey && !certChain) {
+ throw new Error(
+ 'Private key must be given with accompanying certificate chain'
+ );
+ }
+ if (!privateKey && certChain) {
+ throw new Error(
+ 'Certificate chain must be given with accompanying private key'
+ );
+ }
+ const secureContext = createSecureContext({
+ ca: rootCerts ?? getDefaultRootsData() ?? undefined,
+ key: privateKey ?? undefined,
+ cert: certChain ?? undefined,
+ ciphers: CIPHER_SUITES,
+ });
+ return new SecureChannelCredentialsImpl(secureContext, verifyOptions ?? {});
+ }
+
+ /**
+ * Return a new ChannelCredentials instance with credentials created using
+ * the provided secureContext. The resulting instances can be used to
+ * construct a Channel that communicates over TLS. gRPC will not override
+ * anything in the provided secureContext, so the environment variables
+ * GRPC_SSL_CIPHER_SUITES and GRPC_DEFAULT_SSL_ROOTS_FILE_PATH will
+ * not be applied.
+ * @param secureContext The return value of tls.createSecureContext()
+ * @param verifyOptions Additional options to modify certificate verification
+ */
+ static createFromSecureContext(
+ secureContext: SecureContext,
+ verifyOptions?: VerifyOptions
+ ): ChannelCredentials {
+ return new SecureChannelCredentialsImpl(secureContext, verifyOptions ?? {});
+ }
+
+ /**
+ * Return a new ChannelCredentials instance with no credentials.
+ */
+ static createInsecure(): ChannelCredentials {
+ return new InsecureChannelCredentialsImpl();
+ }
+}
+
+class InsecureChannelCredentialsImpl extends ChannelCredentials {
+ constructor(callCredentials?: CallCredentials) {
+ super(callCredentials);
+ }
+
+ compose(callCredentials: CallCredentials): never {
+ throw new Error('Cannot compose insecure credentials');
+ }
+
+ _getConnectionOptions(): ConnectionOptions | null {
+ return null;
+ }
+ _isSecure(): boolean {
+ return false;
+ }
+ _equals(other: ChannelCredentials): boolean {
+ return other instanceof InsecureChannelCredentialsImpl;
+ }
+}
+
+class SecureChannelCredentialsImpl extends ChannelCredentials {
+ connectionOptions: ConnectionOptions;
+
+ constructor(
+ private secureContext: SecureContext,
+ private verifyOptions: VerifyOptions
+ ) {
+ super();
+ this.connectionOptions = {
+ secureContext,
+ };
+ // Node asserts that this option is a function, so we cannot pass undefined
+ if (verifyOptions?.checkServerIdentity) {
+ this.connectionOptions.checkServerIdentity =
+ verifyOptions.checkServerIdentity;
+ }
+ }
+
+ compose(callCredentials: CallCredentials): ChannelCredentials {
+ const combinedCallCredentials =
+ this.callCredentials.compose(callCredentials);
+ return new ComposedChannelCredentialsImpl(this, combinedCallCredentials);
+ }
+
+ _getConnectionOptions(): ConnectionOptions | null {
+ // Copy to prevent callers from mutating this.connectionOptions
+ return { ...this.connectionOptions };
+ }
+ _isSecure(): boolean {
+ return true;
+ }
+ _equals(other: ChannelCredentials): boolean {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof SecureChannelCredentialsImpl) {
+ return (
+ this.secureContext === other.secureContext &&
+ this.verifyOptions.checkServerIdentity ===
+ other.verifyOptions.checkServerIdentity
+ );
+ } else {
+ return false;
+ }
+ }
+}
+
+class ComposedChannelCredentialsImpl extends ChannelCredentials {
+ constructor(
+ private channelCredentials: SecureChannelCredentialsImpl,
+ callCreds: CallCredentials
+ ) {
+ super(callCreds);
+ }
+ compose(callCredentials: CallCredentials) {
+ const combinedCallCredentials =
+ this.callCredentials.compose(callCredentials);
+ return new ComposedChannelCredentialsImpl(
+ this.channelCredentials,
+ combinedCallCredentials
+ );
+ }
+
+ _getConnectionOptions(): ConnectionOptions | null {
+ return this.channelCredentials._getConnectionOptions();
+ }
+ _isSecure(): boolean {
+ return true;
+ }
+ _equals(other: ChannelCredentials): boolean {
+ if (this === other) {
+ return true;
+ }
+ if (other instanceof ComposedChannelCredentialsImpl) {
+ return (
+ this.channelCredentials._equals(other.channelCredentials) &&
+ this.callCredentials._equals(other.callCredentials)
+ );
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/channel-options.ts b/frontend-old/node_modules/@grpc/grpc-js/src/channel-options.ts
new file mode 100644
index 0000000..f2bb8bc
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/channel-options.ts
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { CompressionAlgorithms } from './compression-algorithms';
+
+/**
+ * An interface that contains options used when initializing a Channel instance.
+ */
+export interface ChannelOptions {
+ 'grpc.ssl_target_name_override'?: string;
+ 'grpc.primary_user_agent'?: string;
+ 'grpc.secondary_user_agent'?: string;
+ 'grpc.default_authority'?: string;
+ 'grpc.keepalive_time_ms'?: number;
+ 'grpc.keepalive_timeout_ms'?: number;
+ 'grpc.keepalive_permit_without_calls'?: number;
+ 'grpc.service_config'?: string;
+ 'grpc.max_concurrent_streams'?: number;
+ 'grpc.initial_reconnect_backoff_ms'?: number;
+ 'grpc.max_reconnect_backoff_ms'?: number;
+ 'grpc.use_local_subchannel_pool'?: number;
+ 'grpc.max_send_message_length'?: number;
+ 'grpc.max_receive_message_length'?: number;
+ 'grpc.enable_http_proxy'?: number;
+ /* http_connect_target and http_connect_creds are used for passing data
+ * around internally, and should not be documented as public-facing options
+ */
+ 'grpc.http_connect_target'?: string;
+ 'grpc.http_connect_creds'?: string;
+ 'grpc.default_compression_algorithm'?: CompressionAlgorithms;
+ 'grpc.enable_channelz'?: number;
+ 'grpc.dns_min_time_between_resolutions_ms'?: number;
+ 'grpc.enable_retries'?: number;
+ 'grpc.per_rpc_retry_buffer_size'?: number;
+ /* This option is pattered like a core option, but the core does not have
+ * this option. It is closely related to the option
+ * grpc.per_rpc_retry_buffer_size, which is in the core. The core will likely
+ * implement this functionality using the ResourceQuota mechanism, so there
+ * will probably not be any collision or other inconsistency. */
+ 'grpc.retry_buffer_size'?: number;
+ 'grpc.max_connection_age_ms'?: number;
+ 'grpc.max_connection_age_grace_ms'?: number;
+ 'grpc-node.max_session_memory'?: number;
+ 'grpc.service_config_disable_resolution'?: number;
+ 'grpc.client_idle_timeout_ms'?: number;
+ /**
+ * Set the enableTrace option in TLS clients and servers
+ */
+ 'grpc-node.tls_enable_trace'?: number;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ [key: string]: any;
+}
+
+/**
+ * This is for checking provided options at runtime. This is an object for
+ * easier membership checking.
+ */
+export const recognizedOptions = {
+ 'grpc.ssl_target_name_override': true,
+ 'grpc.primary_user_agent': true,
+ 'grpc.secondary_user_agent': true,
+ 'grpc.default_authority': true,
+ 'grpc.keepalive_time_ms': true,
+ 'grpc.keepalive_timeout_ms': true,
+ 'grpc.keepalive_permit_without_calls': true,
+ 'grpc.service_config': true,
+ 'grpc.max_concurrent_streams': true,
+ 'grpc.initial_reconnect_backoff_ms': true,
+ 'grpc.max_reconnect_backoff_ms': true,
+ 'grpc.use_local_subchannel_pool': true,
+ 'grpc.max_send_message_length': true,
+ 'grpc.max_receive_message_length': true,
+ 'grpc.enable_http_proxy': true,
+ 'grpc.enable_channelz': true,
+ 'grpc.dns_min_time_between_resolutions_ms': true,
+ 'grpc.enable_retries': true,
+ 'grpc.per_rpc_retry_buffer_size': true,
+ 'grpc.retry_buffer_size': true,
+ 'grpc.max_connection_age_ms': true,
+ 'grpc.max_connection_age_grace_ms': true,
+ 'grpc-node.max_session_memory': true,
+ 'grpc.service_config_disable_resolution': true,
+ 'grpc.client_idle_timeout_ms': true,
+ 'grpc-node.tls_enable_trace': true,
+};
+
+export function channelOptionsEqual(
+ options1: ChannelOptions,
+ options2: ChannelOptions
+) {
+ const keys1 = Object.keys(options1).sort();
+ const keys2 = Object.keys(options2).sort();
+ if (keys1.length !== keys2.length) {
+ return false;
+ }
+ for (let i = 0; i < keys1.length; i += 1) {
+ if (keys1[i] !== keys2[i]) {
+ return false;
+ }
+ if (options1[keys1[i]] !== options2[keys2[i]]) {
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/channel.ts b/frontend-old/node_modules/@grpc/grpc-js/src/channel.ts
new file mode 100644
index 0000000..7ce5a15
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/channel.ts
@@ -0,0 +1,174 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { ServerSurfaceCall } from './server-call';
+
+import { ConnectivityState } from './connectivity-state';
+import { ChannelRef } from './channelz';
+import { Call } from './call-interface';
+import { InternalChannel } from './internal-channel';
+import { Deadline } from './deadline';
+
+/**
+ * An interface that represents a communication channel to a server specified
+ * by a given address.
+ */
+export interface Channel {
+ /**
+ * Close the channel. This has the same functionality as the existing
+ * grpc.Client.prototype.close
+ */
+ close(): void;
+ /**
+ * Return the target that this channel connects to
+ */
+ getTarget(): string;
+ /**
+ * Get the channel's current connectivity state. This method is here mainly
+ * because it is in the existing internal Channel class, and there isn't
+ * another good place to put it.
+ * @param tryToConnect If true, the channel will start connecting if it is
+ * idle. Otherwise, idle channels will only start connecting when a
+ * call starts.
+ */
+ getConnectivityState(tryToConnect: boolean): ConnectivityState;
+ /**
+ * Watch for connectivity state changes. This is also here mainly because
+ * it is in the existing external Channel class.
+ * @param currentState The state to watch for transitions from. This should
+ * always be populated by calling getConnectivityState immediately
+ * before.
+ * @param deadline A deadline for waiting for a state change
+ * @param callback Called with no error when a state change, or with an
+ * error if the deadline passes without a state change.
+ */
+ watchConnectivityState(
+ currentState: ConnectivityState,
+ deadline: Date | number,
+ callback: (error?: Error) => void
+ ): void;
+ /**
+ * Get the channelz reference object for this channel. A request to the
+ * channelz service for the id in this object will provide information
+ * about this channel.
+ */
+ getChannelzRef(): ChannelRef;
+ /**
+ * Create a call object. Call is an opaque type that is used by the Client
+ * class. This function is called by the gRPC library when starting a
+ * request. Implementers should return an instance of Call that is returned
+ * from calling createCall on an instance of the provided Channel class.
+ * @param method The full method string to request.
+ * @param deadline The call deadline
+ * @param host A host string override for making the request
+ * @param parentCall A server call to propagate some information from
+ * @param propagateFlags A bitwise combination of elements of grpc.propagate
+ * that indicates what information to propagate from parentCall.
+ */
+ createCall(
+ method: string,
+ deadline: Deadline,
+ host: string | null | undefined,
+ parentCall: ServerSurfaceCall | null,
+ propagateFlags: number | null | undefined
+ ): Call;
+}
+
+export class ChannelImplementation implements Channel {
+ private internalChannel: InternalChannel;
+
+ constructor(
+ target: string,
+ credentials: ChannelCredentials,
+ options: ChannelOptions
+ ) {
+ if (typeof target !== 'string') {
+ throw new TypeError('Channel target must be a string');
+ }
+ if (!(credentials instanceof ChannelCredentials)) {
+ throw new TypeError(
+ 'Channel credentials must be a ChannelCredentials object'
+ );
+ }
+ if (options) {
+ if (typeof options !== 'object') {
+ throw new TypeError('Channel options must be an object');
+ }
+ }
+
+ this.internalChannel = new InternalChannel(target, credentials, options);
+ }
+
+ close() {
+ this.internalChannel.close();
+ }
+
+ getTarget() {
+ return this.internalChannel.getTarget();
+ }
+
+ getConnectivityState(tryToConnect: boolean) {
+ return this.internalChannel.getConnectivityState(tryToConnect);
+ }
+
+ watchConnectivityState(
+ currentState: ConnectivityState,
+ deadline: Date | number,
+ callback: (error?: Error) => void
+ ): void {
+ this.internalChannel.watchConnectivityState(
+ currentState,
+ deadline,
+ callback
+ );
+ }
+
+ /**
+ * Get the channelz reference object for this channel. The returned value is
+ * garbage if channelz is disabled for this channel.
+ * @returns
+ */
+ getChannelzRef() {
+ return this.internalChannel.getChannelzRef();
+ }
+
+ createCall(
+ method: string,
+ deadline: Deadline,
+ host: string | null | undefined,
+ parentCall: ServerSurfaceCall | null,
+ propagateFlags: number | null | undefined
+ ): Call {
+ if (typeof method !== 'string') {
+ throw new TypeError('Channel#createCall: method must be a string');
+ }
+ if (!(typeof deadline === 'number' || deadline instanceof Date)) {
+ throw new TypeError(
+ 'Channel#createCall: deadline must be a number or Date'
+ );
+ }
+ return this.internalChannel.createCall(
+ method,
+ deadline,
+ host,
+ parentCall,
+ propagateFlags
+ );
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/channelz.ts b/frontend-old/node_modules/@grpc/grpc-js/src/channelz.ts
new file mode 100644
index 0000000..1e2627a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/channelz.ts
@@ -0,0 +1,886 @@
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { isIPv4, isIPv6 } from 'net';
+import { ConnectivityState } from './connectivity-state';
+import { Status } from './constants';
+import { Timestamp } from './generated/google/protobuf/Timestamp';
+import { Channel as ChannelMessage } from './generated/grpc/channelz/v1/Channel';
+import { ChannelConnectivityState__Output } from './generated/grpc/channelz/v1/ChannelConnectivityState';
+import { ChannelRef as ChannelRefMessage } from './generated/grpc/channelz/v1/ChannelRef';
+import { ChannelTrace } from './generated/grpc/channelz/v1/ChannelTrace';
+import { GetChannelRequest__Output } from './generated/grpc/channelz/v1/GetChannelRequest';
+import { GetChannelResponse } from './generated/grpc/channelz/v1/GetChannelResponse';
+import { sendUnaryData, ServerUnaryCall } from './server-call';
+import { ServerRef as ServerRefMessage } from './generated/grpc/channelz/v1/ServerRef';
+import { SocketRef as SocketRefMessage } from './generated/grpc/channelz/v1/SocketRef';
+import {
+ isTcpSubchannelAddress,
+ SubchannelAddress,
+} from './subchannel-address';
+import { SubchannelRef as SubchannelRefMessage } from './generated/grpc/channelz/v1/SubchannelRef';
+import { GetServerRequest__Output } from './generated/grpc/channelz/v1/GetServerRequest';
+import { GetServerResponse } from './generated/grpc/channelz/v1/GetServerResponse';
+import { Server as ServerMessage } from './generated/grpc/channelz/v1/Server';
+import { GetServersRequest__Output } from './generated/grpc/channelz/v1/GetServersRequest';
+import { GetServersResponse } from './generated/grpc/channelz/v1/GetServersResponse';
+import { GetTopChannelsRequest__Output } from './generated/grpc/channelz/v1/GetTopChannelsRequest';
+import { GetTopChannelsResponse } from './generated/grpc/channelz/v1/GetTopChannelsResponse';
+import { GetSubchannelRequest__Output } from './generated/grpc/channelz/v1/GetSubchannelRequest';
+import { GetSubchannelResponse } from './generated/grpc/channelz/v1/GetSubchannelResponse';
+import { Subchannel as SubchannelMessage } from './generated/grpc/channelz/v1/Subchannel';
+import { GetSocketRequest__Output } from './generated/grpc/channelz/v1/GetSocketRequest';
+import { GetSocketResponse } from './generated/grpc/channelz/v1/GetSocketResponse';
+import { Socket as SocketMessage } from './generated/grpc/channelz/v1/Socket';
+import { Address } from './generated/grpc/channelz/v1/Address';
+import { Security } from './generated/grpc/channelz/v1/Security';
+import { GetServerSocketsRequest__Output } from './generated/grpc/channelz/v1/GetServerSocketsRequest';
+import { GetServerSocketsResponse } from './generated/grpc/channelz/v1/GetServerSocketsResponse';
+import {
+ ChannelzDefinition,
+ ChannelzHandlers,
+} from './generated/grpc/channelz/v1/Channelz';
+import { ProtoGrpcType as ChannelzProtoGrpcType } from './generated/channelz';
+import type { loadSync } from '@grpc/proto-loader';
+import { registerAdminService } from './admin';
+import { loadPackageDefinition } from './make-client';
+
+export type TraceSeverity =
+ | 'CT_UNKNOWN'
+ | 'CT_INFO'
+ | 'CT_WARNING'
+ | 'CT_ERROR';
+
+export interface ChannelRef {
+ kind: 'channel';
+ id: number;
+ name: string;
+}
+
+export interface SubchannelRef {
+ kind: 'subchannel';
+ id: number;
+ name: string;
+}
+
+export interface ServerRef {
+ kind: 'server';
+ id: number;
+}
+
+export interface SocketRef {
+ kind: 'socket';
+ id: number;
+ name: string;
+}
+
+function channelRefToMessage(ref: ChannelRef): ChannelRefMessage {
+ return {
+ channel_id: ref.id,
+ name: ref.name,
+ };
+}
+
+function subchannelRefToMessage(ref: SubchannelRef): SubchannelRefMessage {
+ return {
+ subchannel_id: ref.id,
+ name: ref.name,
+ };
+}
+
+function serverRefToMessage(ref: ServerRef): ServerRefMessage {
+ return {
+ server_id: ref.id,
+ };
+}
+
+function socketRefToMessage(ref: SocketRef): SocketRefMessage {
+ return {
+ socket_id: ref.id,
+ name: ref.name,
+ };
+}
+
+interface TraceEvent {
+ description: string;
+ severity: TraceSeverity;
+ timestamp: Date;
+ childChannel?: ChannelRef;
+ childSubchannel?: SubchannelRef;
+}
+
+/**
+ * The loose upper bound on the number of events that should be retained in a
+ * trace. This may be exceeded by up to a factor of 2. Arbitrarily chosen as a
+ * number that should be large enough to contain the recent relevant
+ * information, but small enough to not use excessive memory.
+ */
+const TARGET_RETAINED_TRACES = 32;
+
+export class ChannelzTrace {
+ events: TraceEvent[] = [];
+ creationTimestamp: Date;
+ eventsLogged = 0;
+
+ constructor() {
+ this.creationTimestamp = new Date();
+ }
+
+ addTrace(
+ severity: TraceSeverity,
+ description: string,
+ child?: ChannelRef | SubchannelRef
+ ) {
+ const timestamp = new Date();
+ this.events.push({
+ description: description,
+ severity: severity,
+ timestamp: timestamp,
+ childChannel: child?.kind === 'channel' ? child : undefined,
+ childSubchannel: child?.kind === 'subchannel' ? child : undefined,
+ });
+ // Whenever the trace array gets too large, discard the first half
+ if (this.events.length >= TARGET_RETAINED_TRACES * 2) {
+ this.events = this.events.slice(TARGET_RETAINED_TRACES);
+ }
+ this.eventsLogged += 1;
+ }
+
+ getTraceMessage(): ChannelTrace {
+ return {
+ creation_timestamp: dateToProtoTimestamp(this.creationTimestamp),
+ num_events_logged: this.eventsLogged,
+ events: this.events.map(event => {
+ return {
+ description: event.description,
+ severity: event.severity,
+ timestamp: dateToProtoTimestamp(event.timestamp),
+ channel_ref: event.childChannel
+ ? channelRefToMessage(event.childChannel)
+ : null,
+ subchannel_ref: event.childSubchannel
+ ? subchannelRefToMessage(event.childSubchannel)
+ : null,
+ };
+ }),
+ };
+ }
+}
+
+export class ChannelzChildrenTracker {
+ private channelChildren: Map<number, { ref: ChannelRef; count: number }> =
+ new Map<number, { ref: ChannelRef; count: number }>();
+ private subchannelChildren: Map<
+ number,
+ { ref: SubchannelRef; count: number }
+ > = new Map<number, { ref: SubchannelRef; count: number }>();
+ private socketChildren: Map<number, { ref: SocketRef; count: number }> =
+ new Map<number, { ref: SocketRef; count: number }>();
+
+ refChild(child: ChannelRef | SubchannelRef | SocketRef) {
+ switch (child.kind) {
+ case 'channel': {
+ const trackedChild = this.channelChildren.get(child.id) ?? {
+ ref: child,
+ count: 0,
+ };
+ trackedChild.count += 1;
+ this.channelChildren.set(child.id, trackedChild);
+ break;
+ }
+ case 'subchannel': {
+ const trackedChild = this.subchannelChildren.get(child.id) ?? {
+ ref: child,
+ count: 0,
+ };
+ trackedChild.count += 1;
+ this.subchannelChildren.set(child.id, trackedChild);
+ break;
+ }
+ case 'socket': {
+ const trackedChild = this.socketChildren.get(child.id) ?? {
+ ref: child,
+ count: 0,
+ };
+ trackedChild.count += 1;
+ this.socketChildren.set(child.id, trackedChild);
+ break;
+ }
+ }
+ }
+
+ unrefChild(child: ChannelRef | SubchannelRef | SocketRef) {
+ switch (child.kind) {
+ case 'channel': {
+ const trackedChild = this.channelChildren.get(child.id);
+ if (trackedChild !== undefined) {
+ trackedChild.count -= 1;
+ if (trackedChild.count === 0) {
+ this.channelChildren.delete(child.id);
+ } else {
+ this.channelChildren.set(child.id, trackedChild);
+ }
+ }
+ break;
+ }
+ case 'subchannel': {
+ const trackedChild = this.subchannelChildren.get(child.id);
+ if (trackedChild !== undefined) {
+ trackedChild.count -= 1;
+ if (trackedChild.count === 0) {
+ this.subchannelChildren.delete(child.id);
+ } else {
+ this.subchannelChildren.set(child.id, trackedChild);
+ }
+ }
+ break;
+ }
+ case 'socket': {
+ const trackedChild = this.socketChildren.get(child.id);
+ if (trackedChild !== undefined) {
+ trackedChild.count -= 1;
+ if (trackedChild.count === 0) {
+ this.socketChildren.delete(child.id);
+ } else {
+ this.socketChildren.set(child.id, trackedChild);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ getChildLists(): ChannelzChildren {
+ const channels: ChannelRef[] = [];
+ for (const { ref } of this.channelChildren.values()) {
+ channels.push(ref);
+ }
+ const subchannels: SubchannelRef[] = [];
+ for (const { ref } of this.subchannelChildren.values()) {
+ subchannels.push(ref);
+ }
+ const sockets: SocketRef[] = [];
+ for (const { ref } of this.socketChildren.values()) {
+ sockets.push(ref);
+ }
+ return { channels, subchannels, sockets };
+ }
+}
+
+export class ChannelzCallTracker {
+ callsStarted = 0;
+ callsSucceeded = 0;
+ callsFailed = 0;
+ lastCallStartedTimestamp: Date | null = null;
+
+ addCallStarted() {
+ this.callsStarted += 1;
+ this.lastCallStartedTimestamp = new Date();
+ }
+ addCallSucceeded() {
+ this.callsSucceeded += 1;
+ }
+ addCallFailed() {
+ this.callsFailed += 1;
+ }
+}
+
+export interface ChannelzChildren {
+ channels: ChannelRef[];
+ subchannels: SubchannelRef[];
+ sockets: SocketRef[];
+}
+
+export interface ChannelInfo {
+ target: string;
+ state: ConnectivityState;
+ trace: ChannelzTrace;
+ callTracker: ChannelzCallTracker;
+ children: ChannelzChildren;
+}
+
+export type SubchannelInfo = ChannelInfo;
+
+export interface ServerInfo {
+ trace: ChannelzTrace;
+ callTracker: ChannelzCallTracker;
+ listenerChildren: ChannelzChildren;
+ sessionChildren: ChannelzChildren;
+}
+
+export interface TlsInfo {
+ cipherSuiteStandardName: string | null;
+ cipherSuiteOtherName: string | null;
+ localCertificate: Buffer | null;
+ remoteCertificate: Buffer | null;
+}
+
+export interface SocketInfo {
+ localAddress: SubchannelAddress | null;
+ remoteAddress: SubchannelAddress | null;
+ security: TlsInfo | null;
+ remoteName: string | null;
+ streamsStarted: number;
+ streamsSucceeded: number;
+ streamsFailed: number;
+ messagesSent: number;
+ messagesReceived: number;
+ keepAlivesSent: number;
+ lastLocalStreamCreatedTimestamp: Date | null;
+ lastRemoteStreamCreatedTimestamp: Date | null;
+ lastMessageSentTimestamp: Date | null;
+ lastMessageReceivedTimestamp: Date | null;
+ localFlowControlWindow: number | null;
+ remoteFlowControlWindow: number | null;
+}
+
+interface ChannelEntry {
+ ref: ChannelRef;
+ getInfo(): ChannelInfo;
+}
+
+interface SubchannelEntry {
+ ref: SubchannelRef;
+ getInfo(): SubchannelInfo;
+}
+
+interface ServerEntry {
+ ref: ServerRef;
+ getInfo(): ServerInfo;
+}
+
+interface SocketEntry {
+ ref: SocketRef;
+ getInfo(): SocketInfo;
+}
+
+let nextId = 1;
+
+function getNextId(): number {
+ return nextId++;
+}
+
+const channels: (ChannelEntry | undefined)[] = [];
+const subchannels: (SubchannelEntry | undefined)[] = [];
+const servers: (ServerEntry | undefined)[] = [];
+const sockets: (SocketEntry | undefined)[] = [];
+
+export function registerChannelzChannel(
+ name: string,
+ getInfo: () => ChannelInfo,
+ channelzEnabled: boolean
+): ChannelRef {
+ const id = getNextId();
+ const ref: ChannelRef = { id, name, kind: 'channel' };
+ if (channelzEnabled) {
+ channels[id] = { ref, getInfo };
+ }
+ return ref;
+}
+
+export function registerChannelzSubchannel(
+ name: string,
+ getInfo: () => SubchannelInfo,
+ channelzEnabled: boolean
+): SubchannelRef {
+ const id = getNextId();
+ const ref: SubchannelRef = { id, name, kind: 'subchannel' };
+ if (channelzEnabled) {
+ subchannels[id] = { ref, getInfo };
+ }
+ return ref;
+}
+
+export function registerChannelzServer(
+ getInfo: () => ServerInfo,
+ channelzEnabled: boolean
+): ServerRef {
+ const id = getNextId();
+ const ref: ServerRef = { id, kind: 'server' };
+ if (channelzEnabled) {
+ servers[id] = { ref, getInfo };
+ }
+ return ref;
+}
+
+export function registerChannelzSocket(
+ name: string,
+ getInfo: () => SocketInfo,
+ channelzEnabled: boolean
+): SocketRef {
+ const id = getNextId();
+ const ref: SocketRef = { id, name, kind: 'socket' };
+ if (channelzEnabled) {
+ sockets[id] = { ref, getInfo };
+ }
+ return ref;
+}
+
+export function unregisterChannelzRef(
+ ref: ChannelRef | SubchannelRef | ServerRef | SocketRef
+) {
+ switch (ref.kind) {
+ case 'channel':
+ delete channels[ref.id];
+ return;
+ case 'subchannel':
+ delete subchannels[ref.id];
+ return;
+ case 'server':
+ delete servers[ref.id];
+ return;
+ case 'socket':
+ delete sockets[ref.id];
+ return;
+ }
+}
+
+/**
+ * Parse a single section of an IPv6 address as two bytes
+ * @param addressSection A hexadecimal string of length up to 4
+ * @returns The pair of bytes representing this address section
+ */
+function parseIPv6Section(addressSection: string): [number, number] {
+ const numberValue = Number.parseInt(addressSection, 16);
+ return [(numberValue / 256) | 0, numberValue % 256];
+}
+
+/**
+ * Parse a chunk of an IPv6 address string to some number of bytes
+ * @param addressChunk Some number of segments of up to 4 hexadecimal
+ * characters each, joined by colons.
+ * @returns The list of bytes representing this address chunk
+ */
+function parseIPv6Chunk(addressChunk: string): number[] {
+ if (addressChunk === '') {
+ return [];
+ }
+ const bytePairs = addressChunk
+ .split(':')
+ .map(section => parseIPv6Section(section));
+ const result: number[] = [];
+ return result.concat(...bytePairs);
+}
+
+/**
+ * Converts an IPv4 or IPv6 address from string representation to binary
+ * representation
+ * @param ipAddress an IP address in standard IPv4 or IPv6 text format
+ * @returns
+ */
+function ipAddressStringToBuffer(ipAddress: string): Buffer | null {
+ if (isIPv4(ipAddress)) {
+ return Buffer.from(
+ Uint8Array.from(
+ ipAddress.split('.').map(segment => Number.parseInt(segment))
+ )
+ );
+ } else if (isIPv6(ipAddress)) {
+ let leftSection: string;
+ let rightSection: string;
+ const doubleColonIndex = ipAddress.indexOf('::');
+ if (doubleColonIndex === -1) {
+ leftSection = ipAddress;
+ rightSection = '';
+ } else {
+ leftSection = ipAddress.substring(0, doubleColonIndex);
+ rightSection = ipAddress.substring(doubleColonIndex + 2);
+ }
+ const leftBuffer = Buffer.from(parseIPv6Chunk(leftSection));
+ const rightBuffer = Buffer.from(parseIPv6Chunk(rightSection));
+ const middleBuffer = Buffer.alloc(
+ 16 - leftBuffer.length - rightBuffer.length,
+ 0
+ );
+ return Buffer.concat([leftBuffer, middleBuffer, rightBuffer]);
+ } else {
+ return null;
+ }
+}
+
+function connectivityStateToMessage(
+ state: ConnectivityState
+): ChannelConnectivityState__Output {
+ switch (state) {
+ case ConnectivityState.CONNECTING:
+ return {
+ state: 'CONNECTING',
+ };
+ case ConnectivityState.IDLE:
+ return {
+ state: 'IDLE',
+ };
+ case ConnectivityState.READY:
+ return {
+ state: 'READY',
+ };
+ case ConnectivityState.SHUTDOWN:
+ return {
+ state: 'SHUTDOWN',
+ };
+ case ConnectivityState.TRANSIENT_FAILURE:
+ return {
+ state: 'TRANSIENT_FAILURE',
+ };
+ default:
+ return {
+ state: 'UNKNOWN',
+ };
+ }
+}
+
+function dateToProtoTimestamp(date?: Date | null): Timestamp | null {
+ if (!date) {
+ return null;
+ }
+ const millisSinceEpoch = date.getTime();
+ return {
+ seconds: (millisSinceEpoch / 1000) | 0,
+ nanos: (millisSinceEpoch % 1000) * 1_000_000,
+ };
+}
+
+function getChannelMessage(channelEntry: ChannelEntry): ChannelMessage {
+ const resolvedInfo = channelEntry.getInfo();
+ return {
+ ref: channelRefToMessage(channelEntry.ref),
+ data: {
+ target: resolvedInfo.target,
+ state: connectivityStateToMessage(resolvedInfo.state),
+ calls_started: resolvedInfo.callTracker.callsStarted,
+ calls_succeeded: resolvedInfo.callTracker.callsSucceeded,
+ calls_failed: resolvedInfo.callTracker.callsFailed,
+ last_call_started_timestamp: dateToProtoTimestamp(
+ resolvedInfo.callTracker.lastCallStartedTimestamp
+ ),
+ trace: resolvedInfo.trace.getTraceMessage(),
+ },
+ channel_ref: resolvedInfo.children.channels.map(ref =>
+ channelRefToMessage(ref)
+ ),
+ subchannel_ref: resolvedInfo.children.subchannels.map(ref =>
+ subchannelRefToMessage(ref)
+ ),
+ };
+}
+
+function GetChannel(
+ call: ServerUnaryCall<GetChannelRequest__Output, GetChannelResponse>,
+ callback: sendUnaryData<GetChannelResponse>
+): void {
+ const channelId = Number.parseInt(call.request.channel_id);
+ const channelEntry = channels[channelId];
+ if (channelEntry === undefined) {
+ callback({
+ code: Status.NOT_FOUND,
+ details: 'No channel data found for id ' + channelId,
+ });
+ return;
+ }
+ callback(null, { channel: getChannelMessage(channelEntry) });
+}
+
+function GetTopChannels(
+ call: ServerUnaryCall<GetTopChannelsRequest__Output, GetTopChannelsResponse>,
+ callback: sendUnaryData<GetTopChannelsResponse>
+): void {
+ const maxResults = Number.parseInt(call.request.max_results);
+ const resultList: ChannelMessage[] = [];
+ let i = Number.parseInt(call.request.start_channel_id);
+ for (; i < channels.length; i++) {
+ const channelEntry = channels[i];
+ if (channelEntry === undefined) {
+ continue;
+ }
+ resultList.push(getChannelMessage(channelEntry));
+ if (resultList.length >= maxResults) {
+ break;
+ }
+ }
+ callback(null, {
+ channel: resultList,
+ end: i >= servers.length,
+ });
+}
+
+function getServerMessage(serverEntry: ServerEntry): ServerMessage {
+ const resolvedInfo = serverEntry.getInfo();
+ return {
+ ref: serverRefToMessage(serverEntry.ref),
+ data: {
+ calls_started: resolvedInfo.callTracker.callsStarted,
+ calls_succeeded: resolvedInfo.callTracker.callsSucceeded,
+ calls_failed: resolvedInfo.callTracker.callsFailed,
+ last_call_started_timestamp: dateToProtoTimestamp(
+ resolvedInfo.callTracker.lastCallStartedTimestamp
+ ),
+ trace: resolvedInfo.trace.getTraceMessage(),
+ },
+ listen_socket: resolvedInfo.listenerChildren.sockets.map(ref =>
+ socketRefToMessage(ref)
+ ),
+ };
+}
+
+function GetServer(
+ call: ServerUnaryCall<GetServerRequest__Output, GetServerResponse>,
+ callback: sendUnaryData<GetServerResponse>
+): void {
+ const serverId = Number.parseInt(call.request.server_id);
+ const serverEntry = servers[serverId];
+ if (serverEntry === undefined) {
+ callback({
+ code: Status.NOT_FOUND,
+ details: 'No server data found for id ' + serverId,
+ });
+ return;
+ }
+ callback(null, { server: getServerMessage(serverEntry) });
+}
+
+function GetServers(
+ call: ServerUnaryCall<GetServersRequest__Output, GetServersResponse>,
+ callback: sendUnaryData<GetServersResponse>
+): void {
+ const maxResults = Number.parseInt(call.request.max_results);
+ const resultList: ServerMessage[] = [];
+ let i = Number.parseInt(call.request.start_server_id);
+ for (; i < servers.length; i++) {
+ const serverEntry = servers[i];
+ if (serverEntry === undefined) {
+ continue;
+ }
+ resultList.push(getServerMessage(serverEntry));
+ if (resultList.length >= maxResults) {
+ break;
+ }
+ }
+ callback(null, {
+ server: resultList,
+ end: i >= servers.length,
+ });
+}
+
+function GetSubchannel(
+ call: ServerUnaryCall<GetSubchannelRequest__Output, GetSubchannelResponse>,
+ callback: sendUnaryData<GetSubchannelResponse>
+): void {
+ const subchannelId = Number.parseInt(call.request.subchannel_id);
+ const subchannelEntry = subchannels[subchannelId];
+ if (subchannelEntry === undefined) {
+ callback({
+ code: Status.NOT_FOUND,
+ details: 'No subchannel data found for id ' + subchannelId,
+ });
+ return;
+ }
+ const resolvedInfo = subchannelEntry.getInfo();
+ const subchannelMessage: SubchannelMessage = {
+ ref: subchannelRefToMessage(subchannelEntry.ref),
+ data: {
+ target: resolvedInfo.target,
+ state: connectivityStateToMessage(resolvedInfo.state),
+ calls_started: resolvedInfo.callTracker.callsStarted,
+ calls_succeeded: resolvedInfo.callTracker.callsSucceeded,
+ calls_failed: resolvedInfo.callTracker.callsFailed,
+ last_call_started_timestamp: dateToProtoTimestamp(
+ resolvedInfo.callTracker.lastCallStartedTimestamp
+ ),
+ trace: resolvedInfo.trace.getTraceMessage(),
+ },
+ socket_ref: resolvedInfo.children.sockets.map(ref =>
+ socketRefToMessage(ref)
+ ),
+ };
+ callback(null, { subchannel: subchannelMessage });
+}
+
+function subchannelAddressToAddressMessage(
+ subchannelAddress: SubchannelAddress
+): Address {
+ if (isTcpSubchannelAddress(subchannelAddress)) {
+ return {
+ address: 'tcpip_address',
+ tcpip_address: {
+ ip_address:
+ ipAddressStringToBuffer(subchannelAddress.host) ?? undefined,
+ port: subchannelAddress.port,
+ },
+ };
+ } else {
+ return {
+ address: 'uds_address',
+ uds_address: {
+ filename: subchannelAddress.path,
+ },
+ };
+ }
+}
+
+function GetSocket(
+ call: ServerUnaryCall<GetSocketRequest__Output, GetSocketResponse>,
+ callback: sendUnaryData<GetSocketResponse>
+): void {
+ const socketId = Number.parseInt(call.request.socket_id);
+ const socketEntry = sockets[socketId];
+ if (socketEntry === undefined) {
+ callback({
+ code: Status.NOT_FOUND,
+ details: 'No socket data found for id ' + socketId,
+ });
+ return;
+ }
+ const resolvedInfo = socketEntry.getInfo();
+ const securityMessage: Security | null = resolvedInfo.security
+ ? {
+ model: 'tls',
+ tls: {
+ cipher_suite: resolvedInfo.security.cipherSuiteStandardName
+ ? 'standard_name'
+ : 'other_name',
+ standard_name:
+ resolvedInfo.security.cipherSuiteStandardName ?? undefined,
+ other_name: resolvedInfo.security.cipherSuiteOtherName ?? undefined,
+ local_certificate:
+ resolvedInfo.security.localCertificate ?? undefined,
+ remote_certificate:
+ resolvedInfo.security.remoteCertificate ?? undefined,
+ },
+ }
+ : null;
+ const socketMessage: SocketMessage = {
+ ref: socketRefToMessage(socketEntry.ref),
+ local: resolvedInfo.localAddress
+ ? subchannelAddressToAddressMessage(resolvedInfo.localAddress)
+ : null,
+ remote: resolvedInfo.remoteAddress
+ ? subchannelAddressToAddressMessage(resolvedInfo.remoteAddress)
+ : null,
+ remote_name: resolvedInfo.remoteName ?? undefined,
+ security: securityMessage,
+ data: {
+ keep_alives_sent: resolvedInfo.keepAlivesSent,
+ streams_started: resolvedInfo.streamsStarted,
+ streams_succeeded: resolvedInfo.streamsSucceeded,
+ streams_failed: resolvedInfo.streamsFailed,
+ last_local_stream_created_timestamp: dateToProtoTimestamp(
+ resolvedInfo.lastLocalStreamCreatedTimestamp
+ ),
+ last_remote_stream_created_timestamp: dateToProtoTimestamp(
+ resolvedInfo.lastRemoteStreamCreatedTimestamp
+ ),
+ messages_received: resolvedInfo.messagesReceived,
+ messages_sent: resolvedInfo.messagesSent,
+ last_message_received_timestamp: dateToProtoTimestamp(
+ resolvedInfo.lastMessageReceivedTimestamp
+ ),
+ last_message_sent_timestamp: dateToProtoTimestamp(
+ resolvedInfo.lastMessageSentTimestamp
+ ),
+ local_flow_control_window: resolvedInfo.localFlowControlWindow
+ ? { value: resolvedInfo.localFlowControlWindow }
+ : null,
+ remote_flow_control_window: resolvedInfo.remoteFlowControlWindow
+ ? { value: resolvedInfo.remoteFlowControlWindow }
+ : null,
+ },
+ };
+ callback(null, { socket: socketMessage });
+}
+
+function GetServerSockets(
+ call: ServerUnaryCall<
+ GetServerSocketsRequest__Output,
+ GetServerSocketsResponse
+ >,
+ callback: sendUnaryData<GetServerSocketsResponse>
+): void {
+ const serverId = Number.parseInt(call.request.server_id);
+ const serverEntry = servers[serverId];
+ if (serverEntry === undefined) {
+ callback({
+ code: Status.NOT_FOUND,
+ details: 'No server data found for id ' + serverId,
+ });
+ return;
+ }
+ const startId = Number.parseInt(call.request.start_socket_id);
+ const maxResults = Number.parseInt(call.request.max_results);
+ const resolvedInfo = serverEntry.getInfo();
+ // If we wanted to include listener sockets in the result, this line would
+ // instead say
+ // const allSockets = resolvedInfo.listenerChildren.sockets.concat(resolvedInfo.sessionChildren.sockets).sort((ref1, ref2) => ref1.id - ref2.id);
+ const allSockets = resolvedInfo.sessionChildren.sockets.sort(
+ (ref1, ref2) => ref1.id - ref2.id
+ );
+ const resultList: SocketRefMessage[] = [];
+ let i = 0;
+ for (; i < allSockets.length; i++) {
+ if (allSockets[i].id >= startId) {
+ resultList.push(socketRefToMessage(allSockets[i]));
+ if (resultList.length >= maxResults) {
+ break;
+ }
+ }
+ }
+ callback(null, {
+ socket_ref: resultList,
+ end: i >= allSockets.length,
+ });
+}
+
+export function getChannelzHandlers(): ChannelzHandlers {
+ return {
+ GetChannel,
+ GetTopChannels,
+ GetServer,
+ GetServers,
+ GetSubchannel,
+ GetSocket,
+ GetServerSockets,
+ };
+}
+
+let loadedChannelzDefinition: ChannelzDefinition | null = null;
+
+export function getChannelzServiceDefinition(): ChannelzDefinition {
+ if (loadedChannelzDefinition) {
+ return loadedChannelzDefinition;
+ }
+ /* The purpose of this complexity is to avoid loading @grpc/proto-loader at
+ * runtime for users who will not use/enable channelz. */
+ const loaderLoadSync = require('@grpc/proto-loader')
+ .loadSync as typeof loadSync;
+ const loadedProto = loaderLoadSync('channelz.proto', {
+ keepCase: true,
+ longs: String,
+ enums: String,
+ defaults: true,
+ oneofs: true,
+ includeDirs: [`${__dirname}/../../proto`],
+ });
+ const channelzGrpcObject = loadPackageDefinition(
+ loadedProto
+ ) as unknown as ChannelzProtoGrpcType;
+ loadedChannelzDefinition =
+ channelzGrpcObject.grpc.channelz.v1.Channelz.service;
+ return loadedChannelzDefinition;
+}
+
+export function setup() {
+ registerAdminService(getChannelzServiceDefinition, getChannelzHandlers);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/client-interceptors.ts b/frontend-old/node_modules/@grpc/grpc-js/src/client-interceptors.ts
new file mode 100644
index 0000000..4f53d17
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/client-interceptors.ts
@@ -0,0 +1,577 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { Metadata } from './metadata';
+import {
+ StatusObject,
+ Listener,
+ MetadataListener,
+ MessageListener,
+ StatusListener,
+ FullListener,
+ InterceptingListener,
+ InterceptingListenerImpl,
+ isInterceptingListener,
+ MessageContext,
+ Call,
+} from './call-interface';
+import { Status } from './constants';
+import { Channel } from './channel';
+import { CallOptions } from './client';
+import { ClientMethodDefinition } from './make-client';
+import { getErrorMessage } from './error';
+
+/**
+ * Error class associated with passing both interceptors and interceptor
+ * providers to a client constructor or as call options.
+ */
+export class InterceptorConfigurationError extends Error {
+ constructor(message: string) {
+ super(message);
+ this.name = 'InterceptorConfigurationError';
+ Error.captureStackTrace(this, InterceptorConfigurationError);
+ }
+}
+
+export interface MetadataRequester {
+ (
+ metadata: Metadata,
+ listener: InterceptingListener,
+ next: (
+ metadata: Metadata,
+ listener: InterceptingListener | Listener
+ ) => void
+ ): void;
+}
+
+export interface MessageRequester {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ (message: any, next: (message: any) => void): void;
+}
+
+export interface CloseRequester {
+ (next: () => void): void;
+}
+
+export interface CancelRequester {
+ (next: () => void): void;
+}
+
+/**
+ * An object with methods for intercepting and modifying outgoing call operations.
+ */
+export interface FullRequester {
+ start: MetadataRequester;
+ sendMessage: MessageRequester;
+ halfClose: CloseRequester;
+ cancel: CancelRequester;
+}
+
+export type Requester = Partial<FullRequester>;
+
+export class ListenerBuilder {
+ private metadata: MetadataListener | undefined = undefined;
+ private message: MessageListener | undefined = undefined;
+ private status: StatusListener | undefined = undefined;
+
+ withOnReceiveMetadata(onReceiveMetadata: MetadataListener): this {
+ this.metadata = onReceiveMetadata;
+ return this;
+ }
+
+ withOnReceiveMessage(onReceiveMessage: MessageListener): this {
+ this.message = onReceiveMessage;
+ return this;
+ }
+
+ withOnReceiveStatus(onReceiveStatus: StatusListener): this {
+ this.status = onReceiveStatus;
+ return this;
+ }
+
+ build(): Listener {
+ return {
+ onReceiveMetadata: this.metadata,
+ onReceiveMessage: this.message,
+ onReceiveStatus: this.status,
+ };
+ }
+}
+
+export class RequesterBuilder {
+ private start: MetadataRequester | undefined = undefined;
+ private message: MessageRequester | undefined = undefined;
+ private halfClose: CloseRequester | undefined = undefined;
+ private cancel: CancelRequester | undefined = undefined;
+
+ withStart(start: MetadataRequester): this {
+ this.start = start;
+ return this;
+ }
+
+ withSendMessage(sendMessage: MessageRequester): this {
+ this.message = sendMessage;
+ return this;
+ }
+
+ withHalfClose(halfClose: CloseRequester): this {
+ this.halfClose = halfClose;
+ return this;
+ }
+
+ withCancel(cancel: CancelRequester): this {
+ this.cancel = cancel;
+ return this;
+ }
+
+ build(): Requester {
+ return {
+ start: this.start,
+ sendMessage: this.message,
+ halfClose: this.halfClose,
+ cancel: this.cancel,
+ };
+ }
+}
+
+/**
+ * A Listener with a default pass-through implementation of each method. Used
+ * for filling out Listeners with some methods omitted.
+ */
+const defaultListener: FullListener = {
+ onReceiveMetadata: (metadata, next) => {
+ next(metadata);
+ },
+ onReceiveMessage: (message, next) => {
+ next(message);
+ },
+ onReceiveStatus: (status, next) => {
+ next(status);
+ },
+};
+
+/**
+ * A Requester with a default pass-through implementation of each method. Used
+ * for filling out Requesters with some methods omitted.
+ */
+const defaultRequester: FullRequester = {
+ start: (metadata, listener, next) => {
+ next(metadata, listener);
+ },
+ sendMessage: (message, next) => {
+ next(message);
+ },
+ halfClose: next => {
+ next();
+ },
+ cancel: next => {
+ next();
+ },
+};
+
+export interface InterceptorOptions extends CallOptions {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ method_definition: ClientMethodDefinition<any, any>;
+}
+
+export interface InterceptingCallInterface {
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ start(metadata: Metadata, listener?: Partial<InterceptingListener>): void;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessageWithContext(context: MessageContext, message: any): void;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessage(message: any): void;
+ startRead(): void;
+ halfClose(): void;
+}
+
+export class InterceptingCall implements InterceptingCallInterface {
+ /**
+ * The requester that this InterceptingCall uses to modify outgoing operations
+ */
+ private requester: FullRequester;
+ /**
+ * Indicates that metadata has been passed to the requester's start
+ * method but it has not been passed to the corresponding next callback
+ */
+ private processingMetadata = false;
+ /**
+ * Message context for a pending message that is waiting for
+ */
+ private pendingMessageContext: MessageContext | null = null;
+ private pendingMessage: any;
+ /**
+ * Indicates that a message has been passed to the requester's sendMessage
+ * method but it has not been passed to the corresponding next callback
+ */
+ private processingMessage = false;
+ /**
+ * Indicates that a status was received but could not be propagated because
+ * a message was still being processed.
+ */
+ private pendingHalfClose = false;
+ constructor(
+ private nextCall: InterceptingCallInterface,
+ requester?: Requester
+ ) {
+ if (requester) {
+ this.requester = {
+ start: requester.start ?? defaultRequester.start,
+ sendMessage: requester.sendMessage ?? defaultRequester.sendMessage,
+ halfClose: requester.halfClose ?? defaultRequester.halfClose,
+ cancel: requester.cancel ?? defaultRequester.cancel,
+ };
+ } else {
+ this.requester = defaultRequester;
+ }
+ }
+
+ cancelWithStatus(status: Status, details: string) {
+ this.requester.cancel(() => {
+ this.nextCall.cancelWithStatus(status, details);
+ });
+ }
+
+ getPeer() {
+ return this.nextCall.getPeer();
+ }
+
+ private processPendingMessage() {
+ if (this.pendingMessageContext) {
+ this.nextCall.sendMessageWithContext(
+ this.pendingMessageContext,
+ this.pendingMessage
+ );
+ this.pendingMessageContext = null;
+ this.pendingMessage = null;
+ }
+ }
+
+ private processPendingHalfClose() {
+ if (this.pendingHalfClose) {
+ this.nextCall.halfClose();
+ }
+ }
+
+ start(
+ metadata: Metadata,
+ interceptingListener?: Partial<InterceptingListener>
+ ): void {
+ const fullInterceptingListener: InterceptingListener = {
+ onReceiveMetadata:
+ interceptingListener?.onReceiveMetadata?.bind(interceptingListener) ??
+ (metadata => {}),
+ onReceiveMessage:
+ interceptingListener?.onReceiveMessage?.bind(interceptingListener) ??
+ (message => {}),
+ onReceiveStatus:
+ interceptingListener?.onReceiveStatus?.bind(interceptingListener) ??
+ (status => {}),
+ };
+ this.processingMetadata = true;
+ this.requester.start(metadata, fullInterceptingListener, (md, listener) => {
+ this.processingMetadata = false;
+ let finalInterceptingListener: InterceptingListener;
+ if (isInterceptingListener(listener)) {
+ finalInterceptingListener = listener;
+ } else {
+ const fullListener: FullListener = {
+ onReceiveMetadata:
+ listener.onReceiveMetadata ?? defaultListener.onReceiveMetadata,
+ onReceiveMessage:
+ listener.onReceiveMessage ?? defaultListener.onReceiveMessage,
+ onReceiveStatus:
+ listener.onReceiveStatus ?? defaultListener.onReceiveStatus,
+ };
+ finalInterceptingListener = new InterceptingListenerImpl(
+ fullListener,
+ fullInterceptingListener
+ );
+ }
+ this.nextCall.start(md, finalInterceptingListener);
+ this.processPendingMessage();
+ this.processPendingHalfClose();
+ });
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessageWithContext(context: MessageContext, message: any): void {
+ this.processingMessage = true;
+ this.requester.sendMessage(message, finalMessage => {
+ this.processingMessage = false;
+ if (this.processingMetadata) {
+ this.pendingMessageContext = context;
+ this.pendingMessage = message;
+ } else {
+ this.nextCall.sendMessageWithContext(context, finalMessage);
+ this.processPendingHalfClose();
+ }
+ });
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessage(message: any): void {
+ this.sendMessageWithContext({}, message);
+ }
+ startRead(): void {
+ this.nextCall.startRead();
+ }
+ halfClose(): void {
+ this.requester.halfClose(() => {
+ if (this.processingMetadata || this.processingMessage) {
+ this.pendingHalfClose = true;
+ } else {
+ this.nextCall.halfClose();
+ }
+ });
+ }
+}
+
+function getCall(channel: Channel, path: string, options: CallOptions): Call {
+ const deadline = options.deadline ?? Infinity;
+ const host = options.host;
+ const parent = options.parent ?? null;
+ const propagateFlags = options.propagate_flags;
+ const credentials = options.credentials;
+ const call = channel.createCall(path, deadline, host, parent, propagateFlags);
+ if (credentials) {
+ call.setCredentials(credentials);
+ }
+ return call;
+}
+
+/**
+ * InterceptingCall implementation that directly owns the underlying Call
+ * object and handles serialization and deseraizliation.
+ */
+class BaseInterceptingCall implements InterceptingCallInterface {
+ constructor(
+ protected call: Call,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ protected methodDefinition: ClientMethodDefinition<any, any>
+ ) {}
+ cancelWithStatus(status: Status, details: string): void {
+ this.call.cancelWithStatus(status, details);
+ }
+ getPeer(): string {
+ return this.call.getPeer();
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessageWithContext(context: MessageContext, message: any): void {
+ let serialized: Buffer;
+ try {
+ serialized = this.methodDefinition.requestSerialize(message);
+ } catch (e) {
+ this.call.cancelWithStatus(
+ Status.INTERNAL,
+ `Request message serialization failure: ${getErrorMessage(e)}`
+ );
+ return;
+ }
+ this.call.sendMessageWithContext(context, serialized);
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ sendMessage(message: any) {
+ this.sendMessageWithContext({}, message);
+ }
+ start(
+ metadata: Metadata,
+ interceptingListener?: Partial<InterceptingListener>
+ ): void {
+ let readError: StatusObject | null = null;
+ this.call.start(metadata, {
+ onReceiveMetadata: metadata => {
+ interceptingListener?.onReceiveMetadata?.(metadata);
+ },
+ onReceiveMessage: message => {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ let deserialized: any;
+ try {
+ deserialized = this.methodDefinition.responseDeserialize(message);
+ } catch (e) {
+ readError = {
+ code: Status.INTERNAL,
+ details: `Response message parsing error: ${getErrorMessage(e)}`,
+ metadata: new Metadata(),
+ };
+ this.call.cancelWithStatus(readError.code, readError.details);
+ return;
+ }
+ interceptingListener?.onReceiveMessage?.(deserialized);
+ },
+ onReceiveStatus: status => {
+ if (readError) {
+ interceptingListener?.onReceiveStatus?.(readError);
+ } else {
+ interceptingListener?.onReceiveStatus?.(status);
+ }
+ },
+ });
+ }
+ startRead() {
+ this.call.startRead();
+ }
+ halfClose(): void {
+ this.call.halfClose();
+ }
+}
+
+/**
+ * BaseInterceptingCall with special-cased behavior for methods with unary
+ * responses.
+ */
+class BaseUnaryInterceptingCall
+ extends BaseInterceptingCall
+ implements InterceptingCallInterface
+{
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ constructor(call: Call, methodDefinition: ClientMethodDefinition<any, any>) {
+ super(call, methodDefinition);
+ }
+ start(metadata: Metadata, listener?: Partial<InterceptingListener>): void {
+ let receivedMessage = false;
+ const wrapperListener: InterceptingListener = {
+ onReceiveMetadata:
+ listener?.onReceiveMetadata?.bind(listener) ?? (metadata => {}),
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage: (message: any) => {
+ receivedMessage = true;
+ listener?.onReceiveMessage?.(message);
+ },
+ onReceiveStatus: (status: StatusObject) => {
+ if (!receivedMessage) {
+ listener?.onReceiveMessage?.(null);
+ }
+ listener?.onReceiveStatus?.(status);
+ },
+ };
+ super.start(metadata, wrapperListener);
+ this.call.startRead();
+ }
+}
+
+/**
+ * BaseInterceptingCall with special-cased behavior for methods with streaming
+ * responses.
+ */
+class BaseStreamingInterceptingCall
+ extends BaseInterceptingCall
+ implements InterceptingCallInterface {}
+
+function getBottomInterceptingCall(
+ channel: Channel,
+ options: InterceptorOptions,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ methodDefinition: ClientMethodDefinition<any, any>
+) {
+ const call = getCall(channel, methodDefinition.path, options);
+ if (methodDefinition.responseStream) {
+ return new BaseStreamingInterceptingCall(call, methodDefinition);
+ } else {
+ return new BaseUnaryInterceptingCall(call, methodDefinition);
+ }
+}
+
+export interface NextCall {
+ (options: InterceptorOptions): InterceptingCallInterface;
+}
+
+export interface Interceptor {
+ (options: InterceptorOptions, nextCall: NextCall): InterceptingCall;
+}
+
+export interface InterceptorProvider {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ (methodDefinition: ClientMethodDefinition<any, any>): Interceptor;
+}
+
+export interface InterceptorArguments {
+ clientInterceptors: Interceptor[];
+ clientInterceptorProviders: InterceptorProvider[];
+ callInterceptors: Interceptor[];
+ callInterceptorProviders: InterceptorProvider[];
+}
+
+export function getInterceptingCall(
+ interceptorArgs: InterceptorArguments,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ methodDefinition: ClientMethodDefinition<any, any>,
+ options: CallOptions,
+ channel: Channel
+): InterceptingCallInterface {
+ if (
+ interceptorArgs.clientInterceptors.length > 0 &&
+ interceptorArgs.clientInterceptorProviders.length > 0
+ ) {
+ throw new InterceptorConfigurationError(
+ 'Both interceptors and interceptor_providers were passed as options ' +
+ 'to the client constructor. Only one of these is allowed.'
+ );
+ }
+ if (
+ interceptorArgs.callInterceptors.length > 0 &&
+ interceptorArgs.callInterceptorProviders.length > 0
+ ) {
+ throw new InterceptorConfigurationError(
+ 'Both interceptors and interceptor_providers were passed as call ' +
+ 'options. Only one of these is allowed.'
+ );
+ }
+ let interceptors: Interceptor[] = [];
+ // Interceptors passed to the call override interceptors passed to the client constructor
+ if (
+ interceptorArgs.callInterceptors.length > 0 ||
+ interceptorArgs.callInterceptorProviders.length > 0
+ ) {
+ interceptors = ([] as Interceptor[])
+ .concat(
+ interceptorArgs.callInterceptors,
+ interceptorArgs.callInterceptorProviders.map(provider =>
+ provider(methodDefinition)
+ )
+ )
+ .filter(interceptor => interceptor);
+ // Filter out falsy values when providers return nothing
+ } else {
+ interceptors = ([] as Interceptor[])
+ .concat(
+ interceptorArgs.clientInterceptors,
+ interceptorArgs.clientInterceptorProviders.map(provider =>
+ provider(methodDefinition)
+ )
+ )
+ .filter(interceptor => interceptor);
+ // Filter out falsy values when providers return nothing
+ }
+ const interceptorOptions = Object.assign({}, options, {
+ method_definition: methodDefinition,
+ });
+ /* For each interceptor in the list, the nextCall function passed to it is
+ * based on the next interceptor in the list, using a nextCall function
+ * constructed with the following interceptor in the list, and so on. The
+ * initialValue, which is effectively at the end of the list, is a nextCall
+ * function that invokes getBottomInterceptingCall, the result of which
+ * handles (de)serialization and also gets the underlying call from the
+ * channel. */
+ const getCall: NextCall = interceptors.reduceRight<NextCall>(
+ (nextCall: NextCall, nextInterceptor: Interceptor) => {
+ return currentOptions => nextInterceptor(currentOptions, nextCall);
+ },
+ (finalOptions: InterceptorOptions) =>
+ getBottomInterceptingCall(channel, finalOptions, methodDefinition)
+ );
+ return getCall(interceptorOptions);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/client.ts b/frontend-old/node_modules/@grpc/grpc-js/src/client.ts
new file mode 100644
index 0000000..e122f6c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/client.ts
@@ -0,0 +1,715 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {
+ ClientDuplexStream,
+ ClientDuplexStreamImpl,
+ ClientReadableStream,
+ ClientReadableStreamImpl,
+ ClientUnaryCall,
+ ClientUnaryCallImpl,
+ ClientWritableStream,
+ ClientWritableStreamImpl,
+ ServiceError,
+ callErrorFromStatus,
+ SurfaceCall,
+} from './call';
+import { CallCredentials } from './call-credentials';
+import { StatusObject } from './call-interface';
+import { Channel, ChannelImplementation } from './channel';
+import { ConnectivityState } from './connectivity-state';
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { Status } from './constants';
+import { Metadata } from './metadata';
+import { ClientMethodDefinition } from './make-client';
+import {
+ getInterceptingCall,
+ Interceptor,
+ InterceptorProvider,
+ InterceptorArguments,
+ InterceptingCallInterface,
+} from './client-interceptors';
+import {
+ ServerUnaryCall,
+ ServerReadableStream,
+ ServerWritableStream,
+ ServerDuplexStream,
+} from './server-call';
+import { Deadline } from './deadline';
+
+const CHANNEL_SYMBOL = Symbol();
+const INTERCEPTOR_SYMBOL = Symbol();
+const INTERCEPTOR_PROVIDER_SYMBOL = Symbol();
+const CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol();
+
+function isFunction<ResponseType>(
+ arg: Metadata | CallOptions | UnaryCallback<ResponseType> | undefined
+): arg is UnaryCallback<ResponseType> {
+ return typeof arg === 'function';
+}
+
+export interface UnaryCallback<ResponseType> {
+ (err: ServiceError | null, value?: ResponseType): void;
+}
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+export interface CallOptions {
+ deadline?: Deadline;
+ host?: string;
+ parent?:
+ | ServerUnaryCall<any, any>
+ | ServerReadableStream<any, any>
+ | ServerWritableStream<any, any>
+ | ServerDuplexStream<any, any>;
+ propagate_flags?: number;
+ credentials?: CallCredentials;
+ interceptors?: Interceptor[];
+ interceptor_providers?: InterceptorProvider[];
+}
+/* eslint-enable @typescript-eslint/no-explicit-any */
+
+export interface CallProperties<RequestType, ResponseType> {
+ argument?: RequestType;
+ metadata: Metadata;
+ call: SurfaceCall;
+ channel: Channel;
+ methodDefinition: ClientMethodDefinition<RequestType, ResponseType>;
+ callOptions: CallOptions;
+ callback?: UnaryCallback<ResponseType>;
+}
+
+export interface CallInvocationTransformer {
+ (callProperties: CallProperties<any, any>): CallProperties<any, any>; // eslint-disable-line @typescript-eslint/no-explicit-any
+}
+
+export type ClientOptions = Partial<ChannelOptions> & {
+ channelOverride?: Channel;
+ channelFactoryOverride?: (
+ address: string,
+ credentials: ChannelCredentials,
+ options: ClientOptions
+ ) => Channel;
+ interceptors?: Interceptor[];
+ interceptor_providers?: InterceptorProvider[];
+ callInvocationTransformer?: CallInvocationTransformer;
+};
+
+function getErrorStackString(error: Error): string {
+ return error.stack!.split('\n').slice(1).join('\n');
+}
+
+/**
+ * A generic gRPC client. Primarily useful as a base class for all generated
+ * clients.
+ */
+export class Client {
+ private readonly [CHANNEL_SYMBOL]: Channel;
+ private readonly [INTERCEPTOR_SYMBOL]: Interceptor[];
+ private readonly [INTERCEPTOR_PROVIDER_SYMBOL]: InterceptorProvider[];
+ private readonly [CALL_INVOCATION_TRANSFORMER_SYMBOL]?: CallInvocationTransformer;
+ constructor(
+ address: string,
+ credentials: ChannelCredentials,
+ options: ClientOptions = {}
+ ) {
+ options = Object.assign({}, options);
+ this[INTERCEPTOR_SYMBOL] = options.interceptors ?? [];
+ delete options.interceptors;
+ this[INTERCEPTOR_PROVIDER_SYMBOL] = options.interceptor_providers ?? [];
+ delete options.interceptor_providers;
+ if (
+ this[INTERCEPTOR_SYMBOL].length > 0 &&
+ this[INTERCEPTOR_PROVIDER_SYMBOL].length > 0
+ ) {
+ throw new Error(
+ 'Both interceptors and interceptor_providers were passed as options ' +
+ 'to the client constructor. Only one of these is allowed.'
+ );
+ }
+ this[CALL_INVOCATION_TRANSFORMER_SYMBOL] =
+ options.callInvocationTransformer;
+ delete options.callInvocationTransformer;
+ if (options.channelOverride) {
+ this[CHANNEL_SYMBOL] = options.channelOverride;
+ } else if (options.channelFactoryOverride) {
+ const channelFactoryOverride = options.channelFactoryOverride;
+ delete options.channelFactoryOverride;
+ this[CHANNEL_SYMBOL] = channelFactoryOverride(
+ address,
+ credentials,
+ options
+ );
+ } else {
+ this[CHANNEL_SYMBOL] = new ChannelImplementation(
+ address,
+ credentials,
+ options
+ );
+ }
+ }
+
+ close(): void {
+ this[CHANNEL_SYMBOL].close();
+ }
+
+ getChannel(): Channel {
+ return this[CHANNEL_SYMBOL];
+ }
+
+ waitForReady(deadline: Deadline, callback: (error?: Error) => void): void {
+ const checkState = (err?: Error) => {
+ if (err) {
+ callback(new Error('Failed to connect before the deadline'));
+ return;
+ }
+ let newState;
+ try {
+ newState = this[CHANNEL_SYMBOL].getConnectivityState(true);
+ } catch (e) {
+ callback(new Error('The channel has been closed'));
+ return;
+ }
+ if (newState === ConnectivityState.READY) {
+ callback();
+ } else {
+ try {
+ this[CHANNEL_SYMBOL].watchConnectivityState(
+ newState,
+ deadline,
+ checkState
+ );
+ } catch (e) {
+ callback(new Error('The channel has been closed'));
+ }
+ }
+ };
+ setImmediate(checkState);
+ }
+
+ private checkOptionalUnaryResponseArguments<ResponseType>(
+ arg1: Metadata | CallOptions | UnaryCallback<ResponseType>,
+ arg2?: CallOptions | UnaryCallback<ResponseType>,
+ arg3?: UnaryCallback<ResponseType>
+ ): {
+ metadata: Metadata;
+ options: CallOptions;
+ callback: UnaryCallback<ResponseType>;
+ } {
+ if (isFunction(arg1)) {
+ return { metadata: new Metadata(), options: {}, callback: arg1 };
+ } else if (isFunction(arg2)) {
+ if (arg1 instanceof Metadata) {
+ return { metadata: arg1, options: {}, callback: arg2 };
+ } else {
+ return { metadata: new Metadata(), options: arg1, callback: arg2 };
+ }
+ } else {
+ if (
+ !(
+ arg1 instanceof Metadata &&
+ arg2 instanceof Object &&
+ isFunction(arg3)
+ )
+ ) {
+ throw new Error('Incorrect arguments passed');
+ }
+ return { metadata: arg1, options: arg2, callback: arg3 };
+ }
+ }
+
+ makeUnaryRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ metadata: Metadata,
+ options: CallOptions,
+ callback: UnaryCallback<ResponseType>
+ ): ClientUnaryCall;
+ makeUnaryRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ metadata: Metadata,
+ callback: UnaryCallback<ResponseType>
+ ): ClientUnaryCall;
+ makeUnaryRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ options: CallOptions,
+ callback: UnaryCallback<ResponseType>
+ ): ClientUnaryCall;
+ makeUnaryRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ callback: UnaryCallback<ResponseType>
+ ): ClientUnaryCall;
+ makeUnaryRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ metadata: Metadata | CallOptions | UnaryCallback<ResponseType>,
+ options?: CallOptions | UnaryCallback<ResponseType>,
+ callback?: UnaryCallback<ResponseType>
+ ): ClientUnaryCall {
+ const checkedArguments =
+ this.checkOptionalUnaryResponseArguments<ResponseType>(
+ metadata,
+ options,
+ callback
+ );
+ const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =
+ {
+ path: method,
+ requestStream: false,
+ responseStream: false,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties: CallProperties<RequestType, ResponseType> = {
+ argument: argument,
+ metadata: checkedArguments.metadata,
+ call: new ClientUnaryCallImpl(),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ callback: checkedArguments.callback,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(
+ callProperties
+ ) as CallProperties<RequestType, ResponseType>;
+ }
+ const emitter: ClientUnaryCall = callProperties.call;
+ const interceptorArgs: InterceptorArguments = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: callProperties.callOptions.interceptors ?? [],
+ callInterceptorProviders:
+ callProperties.callOptions.interceptor_providers ?? [],
+ };
+ const call: InterceptingCallInterface = getInterceptingCall(
+ interceptorArgs,
+ callProperties.methodDefinition,
+ callProperties.callOptions,
+ callProperties.channel
+ );
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ emitter.call = call;
+ let responseMessage: ResponseType | null = null;
+ let receivedStatus = false;
+ let callerStackError: Error | null = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata: metadata => {
+ emitter.emit('metadata', metadata);
+ },
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message: any) {
+ if (responseMessage !== null) {
+ call.cancelWithStatus(Status.INTERNAL, 'Too many responses received');
+ }
+ responseMessage = message;
+ },
+ onReceiveStatus(status: StatusObject) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ if (status.code === Status.OK) {
+ if (responseMessage === null) {
+ const callerStack = getErrorStackString(callerStackError!);
+ callProperties.callback!(
+ callErrorFromStatus(
+ {
+ code: Status.INTERNAL,
+ details: 'No message received',
+ metadata: status.metadata,
+ },
+ callerStack
+ )
+ );
+ } else {
+ callProperties.callback!(null, responseMessage);
+ }
+ } else {
+ const callerStack = getErrorStackString(callerStackError!);
+ callProperties.callback!(callErrorFromStatus(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ emitter.emit('status', status);
+ },
+ });
+ call.sendMessage(argument);
+ call.halfClose();
+ return emitter;
+ }
+
+ makeClientStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ metadata: Metadata,
+ options: CallOptions,
+ callback: UnaryCallback<ResponseType>
+ ): ClientWritableStream<RequestType>;
+ makeClientStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ metadata: Metadata,
+ callback: UnaryCallback<ResponseType>
+ ): ClientWritableStream<RequestType>;
+ makeClientStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ options: CallOptions,
+ callback: UnaryCallback<ResponseType>
+ ): ClientWritableStream<RequestType>;
+ makeClientStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ callback: UnaryCallback<ResponseType>
+ ): ClientWritableStream<RequestType>;
+ makeClientStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ metadata: Metadata | CallOptions | UnaryCallback<ResponseType>,
+ options?: CallOptions | UnaryCallback<ResponseType>,
+ callback?: UnaryCallback<ResponseType>
+ ): ClientWritableStream<RequestType> {
+ const checkedArguments =
+ this.checkOptionalUnaryResponseArguments<ResponseType>(
+ metadata,
+ options,
+ callback
+ );
+ const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =
+ {
+ path: method,
+ requestStream: true,
+ responseStream: false,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties: CallProperties<RequestType, ResponseType> = {
+ metadata: checkedArguments.metadata,
+ call: new ClientWritableStreamImpl<RequestType>(serialize),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ callback: checkedArguments.callback,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(
+ callProperties
+ ) as CallProperties<RequestType, ResponseType>;
+ }
+ const emitter: ClientWritableStream<RequestType> =
+ callProperties.call as ClientWritableStream<RequestType>;
+ const interceptorArgs: InterceptorArguments = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: callProperties.callOptions.interceptors ?? [],
+ callInterceptorProviders:
+ callProperties.callOptions.interceptor_providers ?? [],
+ };
+ const call: InterceptingCallInterface = getInterceptingCall(
+ interceptorArgs,
+ callProperties.methodDefinition,
+ callProperties.callOptions,
+ callProperties.channel
+ );
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ emitter.call = call;
+ let responseMessage: ResponseType | null = null;
+ let receivedStatus = false;
+ let callerStackError: Error | null = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata: metadata => {
+ emitter.emit('metadata', metadata);
+ },
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message: any) {
+ if (responseMessage !== null) {
+ call.cancelWithStatus(Status.INTERNAL, 'Too many responses received');
+ }
+ responseMessage = message;
+ },
+ onReceiveStatus(status: StatusObject) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ if (status.code === Status.OK) {
+ if (responseMessage === null) {
+ const callerStack = getErrorStackString(callerStackError!);
+ callProperties.callback!(
+ callErrorFromStatus(
+ {
+ code: Status.INTERNAL,
+ details: 'No message received',
+ metadata: status.metadata,
+ },
+ callerStack
+ )
+ );
+ } else {
+ callProperties.callback!(null, responseMessage);
+ }
+ } else {
+ const callerStack = getErrorStackString(callerStackError!);
+ callProperties.callback!(callErrorFromStatus(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ emitter.emit('status', status);
+ },
+ });
+ return emitter;
+ }
+
+ private checkMetadataAndOptions(
+ arg1?: Metadata | CallOptions,
+ arg2?: CallOptions
+ ): { metadata: Metadata; options: CallOptions } {
+ let metadata: Metadata;
+ let options: CallOptions;
+ if (arg1 instanceof Metadata) {
+ metadata = arg1;
+ if (arg2) {
+ options = arg2;
+ } else {
+ options = {};
+ }
+ } else {
+ if (arg1) {
+ options = arg1;
+ } else {
+ options = {};
+ }
+ metadata = new Metadata();
+ }
+ return { metadata, options };
+ }
+
+ makeServerStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ metadata: Metadata,
+ options?: CallOptions
+ ): ClientReadableStream<ResponseType>;
+ makeServerStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ options?: CallOptions
+ ): ClientReadableStream<ResponseType>;
+ makeServerStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ argument: RequestType,
+ metadata?: Metadata | CallOptions,
+ options?: CallOptions
+ ): ClientReadableStream<ResponseType> {
+ const checkedArguments = this.checkMetadataAndOptions(metadata, options);
+ const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =
+ {
+ path: method,
+ requestStream: false,
+ responseStream: true,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties: CallProperties<RequestType, ResponseType> = {
+ argument: argument,
+ metadata: checkedArguments.metadata,
+ call: new ClientReadableStreamImpl<ResponseType>(deserialize),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(
+ callProperties
+ ) as CallProperties<RequestType, ResponseType>;
+ }
+ const stream: ClientReadableStream<ResponseType> =
+ callProperties.call as ClientReadableStream<ResponseType>;
+ const interceptorArgs: InterceptorArguments = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: callProperties.callOptions.interceptors ?? [],
+ callInterceptorProviders:
+ callProperties.callOptions.interceptor_providers ?? [],
+ };
+ const call: InterceptingCallInterface = getInterceptingCall(
+ interceptorArgs,
+ callProperties.methodDefinition,
+ callProperties.callOptions,
+ callProperties.channel
+ );
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ stream.call = call;
+ let receivedStatus = false;
+ let callerStackError: Error | null = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata(metadata: Metadata) {
+ stream.emit('metadata', metadata);
+ },
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ onReceiveMessage(message: any) {
+ stream.push(message);
+ },
+ onReceiveStatus(status: StatusObject) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ stream.push(null);
+ if (status.code !== Status.OK) {
+ const callerStack = getErrorStackString(callerStackError!);
+ stream.emit('error', callErrorFromStatus(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ stream.emit('status', status);
+ },
+ });
+ call.sendMessage(argument);
+ call.halfClose();
+ return stream;
+ }
+
+ makeBidiStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ metadata: Metadata,
+ options?: CallOptions
+ ): ClientDuplexStream<RequestType, ResponseType>;
+ makeBidiStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ options?: CallOptions
+ ): ClientDuplexStream<RequestType, ResponseType>;
+ makeBidiStreamRequest<RequestType, ResponseType>(
+ method: string,
+ serialize: (value: RequestType) => Buffer,
+ deserialize: (value: Buffer) => ResponseType,
+ metadata?: Metadata | CallOptions,
+ options?: CallOptions
+ ): ClientDuplexStream<RequestType, ResponseType> {
+ const checkedArguments = this.checkMetadataAndOptions(metadata, options);
+ const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =
+ {
+ path: method,
+ requestStream: true,
+ responseStream: true,
+ requestSerialize: serialize,
+ responseDeserialize: deserialize,
+ };
+ let callProperties: CallProperties<RequestType, ResponseType> = {
+ metadata: checkedArguments.metadata,
+ call: new ClientDuplexStreamImpl<RequestType, ResponseType>(
+ serialize,
+ deserialize
+ ),
+ channel: this[CHANNEL_SYMBOL],
+ methodDefinition: methodDefinition,
+ callOptions: checkedArguments.options,
+ };
+ if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {
+ callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(
+ callProperties
+ ) as CallProperties<RequestType, ResponseType>;
+ }
+ const stream: ClientDuplexStream<RequestType, ResponseType> =
+ callProperties.call as ClientDuplexStream<RequestType, ResponseType>;
+ const interceptorArgs: InterceptorArguments = {
+ clientInterceptors: this[INTERCEPTOR_SYMBOL],
+ clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],
+ callInterceptors: callProperties.callOptions.interceptors ?? [],
+ callInterceptorProviders:
+ callProperties.callOptions.interceptor_providers ?? [],
+ };
+ const call: InterceptingCallInterface = getInterceptingCall(
+ interceptorArgs,
+ callProperties.methodDefinition,
+ callProperties.callOptions,
+ callProperties.channel
+ );
+ /* This needs to happen before the emitter is used. Unfortunately we can't
+ * enforce this with the type system. We need to construct this emitter
+ * before calling the CallInvocationTransformer, and we need to create the
+ * call after that. */
+ stream.call = call;
+ let receivedStatus = false;
+ let callerStackError: Error | null = new Error();
+ call.start(callProperties.metadata, {
+ onReceiveMetadata(metadata: Metadata) {
+ stream.emit('metadata', metadata);
+ },
+ onReceiveMessage(message: Buffer) {
+ stream.push(message);
+ },
+ onReceiveStatus(status: StatusObject) {
+ if (receivedStatus) {
+ return;
+ }
+ receivedStatus = true;
+ stream.push(null);
+ if (status.code !== Status.OK) {
+ const callerStack = getErrorStackString(callerStackError!);
+ stream.emit('error', callErrorFromStatus(status, callerStack));
+ }
+ /* Avoid retaining the callerStackError object in the call context of
+ * the status event handler. */
+ callerStackError = null;
+ stream.emit('status', status);
+ },
+ });
+ return stream;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/compression-algorithms.ts b/frontend-old/node_modules/@grpc/grpc-js/src/compression-algorithms.ts
new file mode 100644
index 0000000..67fdcf1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/compression-algorithms.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export enum CompressionAlgorithms {
+ identity = 0,
+ deflate = 1,
+ gzip = 2,
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/compression-filter.ts b/frontend-old/node_modules/@grpc/grpc-js/src/compression-filter.ts
new file mode 100644
index 0000000..f1600b3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/compression-filter.ts
@@ -0,0 +1,350 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import * as zlib from 'zlib';
+
+import { WriteObject, WriteFlags } from './call-interface';
+import { Channel } from './channel';
+import { ChannelOptions } from './channel-options';
+import { CompressionAlgorithms } from './compression-algorithms';
+import { DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH, LogVerbosity, Status } from './constants';
+import { BaseFilter, Filter, FilterFactory } from './filter';
+import * as logging from './logging';
+import { Metadata, MetadataValue } from './metadata';
+
+const isCompressionAlgorithmKey = (
+ key: number
+): key is CompressionAlgorithms => {
+ return (
+ typeof key === 'number' && typeof CompressionAlgorithms[key] === 'string'
+ );
+};
+
+type CompressionAlgorithm = keyof typeof CompressionAlgorithms;
+
+type SharedCompressionFilterConfig = {
+ serverSupportedEncodingHeader?: string;
+};
+
+abstract class CompressionHandler {
+ protected abstract compressMessage(message: Buffer): Promise<Buffer>;
+ protected abstract decompressMessage(data: Buffer): Promise<Buffer>;
+ /**
+ * @param message Raw uncompressed message bytes
+ * @param compress Indicates whether the message should be compressed
+ * @return Framed message, compressed if applicable
+ */
+ async writeMessage(message: Buffer, compress: boolean): Promise<Buffer> {
+ let messageBuffer = message;
+ if (compress) {
+ messageBuffer = await this.compressMessage(messageBuffer);
+ }
+ const output = Buffer.allocUnsafe(messageBuffer.length + 5);
+ output.writeUInt8(compress ? 1 : 0, 0);
+ output.writeUInt32BE(messageBuffer.length, 1);
+ messageBuffer.copy(output, 5);
+ return output;
+ }
+ /**
+ * @param data Framed message, possibly compressed
+ * @return Uncompressed message
+ */
+ async readMessage(data: Buffer): Promise<Buffer> {
+ const compressed = data.readUInt8(0) === 1;
+ let messageBuffer = data.slice(5);
+ if (compressed) {
+ messageBuffer = await this.decompressMessage(messageBuffer);
+ }
+ return messageBuffer;
+ }
+}
+
+class IdentityHandler extends CompressionHandler {
+ async compressMessage(message: Buffer) {
+ return message;
+ }
+
+ async writeMessage(message: Buffer, compress: boolean): Promise<Buffer> {
+ const output = Buffer.allocUnsafe(message.length + 5);
+ /* With "identity" compression, messages should always be marked as
+ * uncompressed */
+ output.writeUInt8(0, 0);
+ output.writeUInt32BE(message.length, 1);
+ message.copy(output, 5);
+ return output;
+ }
+
+ decompressMessage(message: Buffer): Promise<Buffer> {
+ return Promise.reject<Buffer>(
+ new Error(
+ 'Received compressed message but "grpc-encoding" header was identity'
+ )
+ );
+ }
+}
+
+class DeflateHandler extends CompressionHandler {
+ constructor(private maxRecvMessageLength: number) {
+ super();
+ }
+
+ compressMessage(message: Buffer) {
+ return new Promise<Buffer>((resolve, reject) => {
+ zlib.deflate(message, (err, output) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(output);
+ }
+ });
+ });
+ }
+
+ decompressMessage(message: Buffer) {
+ return new Promise<Buffer>((resolve, reject) => {
+ let totalLength = 0;
+ const messageParts: Buffer[] = [];
+ const decompresser = zlib.createInflate();
+ decompresser.on('data', (chunk: Buffer) => {
+ messageParts.push(chunk);
+ totalLength += chunk.byteLength;
+ if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {
+ decompresser.destroy();
+ reject({
+ code: Status.RESOURCE_EXHAUSTED,
+ details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`
+ });
+ }
+ });
+ decompresser.on('end', () => {
+ resolve(Buffer.concat(messageParts));
+ });
+ decompresser.write(message);
+ decompresser.end();
+ });
+ }
+}
+
+class GzipHandler extends CompressionHandler {
+ constructor(private maxRecvMessageLength: number) {
+ super();
+ }
+
+ compressMessage(message: Buffer) {
+ return new Promise<Buffer>((resolve, reject) => {
+ zlib.gzip(message, (err, output) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(output);
+ }
+ });
+ });
+ }
+
+ decompressMessage(message: Buffer) {
+ return new Promise<Buffer>((resolve, reject) => {
+ let totalLength = 0;
+ const messageParts: Buffer[] = [];
+ const decompresser = zlib.createGunzip();
+ decompresser.on('data', (chunk: Buffer) => {
+ messageParts.push(chunk);
+ totalLength += chunk.byteLength;
+ if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {
+ decompresser.destroy();
+ reject({
+ code: Status.RESOURCE_EXHAUSTED,
+ details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`
+ });
+ }
+ });
+ decompresser.on('end', () => {
+ resolve(Buffer.concat(messageParts));
+ });
+ decompresser.write(message);
+ decompresser.end();
+ });
+ }
+}
+
+class UnknownHandler extends CompressionHandler {
+ constructor(private readonly compressionName: string) {
+ super();
+ }
+ compressMessage(message: Buffer): Promise<Buffer> {
+ return Promise.reject<Buffer>(
+ new Error(
+ `Received message compressed with unsupported compression method ${this.compressionName}`
+ )
+ );
+ }
+
+ decompressMessage(message: Buffer): Promise<Buffer> {
+ // This should be unreachable
+ return Promise.reject<Buffer>(
+ new Error(`Compression method not supported: ${this.compressionName}`)
+ );
+ }
+}
+
+function getCompressionHandler(compressionName: string, maxReceiveMessageSize: number): CompressionHandler {
+ switch (compressionName) {
+ case 'identity':
+ return new IdentityHandler();
+ case 'deflate':
+ return new DeflateHandler(maxReceiveMessageSize);
+ case 'gzip':
+ return new GzipHandler(maxReceiveMessageSize);
+ default:
+ return new UnknownHandler(compressionName);
+ }
+}
+
+export class CompressionFilter extends BaseFilter implements Filter {
+ private sendCompression: CompressionHandler = new IdentityHandler();
+ private receiveCompression: CompressionHandler = new IdentityHandler();
+ private currentCompressionAlgorithm: CompressionAlgorithm = 'identity';
+ private maxReceiveMessageLength: number;
+
+ constructor(
+ channelOptions: ChannelOptions,
+ private sharedFilterConfig: SharedCompressionFilterConfig
+ ) {
+ super();
+
+ const compressionAlgorithmKey =
+ channelOptions['grpc.default_compression_algorithm'];
+ this.maxReceiveMessageLength = channelOptions['grpc.max_receive_message_length'] ?? DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH
+ if (compressionAlgorithmKey !== undefined) {
+ if (isCompressionAlgorithmKey(compressionAlgorithmKey)) {
+ const clientSelectedEncoding = CompressionAlgorithms[
+ compressionAlgorithmKey
+ ] as CompressionAlgorithm;
+ const serverSupportedEncodings =
+ sharedFilterConfig.serverSupportedEncodingHeader?.split(',');
+ /**
+ * There are two possible situations here:
+ * 1) We don't have any info yet from the server about what compression it supports
+ * In that case we should just use what the client tells us to use
+ * 2) We've previously received a response from the server including a grpc-accept-encoding header
+ * In that case we only want to use the encoding chosen by the client if the server supports it
+ */
+ if (
+ !serverSupportedEncodings ||
+ serverSupportedEncodings.includes(clientSelectedEncoding)
+ ) {
+ this.currentCompressionAlgorithm = clientSelectedEncoding;
+ this.sendCompression = getCompressionHandler(
+ this.currentCompressionAlgorithm,
+ -1
+ );
+ }
+ } else {
+ logging.log(
+ LogVerbosity.ERROR,
+ `Invalid value provided for grpc.default_compression_algorithm option: ${compressionAlgorithmKey}`
+ );
+ }
+ }
+ }
+
+ async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {
+ const headers: Metadata = await metadata;
+ headers.set('grpc-accept-encoding', 'identity,deflate,gzip');
+ headers.set('accept-encoding', 'identity');
+
+ // No need to send the header if it's "identity" - behavior is identical; save the bandwidth
+ if (this.currentCompressionAlgorithm === 'identity') {
+ headers.remove('grpc-encoding');
+ } else {
+ headers.set('grpc-encoding', this.currentCompressionAlgorithm);
+ }
+
+ return headers;
+ }
+
+ receiveMetadata(metadata: Metadata): Metadata {
+ const receiveEncoding: MetadataValue[] = metadata.get('grpc-encoding');
+ if (receiveEncoding.length > 0) {
+ const encoding: MetadataValue = receiveEncoding[0];
+ if (typeof encoding === 'string') {
+ this.receiveCompression = getCompressionHandler(encoding, this.maxReceiveMessageLength);
+ }
+ }
+ metadata.remove('grpc-encoding');
+
+ /* Check to see if the compression we're using to send messages is supported by the server
+ * If not, reset the sendCompression filter and have it use the default IdentityHandler */
+ const serverSupportedEncodingsHeader = metadata.get(
+ 'grpc-accept-encoding'
+ )[0] as string | undefined;
+ if (serverSupportedEncodingsHeader) {
+ this.sharedFilterConfig.serverSupportedEncodingHeader =
+ serverSupportedEncodingsHeader;
+ const serverSupportedEncodings =
+ serverSupportedEncodingsHeader.split(',');
+
+ if (
+ !serverSupportedEncodings.includes(this.currentCompressionAlgorithm)
+ ) {
+ this.sendCompression = new IdentityHandler();
+ this.currentCompressionAlgorithm = 'identity';
+ }
+ }
+ metadata.remove('grpc-accept-encoding');
+ return metadata;
+ }
+
+ async sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {
+ /* This filter is special. The input message is the bare message bytes,
+ * and the output is a framed and possibly compressed message. For this
+ * reason, this filter should be at the bottom of the filter stack */
+ const resolvedMessage: WriteObject = await message;
+ let compress: boolean;
+ if (this.sendCompression instanceof IdentityHandler) {
+ compress = false;
+ } else {
+ compress = ((resolvedMessage.flags ?? 0) & WriteFlags.NoCompress) === 0;
+ }
+
+ return {
+ message: await this.sendCompression.writeMessage(
+ resolvedMessage.message,
+ compress
+ ),
+ flags: resolvedMessage.flags,
+ };
+ }
+
+ async receiveMessage(message: Promise<Buffer>) {
+ /* This filter is also special. The input message is framed and possibly
+ * compressed, and the output message is deframed and uncompressed. So
+ * this is another reason that this filter should be at the bottom of the
+ * filter stack. */
+ return this.receiveCompression.readMessage(await message);
+ }
+}
+
+export class CompressionFilterFactory
+ implements FilterFactory<CompressionFilter>
+{
+ private sharedFilterConfig: SharedCompressionFilterConfig = {};
+ constructor(channel: Channel, private readonly options: ChannelOptions) {}
+ createFilter(): CompressionFilter {
+ return new CompressionFilter(this.options, this.sharedFilterConfig);
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/connectivity-state.ts b/frontend-old/node_modules/@grpc/grpc-js/src/connectivity-state.ts
new file mode 100644
index 0000000..560ab9c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/connectivity-state.ts
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export enum ConnectivityState {
+ IDLE,
+ CONNECTING,
+ READY,
+ TRANSIENT_FAILURE,
+ SHUTDOWN,
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/constants.ts b/frontend-old/node_modules/@grpc/grpc-js/src/constants.ts
new file mode 100644
index 0000000..865b24c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/constants.ts
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export enum Status {
+ OK = 0,
+ CANCELLED,
+ UNKNOWN,
+ INVALID_ARGUMENT,
+ DEADLINE_EXCEEDED,
+ NOT_FOUND,
+ ALREADY_EXISTS,
+ PERMISSION_DENIED,
+ RESOURCE_EXHAUSTED,
+ FAILED_PRECONDITION,
+ ABORTED,
+ OUT_OF_RANGE,
+ UNIMPLEMENTED,
+ INTERNAL,
+ UNAVAILABLE,
+ DATA_LOSS,
+ UNAUTHENTICATED,
+}
+
+export enum LogVerbosity {
+ DEBUG = 0,
+ INFO,
+ ERROR,
+ NONE,
+}
+
+/**
+ * NOTE: This enum is not currently used in any implemented API in this
+ * library. It is included only for type parity with the other implementation.
+ */
+export enum Propagate {
+ DEADLINE = 1,
+ CENSUS_STATS_CONTEXT = 2,
+ CENSUS_TRACING_CONTEXT = 4,
+ CANCELLATION = 8,
+ // https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/propagation_bits.h#L43
+ DEFAULTS = 0xffff |
+ Propagate.DEADLINE |
+ Propagate.CENSUS_STATS_CONTEXT |
+ Propagate.CENSUS_TRACING_CONTEXT |
+ Propagate.CANCELLATION,
+}
+
+// -1 means unlimited
+export const DEFAULT_MAX_SEND_MESSAGE_LENGTH = -1;
+
+// 4 MB default
+export const DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH = 4 * 1024 * 1024;
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/control-plane-status.ts b/frontend-old/node_modules/@grpc/grpc-js/src/control-plane-status.ts
new file mode 100644
index 0000000..1d10cb3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/control-plane-status.ts
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { Status } from './constants';
+
+const INAPPROPRIATE_CONTROL_PLANE_CODES: Status[] = [
+ Status.OK,
+ Status.INVALID_ARGUMENT,
+ Status.NOT_FOUND,
+ Status.ALREADY_EXISTS,
+ Status.FAILED_PRECONDITION,
+ Status.ABORTED,
+ Status.OUT_OF_RANGE,
+ Status.DATA_LOSS,
+];
+
+export function restrictControlPlaneStatusCode(
+ code: Status,
+ details: string
+): { code: Status; details: string } {
+ if (INAPPROPRIATE_CONTROL_PLANE_CODES.includes(code)) {
+ return {
+ code: Status.INTERNAL,
+ details: `Invalid status from control plane: ${code} ${Status[code]} ${details}`,
+ };
+ } else {
+ return { code, details };
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/deadline.ts b/frontend-old/node_modules/@grpc/grpc-js/src/deadline.ts
new file mode 100644
index 0000000..8f8fe67
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/deadline.ts
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export type Deadline = Date | number;
+
+export function minDeadline(...deadlineList: Deadline[]): Deadline {
+ let minValue = Infinity;
+ for (const deadline of deadlineList) {
+ const deadlineMsecs =
+ deadline instanceof Date ? deadline.getTime() : deadline;
+ if (deadlineMsecs < minValue) {
+ minValue = deadlineMsecs;
+ }
+ }
+ return minValue;
+}
+
+const units: Array<[string, number]> = [
+ ['m', 1],
+ ['S', 1000],
+ ['M', 60 * 1000],
+ ['H', 60 * 60 * 1000],
+];
+
+export function getDeadlineTimeoutString(deadline: Deadline) {
+ const now = new Date().getTime();
+ if (deadline instanceof Date) {
+ deadline = deadline.getTime();
+ }
+ const timeoutMs = Math.max(deadline - now, 0);
+ for (const [unit, factor] of units) {
+ const amount = timeoutMs / factor;
+ if (amount < 1e8) {
+ return String(Math.ceil(amount)) + unit;
+ }
+ }
+ throw new Error('Deadline is too far in the future');
+}
+
+/**
+ * See https://nodejs.org/api/timers.html#settimeoutcallback-delay-args
+ * In particular, "When delay is larger than 2147483647 or less than 1, the
+ * delay will be set to 1. Non-integer delays are truncated to an integer."
+ * This number of milliseconds is almost 25 days.
+ */
+const MAX_TIMEOUT_TIME = 2147483647;
+
+/**
+ * Get the timeout value that should be passed to setTimeout now for the timer
+ * to end at the deadline. For any deadline before now, the timer should end
+ * immediately, represented by a value of 0. For any deadline more than
+ * MAX_TIMEOUT_TIME milliseconds in the future, a timer cannot be set that will
+ * end at that time, so it is treated as infinitely far in the future.
+ * @param deadline
+ * @returns
+ */
+export function getRelativeTimeout(deadline: Deadline) {
+ const deadlineMs = deadline instanceof Date ? deadline.getTime() : deadline;
+ const now = new Date().getTime();
+ const timeout = deadlineMs - now;
+ if (timeout < 0) {
+ return 0;
+ } else if (timeout > MAX_TIMEOUT_TIME) {
+ return Infinity;
+ } else {
+ return timeout;
+ }
+}
+
+export function deadlineToString(deadline: Deadline): string {
+ if (deadline instanceof Date) {
+ return deadline.toISOString();
+ } else {
+ const dateDeadline = new Date(deadline);
+ if (Number.isNaN(dateDeadline.getTime())) {
+ return '' + deadline;
+ } else {
+ return dateDeadline.toISOString();
+ }
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/duration.ts b/frontend-old/node_modules/@grpc/grpc-js/src/duration.ts
new file mode 100644
index 0000000..ff77dba
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/duration.ts
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export interface Duration {
+ seconds: number;
+ nanos: number;
+}
+
+export function msToDuration(millis: number): Duration {
+ return {
+ seconds: (millis / 1000) | 0,
+ nanos: ((millis % 1000) * 1_000_000) | 0,
+ };
+}
+
+export function durationToMs(duration: Duration): number {
+ return (duration.seconds * 1000 + duration.nanos / 1_000_000) | 0;
+}
+
+export function isDuration(value: any): value is Duration {
+ return typeof value.seconds === 'number' && typeof value.nanos === 'number';
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/error.ts b/frontend-old/node_modules/@grpc/grpc-js/src/error.ts
new file mode 100644
index 0000000..105a3ee
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/error.ts
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export function getErrorMessage(error: unknown): string {
+ if (error instanceof Error) {
+ return error.message;
+ } else {
+ return String(error);
+ }
+}
+
+export function getErrorCode(error: unknown): number | null {
+ if (
+ typeof error === 'object' &&
+ error !== null &&
+ 'code' in error &&
+ typeof (error as Record<string, unknown>).code === 'number'
+ ) {
+ return (error as Record<string, number>).code;
+ } else {
+ return null;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/events.ts b/frontend-old/node_modules/@grpc/grpc-js/src/events.ts
new file mode 100644
index 0000000..7718746
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/events.ts
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export interface EmitterAugmentation1<Name extends string | symbol, Arg> {
+ addListener(event: Name, listener: (arg1: Arg) => void): this;
+ emit(event: Name, arg1: Arg): boolean;
+ on(event: Name, listener: (arg1: Arg) => void): this;
+ once(event: Name, listener: (arg1: Arg) => void): this;
+ prependListener(event: Name, listener: (arg1: Arg) => void): this;
+ prependOnceListener(event: Name, listener: (arg1: Arg) => void): this;
+ removeListener(event: Name, listener: (arg1: Arg) => void): this;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/experimental.ts b/frontend-old/node_modules/@grpc/grpc-js/src/experimental.ts
new file mode 100644
index 0000000..9e4bbf4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/experimental.ts
@@ -0,0 +1,48 @@
+export { trace, log } from './logging';
+export {
+ Resolver,
+ ResolverListener,
+ registerResolver,
+ ConfigSelector,
+ createResolver,
+} from './resolver';
+export { GrpcUri, uriToString } from './uri-parser';
+export { Duration, durationToMs } from './duration';
+export { ServiceConfig, MethodConfig, RetryPolicy } from './service-config';
+export { BackoffTimeout } from './backoff-timeout';
+export {
+ LoadBalancer,
+ LoadBalancingConfig,
+ ChannelControlHelper,
+ createChildChannelControlHelper,
+ registerLoadBalancerType,
+ getFirstUsableConfig,
+ validateLoadBalancingConfig,
+} from './load-balancer';
+export {
+ SubchannelAddress,
+ subchannelAddressToString,
+} from './subchannel-address';
+export { ChildLoadBalancerHandler } from './load-balancer-child-handler';
+export {
+ Picker,
+ UnavailablePicker,
+ QueuePicker,
+ PickResult,
+ PickArgs,
+ PickResultType,
+} from './picker';
+export { Call as CallStream } from './call-interface';
+export { Filter, BaseFilter, FilterFactory } from './filter';
+export { FilterStackFactory } from './filter-stack';
+export { registerAdminService } from './admin';
+export {
+ SubchannelInterface,
+ BaseSubchannelWrapper,
+ ConnectivityStateListener,
+} from './subchannel-interface';
+export {
+ OutlierDetectionLoadBalancingConfig,
+ SuccessRateEjectionConfig,
+ FailurePercentageEjectionConfig,
+} from './load-balancer-outlier-detection';
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/filter-stack.ts b/frontend-old/node_modules/@grpc/grpc-js/src/filter-stack.ts
new file mode 100644
index 0000000..910f5aa
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/filter-stack.ts
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { StatusObject, WriteObject } from './call-interface';
+import { Filter, FilterFactory } from './filter';
+import { Metadata } from './metadata';
+
+export class FilterStack implements Filter {
+ constructor(private readonly filters: Filter[]) {}
+
+ sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {
+ let result: Promise<Metadata> = metadata;
+
+ for (let i = 0; i < this.filters.length; i++) {
+ result = this.filters[i].sendMetadata(result);
+ }
+
+ return result;
+ }
+
+ receiveMetadata(metadata: Metadata) {
+ let result: Metadata = metadata;
+
+ for (let i = this.filters.length - 1; i >= 0; i--) {
+ result = this.filters[i].receiveMetadata(result);
+ }
+
+ return result;
+ }
+
+ sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {
+ let result: Promise<WriteObject> = message;
+
+ for (let i = 0; i < this.filters.length; i++) {
+ result = this.filters[i].sendMessage(result);
+ }
+
+ return result;
+ }
+
+ receiveMessage(message: Promise<Buffer>): Promise<Buffer> {
+ let result: Promise<Buffer> = message;
+
+ for (let i = this.filters.length - 1; i >= 0; i--) {
+ result = this.filters[i].receiveMessage(result);
+ }
+
+ return result;
+ }
+
+ receiveTrailers(status: StatusObject): StatusObject {
+ let result: StatusObject = status;
+
+ for (let i = this.filters.length - 1; i >= 0; i--) {
+ result = this.filters[i].receiveTrailers(result);
+ }
+
+ return result;
+ }
+
+ push(filters: Filter[]) {
+ this.filters.unshift(...filters);
+ }
+
+ getFilters(): Filter[] {
+ return this.filters;
+ }
+}
+
+export class FilterStackFactory implements FilterFactory<FilterStack> {
+ constructor(private readonly factories: Array<FilterFactory<Filter>>) {}
+
+ push(filterFactories: FilterFactory<Filter>[]) {
+ this.factories.unshift(...filterFactories);
+ }
+
+ clone(): FilterStackFactory {
+ return new FilterStackFactory([...this.factories]);
+ }
+
+ createFilter(): FilterStack {
+ return new FilterStack(
+ this.factories.map(factory => factory.createFilter())
+ );
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/filter.ts b/frontend-old/node_modules/@grpc/grpc-js/src/filter.ts
new file mode 100644
index 0000000..5313f91
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/filter.ts
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { StatusObject, WriteObject } from './call-interface';
+import { Metadata } from './metadata';
+
+/**
+ * Filter classes represent related per-call logic and state that is primarily
+ * used to modify incoming and outgoing data. All async filters can be
+ * rejected. The rejection error must be a StatusObject, and a rejection will
+ * cause the call to end with that status.
+ */
+export interface Filter {
+ sendMetadata(metadata: Promise<Metadata>): Promise<Metadata>;
+
+ receiveMetadata(metadata: Metadata): Metadata;
+
+ sendMessage(message: Promise<WriteObject>): Promise<WriteObject>;
+
+ receiveMessage(message: Promise<Buffer>): Promise<Buffer>;
+
+ receiveTrailers(status: StatusObject): StatusObject;
+}
+
+export abstract class BaseFilter implements Filter {
+ async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {
+ return metadata;
+ }
+
+ receiveMetadata(metadata: Metadata): Metadata {
+ return metadata;
+ }
+
+ async sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {
+ return message;
+ }
+
+ async receiveMessage(message: Promise<Buffer>): Promise<Buffer> {
+ return message;
+ }
+
+ receiveTrailers(status: StatusObject): StatusObject {
+ return status;
+ }
+}
+
+export interface FilterFactory<T extends Filter> {
+ createFilter(): T;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/channelz.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/channelz.ts
new file mode 100644
index 0000000..367cf27
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/channelz.ts
@@ -0,0 +1,73 @@
+import type * as grpc from '../index';
+import type { MessageTypeDefinition } from '@grpc/proto-loader';
+
+import type { ChannelzClient as _grpc_channelz_v1_ChannelzClient, ChannelzDefinition as _grpc_channelz_v1_ChannelzDefinition } from './grpc/channelz/v1/Channelz';
+
+type SubtypeConstructor<Constructor extends new (...args: any) => any, Subtype> = {
+ new(...args: ConstructorParameters<Constructor>): Subtype;
+};
+
+export interface ProtoGrpcType {
+ google: {
+ protobuf: {
+ Any: MessageTypeDefinition
+ BoolValue: MessageTypeDefinition
+ BytesValue: MessageTypeDefinition
+ DoubleValue: MessageTypeDefinition
+ Duration: MessageTypeDefinition
+ FloatValue: MessageTypeDefinition
+ Int32Value: MessageTypeDefinition
+ Int64Value: MessageTypeDefinition
+ StringValue: MessageTypeDefinition
+ Timestamp: MessageTypeDefinition
+ UInt32Value: MessageTypeDefinition
+ UInt64Value: MessageTypeDefinition
+ }
+ }
+ grpc: {
+ channelz: {
+ v1: {
+ Address: MessageTypeDefinition
+ Channel: MessageTypeDefinition
+ ChannelConnectivityState: MessageTypeDefinition
+ ChannelData: MessageTypeDefinition
+ ChannelRef: MessageTypeDefinition
+ ChannelTrace: MessageTypeDefinition
+ ChannelTraceEvent: MessageTypeDefinition
+ /**
+ * Channelz is a service exposed by gRPC servers that provides detailed debug
+ * information.
+ */
+ Channelz: SubtypeConstructor<typeof grpc.Client, _grpc_channelz_v1_ChannelzClient> & { service: _grpc_channelz_v1_ChannelzDefinition }
+ GetChannelRequest: MessageTypeDefinition
+ GetChannelResponse: MessageTypeDefinition
+ GetServerRequest: MessageTypeDefinition
+ GetServerResponse: MessageTypeDefinition
+ GetServerSocketsRequest: MessageTypeDefinition
+ GetServerSocketsResponse: MessageTypeDefinition
+ GetServersRequest: MessageTypeDefinition
+ GetServersResponse: MessageTypeDefinition
+ GetSocketRequest: MessageTypeDefinition
+ GetSocketResponse: MessageTypeDefinition
+ GetSubchannelRequest: MessageTypeDefinition
+ GetSubchannelResponse: MessageTypeDefinition
+ GetTopChannelsRequest: MessageTypeDefinition
+ GetTopChannelsResponse: MessageTypeDefinition
+ Security: MessageTypeDefinition
+ Server: MessageTypeDefinition
+ ServerData: MessageTypeDefinition
+ ServerRef: MessageTypeDefinition
+ Socket: MessageTypeDefinition
+ SocketData: MessageTypeDefinition
+ SocketOption: MessageTypeDefinition
+ SocketOptionLinger: MessageTypeDefinition
+ SocketOptionTcpInfo: MessageTypeDefinition
+ SocketOptionTimeout: MessageTypeDefinition
+ SocketRef: MessageTypeDefinition
+ Subchannel: MessageTypeDefinition
+ SubchannelRef: MessageTypeDefinition
+ }
+ }
+ }
+}
+
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Any.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Any.ts
new file mode 100644
index 0000000..fcaa672
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Any.ts
@@ -0,0 +1,13 @@
+// Original file: null
+
+import type { AnyExtension } from '@grpc/proto-loader';
+
+export type Any = AnyExtension | {
+ type_url: string;
+ value: Buffer | Uint8Array | string;
+}
+
+export interface Any__Output {
+ 'type_url': (string);
+ 'value': (Buffer);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BoolValue.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BoolValue.ts
new file mode 100644
index 0000000..86507ea
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BoolValue.ts
@@ -0,0 +1,10 @@
+// Original file: null
+
+
+export interface BoolValue {
+ 'value'?: (boolean);
+}
+
+export interface BoolValue__Output {
+ 'value': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BytesValue.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BytesValue.ts
new file mode 100644
index 0000000..9cec76f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/BytesValue.ts
@@ -0,0 +1,10 @@
+// Original file: null
+
+
+export interface BytesValue {
+ 'value'?: (Buffer | Uint8Array | string);
+}
+
+export interface BytesValue__Output {
+ 'value': (Buffer);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/DoubleValue.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/DoubleValue.ts
new file mode 100644
index 0000000..d70b303
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/DoubleValue.ts
@@ -0,0 +1,10 @@
+// Original file: null
+
+
+export interface DoubleValue {
+ 'value'?: (number | string);
+}
+
+export interface DoubleValue__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Duration.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Duration.ts
new file mode 100644
index 0000000..8595377
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Duration.ts
@@ -0,0 +1,13 @@
+// Original file: null
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface Duration {
+ 'seconds'?: (number | string | Long);
+ 'nanos'?: (number);
+}
+
+export interface Duration__Output {
+ 'seconds': (string);
+ 'nanos': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/FloatValue.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/FloatValue.ts
new file mode 100644
index 0000000..54a655f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/FloatValue.ts
@@ -0,0 +1,10 @@
+// Original file: null
+
+
+export interface FloatValue {
+ 'value'?: (number | string);
+}
+
+export interface FloatValue__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int32Value.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int32Value.ts
new file mode 100644
index 0000000..ec4eeb7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int32Value.ts
@@ -0,0 +1,10 @@
+// Original file: null
+
+
+export interface Int32Value {
+ 'value'?: (number);
+}
+
+export interface Int32Value__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int64Value.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int64Value.ts
new file mode 100644
index 0000000..f737519
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Int64Value.ts
@@ -0,0 +1,11 @@
+// Original file: null
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface Int64Value {
+ 'value'?: (number | string | Long);
+}
+
+export interface Int64Value__Output {
+ 'value': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/StringValue.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/StringValue.ts
new file mode 100644
index 0000000..673090e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/StringValue.ts
@@ -0,0 +1,10 @@
+// Original file: null
+
+
+export interface StringValue {
+ 'value'?: (string);
+}
+
+export interface StringValue__Output {
+ 'value': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Timestamp.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Timestamp.ts
new file mode 100644
index 0000000..ceaa32b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/Timestamp.ts
@@ -0,0 +1,13 @@
+// Original file: null
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface Timestamp {
+ 'seconds'?: (number | string | Long);
+ 'nanos'?: (number);
+}
+
+export interface Timestamp__Output {
+ 'seconds': (string);
+ 'nanos': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt32Value.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt32Value.ts
new file mode 100644
index 0000000..973ab34
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt32Value.ts
@@ -0,0 +1,10 @@
+// Original file: null
+
+
+export interface UInt32Value {
+ 'value'?: (number);
+}
+
+export interface UInt32Value__Output {
+ 'value': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt64Value.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt64Value.ts
new file mode 100644
index 0000000..7a85c39
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/google/protobuf/UInt64Value.ts
@@ -0,0 +1,11 @@
+// Original file: null
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface UInt64Value {
+ 'value'?: (number | string | Long);
+}
+
+export interface UInt64Value__Output {
+ 'value': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Address.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Address.ts
new file mode 100644
index 0000000..259cfea
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Address.ts
@@ -0,0 +1,89 @@
+// Original file: proto/channelz.proto
+
+import type { Any as _google_protobuf_Any, Any__Output as _google_protobuf_Any__Output } from '../../../google/protobuf/Any';
+
+/**
+ * An address type not included above.
+ */
+export interface _grpc_channelz_v1_Address_OtherAddress {
+ /**
+ * The human readable version of the value. This value should be set.
+ */
+ 'name'?: (string);
+ /**
+ * The actual address message.
+ */
+ 'value'?: (_google_protobuf_Any | null);
+}
+
+/**
+ * An address type not included above.
+ */
+export interface _grpc_channelz_v1_Address_OtherAddress__Output {
+ /**
+ * The human readable version of the value. This value should be set.
+ */
+ 'name': (string);
+ /**
+ * The actual address message.
+ */
+ 'value': (_google_protobuf_Any__Output | null);
+}
+
+export interface _grpc_channelz_v1_Address_TcpIpAddress {
+ /**
+ * Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16
+ * bytes in length.
+ */
+ 'ip_address'?: (Buffer | Uint8Array | string);
+ /**
+ * 0-64k, or -1 if not appropriate.
+ */
+ 'port'?: (number);
+}
+
+export interface _grpc_channelz_v1_Address_TcpIpAddress__Output {
+ /**
+ * Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16
+ * bytes in length.
+ */
+ 'ip_address': (Buffer);
+ /**
+ * 0-64k, or -1 if not appropriate.
+ */
+ 'port': (number);
+}
+
+/**
+ * A Unix Domain Socket address.
+ */
+export interface _grpc_channelz_v1_Address_UdsAddress {
+ 'filename'?: (string);
+}
+
+/**
+ * A Unix Domain Socket address.
+ */
+export interface _grpc_channelz_v1_Address_UdsAddress__Output {
+ 'filename': (string);
+}
+
+/**
+ * Address represents the address used to create the socket.
+ */
+export interface Address {
+ 'tcpip_address'?: (_grpc_channelz_v1_Address_TcpIpAddress | null);
+ 'uds_address'?: (_grpc_channelz_v1_Address_UdsAddress | null);
+ 'other_address'?: (_grpc_channelz_v1_Address_OtherAddress | null);
+ 'address'?: "tcpip_address"|"uds_address"|"other_address";
+}
+
+/**
+ * Address represents the address used to create the socket.
+ */
+export interface Address__Output {
+ 'tcpip_address'?: (_grpc_channelz_v1_Address_TcpIpAddress__Output | null);
+ 'uds_address'?: (_grpc_channelz_v1_Address_UdsAddress__Output | null);
+ 'other_address'?: (_grpc_channelz_v1_Address_OtherAddress__Output | null);
+ 'address': "tcpip_address"|"uds_address"|"other_address";
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channel.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channel.ts
new file mode 100644
index 0000000..93b4a26
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channel.ts
@@ -0,0 +1,68 @@
+// Original file: proto/channelz.proto
+
+import type { ChannelRef as _grpc_channelz_v1_ChannelRef, ChannelRef__Output as _grpc_channelz_v1_ChannelRef__Output } from '../../../grpc/channelz/v1/ChannelRef';
+import type { ChannelData as _grpc_channelz_v1_ChannelData, ChannelData__Output as _grpc_channelz_v1_ChannelData__Output } from '../../../grpc/channelz/v1/ChannelData';
+import type { SubchannelRef as _grpc_channelz_v1_SubchannelRef, SubchannelRef__Output as _grpc_channelz_v1_SubchannelRef__Output } from '../../../grpc/channelz/v1/SubchannelRef';
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+
+/**
+ * Channel is a logical grouping of channels, subchannels, and sockets.
+ */
+export interface Channel {
+ /**
+ * The identifier for this channel. This should bet set.
+ */
+ 'ref'?: (_grpc_channelz_v1_ChannelRef | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data'?: (_grpc_channelz_v1_ChannelData | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref'?: (_grpc_channelz_v1_SocketRef)[];
+}
+
+/**
+ * Channel is a logical grouping of channels, subchannels, and sockets.
+ */
+export interface Channel__Output {
+ /**
+ * The identifier for this channel. This should bet set.
+ */
+ 'ref': (_grpc_channelz_v1_ChannelRef__Output | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data': (_grpc_channelz_v1_ChannelData__Output | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref': (_grpc_channelz_v1_ChannelRef__Output)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref': (_grpc_channelz_v1_SubchannelRef__Output)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref': (_grpc_channelz_v1_SocketRef__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelConnectivityState.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelConnectivityState.ts
new file mode 100644
index 0000000..78fb069
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelConnectivityState.ts
@@ -0,0 +1,45 @@
+// Original file: proto/channelz.proto
+
+
+// Original file: proto/channelz.proto
+
+export const _grpc_channelz_v1_ChannelConnectivityState_State = {
+ UNKNOWN: 'UNKNOWN',
+ IDLE: 'IDLE',
+ CONNECTING: 'CONNECTING',
+ READY: 'READY',
+ TRANSIENT_FAILURE: 'TRANSIENT_FAILURE',
+ SHUTDOWN: 'SHUTDOWN',
+} as const;
+
+export type _grpc_channelz_v1_ChannelConnectivityState_State =
+ | 'UNKNOWN'
+ | 0
+ | 'IDLE'
+ | 1
+ | 'CONNECTING'
+ | 2
+ | 'READY'
+ | 3
+ | 'TRANSIENT_FAILURE'
+ | 4
+ | 'SHUTDOWN'
+ | 5
+
+export type _grpc_channelz_v1_ChannelConnectivityState_State__Output = typeof _grpc_channelz_v1_ChannelConnectivityState_State[keyof typeof _grpc_channelz_v1_ChannelConnectivityState_State]
+
+/**
+ * These come from the specified states in this document:
+ * https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
+ */
+export interface ChannelConnectivityState {
+ 'state'?: (_grpc_channelz_v1_ChannelConnectivityState_State);
+}
+
+/**
+ * These come from the specified states in this document:
+ * https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
+ */
+export interface ChannelConnectivityState__Output {
+ 'state': (_grpc_channelz_v1_ChannelConnectivityState_State__Output);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelData.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelData.ts
new file mode 100644
index 0000000..6d6824a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelData.ts
@@ -0,0 +1,76 @@
+// Original file: proto/channelz.proto
+
+import type { ChannelConnectivityState as _grpc_channelz_v1_ChannelConnectivityState, ChannelConnectivityState__Output as _grpc_channelz_v1_ChannelConnectivityState__Output } from '../../../grpc/channelz/v1/ChannelConnectivityState';
+import type { ChannelTrace as _grpc_channelz_v1_ChannelTrace, ChannelTrace__Output as _grpc_channelz_v1_ChannelTrace__Output } from '../../../grpc/channelz/v1/ChannelTrace';
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * Channel data is data related to a specific Channel or Subchannel.
+ */
+export interface ChannelData {
+ /**
+ * The connectivity state of the channel or subchannel. Implementations
+ * should always set this.
+ */
+ 'state'?: (_grpc_channelz_v1_ChannelConnectivityState | null);
+ /**
+ * The target this channel originally tried to connect to. May be absent
+ */
+ 'target'?: (string);
+ /**
+ * A trace of recent events on the channel. May be absent.
+ */
+ 'trace'?: (_grpc_channelz_v1_ChannelTrace | null);
+ /**
+ * The number of calls started on the channel
+ */
+ 'calls_started'?: (number | string | Long);
+ /**
+ * The number of calls that have completed with an OK status
+ */
+ 'calls_succeeded'?: (number | string | Long);
+ /**
+ * The number of calls that have completed with a non-OK status
+ */
+ 'calls_failed'?: (number | string | Long);
+ /**
+ * The last time a call was started on the channel.
+ */
+ 'last_call_started_timestamp'?: (_google_protobuf_Timestamp | null);
+}
+
+/**
+ * Channel data is data related to a specific Channel or Subchannel.
+ */
+export interface ChannelData__Output {
+ /**
+ * The connectivity state of the channel or subchannel. Implementations
+ * should always set this.
+ */
+ 'state': (_grpc_channelz_v1_ChannelConnectivityState__Output | null);
+ /**
+ * The target this channel originally tried to connect to. May be absent
+ */
+ 'target': (string);
+ /**
+ * A trace of recent events on the channel. May be absent.
+ */
+ 'trace': (_grpc_channelz_v1_ChannelTrace__Output | null);
+ /**
+ * The number of calls started on the channel
+ */
+ 'calls_started': (string);
+ /**
+ * The number of calls that have completed with an OK status
+ */
+ 'calls_succeeded': (string);
+ /**
+ * The number of calls that have completed with a non-OK status
+ */
+ 'calls_failed': (string);
+ /**
+ * The last time a call was started on the channel.
+ */
+ 'last_call_started_timestamp': (_google_protobuf_Timestamp__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelRef.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelRef.ts
new file mode 100644
index 0000000..231d008
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelRef.ts
@@ -0,0 +1,31 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * ChannelRef is a reference to a Channel.
+ */
+export interface ChannelRef {
+ /**
+ * The globally unique id for this channel. Must be a positive number.
+ */
+ 'channel_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the channel.
+ */
+ 'name'?: (string);
+}
+
+/**
+ * ChannelRef is a reference to a Channel.
+ */
+export interface ChannelRef__Output {
+ /**
+ * The globally unique id for this channel. Must be a positive number.
+ */
+ 'channel_id': (string);
+ /**
+ * An optional name associated with the channel.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTrace.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTrace.ts
new file mode 100644
index 0000000..7dbc8d9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTrace.ts
@@ -0,0 +1,45 @@
+// Original file: proto/channelz.proto
+
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { ChannelTraceEvent as _grpc_channelz_v1_ChannelTraceEvent, ChannelTraceEvent__Output as _grpc_channelz_v1_ChannelTraceEvent__Output } from '../../../grpc/channelz/v1/ChannelTraceEvent';
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * ChannelTrace represents the recent events that have occurred on the channel.
+ */
+export interface ChannelTrace {
+ /**
+ * Number of events ever logged in this tracing object. This can differ from
+ * events.size() because events can be overwritten or garbage collected by
+ * implementations.
+ */
+ 'num_events_logged'?: (number | string | Long);
+ /**
+ * Time that this channel was created.
+ */
+ 'creation_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * List of events that have occurred on this channel.
+ */
+ 'events'?: (_grpc_channelz_v1_ChannelTraceEvent)[];
+}
+
+/**
+ * ChannelTrace represents the recent events that have occurred on the channel.
+ */
+export interface ChannelTrace__Output {
+ /**
+ * Number of events ever logged in this tracing object. This can differ from
+ * events.size() because events can be overwritten or garbage collected by
+ * implementations.
+ */
+ 'num_events_logged': (string);
+ /**
+ * Time that this channel was created.
+ */
+ 'creation_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * List of events that have occurred on this channel.
+ */
+ 'events': (_grpc_channelz_v1_ChannelTraceEvent__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTraceEvent.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTraceEvent.ts
new file mode 100644
index 0000000..403e4f1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ChannelTraceEvent.ts
@@ -0,0 +1,91 @@
+// Original file: proto/channelz.proto
+
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { ChannelRef as _grpc_channelz_v1_ChannelRef, ChannelRef__Output as _grpc_channelz_v1_ChannelRef__Output } from '../../../grpc/channelz/v1/ChannelRef';
+import type { SubchannelRef as _grpc_channelz_v1_SubchannelRef, SubchannelRef__Output as _grpc_channelz_v1_SubchannelRef__Output } from '../../../grpc/channelz/v1/SubchannelRef';
+
+// Original file: proto/channelz.proto
+
+/**
+ * The supported severity levels of trace events.
+ */
+export const _grpc_channelz_v1_ChannelTraceEvent_Severity = {
+ CT_UNKNOWN: 'CT_UNKNOWN',
+ CT_INFO: 'CT_INFO',
+ CT_WARNING: 'CT_WARNING',
+ CT_ERROR: 'CT_ERROR',
+} as const;
+
+/**
+ * The supported severity levels of trace events.
+ */
+export type _grpc_channelz_v1_ChannelTraceEvent_Severity =
+ | 'CT_UNKNOWN'
+ | 0
+ | 'CT_INFO'
+ | 1
+ | 'CT_WARNING'
+ | 2
+ | 'CT_ERROR'
+ | 3
+
+/**
+ * The supported severity levels of trace events.
+ */
+export type _grpc_channelz_v1_ChannelTraceEvent_Severity__Output = typeof _grpc_channelz_v1_ChannelTraceEvent_Severity[keyof typeof _grpc_channelz_v1_ChannelTraceEvent_Severity]
+
+/**
+ * A trace event is an interesting thing that happened to a channel or
+ * subchannel, such as creation, address resolution, subchannel creation, etc.
+ */
+export interface ChannelTraceEvent {
+ /**
+ * High level description of the event.
+ */
+ 'description'?: (string);
+ /**
+ * the severity of the trace event
+ */
+ 'severity'?: (_grpc_channelz_v1_ChannelTraceEvent_Severity);
+ /**
+ * When this event occurred.
+ */
+ 'timestamp'?: (_google_protobuf_Timestamp | null);
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef | null);
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef | null);
+ /**
+ * ref of referenced channel or subchannel.
+ * Optional, only present if this event refers to a child object. For example,
+ * this field would be filled if this trace event was for a subchannel being
+ * created.
+ */
+ 'child_ref'?: "channel_ref"|"subchannel_ref";
+}
+
+/**
+ * A trace event is an interesting thing that happened to a channel or
+ * subchannel, such as creation, address resolution, subchannel creation, etc.
+ */
+export interface ChannelTraceEvent__Output {
+ /**
+ * High level description of the event.
+ */
+ 'description': (string);
+ /**
+ * the severity of the trace event
+ */
+ 'severity': (_grpc_channelz_v1_ChannelTraceEvent_Severity__Output);
+ /**
+ * When this event occurred.
+ */
+ 'timestamp': (_google_protobuf_Timestamp__Output | null);
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef__Output | null);
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef__Output | null);
+ /**
+ * ref of referenced channel or subchannel.
+ * Optional, only present if this event refers to a child object. For example,
+ * this field would be filled if this trace event was for a subchannel being
+ * created.
+ */
+ 'child_ref': "channel_ref"|"subchannel_ref";
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channelz.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channelz.ts
new file mode 100644
index 0000000..4c8c18a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Channelz.ts
@@ -0,0 +1,178 @@
+// Original file: proto/channelz.proto
+
+import type * as grpc from '../../../../index'
+import type { MethodDefinition } from '@grpc/proto-loader'
+import type { GetChannelRequest as _grpc_channelz_v1_GetChannelRequest, GetChannelRequest__Output as _grpc_channelz_v1_GetChannelRequest__Output } from '../../../grpc/channelz/v1/GetChannelRequest';
+import type { GetChannelResponse as _grpc_channelz_v1_GetChannelResponse, GetChannelResponse__Output as _grpc_channelz_v1_GetChannelResponse__Output } from '../../../grpc/channelz/v1/GetChannelResponse';
+import type { GetServerRequest as _grpc_channelz_v1_GetServerRequest, GetServerRequest__Output as _grpc_channelz_v1_GetServerRequest__Output } from '../../../grpc/channelz/v1/GetServerRequest';
+import type { GetServerResponse as _grpc_channelz_v1_GetServerResponse, GetServerResponse__Output as _grpc_channelz_v1_GetServerResponse__Output } from '../../../grpc/channelz/v1/GetServerResponse';
+import type { GetServerSocketsRequest as _grpc_channelz_v1_GetServerSocketsRequest, GetServerSocketsRequest__Output as _grpc_channelz_v1_GetServerSocketsRequest__Output } from '../../../grpc/channelz/v1/GetServerSocketsRequest';
+import type { GetServerSocketsResponse as _grpc_channelz_v1_GetServerSocketsResponse, GetServerSocketsResponse__Output as _grpc_channelz_v1_GetServerSocketsResponse__Output } from '../../../grpc/channelz/v1/GetServerSocketsResponse';
+import type { GetServersRequest as _grpc_channelz_v1_GetServersRequest, GetServersRequest__Output as _grpc_channelz_v1_GetServersRequest__Output } from '../../../grpc/channelz/v1/GetServersRequest';
+import type { GetServersResponse as _grpc_channelz_v1_GetServersResponse, GetServersResponse__Output as _grpc_channelz_v1_GetServersResponse__Output } from '../../../grpc/channelz/v1/GetServersResponse';
+import type { GetSocketRequest as _grpc_channelz_v1_GetSocketRequest, GetSocketRequest__Output as _grpc_channelz_v1_GetSocketRequest__Output } from '../../../grpc/channelz/v1/GetSocketRequest';
+import type { GetSocketResponse as _grpc_channelz_v1_GetSocketResponse, GetSocketResponse__Output as _grpc_channelz_v1_GetSocketResponse__Output } from '../../../grpc/channelz/v1/GetSocketResponse';
+import type { GetSubchannelRequest as _grpc_channelz_v1_GetSubchannelRequest, GetSubchannelRequest__Output as _grpc_channelz_v1_GetSubchannelRequest__Output } from '../../../grpc/channelz/v1/GetSubchannelRequest';
+import type { GetSubchannelResponse as _grpc_channelz_v1_GetSubchannelResponse, GetSubchannelResponse__Output as _grpc_channelz_v1_GetSubchannelResponse__Output } from '../../../grpc/channelz/v1/GetSubchannelResponse';
+import type { GetTopChannelsRequest as _grpc_channelz_v1_GetTopChannelsRequest, GetTopChannelsRequest__Output as _grpc_channelz_v1_GetTopChannelsRequest__Output } from '../../../grpc/channelz/v1/GetTopChannelsRequest';
+import type { GetTopChannelsResponse as _grpc_channelz_v1_GetTopChannelsResponse, GetTopChannelsResponse__Output as _grpc_channelz_v1_GetTopChannelsResponse__Output } from '../../../grpc/channelz/v1/GetTopChannelsResponse';
+
+/**
+ * Channelz is a service exposed by gRPC servers that provides detailed debug
+ * information.
+ */
+export interface ChannelzClient extends grpc.Client {
+ /**
+ * Returns a single Channel, or else a NOT_FOUND code.
+ */
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+ GetChannel(argument: _grpc_channelz_v1_GetChannelRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetChannelResponse__Output>): grpc.ClientUnaryCall;
+
+ /**
+ * Returns a single Server, or else a NOT_FOUND code.
+ */
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ GetServer(argument: _grpc_channelz_v1_GetServerRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Server, or else a NOT_FOUND code.
+ */
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+ getServer(argument: _grpc_channelz_v1_GetServerRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerResponse__Output>): grpc.ClientUnaryCall;
+
+ /**
+ * Gets all server sockets that exist in the process.
+ */
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ GetServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all server sockets that exist in the process.
+ */
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+ getServerSockets(argument: _grpc_channelz_v1_GetServerSocketsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServerSocketsResponse__Output>): grpc.ClientUnaryCall;
+
+ /**
+ * Gets all servers that exist in the process.
+ */
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ GetServers(argument: _grpc_channelz_v1_GetServersRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all servers that exist in the process.
+ */
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+ getServers(argument: _grpc_channelz_v1_GetServersRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetServersResponse__Output>): grpc.ClientUnaryCall;
+
+ /**
+ * Returns a single Socket or else a NOT_FOUND code.
+ */
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ GetSocket(argument: _grpc_channelz_v1_GetSocketRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Socket or else a NOT_FOUND code.
+ */
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+ getSocket(argument: _grpc_channelz_v1_GetSocketRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSocketResponse__Output>): grpc.ClientUnaryCall;
+
+ /**
+ * Returns a single Subchannel, or else a NOT_FOUND code.
+ */
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ GetSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Returns a single Subchannel, or else a NOT_FOUND code.
+ */
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+ getSubchannel(argument: _grpc_channelz_v1_GetSubchannelRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetSubchannelResponse__Output>): grpc.ClientUnaryCall;
+
+ /**
+ * Gets all root channels (i.e. channels the application has directly
+ * created). This does not include subchannels nor non-top level channels.
+ */
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ GetTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ /**
+ * Gets all root channels (i.e. channels the application has directly
+ * created). This does not include subchannels nor non-top level channels.
+ */
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, metadata: grpc.Metadata, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, options: grpc.CallOptions, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+ getTopChannels(argument: _grpc_channelz_v1_GetTopChannelsRequest, callback: grpc.requestCallback<_grpc_channelz_v1_GetTopChannelsResponse__Output>): grpc.ClientUnaryCall;
+
+}
+
+/**
+ * Channelz is a service exposed by gRPC servers that provides detailed debug
+ * information.
+ */
+export interface ChannelzHandlers extends grpc.UntypedServiceImplementation {
+ /**
+ * Returns a single Channel, or else a NOT_FOUND code.
+ */
+ GetChannel: grpc.handleUnaryCall<_grpc_channelz_v1_GetChannelRequest__Output, _grpc_channelz_v1_GetChannelResponse>;
+
+ /**
+ * Returns a single Server, or else a NOT_FOUND code.
+ */
+ GetServer: grpc.handleUnaryCall<_grpc_channelz_v1_GetServerRequest__Output, _grpc_channelz_v1_GetServerResponse>;
+
+ /**
+ * Gets all server sockets that exist in the process.
+ */
+ GetServerSockets: grpc.handleUnaryCall<_grpc_channelz_v1_GetServerSocketsRequest__Output, _grpc_channelz_v1_GetServerSocketsResponse>;
+
+ /**
+ * Gets all servers that exist in the process.
+ */
+ GetServers: grpc.handleUnaryCall<_grpc_channelz_v1_GetServersRequest__Output, _grpc_channelz_v1_GetServersResponse>;
+
+ /**
+ * Returns a single Socket or else a NOT_FOUND code.
+ */
+ GetSocket: grpc.handleUnaryCall<_grpc_channelz_v1_GetSocketRequest__Output, _grpc_channelz_v1_GetSocketResponse>;
+
+ /**
+ * Returns a single Subchannel, or else a NOT_FOUND code.
+ */
+ GetSubchannel: grpc.handleUnaryCall<_grpc_channelz_v1_GetSubchannelRequest__Output, _grpc_channelz_v1_GetSubchannelResponse>;
+
+ /**
+ * Gets all root channels (i.e. channels the application has directly
+ * created). This does not include subchannels nor non-top level channels.
+ */
+ GetTopChannels: grpc.handleUnaryCall<_grpc_channelz_v1_GetTopChannelsRequest__Output, _grpc_channelz_v1_GetTopChannelsResponse>;
+
+}
+
+export interface ChannelzDefinition extends grpc.ServiceDefinition {
+ GetChannel: MethodDefinition<_grpc_channelz_v1_GetChannelRequest, _grpc_channelz_v1_GetChannelResponse, _grpc_channelz_v1_GetChannelRequest__Output, _grpc_channelz_v1_GetChannelResponse__Output>
+ GetServer: MethodDefinition<_grpc_channelz_v1_GetServerRequest, _grpc_channelz_v1_GetServerResponse, _grpc_channelz_v1_GetServerRequest__Output, _grpc_channelz_v1_GetServerResponse__Output>
+ GetServerSockets: MethodDefinition<_grpc_channelz_v1_GetServerSocketsRequest, _grpc_channelz_v1_GetServerSocketsResponse, _grpc_channelz_v1_GetServerSocketsRequest__Output, _grpc_channelz_v1_GetServerSocketsResponse__Output>
+ GetServers: MethodDefinition<_grpc_channelz_v1_GetServersRequest, _grpc_channelz_v1_GetServersResponse, _grpc_channelz_v1_GetServersRequest__Output, _grpc_channelz_v1_GetServersResponse__Output>
+ GetSocket: MethodDefinition<_grpc_channelz_v1_GetSocketRequest, _grpc_channelz_v1_GetSocketResponse, _grpc_channelz_v1_GetSocketRequest__Output, _grpc_channelz_v1_GetSocketResponse__Output>
+ GetSubchannel: MethodDefinition<_grpc_channelz_v1_GetSubchannelRequest, _grpc_channelz_v1_GetSubchannelResponse, _grpc_channelz_v1_GetSubchannelRequest__Output, _grpc_channelz_v1_GetSubchannelResponse__Output>
+ GetTopChannels: MethodDefinition<_grpc_channelz_v1_GetTopChannelsRequest, _grpc_channelz_v1_GetTopChannelsResponse, _grpc_channelz_v1_GetTopChannelsRequest__Output, _grpc_channelz_v1_GetTopChannelsResponse__Output>
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelRequest.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelRequest.ts
new file mode 100644
index 0000000..437e2d6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelRequest.ts
@@ -0,0 +1,17 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface GetChannelRequest {
+ /**
+ * channel_id is the identifier of the specific channel to get.
+ */
+ 'channel_id'?: (number | string | Long);
+}
+
+export interface GetChannelRequest__Output {
+ /**
+ * channel_id is the identifier of the specific channel to get.
+ */
+ 'channel_id': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelResponse.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelResponse.ts
new file mode 100644
index 0000000..2e967a4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetChannelResponse.ts
@@ -0,0 +1,19 @@
+// Original file: proto/channelz.proto
+
+import type { Channel as _grpc_channelz_v1_Channel, Channel__Output as _grpc_channelz_v1_Channel__Output } from '../../../grpc/channelz/v1/Channel';
+
+export interface GetChannelResponse {
+ /**
+ * The Channel that corresponds to the requested channel_id. This field
+ * should be set.
+ */
+ 'channel'?: (_grpc_channelz_v1_Channel | null);
+}
+
+export interface GetChannelResponse__Output {
+ /**
+ * The Channel that corresponds to the requested channel_id. This field
+ * should be set.
+ */
+ 'channel': (_grpc_channelz_v1_Channel__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerRequest.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerRequest.ts
new file mode 100644
index 0000000..f5d4a29
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerRequest.ts
@@ -0,0 +1,17 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface GetServerRequest {
+ /**
+ * server_id is the identifier of the specific server to get.
+ */
+ 'server_id'?: (number | string | Long);
+}
+
+export interface GetServerRequest__Output {
+ /**
+ * server_id is the identifier of the specific server to get.
+ */
+ 'server_id': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerResponse.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerResponse.ts
new file mode 100644
index 0000000..fe00782
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerResponse.ts
@@ -0,0 +1,19 @@
+// Original file: proto/channelz.proto
+
+import type { Server as _grpc_channelz_v1_Server, Server__Output as _grpc_channelz_v1_Server__Output } from '../../../grpc/channelz/v1/Server';
+
+export interface GetServerResponse {
+ /**
+ * The Server that corresponds to the requested server_id. This field
+ * should be set.
+ */
+ 'server'?: (_grpc_channelz_v1_Server | null);
+}
+
+export interface GetServerResponse__Output {
+ /**
+ * The Server that corresponds to the requested server_id. This field
+ * should be set.
+ */
+ 'server': (_grpc_channelz_v1_Server__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsRequest.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsRequest.ts
new file mode 100644
index 0000000..c33056e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsRequest.ts
@@ -0,0 +1,39 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface GetServerSocketsRequest {
+ 'server_id'?: (number | string | Long);
+ /**
+ * start_socket_id indicates that only sockets at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_socket_id'?: (number | string | Long);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results'?: (number | string | Long);
+}
+
+export interface GetServerSocketsRequest__Output {
+ 'server_id': (string);
+ /**
+ * start_socket_id indicates that only sockets at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_socket_id': (string);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsResponse.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsResponse.ts
new file mode 100644
index 0000000..112f277
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServerSocketsResponse.ts
@@ -0,0 +1,33 @@
+// Original file: proto/channelz.proto
+
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+
+export interface GetServerSocketsResponse {
+ /**
+ * list of socket refs that the connection detail service knows about. Sorted in
+ * ascending socket_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'socket_ref'?: (_grpc_channelz_v1_SocketRef)[];
+ /**
+ * If set, indicates that the list of sockets is the final list. Requesting
+ * more sockets will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end'?: (boolean);
+}
+
+export interface GetServerSocketsResponse__Output {
+ /**
+ * list of socket refs that the connection detail service knows about. Sorted in
+ * ascending socket_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'socket_ref': (_grpc_channelz_v1_SocketRef__Output)[];
+ /**
+ * If set, indicates that the list of sockets is the final list. Requesting
+ * more sockets will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersRequest.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersRequest.ts
new file mode 100644
index 0000000..2defea6
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersRequest.ts
@@ -0,0 +1,37 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface GetServersRequest {
+ /**
+ * start_server_id indicates that only servers at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_server_id'?: (number | string | Long);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results'?: (number | string | Long);
+}
+
+export interface GetServersRequest__Output {
+ /**
+ * start_server_id indicates that only servers at or above this id should be
+ * included in the results.
+ * To request the first page, this must be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_server_id': (string);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersResponse.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersResponse.ts
new file mode 100644
index 0000000..b07893b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetServersResponse.ts
@@ -0,0 +1,33 @@
+// Original file: proto/channelz.proto
+
+import type { Server as _grpc_channelz_v1_Server, Server__Output as _grpc_channelz_v1_Server__Output } from '../../../grpc/channelz/v1/Server';
+
+export interface GetServersResponse {
+ /**
+ * list of servers that the connection detail service knows about. Sorted in
+ * ascending server_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'server'?: (_grpc_channelz_v1_Server)[];
+ /**
+ * If set, indicates that the list of servers is the final list. Requesting
+ * more servers will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end'?: (boolean);
+}
+
+export interface GetServersResponse__Output {
+ /**
+ * list of servers that the connection detail service knows about. Sorted in
+ * ascending server_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'server': (_grpc_channelz_v1_Server__Output)[];
+ /**
+ * If set, indicates that the list of servers is the final list. Requesting
+ * more servers will only return more if they are created after this RPC
+ * completes.
+ */
+ 'end': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketRequest.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketRequest.ts
new file mode 100644
index 0000000..b3dc160
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketRequest.ts
@@ -0,0 +1,29 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface GetSocketRequest {
+ /**
+ * socket_id is the identifier of the specific socket to get.
+ */
+ 'socket_id'?: (number | string | Long);
+ /**
+ * If true, the response will contain only high level information
+ * that is inexpensive to obtain. Fields thay may be omitted are
+ * documented.
+ */
+ 'summary'?: (boolean);
+}
+
+export interface GetSocketRequest__Output {
+ /**
+ * socket_id is the identifier of the specific socket to get.
+ */
+ 'socket_id': (string);
+ /**
+ * If true, the response will contain only high level information
+ * that is inexpensive to obtain. Fields thay may be omitted are
+ * documented.
+ */
+ 'summary': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketResponse.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketResponse.ts
new file mode 100644
index 0000000..b6304b7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSocketResponse.ts
@@ -0,0 +1,19 @@
+// Original file: proto/channelz.proto
+
+import type { Socket as _grpc_channelz_v1_Socket, Socket__Output as _grpc_channelz_v1_Socket__Output } from '../../../grpc/channelz/v1/Socket';
+
+export interface GetSocketResponse {
+ /**
+ * The Socket that corresponds to the requested socket_id. This field
+ * should be set.
+ */
+ 'socket'?: (_grpc_channelz_v1_Socket | null);
+}
+
+export interface GetSocketResponse__Output {
+ /**
+ * The Socket that corresponds to the requested socket_id. This field
+ * should be set.
+ */
+ 'socket': (_grpc_channelz_v1_Socket__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelRequest.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelRequest.ts
new file mode 100644
index 0000000..f481a81
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelRequest.ts
@@ -0,0 +1,17 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface GetSubchannelRequest {
+ /**
+ * subchannel_id is the identifier of the specific subchannel to get.
+ */
+ 'subchannel_id'?: (number | string | Long);
+}
+
+export interface GetSubchannelRequest__Output {
+ /**
+ * subchannel_id is the identifier of the specific subchannel to get.
+ */
+ 'subchannel_id': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelResponse.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelResponse.ts
new file mode 100644
index 0000000..57d2bf2
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetSubchannelResponse.ts
@@ -0,0 +1,19 @@
+// Original file: proto/channelz.proto
+
+import type { Subchannel as _grpc_channelz_v1_Subchannel, Subchannel__Output as _grpc_channelz_v1_Subchannel__Output } from '../../../grpc/channelz/v1/Subchannel';
+
+export interface GetSubchannelResponse {
+ /**
+ * The Subchannel that corresponds to the requested subchannel_id. This
+ * field should be set.
+ */
+ 'subchannel'?: (_grpc_channelz_v1_Subchannel | null);
+}
+
+export interface GetSubchannelResponse__Output {
+ /**
+ * The Subchannel that corresponds to the requested subchannel_id. This
+ * field should be set.
+ */
+ 'subchannel': (_grpc_channelz_v1_Subchannel__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsRequest.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsRequest.ts
new file mode 100644
index 0000000..a122d7a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsRequest.ts
@@ -0,0 +1,37 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+export interface GetTopChannelsRequest {
+ /**
+ * start_channel_id indicates that only channels at or above this id should be
+ * included in the results.
+ * To request the first page, this should be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_channel_id'?: (number | string | Long);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results'?: (number | string | Long);
+}
+
+export interface GetTopChannelsRequest__Output {
+ /**
+ * start_channel_id indicates that only channels at or above this id should be
+ * included in the results.
+ * To request the first page, this should be set to 0. To request
+ * subsequent pages, the client generates this value by adding 1 to
+ * the highest seen result ID.
+ */
+ 'start_channel_id': (string);
+ /**
+ * If non-zero, the server will return a page of results containing
+ * at most this many items. If zero, the server will choose a
+ * reasonable page size. Must never be negative.
+ */
+ 'max_results': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsResponse.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsResponse.ts
new file mode 100644
index 0000000..d96e636
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/GetTopChannelsResponse.ts
@@ -0,0 +1,33 @@
+// Original file: proto/channelz.proto
+
+import type { Channel as _grpc_channelz_v1_Channel, Channel__Output as _grpc_channelz_v1_Channel__Output } from '../../../grpc/channelz/v1/Channel';
+
+export interface GetTopChannelsResponse {
+ /**
+ * list of channels that the connection detail service knows about. Sorted in
+ * ascending channel_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'channel'?: (_grpc_channelz_v1_Channel)[];
+ /**
+ * If set, indicates that the list of channels is the final list. Requesting
+ * more channels can only return more if they are created after this RPC
+ * completes.
+ */
+ 'end'?: (boolean);
+}
+
+export interface GetTopChannelsResponse__Output {
+ /**
+ * list of channels that the connection detail service knows about. Sorted in
+ * ascending channel_id order.
+ * Must contain at least 1 result, otherwise 'end' must be true.
+ */
+ 'channel': (_grpc_channelz_v1_Channel__Output)[];
+ /**
+ * If set, indicates that the list of channels is the final list. Requesting
+ * more channels can only return more if they are created after this RPC
+ * completes.
+ */
+ 'end': (boolean);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Security.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Security.ts
new file mode 100644
index 0000000..e555d69
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Security.ts
@@ -0,0 +1,87 @@
+// Original file: proto/channelz.proto
+
+import type { Any as _google_protobuf_Any, Any__Output as _google_protobuf_Any__Output } from '../../../google/protobuf/Any';
+
+export interface _grpc_channelz_v1_Security_OtherSecurity {
+ /**
+ * The human readable version of the value.
+ */
+ 'name'?: (string);
+ /**
+ * The actual security details message.
+ */
+ 'value'?: (_google_protobuf_Any | null);
+}
+
+export interface _grpc_channelz_v1_Security_OtherSecurity__Output {
+ /**
+ * The human readable version of the value.
+ */
+ 'name': (string);
+ /**
+ * The actual security details message.
+ */
+ 'value': (_google_protobuf_Any__Output | null);
+}
+
+export interface _grpc_channelz_v1_Security_Tls {
+ /**
+ * The cipher suite name in the RFC 4346 format:
+ * https://tools.ietf.org/html/rfc4346#appendix-C
+ */
+ 'standard_name'?: (string);
+ /**
+ * Some other way to describe the cipher suite if
+ * the RFC 4346 name is not available.
+ */
+ 'other_name'?: (string);
+ /**
+ * the certificate used by this endpoint.
+ */
+ 'local_certificate'?: (Buffer | Uint8Array | string);
+ /**
+ * the certificate used by the remote endpoint.
+ */
+ 'remote_certificate'?: (Buffer | Uint8Array | string);
+ 'cipher_suite'?: "standard_name"|"other_name";
+}
+
+export interface _grpc_channelz_v1_Security_Tls__Output {
+ /**
+ * The cipher suite name in the RFC 4346 format:
+ * https://tools.ietf.org/html/rfc4346#appendix-C
+ */
+ 'standard_name'?: (string);
+ /**
+ * Some other way to describe the cipher suite if
+ * the RFC 4346 name is not available.
+ */
+ 'other_name'?: (string);
+ /**
+ * the certificate used by this endpoint.
+ */
+ 'local_certificate': (Buffer);
+ /**
+ * the certificate used by the remote endpoint.
+ */
+ 'remote_certificate': (Buffer);
+ 'cipher_suite': "standard_name"|"other_name";
+}
+
+/**
+ * Security represents details about how secure the socket is.
+ */
+export interface Security {
+ 'tls'?: (_grpc_channelz_v1_Security_Tls | null);
+ 'other'?: (_grpc_channelz_v1_Security_OtherSecurity | null);
+ 'model'?: "tls"|"other";
+}
+
+/**
+ * Security represents details about how secure the socket is.
+ */
+export interface Security__Output {
+ 'tls'?: (_grpc_channelz_v1_Security_Tls__Output | null);
+ 'other'?: (_grpc_channelz_v1_Security_OtherSecurity__Output | null);
+ 'model': "tls"|"other";
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Server.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Server.ts
new file mode 100644
index 0000000..9583433
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Server.ts
@@ -0,0 +1,45 @@
+// Original file: proto/channelz.proto
+
+import type { ServerRef as _grpc_channelz_v1_ServerRef, ServerRef__Output as _grpc_channelz_v1_ServerRef__Output } from '../../../grpc/channelz/v1/ServerRef';
+import type { ServerData as _grpc_channelz_v1_ServerData, ServerData__Output as _grpc_channelz_v1_ServerData__Output } from '../../../grpc/channelz/v1/ServerData';
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+
+/**
+ * Server represents a single server. There may be multiple servers in a single
+ * program.
+ */
+export interface Server {
+ /**
+ * The identifier for a Server. This should be set.
+ */
+ 'ref'?: (_grpc_channelz_v1_ServerRef | null);
+ /**
+ * The associated data of the Server.
+ */
+ 'data'?: (_grpc_channelz_v1_ServerData | null);
+ /**
+ * The sockets that the server is listening on. There are no ordering
+ * guarantees. This may be absent.
+ */
+ 'listen_socket'?: (_grpc_channelz_v1_SocketRef)[];
+}
+
+/**
+ * Server represents a single server. There may be multiple servers in a single
+ * program.
+ */
+export interface Server__Output {
+ /**
+ * The identifier for a Server. This should be set.
+ */
+ 'ref': (_grpc_channelz_v1_ServerRef__Output | null);
+ /**
+ * The associated data of the Server.
+ */
+ 'data': (_grpc_channelz_v1_ServerData__Output | null);
+ /**
+ * The sockets that the server is listening on. There are no ordering
+ * guarantees. This may be absent.
+ */
+ 'listen_socket': (_grpc_channelz_v1_SocketRef__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerData.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerData.ts
new file mode 100644
index 0000000..ce48e36
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerData.ts
@@ -0,0 +1,57 @@
+// Original file: proto/channelz.proto
+
+import type { ChannelTrace as _grpc_channelz_v1_ChannelTrace, ChannelTrace__Output as _grpc_channelz_v1_ChannelTrace__Output } from '../../../grpc/channelz/v1/ChannelTrace';
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * ServerData is data for a specific Server.
+ */
+export interface ServerData {
+ /**
+ * A trace of recent events on the server. May be absent.
+ */
+ 'trace'?: (_grpc_channelz_v1_ChannelTrace | null);
+ /**
+ * The number of incoming calls started on the server
+ */
+ 'calls_started'?: (number | string | Long);
+ /**
+ * The number of incoming calls that have completed with an OK status
+ */
+ 'calls_succeeded'?: (number | string | Long);
+ /**
+ * The number of incoming calls that have a completed with a non-OK status
+ */
+ 'calls_failed'?: (number | string | Long);
+ /**
+ * The last time a call was started on the server.
+ */
+ 'last_call_started_timestamp'?: (_google_protobuf_Timestamp | null);
+}
+
+/**
+ * ServerData is data for a specific Server.
+ */
+export interface ServerData__Output {
+ /**
+ * A trace of recent events on the server. May be absent.
+ */
+ 'trace': (_grpc_channelz_v1_ChannelTrace__Output | null);
+ /**
+ * The number of incoming calls started on the server
+ */
+ 'calls_started': (string);
+ /**
+ * The number of incoming calls that have completed with an OK status
+ */
+ 'calls_succeeded': (string);
+ /**
+ * The number of incoming calls that have a completed with a non-OK status
+ */
+ 'calls_failed': (string);
+ /**
+ * The last time a call was started on the server.
+ */
+ 'last_call_started_timestamp': (_google_protobuf_Timestamp__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerRef.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerRef.ts
new file mode 100644
index 0000000..389183b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/ServerRef.ts
@@ -0,0 +1,31 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * ServerRef is a reference to a Server.
+ */
+export interface ServerRef {
+ /**
+ * A globally unique identifier for this server. Must be a positive number.
+ */
+ 'server_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the server.
+ */
+ 'name'?: (string);
+}
+
+/**
+ * ServerRef is a reference to a Server.
+ */
+export interface ServerRef__Output {
+ /**
+ * A globally unique identifier for this server. Must be a positive number.
+ */
+ 'server_id': (string);
+ /**
+ * An optional name associated with the server.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Socket.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Socket.ts
new file mode 100644
index 0000000..5829afe
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Socket.ts
@@ -0,0 +1,70 @@
+// Original file: proto/channelz.proto
+
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+import type { SocketData as _grpc_channelz_v1_SocketData, SocketData__Output as _grpc_channelz_v1_SocketData__Output } from '../../../grpc/channelz/v1/SocketData';
+import type { Address as _grpc_channelz_v1_Address, Address__Output as _grpc_channelz_v1_Address__Output } from '../../../grpc/channelz/v1/Address';
+import type { Security as _grpc_channelz_v1_Security, Security__Output as _grpc_channelz_v1_Security__Output } from '../../../grpc/channelz/v1/Security';
+
+/**
+ * Information about an actual connection. Pronounced "sock-ay".
+ */
+export interface Socket {
+ /**
+ * The identifier for the Socket.
+ */
+ 'ref'?: (_grpc_channelz_v1_SocketRef | null);
+ /**
+ * Data specific to this Socket.
+ */
+ 'data'?: (_grpc_channelz_v1_SocketData | null);
+ /**
+ * The locally bound address.
+ */
+ 'local'?: (_grpc_channelz_v1_Address | null);
+ /**
+ * The remote bound address. May be absent.
+ */
+ 'remote'?: (_grpc_channelz_v1_Address | null);
+ /**
+ * Security details for this socket. May be absent if not available, or
+ * there is no security on the socket.
+ */
+ 'security'?: (_grpc_channelz_v1_Security | null);
+ /**
+ * Optional, represents the name of the remote endpoint, if different than
+ * the original target name.
+ */
+ 'remote_name'?: (string);
+}
+
+/**
+ * Information about an actual connection. Pronounced "sock-ay".
+ */
+export interface Socket__Output {
+ /**
+ * The identifier for the Socket.
+ */
+ 'ref': (_grpc_channelz_v1_SocketRef__Output | null);
+ /**
+ * Data specific to this Socket.
+ */
+ 'data': (_grpc_channelz_v1_SocketData__Output | null);
+ /**
+ * The locally bound address.
+ */
+ 'local': (_grpc_channelz_v1_Address__Output | null);
+ /**
+ * The remote bound address. May be absent.
+ */
+ 'remote': (_grpc_channelz_v1_Address__Output | null);
+ /**
+ * Security details for this socket. May be absent if not available, or
+ * there is no security on the socket.
+ */
+ 'security': (_grpc_channelz_v1_Security__Output | null);
+ /**
+ * Optional, represents the name of the remote endpoint, if different than
+ * the original target name.
+ */
+ 'remote_name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketData.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketData.ts
new file mode 100644
index 0000000..c62d4d1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketData.ts
@@ -0,0 +1,150 @@
+// Original file: proto/channelz.proto
+
+import type { Timestamp as _google_protobuf_Timestamp, Timestamp__Output as _google_protobuf_Timestamp__Output } from '../../../google/protobuf/Timestamp';
+import type { Int64Value as _google_protobuf_Int64Value, Int64Value__Output as _google_protobuf_Int64Value__Output } from '../../../google/protobuf/Int64Value';
+import type { SocketOption as _grpc_channelz_v1_SocketOption, SocketOption__Output as _grpc_channelz_v1_SocketOption__Output } from '../../../grpc/channelz/v1/SocketOption';
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * SocketData is data associated for a specific Socket. The fields present
+ * are specific to the implementation, so there may be minor differences in
+ * the semantics. (e.g. flow control windows)
+ */
+export interface SocketData {
+ /**
+ * The number of streams that have been started.
+ */
+ 'streams_started'?: (number | string | Long);
+ /**
+ * The number of streams that have ended successfully:
+ * On client side, received frame with eos bit set;
+ * On server side, sent frame with eos bit set.
+ */
+ 'streams_succeeded'?: (number | string | Long);
+ /**
+ * The number of streams that have ended unsuccessfully:
+ * On client side, ended without receiving frame with eos bit set;
+ * On server side, ended without sending frame with eos bit set.
+ */
+ 'streams_failed'?: (number | string | Long);
+ /**
+ * The number of grpc messages successfully sent on this socket.
+ */
+ 'messages_sent'?: (number | string | Long);
+ /**
+ * The number of grpc messages received on this socket.
+ */
+ 'messages_received'?: (number | string | Long);
+ /**
+ * The number of keep alives sent. This is typically implemented with HTTP/2
+ * ping messages.
+ */
+ 'keep_alives_sent'?: (number | string | Long);
+ /**
+ * The last time a stream was created by this endpoint. Usually unset for
+ * servers.
+ */
+ 'last_local_stream_created_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The last time a stream was created by the remote endpoint. Usually unset
+ * for clients.
+ */
+ 'last_remote_stream_created_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The last time a message was sent by this endpoint.
+ */
+ 'last_message_sent_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The last time a message was received by this endpoint.
+ */
+ 'last_message_received_timestamp'?: (_google_protobuf_Timestamp | null);
+ /**
+ * The amount of window, granted to the local endpoint by the remote endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'local_flow_control_window'?: (_google_protobuf_Int64Value | null);
+ /**
+ * The amount of window, granted to the remote endpoint by the local endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'remote_flow_control_window'?: (_google_protobuf_Int64Value | null);
+ /**
+ * Socket options set on this socket. May be absent if 'summary' is set
+ * on GetSocketRequest.
+ */
+ 'option'?: (_grpc_channelz_v1_SocketOption)[];
+}
+
+/**
+ * SocketData is data associated for a specific Socket. The fields present
+ * are specific to the implementation, so there may be minor differences in
+ * the semantics. (e.g. flow control windows)
+ */
+export interface SocketData__Output {
+ /**
+ * The number of streams that have been started.
+ */
+ 'streams_started': (string);
+ /**
+ * The number of streams that have ended successfully:
+ * On client side, received frame with eos bit set;
+ * On server side, sent frame with eos bit set.
+ */
+ 'streams_succeeded': (string);
+ /**
+ * The number of streams that have ended unsuccessfully:
+ * On client side, ended without receiving frame with eos bit set;
+ * On server side, ended without sending frame with eos bit set.
+ */
+ 'streams_failed': (string);
+ /**
+ * The number of grpc messages successfully sent on this socket.
+ */
+ 'messages_sent': (string);
+ /**
+ * The number of grpc messages received on this socket.
+ */
+ 'messages_received': (string);
+ /**
+ * The number of keep alives sent. This is typically implemented with HTTP/2
+ * ping messages.
+ */
+ 'keep_alives_sent': (string);
+ /**
+ * The last time a stream was created by this endpoint. Usually unset for
+ * servers.
+ */
+ 'last_local_stream_created_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The last time a stream was created by the remote endpoint. Usually unset
+ * for clients.
+ */
+ 'last_remote_stream_created_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The last time a message was sent by this endpoint.
+ */
+ 'last_message_sent_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The last time a message was received by this endpoint.
+ */
+ 'last_message_received_timestamp': (_google_protobuf_Timestamp__Output | null);
+ /**
+ * The amount of window, granted to the local endpoint by the remote endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'local_flow_control_window': (_google_protobuf_Int64Value__Output | null);
+ /**
+ * The amount of window, granted to the remote endpoint by the local endpoint.
+ * This may be slightly out of date due to network latency. This does NOT
+ * include stream level or TCP level flow control info.
+ */
+ 'remote_flow_control_window': (_google_protobuf_Int64Value__Output | null);
+ /**
+ * Socket options set on this socket. May be absent if 'summary' is set
+ * on GetSocketRequest.
+ */
+ 'option': (_grpc_channelz_v1_SocketOption__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOption.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOption.ts
new file mode 100644
index 0000000..115b36a
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOption.ts
@@ -0,0 +1,47 @@
+// Original file: proto/channelz.proto
+
+import type { Any as _google_protobuf_Any, Any__Output as _google_protobuf_Any__Output } from '../../../google/protobuf/Any';
+
+/**
+ * SocketOption represents socket options for a socket. Specifically, these
+ * are the options returned by getsockopt().
+ */
+export interface SocketOption {
+ /**
+ * The full name of the socket option. Typically this will be the upper case
+ * name, such as "SO_REUSEPORT".
+ */
+ 'name'?: (string);
+ /**
+ * The human readable value of this socket option. At least one of value or
+ * additional will be set.
+ */
+ 'value'?: (string);
+ /**
+ * Additional data associated with the socket option. At least one of value
+ * or additional will be set.
+ */
+ 'additional'?: (_google_protobuf_Any | null);
+}
+
+/**
+ * SocketOption represents socket options for a socket. Specifically, these
+ * are the options returned by getsockopt().
+ */
+export interface SocketOption__Output {
+ /**
+ * The full name of the socket option. Typically this will be the upper case
+ * name, such as "SO_REUSEPORT".
+ */
+ 'name': (string);
+ /**
+ * The human readable value of this socket option. At least one of value or
+ * additional will be set.
+ */
+ 'value': (string);
+ /**
+ * Additional data associated with the socket option. At least one of value
+ * or additional will be set.
+ */
+ 'additional': (_google_protobuf_Any__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionLinger.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionLinger.ts
new file mode 100644
index 0000000..d83fa32
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionLinger.ts
@@ -0,0 +1,33 @@
+// Original file: proto/channelz.proto
+
+import type { Duration as _google_protobuf_Duration, Duration__Output as _google_protobuf_Duration__Output } from '../../../google/protobuf/Duration';
+
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_LINGER.
+ */
+export interface SocketOptionLinger {
+ /**
+ * active maps to `struct linger.l_onoff`
+ */
+ 'active'?: (boolean);
+ /**
+ * duration maps to `struct linger.l_linger`
+ */
+ 'duration'?: (_google_protobuf_Duration | null);
+}
+
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_LINGER.
+ */
+export interface SocketOptionLinger__Output {
+ /**
+ * active maps to `struct linger.l_onoff`
+ */
+ 'active': (boolean);
+ /**
+ * duration maps to `struct linger.l_linger`
+ */
+ 'duration': (_google_protobuf_Duration__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.ts
new file mode 100644
index 0000000..2f8affe
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.ts
@@ -0,0 +1,74 @@
+// Original file: proto/channelz.proto
+
+
+/**
+ * For use with SocketOption's additional field. Tcp info for
+ * SOL_TCP and TCP_INFO.
+ */
+export interface SocketOptionTcpInfo {
+ 'tcpi_state'?: (number);
+ 'tcpi_ca_state'?: (number);
+ 'tcpi_retransmits'?: (number);
+ 'tcpi_probes'?: (number);
+ 'tcpi_backoff'?: (number);
+ 'tcpi_options'?: (number);
+ 'tcpi_snd_wscale'?: (number);
+ 'tcpi_rcv_wscale'?: (number);
+ 'tcpi_rto'?: (number);
+ 'tcpi_ato'?: (number);
+ 'tcpi_snd_mss'?: (number);
+ 'tcpi_rcv_mss'?: (number);
+ 'tcpi_unacked'?: (number);
+ 'tcpi_sacked'?: (number);
+ 'tcpi_lost'?: (number);
+ 'tcpi_retrans'?: (number);
+ 'tcpi_fackets'?: (number);
+ 'tcpi_last_data_sent'?: (number);
+ 'tcpi_last_ack_sent'?: (number);
+ 'tcpi_last_data_recv'?: (number);
+ 'tcpi_last_ack_recv'?: (number);
+ 'tcpi_pmtu'?: (number);
+ 'tcpi_rcv_ssthresh'?: (number);
+ 'tcpi_rtt'?: (number);
+ 'tcpi_rttvar'?: (number);
+ 'tcpi_snd_ssthresh'?: (number);
+ 'tcpi_snd_cwnd'?: (number);
+ 'tcpi_advmss'?: (number);
+ 'tcpi_reordering'?: (number);
+}
+
+/**
+ * For use with SocketOption's additional field. Tcp info for
+ * SOL_TCP and TCP_INFO.
+ */
+export interface SocketOptionTcpInfo__Output {
+ 'tcpi_state': (number);
+ 'tcpi_ca_state': (number);
+ 'tcpi_retransmits': (number);
+ 'tcpi_probes': (number);
+ 'tcpi_backoff': (number);
+ 'tcpi_options': (number);
+ 'tcpi_snd_wscale': (number);
+ 'tcpi_rcv_wscale': (number);
+ 'tcpi_rto': (number);
+ 'tcpi_ato': (number);
+ 'tcpi_snd_mss': (number);
+ 'tcpi_rcv_mss': (number);
+ 'tcpi_unacked': (number);
+ 'tcpi_sacked': (number);
+ 'tcpi_lost': (number);
+ 'tcpi_retrans': (number);
+ 'tcpi_fackets': (number);
+ 'tcpi_last_data_sent': (number);
+ 'tcpi_last_ack_sent': (number);
+ 'tcpi_last_data_recv': (number);
+ 'tcpi_last_ack_recv': (number);
+ 'tcpi_pmtu': (number);
+ 'tcpi_rcv_ssthresh': (number);
+ 'tcpi_rtt': (number);
+ 'tcpi_rttvar': (number);
+ 'tcpi_snd_ssthresh': (number);
+ 'tcpi_snd_cwnd': (number);
+ 'tcpi_advmss': (number);
+ 'tcpi_reordering': (number);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTimeout.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTimeout.ts
new file mode 100644
index 0000000..185839b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketOptionTimeout.ts
@@ -0,0 +1,19 @@
+// Original file: proto/channelz.proto
+
+import type { Duration as _google_protobuf_Duration, Duration__Output as _google_protobuf_Duration__Output } from '../../../google/protobuf/Duration';
+
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_RCVTIMEO and SO_SNDTIMEO
+ */
+export interface SocketOptionTimeout {
+ 'duration'?: (_google_protobuf_Duration | null);
+}
+
+/**
+ * For use with SocketOption's additional field. This is primarily used for
+ * SO_RCVTIMEO and SO_SNDTIMEO
+ */
+export interface SocketOptionTimeout__Output {
+ 'duration': (_google_protobuf_Duration__Output | null);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketRef.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketRef.ts
new file mode 100644
index 0000000..52fdb2b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SocketRef.ts
@@ -0,0 +1,31 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * SocketRef is a reference to a Socket.
+ */
+export interface SocketRef {
+ /**
+ * The globally unique id for this socket. Must be a positive number.
+ */
+ 'socket_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the socket.
+ */
+ 'name'?: (string);
+}
+
+/**
+ * SocketRef is a reference to a Socket.
+ */
+export interface SocketRef__Output {
+ /**
+ * The globally unique id for this socket. Must be a positive number.
+ */
+ 'socket_id': (string);
+ /**
+ * An optional name associated with the socket.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Subchannel.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Subchannel.ts
new file mode 100644
index 0000000..7122fac
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/Subchannel.ts
@@ -0,0 +1,70 @@
+// Original file: proto/channelz.proto
+
+import type { SubchannelRef as _grpc_channelz_v1_SubchannelRef, SubchannelRef__Output as _grpc_channelz_v1_SubchannelRef__Output } from '../../../grpc/channelz/v1/SubchannelRef';
+import type { ChannelData as _grpc_channelz_v1_ChannelData, ChannelData__Output as _grpc_channelz_v1_ChannelData__Output } from '../../../grpc/channelz/v1/ChannelData';
+import type { ChannelRef as _grpc_channelz_v1_ChannelRef, ChannelRef__Output as _grpc_channelz_v1_ChannelRef__Output } from '../../../grpc/channelz/v1/ChannelRef';
+import type { SocketRef as _grpc_channelz_v1_SocketRef, SocketRef__Output as _grpc_channelz_v1_SocketRef__Output } from '../../../grpc/channelz/v1/SocketRef';
+
+/**
+ * Subchannel is a logical grouping of channels, subchannels, and sockets.
+ * A subchannel is load balanced over by it's ancestor
+ */
+export interface Subchannel {
+ /**
+ * The identifier for this channel.
+ */
+ 'ref'?: (_grpc_channelz_v1_SubchannelRef | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data'?: (_grpc_channelz_v1_ChannelData | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref'?: (_grpc_channelz_v1_ChannelRef)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref'?: (_grpc_channelz_v1_SubchannelRef)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref'?: (_grpc_channelz_v1_SocketRef)[];
+}
+
+/**
+ * Subchannel is a logical grouping of channels, subchannels, and sockets.
+ * A subchannel is load balanced over by it's ancestor
+ */
+export interface Subchannel__Output {
+ /**
+ * The identifier for this channel.
+ */
+ 'ref': (_grpc_channelz_v1_SubchannelRef__Output | null);
+ /**
+ * Data specific to this channel.
+ */
+ 'data': (_grpc_channelz_v1_ChannelData__Output | null);
+ /**
+ * There are no ordering guarantees on the order of channel refs.
+ * There may not be cycles in the ref graph.
+ * A channel ref may be present in more than one channel or subchannel.
+ */
+ 'channel_ref': (_grpc_channelz_v1_ChannelRef__Output)[];
+ /**
+ * At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
+ * There are no ordering guarantees on the order of subchannel refs.
+ * There may not be cycles in the ref graph.
+ * A sub channel ref may be present in more than one channel or subchannel.
+ */
+ 'subchannel_ref': (_grpc_channelz_v1_SubchannelRef__Output)[];
+ /**
+ * There are no ordering guarantees on the order of sockets.
+ */
+ 'socket_ref': (_grpc_channelz_v1_SocketRef__Output)[];
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SubchannelRef.ts b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SubchannelRef.ts
new file mode 100644
index 0000000..b6911c7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/generated/grpc/channelz/v1/SubchannelRef.ts
@@ -0,0 +1,31 @@
+// Original file: proto/channelz.proto
+
+import type { Long } from '@grpc/proto-loader';
+
+/**
+ * SubchannelRef is a reference to a Subchannel.
+ */
+export interface SubchannelRef {
+ /**
+ * The globally unique id for this subchannel. Must be a positive number.
+ */
+ 'subchannel_id'?: (number | string | Long);
+ /**
+ * An optional name associated with the subchannel.
+ */
+ 'name'?: (string);
+}
+
+/**
+ * SubchannelRef is a reference to a Subchannel.
+ */
+export interface SubchannelRef__Output {
+ /**
+ * The globally unique id for this subchannel. Must be a positive number.
+ */
+ 'subchannel_id': (string);
+ /**
+ * An optional name associated with the subchannel.
+ */
+ 'name': (string);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/http_proxy.ts b/frontend-old/node_modules/@grpc/grpc-js/src/http_proxy.ts
new file mode 100644
index 0000000..3e905c4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/http_proxy.ts
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { log } from './logging';
+import { LogVerbosity } from './constants';
+import { getDefaultAuthority } from './resolver';
+import { Socket } from 'net';
+import * as http from 'http';
+import * as tls from 'tls';
+import * as logging from './logging';
+import {
+ SubchannelAddress,
+ isTcpSubchannelAddress,
+ subchannelAddressToString,
+} from './subchannel-address';
+import { ChannelOptions } from './channel-options';
+import { GrpcUri, parseUri, splitHostPort, uriToString } from './uri-parser';
+import { URL } from 'url';
+import { DEFAULT_PORT } from './resolver-dns';
+
+const TRACER_NAME = 'proxy';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+interface ProxyInfo {
+ address?: string;
+ creds?: string;
+}
+
+function getProxyInfo(): ProxyInfo {
+ let proxyEnv = '';
+ let envVar = '';
+ /* Prefer using 'grpc_proxy'. Fallback on 'http_proxy' if it is not set.
+ * Also prefer using 'https_proxy' with fallback on 'http_proxy'. The
+ * fallback behavior can be removed if there's a demand for it.
+ */
+ if (process.env.grpc_proxy) {
+ envVar = 'grpc_proxy';
+ proxyEnv = process.env.grpc_proxy;
+ } else if (process.env.https_proxy) {
+ envVar = 'https_proxy';
+ proxyEnv = process.env.https_proxy;
+ } else if (process.env.http_proxy) {
+ envVar = 'http_proxy';
+ proxyEnv = process.env.http_proxy;
+ } else {
+ return {};
+ }
+ let proxyUrl: URL;
+ try {
+ proxyUrl = new URL(proxyEnv);
+ } catch (e) {
+ log(LogVerbosity.ERROR, `cannot parse value of "${envVar}" env var`);
+ return {};
+ }
+ if (proxyUrl.protocol !== 'http:') {
+ log(
+ LogVerbosity.ERROR,
+ `"${proxyUrl.protocol}" scheme not supported in proxy URI`
+ );
+ return {};
+ }
+ let userCred: string | null = null;
+ if (proxyUrl.username) {
+ if (proxyUrl.password) {
+ log(LogVerbosity.INFO, 'userinfo found in proxy URI');
+ userCred = `${proxyUrl.username}:${proxyUrl.password}`;
+ } else {
+ userCred = proxyUrl.username;
+ }
+ }
+ const hostname = proxyUrl.hostname;
+ let port = proxyUrl.port;
+ /* The proxy URL uses the scheme "http:", which has a default port number of
+ * 80. We need to set that explicitly here if it is omitted because otherwise
+ * it will use gRPC's default port 443. */
+ if (port === '') {
+ port = '80';
+ }
+ const result: ProxyInfo = {
+ address: `${hostname}:${port}`,
+ };
+ if (userCred) {
+ result.creds = userCred;
+ }
+ trace(
+ 'Proxy server ' + result.address + ' set by environment variable ' + envVar
+ );
+ return result;
+}
+
+function getNoProxyHostList(): string[] {
+ /* Prefer using 'no_grpc_proxy'. Fallback on 'no_proxy' if it is not set. */
+ let noProxyStr: string | undefined = process.env.no_grpc_proxy;
+ let envVar = 'no_grpc_proxy';
+ if (!noProxyStr) {
+ noProxyStr = process.env.no_proxy;
+ envVar = 'no_proxy';
+ }
+ if (noProxyStr) {
+ trace('No proxy server list set by environment variable ' + envVar);
+ return noProxyStr.split(',');
+ } else {
+ return [];
+ }
+}
+
+export interface ProxyMapResult {
+ target: GrpcUri;
+ extraOptions: ChannelOptions;
+}
+
+export function mapProxyName(
+ target: GrpcUri,
+ options: ChannelOptions
+): ProxyMapResult {
+ const noProxyResult: ProxyMapResult = {
+ target: target,
+ extraOptions: {},
+ };
+ if ((options['grpc.enable_http_proxy'] ?? 1) === 0) {
+ return noProxyResult;
+ }
+ if (target.scheme === 'unix') {
+ return noProxyResult;
+ }
+ const proxyInfo = getProxyInfo();
+ if (!proxyInfo.address) {
+ return noProxyResult;
+ }
+ const hostPort = splitHostPort(target.path);
+ if (!hostPort) {
+ return noProxyResult;
+ }
+ const serverHost = hostPort.host;
+ for (const host of getNoProxyHostList()) {
+ if (host === serverHost) {
+ trace(
+ 'Not using proxy for target in no_proxy list: ' + uriToString(target)
+ );
+ return noProxyResult;
+ }
+ }
+ const extraOptions: ChannelOptions = {
+ 'grpc.http_connect_target': uriToString(target),
+ };
+ if (proxyInfo.creds) {
+ extraOptions['grpc.http_connect_creds'] = proxyInfo.creds;
+ }
+ return {
+ target: {
+ scheme: 'dns',
+ path: proxyInfo.address,
+ },
+ extraOptions: extraOptions,
+ };
+}
+
+export interface ProxyConnectionResult {
+ socket?: Socket;
+ realTarget?: GrpcUri;
+}
+
+export function getProxiedConnection(
+ address: SubchannelAddress,
+ channelOptions: ChannelOptions,
+ connectionOptions: tls.ConnectionOptions
+): Promise<ProxyConnectionResult> {
+ if (!('grpc.http_connect_target' in channelOptions)) {
+ return Promise.resolve<ProxyConnectionResult>({});
+ }
+ const realTarget = channelOptions['grpc.http_connect_target'] as string;
+ const parsedTarget = parseUri(realTarget);
+ if (parsedTarget === null) {
+ return Promise.resolve<ProxyConnectionResult>({});
+ }
+ const splitHostPost = splitHostPort(parsedTarget.path);
+ if (splitHostPost === null) {
+ return Promise.resolve<ProxyConnectionResult>({});
+ }
+ const hostPort = `${splitHostPost.host}:${
+ splitHostPost.port ?? DEFAULT_PORT
+ }`;
+ const options: http.RequestOptions = {
+ method: 'CONNECT',
+ path: hostPort,
+ };
+ const headers: http.OutgoingHttpHeaders = {
+ Host: hostPort,
+ };
+ // Connect to the subchannel address as a proxy
+ if (isTcpSubchannelAddress(address)) {
+ options.host = address.host;
+ options.port = address.port;
+ } else {
+ options.socketPath = address.path;
+ }
+ if ('grpc.http_connect_creds' in channelOptions) {
+ headers['Proxy-Authorization'] =
+ 'Basic ' +
+ Buffer.from(channelOptions['grpc.http_connect_creds'] as string).toString(
+ 'base64'
+ );
+ }
+ options.headers = headers;
+ const proxyAddressString = subchannelAddressToString(address);
+ trace('Using proxy ' + proxyAddressString + ' to connect to ' + options.path);
+ return new Promise<ProxyConnectionResult>((resolve, reject) => {
+ const request = http.request(options);
+ request.once('connect', (res, socket, head) => {
+ request.removeAllListeners();
+ socket.removeAllListeners();
+ if (res.statusCode === 200) {
+ trace(
+ 'Successfully connected to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString
+ );
+ if ('secureContext' in connectionOptions) {
+ /* The proxy is connecting to a TLS server, so upgrade this socket
+ * connection to a TLS connection.
+ * This is a workaround for https://github.com/nodejs/node/issues/32922
+ * See https://github.com/grpc/grpc-node/pull/1369 for more info. */
+ const targetPath = getDefaultAuthority(parsedTarget);
+ const hostPort = splitHostPort(targetPath);
+ const remoteHost = hostPort?.host ?? targetPath;
+
+ const cts = tls.connect(
+ {
+ host: remoteHost,
+ servername: remoteHost,
+ socket: socket,
+ ...connectionOptions,
+ },
+ () => {
+ trace(
+ 'Successfully established a TLS connection to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString
+ );
+ resolve({ socket: cts, realTarget: parsedTarget });
+ }
+ );
+ cts.on('error', (error: Error) => {
+ trace(
+ 'Failed to establish a TLS connection to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString +
+ ' with error ' +
+ error.message
+ );
+ reject();
+ });
+ } else {
+ trace(
+ 'Successfully established a plaintext connection to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString
+ );
+ resolve({
+ socket,
+ realTarget: parsedTarget,
+ });
+ }
+ } else {
+ log(
+ LogVerbosity.ERROR,
+ 'Failed to connect to ' +
+ options.path +
+ ' through proxy ' +
+ proxyAddressString +
+ ' with status ' +
+ res.statusCode
+ );
+ reject();
+ }
+ });
+ request.once('error', err => {
+ request.removeAllListeners();
+ log(
+ LogVerbosity.ERROR,
+ 'Failed to connect to proxy ' +
+ proxyAddressString +
+ ' with error ' +
+ err.message
+ );
+ reject();
+ });
+ request.end();
+ });
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/index.ts b/frontend-old/node_modules/@grpc/grpc-js/src/index.ts
new file mode 100644
index 0000000..28fc776
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/index.ts
@@ -0,0 +1,284 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {
+ ClientDuplexStream,
+ ClientReadableStream,
+ ClientUnaryCall,
+ ClientWritableStream,
+ ServiceError,
+} from './call';
+import { CallCredentials, OAuth2Client } from './call-credentials';
+import { StatusObject } from './call-interface';
+import { Channel, ChannelImplementation } from './channel';
+import { CompressionAlgorithms } from './compression-algorithms';
+import { ConnectivityState } from './connectivity-state';
+import { ChannelCredentials } from './channel-credentials';
+import {
+ CallOptions,
+ Client,
+ ClientOptions,
+ CallInvocationTransformer,
+ CallProperties,
+ UnaryCallback,
+} from './client';
+import { LogVerbosity, Status, Propagate } from './constants';
+import * as logging from './logging';
+import {
+ Deserialize,
+ loadPackageDefinition,
+ makeClientConstructor,
+ MethodDefinition,
+ Serialize,
+ ServiceDefinition,
+} from './make-client';
+import { Metadata, MetadataOptions, MetadataValue } from './metadata';
+import {
+ Server,
+ UntypedHandleCall,
+ UntypedServiceImplementation,
+} from './server';
+import { KeyCertPair, ServerCredentials } from './server-credentials';
+import { StatusBuilder } from './status-builder';
+import {
+ handleBidiStreamingCall,
+ handleServerStreamingCall,
+ handleClientStreamingCall,
+ handleUnaryCall,
+ sendUnaryData,
+ ServerUnaryCall,
+ ServerReadableStream,
+ ServerWritableStream,
+ ServerDuplexStream,
+ ServerErrorResponse,
+} from './server-call';
+
+export { OAuth2Client };
+
+/**** Client Credentials ****/
+
+// Using assign only copies enumerable properties, which is what we want
+export const credentials = {
+ /**
+ * Combine a ChannelCredentials with any number of CallCredentials into a
+ * single ChannelCredentials object.
+ * @param channelCredentials The ChannelCredentials object.
+ * @param callCredentials Any number of CallCredentials objects.
+ * @return The resulting ChannelCredentials object.
+ */
+ combineChannelCredentials: (
+ channelCredentials: ChannelCredentials,
+ ...callCredentials: CallCredentials[]
+ ): ChannelCredentials => {
+ return callCredentials.reduce(
+ (acc, other) => acc.compose(other),
+ channelCredentials
+ );
+ },
+
+ /**
+ * Combine any number of CallCredentials into a single CallCredentials
+ * object.
+ * @param first The first CallCredentials object.
+ * @param additional Any number of additional CallCredentials objects.
+ * @return The resulting CallCredentials object.
+ */
+ combineCallCredentials: (
+ first: CallCredentials,
+ ...additional: CallCredentials[]
+ ): CallCredentials => {
+ return additional.reduce((acc, other) => acc.compose(other), first);
+ },
+
+ // from channel-credentials.ts
+ createInsecure: ChannelCredentials.createInsecure,
+ createSsl: ChannelCredentials.createSsl,
+ createFromSecureContext: ChannelCredentials.createFromSecureContext,
+
+ // from call-credentials.ts
+ createFromMetadataGenerator: CallCredentials.createFromMetadataGenerator,
+ createFromGoogleCredential: CallCredentials.createFromGoogleCredential,
+ createEmpty: CallCredentials.createEmpty,
+};
+
+/**** Metadata ****/
+
+export { Metadata, MetadataOptions, MetadataValue };
+
+/**** Constants ****/
+
+export {
+ LogVerbosity as logVerbosity,
+ Status as status,
+ ConnectivityState as connectivityState,
+ Propagate as propagate,
+ CompressionAlgorithms as compressionAlgorithms,
+ // TODO: Other constants as well
+};
+
+/**** Client ****/
+
+export {
+ Client,
+ ClientOptions,
+ loadPackageDefinition,
+ makeClientConstructor,
+ makeClientConstructor as makeGenericClientConstructor,
+ CallProperties,
+ CallInvocationTransformer,
+ ChannelImplementation as Channel,
+ Channel as ChannelInterface,
+ UnaryCallback as requestCallback,
+};
+
+/**
+ * Close a Client object.
+ * @param client The client to close.
+ */
+export const closeClient = (client: Client) => client.close();
+
+export const waitForClientReady = (
+ client: Client,
+ deadline: Date | number,
+ callback: (error?: Error) => void
+) => client.waitForReady(deadline, callback);
+
+/* Interfaces */
+
+export {
+ sendUnaryData,
+ ChannelCredentials,
+ CallCredentials,
+ Deadline,
+ Serialize as serialize,
+ Deserialize as deserialize,
+ ClientUnaryCall,
+ ClientReadableStream,
+ ClientWritableStream,
+ ClientDuplexStream,
+ CallOptions,
+ MethodDefinition,
+ StatusObject,
+ ServiceError,
+ ServerUnaryCall,
+ ServerReadableStream,
+ ServerWritableStream,
+ ServerDuplexStream,
+ ServerErrorResponse,
+ ServiceDefinition,
+ UntypedHandleCall,
+ UntypedServiceImplementation,
+};
+
+/**** Server ****/
+
+export {
+ handleBidiStreamingCall,
+ handleServerStreamingCall,
+ handleUnaryCall,
+ handleClientStreamingCall,
+};
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+export type Call =
+ | ClientUnaryCall
+ | ClientReadableStream<any>
+ | ClientWritableStream<any>
+ | ClientDuplexStream<any, any>;
+/* eslint-enable @typescript-eslint/no-explicit-any */
+
+/**** Unimplemented function stubs ****/
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+export const loadObject = (value: any, options: any): never => {
+ throw new Error(
+ 'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead'
+ );
+};
+
+export const load = (filename: any, format: any, options: any): never => {
+ throw new Error(
+ 'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead'
+ );
+};
+
+export const setLogger = (logger: Partial<Console>): void => {
+ logging.setLogger(logger);
+};
+
+export const setLogVerbosity = (verbosity: LogVerbosity): void => {
+ logging.setLoggerVerbosity(verbosity);
+};
+
+export { Server };
+export { ServerCredentials };
+export { KeyCertPair };
+
+export const getClientChannel = (client: Client) => {
+ return Client.prototype.getChannel.call(client);
+};
+
+export { StatusBuilder };
+
+export { Listener, InterceptingListener } from './call-interface';
+
+export {
+ Requester,
+ ListenerBuilder,
+ RequesterBuilder,
+ Interceptor,
+ InterceptorOptions,
+ InterceptorProvider,
+ InterceptingCall,
+ InterceptorConfigurationError,
+ NextCall,
+} from './client-interceptors';
+
+export {
+ GrpcObject,
+ ServiceClientConstructor,
+ ProtobufTypeDefinition,
+} from './make-client';
+
+export { ChannelOptions } from './channel-options';
+
+export { getChannelzServiceDefinition, getChannelzHandlers } from './channelz';
+
+export { addAdminServicesToServer } from './admin';
+
+import * as experimental from './experimental';
+export { experimental };
+
+import * as resolver_dns from './resolver-dns';
+import * as resolver_uds from './resolver-uds';
+import * as resolver_ip from './resolver-ip';
+import * as load_balancer_pick_first from './load-balancer-pick-first';
+import * as load_balancer_round_robin from './load-balancer-round-robin';
+import * as load_balancer_outlier_detection from './load-balancer-outlier-detection';
+import * as channelz from './channelz';
+import { Deadline } from './deadline';
+
+(() => {
+ resolver_dns.setup();
+ resolver_uds.setup();
+ resolver_ip.setup();
+ load_balancer_pick_first.setup();
+ load_balancer_round_robin.setup();
+ load_balancer_outlier_detection.setup();
+ channelz.setup();
+})();
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/internal-channel.ts b/frontend-old/node_modules/@grpc/grpc-js/src/internal-channel.ts
new file mode 100644
index 0000000..5c8c91c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/internal-channel.ts
@@ -0,0 +1,830 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { ResolvingLoadBalancer } from './resolving-load-balancer';
+import { SubchannelPool, getSubchannelPool } from './subchannel-pool';
+import { ChannelControlHelper } from './load-balancer';
+import { UnavailablePicker, Picker, QueuePicker } from './picker';
+import { Metadata } from './metadata';
+import { Status, LogVerbosity, Propagate } from './constants';
+import { FilterStackFactory } from './filter-stack';
+import { CompressionFilterFactory } from './compression-filter';
+import {
+ CallConfig,
+ ConfigSelector,
+ getDefaultAuthority,
+ mapUriDefaultScheme,
+} from './resolver';
+import { trace } from './logging';
+import { SubchannelAddress } from './subchannel-address';
+import { mapProxyName } from './http_proxy';
+import { GrpcUri, parseUri, uriToString } from './uri-parser';
+import { ServerSurfaceCall } from './server-call';
+
+import { ConnectivityState } from './connectivity-state';
+import {
+ ChannelInfo,
+ ChannelRef,
+ ChannelzCallTracker,
+ ChannelzChildrenTracker,
+ ChannelzTrace,
+ registerChannelzChannel,
+ SubchannelRef,
+ unregisterChannelzRef,
+} from './channelz';
+import { LoadBalancingCall } from './load-balancing-call';
+import { CallCredentials } from './call-credentials';
+import { Call, CallStreamOptions, StatusObject } from './call-interface';
+import { Deadline, deadlineToString } from './deadline';
+import { ResolvingCall } from './resolving-call';
+import { getNextCallNumber } from './call-number';
+import { restrictControlPlaneStatusCode } from './control-plane-status';
+import {
+ MessageBufferTracker,
+ RetryingCall,
+ RetryThrottler,
+} from './retrying-call';
+import {
+ BaseSubchannelWrapper,
+ ConnectivityStateListener,
+ SubchannelInterface,
+} from './subchannel-interface';
+
+/**
+ * See https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args
+ */
+const MAX_TIMEOUT_TIME = 2147483647;
+
+const MIN_IDLE_TIMEOUT_MS = 1000;
+
+// 30 minutes
+const DEFAULT_IDLE_TIMEOUT_MS = 30 * 60 * 1000;
+
+interface ConnectivityStateWatcher {
+ currentState: ConnectivityState;
+ timer: NodeJS.Timeout | null;
+ callback: (error?: Error) => void;
+}
+
+interface NoneConfigResult {
+ type: 'NONE';
+}
+
+interface SuccessConfigResult {
+ type: 'SUCCESS';
+ config: CallConfig;
+}
+
+interface ErrorConfigResult {
+ type: 'ERROR';
+ error: StatusObject;
+}
+
+type GetConfigResult =
+ | NoneConfigResult
+ | SuccessConfigResult
+ | ErrorConfigResult;
+
+const RETRY_THROTTLER_MAP: Map<string, RetryThrottler> = new Map();
+
+const DEFAULT_RETRY_BUFFER_SIZE_BYTES = 1 << 24; // 16 MB
+const DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES = 1 << 20; // 1 MB
+
+class ChannelSubchannelWrapper
+ extends BaseSubchannelWrapper
+ implements SubchannelInterface
+{
+ private refCount = 0;
+ private subchannelStateListener: ConnectivityStateListener;
+ constructor(
+ childSubchannel: SubchannelInterface,
+ private channel: InternalChannel
+ ) {
+ super(childSubchannel);
+ this.subchannelStateListener = (
+ subchannel,
+ previousState,
+ newState,
+ keepaliveTime
+ ) => {
+ channel.throttleKeepalive(keepaliveTime);
+ };
+ childSubchannel.addConnectivityStateListener(this.subchannelStateListener);
+ }
+
+ ref(): void {
+ this.child.ref();
+ this.refCount += 1;
+ }
+
+ unref(): void {
+ this.child.unref();
+ this.refCount -= 1;
+ if (this.refCount <= 0) {
+ this.child.removeConnectivityStateListener(this.subchannelStateListener);
+ this.channel.removeWrappedSubchannel(this);
+ }
+ }
+}
+
+export class InternalChannel {
+ private readonly resolvingLoadBalancer: ResolvingLoadBalancer;
+ private readonly subchannelPool: SubchannelPool;
+ private connectivityState: ConnectivityState = ConnectivityState.IDLE;
+ private currentPicker: Picker = new UnavailablePicker();
+ /**
+ * Calls queued up to get a call config. Should only be populated before the
+ * first time the resolver returns a result, which includes the ConfigSelector.
+ */
+ private configSelectionQueue: ResolvingCall[] = [];
+ private pickQueue: LoadBalancingCall[] = [];
+ private connectivityStateWatchers: ConnectivityStateWatcher[] = [];
+ private readonly defaultAuthority: string;
+ private readonly filterStackFactory: FilterStackFactory;
+ private readonly target: GrpcUri;
+ /**
+ * This timer does not do anything on its own. Its purpose is to hold the
+ * event loop open while there are any pending calls for the channel that
+ * have not yet been assigned to specific subchannels. In other words,
+ * the invariant is that callRefTimer is reffed if and only if pickQueue
+ * is non-empty.
+ */
+ private readonly callRefTimer: NodeJS.Timeout;
+ private configSelector: ConfigSelector | null = null;
+ /**
+ * This is the error from the name resolver if it failed most recently. It
+ * is only used to end calls that start while there is no config selector
+ * and the name resolver is in backoff, so it should be nulled if
+ * configSelector becomes set or the channel state becomes anything other
+ * than TRANSIENT_FAILURE.
+ */
+ private currentResolutionError: StatusObject | null = null;
+ private readonly retryBufferTracker: MessageBufferTracker;
+ private keepaliveTime: number;
+ private readonly wrappedSubchannels: Set<ChannelSubchannelWrapper> =
+ new Set();
+
+ private callCount = 0;
+ private idleTimer: NodeJS.Timeout | null = null;
+ private readonly idleTimeoutMs: number;
+ private lastActivityTimestamp: Date;
+
+ // Channelz info
+ private readonly channelzEnabled: boolean = true;
+ private readonly originalTarget: string;
+ private readonly channelzRef: ChannelRef;
+ private readonly channelzTrace: ChannelzTrace;
+ private readonly callTracker = new ChannelzCallTracker();
+ private readonly childrenTracker = new ChannelzChildrenTracker();
+
+ constructor(
+ target: string,
+ private readonly credentials: ChannelCredentials,
+ private readonly options: ChannelOptions
+ ) {
+ if (typeof target !== 'string') {
+ throw new TypeError('Channel target must be a string');
+ }
+ if (!(credentials instanceof ChannelCredentials)) {
+ throw new TypeError(
+ 'Channel credentials must be a ChannelCredentials object'
+ );
+ }
+ if (options) {
+ if (typeof options !== 'object') {
+ throw new TypeError('Channel options must be an object');
+ }
+ }
+ this.originalTarget = target;
+ const originalTargetUri = parseUri(target);
+ if (originalTargetUri === null) {
+ throw new Error(`Could not parse target name "${target}"`);
+ }
+ /* This ensures that the target has a scheme that is registered with the
+ * resolver */
+ const defaultSchemeMapResult = mapUriDefaultScheme(originalTargetUri);
+ if (defaultSchemeMapResult === null) {
+ throw new Error(
+ `Could not find a default scheme for target name "${target}"`
+ );
+ }
+
+ this.callRefTimer = setInterval(() => {}, MAX_TIMEOUT_TIME);
+ this.callRefTimer.unref?.();
+
+ if (this.options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+
+ this.channelzTrace = new ChannelzTrace();
+ this.channelzRef = registerChannelzChannel(
+ target,
+ () => this.getChannelzInfo(),
+ this.channelzEnabled
+ );
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Channel created');
+ }
+
+ if (this.options['grpc.default_authority']) {
+ this.defaultAuthority = this.options['grpc.default_authority'] as string;
+ } else {
+ this.defaultAuthority = getDefaultAuthority(defaultSchemeMapResult);
+ }
+ const proxyMapResult = mapProxyName(defaultSchemeMapResult, options);
+ this.target = proxyMapResult.target;
+ this.options = Object.assign({}, this.options, proxyMapResult.extraOptions);
+
+ /* The global boolean parameter to getSubchannelPool has the inverse meaning to what
+ * the grpc.use_local_subchannel_pool channel option means. */
+ this.subchannelPool = getSubchannelPool(
+ (options['grpc.use_local_subchannel_pool'] ?? 0) === 0
+ );
+ this.retryBufferTracker = new MessageBufferTracker(
+ options['grpc.retry_buffer_size'] ?? DEFAULT_RETRY_BUFFER_SIZE_BYTES,
+ options['grpc.per_rpc_retry_buffer_size'] ??
+ DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES
+ );
+ this.keepaliveTime = options['grpc.keepalive_time_ms'] ?? -1;
+ this.idleTimeoutMs = Math.max(
+ options['grpc.client_idle_timeout_ms'] ?? DEFAULT_IDLE_TIMEOUT_MS,
+ MIN_IDLE_TIMEOUT_MS
+ );
+ const channelControlHelper: ChannelControlHelper = {
+ createSubchannel: (
+ subchannelAddress: SubchannelAddress,
+ subchannelArgs: ChannelOptions
+ ) => {
+ const subchannel = this.subchannelPool.getOrCreateSubchannel(
+ this.target,
+ subchannelAddress,
+ Object.assign({}, this.options, subchannelArgs),
+ this.credentials
+ );
+ subchannel.throttleKeepalive(this.keepaliveTime);
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Created subchannel or used existing subchannel',
+ subchannel.getChannelzRef()
+ );
+ }
+ const wrappedSubchannel = new ChannelSubchannelWrapper(
+ subchannel,
+ this
+ );
+ this.wrappedSubchannels.add(wrappedSubchannel);
+ return wrappedSubchannel;
+ },
+ updateState: (connectivityState: ConnectivityState, picker: Picker) => {
+ this.currentPicker = picker;
+ const queueCopy = this.pickQueue.slice();
+ this.pickQueue = [];
+ if (queueCopy.length > 0) {
+ this.callRefTimerUnref();
+ }
+ for (const call of queueCopy) {
+ call.doPick();
+ }
+ this.updateState(connectivityState);
+ },
+ requestReresolution: () => {
+ // This should never be called.
+ throw new Error(
+ 'Resolving load balancer should never call requestReresolution'
+ );
+ },
+ addChannelzChild: (child: ChannelRef | SubchannelRef) => {
+ if (this.channelzEnabled) {
+ this.childrenTracker.refChild(child);
+ }
+ },
+ removeChannelzChild: (child: ChannelRef | SubchannelRef) => {
+ if (this.channelzEnabled) {
+ this.childrenTracker.unrefChild(child);
+ }
+ },
+ };
+ this.resolvingLoadBalancer = new ResolvingLoadBalancer(
+ this.target,
+ channelControlHelper,
+ options,
+ (serviceConfig, configSelector) => {
+ if (serviceConfig.retryThrottling) {
+ RETRY_THROTTLER_MAP.set(
+ this.getTarget(),
+ new RetryThrottler(
+ serviceConfig.retryThrottling.maxTokens,
+ serviceConfig.retryThrottling.tokenRatio,
+ RETRY_THROTTLER_MAP.get(this.getTarget())
+ )
+ );
+ } else {
+ RETRY_THROTTLER_MAP.delete(this.getTarget());
+ }
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Address resolution succeeded'
+ );
+ }
+ this.configSelector = configSelector;
+ this.currentResolutionError = null;
+ /* We process the queue asynchronously to ensure that the corresponding
+ * load balancer update has completed. */
+ process.nextTick(() => {
+ const localQueue = this.configSelectionQueue;
+ this.configSelectionQueue = [];
+ if (localQueue.length > 0) {
+ this.callRefTimerUnref();
+ }
+ for (const call of localQueue) {
+ call.getConfig();
+ }
+ });
+ },
+ status => {
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_WARNING',
+ 'Address resolution failed with code ' +
+ status.code +
+ ' and details "' +
+ status.details +
+ '"'
+ );
+ }
+ if (this.configSelectionQueue.length > 0) {
+ this.trace(
+ 'Name resolution failed with calls queued for config selection'
+ );
+ }
+ if (this.configSelector === null) {
+ this.currentResolutionError = {
+ ...restrictControlPlaneStatusCode(status.code, status.details),
+ metadata: status.metadata,
+ };
+ }
+ const localQueue = this.configSelectionQueue;
+ this.configSelectionQueue = [];
+ if (localQueue.length > 0) {
+ this.callRefTimerUnref();
+ }
+ for (const call of localQueue) {
+ call.reportResolverError(status);
+ }
+ }
+ );
+ this.filterStackFactory = new FilterStackFactory([
+ new CompressionFilterFactory(this, this.options),
+ ]);
+ this.trace(
+ 'Channel constructed with options ' +
+ JSON.stringify(options, undefined, 2)
+ );
+ const error = new Error();
+ trace(
+ LogVerbosity.DEBUG,
+ 'channel_stacktrace',
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ 'Channel constructed \n' +
+ error.stack?.substring(error.stack.indexOf('\n') + 1)
+ );
+ this.lastActivityTimestamp = new Date();
+ }
+
+ private getChannelzInfo(): ChannelInfo {
+ return {
+ target: this.originalTarget,
+ state: this.connectivityState,
+ trace: this.channelzTrace,
+ callTracker: this.callTracker,
+ children: this.childrenTracker.getChildLists(),
+ };
+ }
+
+ private trace(text: string, verbosityOverride?: LogVerbosity) {
+ trace(
+ verbosityOverride ?? LogVerbosity.DEBUG,
+ 'channel',
+ '(' + this.channelzRef.id + ') ' + uriToString(this.target) + ' ' + text
+ );
+ }
+
+ private callRefTimerRef() {
+ // If the hasRef function does not exist, always run the code
+ if (!this.callRefTimer.hasRef?.()) {
+ this.trace(
+ 'callRefTimer.ref | configSelectionQueue.length=' +
+ this.configSelectionQueue.length +
+ ' pickQueue.length=' +
+ this.pickQueue.length
+ );
+ this.callRefTimer.ref?.();
+ }
+ }
+
+ private callRefTimerUnref() {
+ // If the hasRef function does not exist, always run the code
+ if (!this.callRefTimer.hasRef || this.callRefTimer.hasRef()) {
+ this.trace(
+ 'callRefTimer.unref | configSelectionQueue.length=' +
+ this.configSelectionQueue.length +
+ ' pickQueue.length=' +
+ this.pickQueue.length
+ );
+ this.callRefTimer.unref?.();
+ }
+ }
+
+ private removeConnectivityStateWatcher(
+ watcherObject: ConnectivityStateWatcher
+ ) {
+ const watcherIndex = this.connectivityStateWatchers.findIndex(
+ value => value === watcherObject
+ );
+ if (watcherIndex >= 0) {
+ this.connectivityStateWatchers.splice(watcherIndex, 1);
+ }
+ }
+
+ private updateState(newState: ConnectivityState): void {
+ trace(
+ LogVerbosity.DEBUG,
+ 'connectivity_state',
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ uriToString(this.target) +
+ ' ' +
+ ConnectivityState[this.connectivityState] +
+ ' -> ' +
+ ConnectivityState[newState]
+ );
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Connectivity state change to ' + ConnectivityState[newState]
+ );
+ }
+ this.connectivityState = newState;
+ const watchersCopy = this.connectivityStateWatchers.slice();
+ for (const watcherObject of watchersCopy) {
+ if (newState !== watcherObject.currentState) {
+ if (watcherObject.timer) {
+ clearTimeout(watcherObject.timer);
+ }
+ this.removeConnectivityStateWatcher(watcherObject);
+ watcherObject.callback();
+ }
+ }
+ if (newState !== ConnectivityState.TRANSIENT_FAILURE) {
+ this.currentResolutionError = null;
+ }
+ }
+
+ throttleKeepalive(newKeepaliveTime: number) {
+ if (newKeepaliveTime > this.keepaliveTime) {
+ this.keepaliveTime = newKeepaliveTime;
+ for (const wrappedSubchannel of this.wrappedSubchannels) {
+ wrappedSubchannel.throttleKeepalive(newKeepaliveTime);
+ }
+ }
+ }
+
+ removeWrappedSubchannel(wrappedSubchannel: ChannelSubchannelWrapper) {
+ this.wrappedSubchannels.delete(wrappedSubchannel);
+ }
+
+ doPick(metadata: Metadata, extraPickInfo: { [key: string]: string }) {
+ return this.currentPicker.pick({
+ metadata: metadata,
+ extraPickInfo: extraPickInfo,
+ });
+ }
+
+ queueCallForPick(call: LoadBalancingCall) {
+ this.pickQueue.push(call);
+ this.callRefTimerRef();
+ }
+
+ getConfig(method: string, metadata: Metadata): GetConfigResult {
+ this.resolvingLoadBalancer.exitIdle();
+ if (this.configSelector) {
+ return {
+ type: 'SUCCESS',
+ config: this.configSelector(method, metadata),
+ };
+ } else {
+ if (this.currentResolutionError) {
+ return {
+ type: 'ERROR',
+ error: this.currentResolutionError,
+ };
+ } else {
+ return {
+ type: 'NONE',
+ };
+ }
+ }
+ }
+
+ queueCallForConfig(call: ResolvingCall) {
+ this.configSelectionQueue.push(call);
+ this.callRefTimerRef();
+ }
+
+ private enterIdle() {
+ this.resolvingLoadBalancer.destroy();
+ this.updateState(ConnectivityState.IDLE);
+ this.currentPicker = new QueuePicker(this.resolvingLoadBalancer);
+ if (this.idleTimer) {
+ clearTimeout(this.idleTimer);
+ this.idleTimer = null;
+ }
+ }
+
+ private startIdleTimeout(timeoutMs: number) {
+ this.idleTimer = setTimeout(() => {
+ if (this.callCount > 0) {
+ /* If there is currently a call, the channel will not go idle for a
+ * period of at least idleTimeoutMs, so check again after that time.
+ */
+ this.startIdleTimeout(this.idleTimeoutMs);
+ return;
+ }
+ const now = new Date();
+ const timeSinceLastActivity = now.valueOf() - this.lastActivityTimestamp.valueOf();
+ if (timeSinceLastActivity >= this.idleTimeoutMs) {
+ this.trace(
+ 'Idle timer triggered after ' +
+ this.idleTimeoutMs +
+ 'ms of inactivity'
+ );
+ this.enterIdle();
+ } else {
+ /* Whenever the timer fires with the latest activity being too recent,
+ * set the timer again for the time when the time since the last
+ * activity is equal to the timeout. This should result in the timer
+ * firing no more than once every idleTimeoutMs/2 on average. */
+ this.startIdleTimeout(this.idleTimeoutMs - timeSinceLastActivity);
+ }
+ }, timeoutMs);
+ this.idleTimer.unref?.();
+ }
+
+ private maybeStartIdleTimer() {
+ if (this.connectivityState !== ConnectivityState.SHUTDOWN && !this.idleTimer) {
+ this.startIdleTimeout(this.idleTimeoutMs);
+ }
+ }
+
+ private onCallStart() {
+ if (this.channelzEnabled) {
+ this.callTracker.addCallStarted();
+ }
+ this.callCount += 1;
+ }
+
+ private onCallEnd(status: StatusObject) {
+ if (this.channelzEnabled) {
+ if (status.code === Status.OK) {
+ this.callTracker.addCallSucceeded();
+ } else {
+ this.callTracker.addCallFailed();
+ }
+ }
+ this.callCount -= 1;
+ this.lastActivityTimestamp = new Date();
+ this.maybeStartIdleTimer();
+ }
+
+ createLoadBalancingCall(
+ callConfig: CallConfig,
+ method: string,
+ host: string,
+ credentials: CallCredentials,
+ deadline: Deadline
+ ): LoadBalancingCall {
+ const callNumber = getNextCallNumber();
+ this.trace(
+ 'createLoadBalancingCall [' + callNumber + '] method="' + method + '"'
+ );
+ return new LoadBalancingCall(
+ this,
+ callConfig,
+ method,
+ host,
+ credentials,
+ deadline,
+ callNumber
+ );
+ }
+
+ createRetryingCall(
+ callConfig: CallConfig,
+ method: string,
+ host: string,
+ credentials: CallCredentials,
+ deadline: Deadline
+ ): RetryingCall {
+ const callNumber = getNextCallNumber();
+ this.trace(
+ 'createRetryingCall [' + callNumber + '] method="' + method + '"'
+ );
+ return new RetryingCall(
+ this,
+ callConfig,
+ method,
+ host,
+ credentials,
+ deadline,
+ callNumber,
+ this.retryBufferTracker,
+ RETRY_THROTTLER_MAP.get(this.getTarget())
+ );
+ }
+
+ createInnerCall(
+ callConfig: CallConfig,
+ method: string,
+ host: string,
+ credentials: CallCredentials,
+ deadline: Deadline
+ ): Call {
+ // Create a RetryingCall if retries are enabled
+ if (this.options['grpc.enable_retries'] === 0) {
+ return this.createLoadBalancingCall(
+ callConfig,
+ method,
+ host,
+ credentials,
+ deadline
+ );
+ } else {
+ return this.createRetryingCall(
+ callConfig,
+ method,
+ host,
+ credentials,
+ deadline
+ );
+ }
+ }
+
+ createResolvingCall(
+ method: string,
+ deadline: Deadline,
+ host: string | null | undefined,
+ parentCall: ServerSurfaceCall | null,
+ propagateFlags: number | null | undefined
+ ): ResolvingCall {
+ const callNumber = getNextCallNumber();
+ this.trace(
+ 'createResolvingCall [' +
+ callNumber +
+ '] method="' +
+ method +
+ '", deadline=' +
+ deadlineToString(deadline)
+ );
+ const finalOptions: CallStreamOptions = {
+ deadline: deadline,
+ flags: propagateFlags ?? Propagate.DEFAULTS,
+ host: host ?? this.defaultAuthority,
+ parentCall: parentCall,
+ };
+
+ const call = new ResolvingCall(
+ this,
+ method,
+ finalOptions,
+ this.filterStackFactory.clone(),
+ this.credentials._getCallCredentials(),
+ callNumber
+ );
+
+ this.onCallStart();
+ call.addStatusWatcher(status => {
+ this.onCallEnd(status);
+ });
+ return call;
+ }
+
+ close() {
+ this.resolvingLoadBalancer.destroy();
+ this.updateState(ConnectivityState.SHUTDOWN);
+ clearInterval(this.callRefTimer);
+ if (this.idleTimer) {
+ clearTimeout(this.idleTimer);
+ }
+ if (this.channelzEnabled) {
+ unregisterChannelzRef(this.channelzRef);
+ }
+
+ this.subchannelPool.unrefUnusedSubchannels();
+ }
+
+ getTarget() {
+ return uriToString(this.target);
+ }
+
+ getConnectivityState(tryToConnect: boolean) {
+ const connectivityState = this.connectivityState;
+ if (tryToConnect) {
+ this.resolvingLoadBalancer.exitIdle();
+ this.lastActivityTimestamp = new Date();
+ this.maybeStartIdleTimer();
+ }
+ return connectivityState;
+ }
+
+ watchConnectivityState(
+ currentState: ConnectivityState,
+ deadline: Date | number,
+ callback: (error?: Error) => void
+ ): void {
+ if (this.connectivityState === ConnectivityState.SHUTDOWN) {
+ throw new Error('Channel has been shut down');
+ }
+ let timer = null;
+ if (deadline !== Infinity) {
+ const deadlineDate: Date =
+ deadline instanceof Date ? deadline : new Date(deadline);
+ const now = new Date();
+ if (deadline === -Infinity || deadlineDate <= now) {
+ process.nextTick(
+ callback,
+ new Error('Deadline passed without connectivity state change')
+ );
+ return;
+ }
+ timer = setTimeout(() => {
+ this.removeConnectivityStateWatcher(watcherObject);
+ callback(
+ new Error('Deadline passed without connectivity state change')
+ );
+ }, deadlineDate.getTime() - now.getTime());
+ }
+ const watcherObject = {
+ currentState,
+ callback,
+ timer,
+ };
+ this.connectivityStateWatchers.push(watcherObject);
+ }
+
+ /**
+ * Get the channelz reference object for this channel. The returned value is
+ * garbage if channelz is disabled for this channel.
+ * @returns
+ */
+ getChannelzRef() {
+ return this.channelzRef;
+ }
+
+ createCall(
+ method: string,
+ deadline: Deadline,
+ host: string | null | undefined,
+ parentCall: ServerSurfaceCall | null,
+ propagateFlags: number | null | undefined
+ ): Call {
+ if (typeof method !== 'string') {
+ throw new TypeError('Channel#createCall: method must be a string');
+ }
+ if (!(typeof deadline === 'number' || deadline instanceof Date)) {
+ throw new TypeError(
+ 'Channel#createCall: deadline must be a number or Date'
+ );
+ }
+ if (this.connectivityState === ConnectivityState.SHUTDOWN) {
+ throw new Error('Channel has been shut down');
+ }
+ return this.createResolvingCall(
+ method,
+ deadline,
+ host,
+ parentCall,
+ propagateFlags
+ );
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-child-handler.ts b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-child-handler.ts
new file mode 100644
index 0000000..a4dc90c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-child-handler.ts
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2020 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {
+ LoadBalancer,
+ ChannelControlHelper,
+ LoadBalancingConfig,
+ createLoadBalancer,
+} from './load-balancer';
+import { SubchannelAddress } from './subchannel-address';
+import { ChannelOptions } from './channel-options';
+import { ConnectivityState } from './connectivity-state';
+import { Picker } from './picker';
+import { ChannelRef, SubchannelRef } from './channelz';
+import { SubchannelInterface } from './subchannel-interface';
+
+const TYPE_NAME = 'child_load_balancer_helper';
+
+export class ChildLoadBalancerHandler implements LoadBalancer {
+ private currentChild: LoadBalancer | null = null;
+ private pendingChild: LoadBalancer | null = null;
+ private latestConfig: LoadBalancingConfig | null = null;
+
+ private ChildPolicyHelper = class {
+ private child: LoadBalancer | null = null;
+ constructor(private parent: ChildLoadBalancerHandler) {}
+ createSubchannel(
+ subchannelAddress: SubchannelAddress,
+ subchannelArgs: ChannelOptions
+ ): SubchannelInterface {
+ return this.parent.channelControlHelper.createSubchannel(
+ subchannelAddress,
+ subchannelArgs
+ );
+ }
+ updateState(connectivityState: ConnectivityState, picker: Picker): void {
+ if (this.calledByPendingChild()) {
+ if (connectivityState === ConnectivityState.CONNECTING) {
+ return;
+ }
+ this.parent.currentChild?.destroy();
+ this.parent.currentChild = this.parent.pendingChild;
+ this.parent.pendingChild = null;
+ } else if (!this.calledByCurrentChild()) {
+ return;
+ }
+ this.parent.channelControlHelper.updateState(connectivityState, picker);
+ }
+ requestReresolution(): void {
+ const latestChild = this.parent.pendingChild ?? this.parent.currentChild;
+ if (this.child === latestChild) {
+ this.parent.channelControlHelper.requestReresolution();
+ }
+ }
+ setChild(newChild: LoadBalancer) {
+ this.child = newChild;
+ }
+ addChannelzChild(child: ChannelRef | SubchannelRef) {
+ this.parent.channelControlHelper.addChannelzChild(child);
+ }
+ removeChannelzChild(child: ChannelRef | SubchannelRef) {
+ this.parent.channelControlHelper.removeChannelzChild(child);
+ }
+
+ private calledByPendingChild(): boolean {
+ return this.child === this.parent.pendingChild;
+ }
+ private calledByCurrentChild(): boolean {
+ return this.child === this.parent.currentChild;
+ }
+ };
+
+ constructor(private readonly channelControlHelper: ChannelControlHelper) {}
+
+ protected configUpdateRequiresNewPolicyInstance(
+ oldConfig: LoadBalancingConfig,
+ newConfig: LoadBalancingConfig
+ ): boolean {
+ return oldConfig.getLoadBalancerName() !== newConfig.getLoadBalancerName();
+ }
+
+ /**
+ * Prerequisites: lbConfig !== null and lbConfig.name is registered
+ * @param addressList
+ * @param lbConfig
+ * @param attributes
+ */
+ updateAddressList(
+ addressList: SubchannelAddress[],
+ lbConfig: LoadBalancingConfig,
+ attributes: { [key: string]: unknown }
+ ): void {
+ let childToUpdate: LoadBalancer;
+ if (
+ this.currentChild === null ||
+ this.latestConfig === null ||
+ this.configUpdateRequiresNewPolicyInstance(this.latestConfig, lbConfig)
+ ) {
+ const newHelper = new this.ChildPolicyHelper(this);
+ const newChild = createLoadBalancer(lbConfig, newHelper)!;
+ newHelper.setChild(newChild);
+ if (this.currentChild === null) {
+ this.currentChild = newChild;
+ childToUpdate = this.currentChild;
+ } else {
+ if (this.pendingChild) {
+ this.pendingChild.destroy();
+ }
+ this.pendingChild = newChild;
+ childToUpdate = this.pendingChild;
+ }
+ } else {
+ if (this.pendingChild === null) {
+ childToUpdate = this.currentChild;
+ } else {
+ childToUpdate = this.pendingChild;
+ }
+ }
+ this.latestConfig = lbConfig;
+ childToUpdate.updateAddressList(addressList, lbConfig, attributes);
+ }
+ exitIdle(): void {
+ if (this.currentChild) {
+ this.currentChild.exitIdle();
+ if (this.pendingChild) {
+ this.pendingChild.exitIdle();
+ }
+ }
+ }
+ resetBackoff(): void {
+ if (this.currentChild) {
+ this.currentChild.resetBackoff();
+ if (this.pendingChild) {
+ this.pendingChild.resetBackoff();
+ }
+ }
+ }
+ destroy(): void {
+ /* Note: state updates are only propagated from the child balancer if that
+ * object is equal to this.currentChild or this.pendingChild. Since this
+ * function sets both of those to null, no further state updates will
+ * occur after this function returns. */
+ if (this.currentChild) {
+ this.currentChild.destroy();
+ this.currentChild = null;
+ }
+ if (this.pendingChild) {
+ this.pendingChild.destroy();
+ this.pendingChild = null;
+ }
+ }
+ getTypeName(): string {
+ return TYPE_NAME;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-outlier-detection.ts b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-outlier-detection.ts
new file mode 100644
index 0000000..3e4b46f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-outlier-detection.ts
@@ -0,0 +1,882 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ChannelOptions } from './channel-options';
+import { ConnectivityState } from './connectivity-state';
+import { LogVerbosity, Status } from './constants';
+import { durationToMs, isDuration, msToDuration } from './duration';
+import {
+ ChannelControlHelper,
+ createChildChannelControlHelper,
+ registerLoadBalancerType,
+} from './experimental';
+import {
+ getFirstUsableConfig,
+ LoadBalancer,
+ LoadBalancingConfig,
+ validateLoadBalancingConfig,
+} from './load-balancer';
+import { ChildLoadBalancerHandler } from './load-balancer-child-handler';
+import { PickArgs, Picker, PickResult, PickResultType } from './picker';
+import {
+ SubchannelAddress,
+ subchannelAddressToString,
+} from './subchannel-address';
+import {
+ BaseSubchannelWrapper,
+ ConnectivityStateListener,
+ SubchannelInterface,
+} from './subchannel-interface';
+import * as logging from './logging';
+
+const TRACER_NAME = 'outlier_detection';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+const TYPE_NAME = 'outlier_detection';
+
+const OUTLIER_DETECTION_ENABLED =
+ (process.env.GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION ?? 'true') === 'true';
+
+export interface SuccessRateEjectionConfig {
+ readonly stdev_factor: number;
+ readonly enforcement_percentage: number;
+ readonly minimum_hosts: number;
+ readonly request_volume: number;
+}
+
+export interface FailurePercentageEjectionConfig {
+ readonly threshold: number;
+ readonly enforcement_percentage: number;
+ readonly minimum_hosts: number;
+ readonly request_volume: number;
+}
+
+const defaultSuccessRateEjectionConfig: SuccessRateEjectionConfig = {
+ stdev_factor: 1900,
+ enforcement_percentage: 100,
+ minimum_hosts: 5,
+ request_volume: 100,
+};
+
+const defaultFailurePercentageEjectionConfig: FailurePercentageEjectionConfig =
+ {
+ threshold: 85,
+ enforcement_percentage: 100,
+ minimum_hosts: 5,
+ request_volume: 50,
+ };
+
+type TypeofValues =
+ | 'object'
+ | 'boolean'
+ | 'function'
+ | 'number'
+ | 'string'
+ | 'undefined';
+
+function validateFieldType(
+ obj: any,
+ fieldName: string,
+ expectedType: TypeofValues,
+ objectName?: string
+) {
+ if (fieldName in obj && typeof obj[fieldName] !== expectedType) {
+ const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;
+ throw new Error(
+ `outlier detection config ${fullFieldName} parse error: expected ${expectedType}, got ${typeof obj[
+ fieldName
+ ]}`
+ );
+ }
+}
+
+function validatePositiveDuration(
+ obj: any,
+ fieldName: string,
+ objectName?: string
+) {
+ const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;
+ if (fieldName in obj) {
+ if (!isDuration(obj[fieldName])) {
+ throw new Error(
+ `outlier detection config ${fullFieldName} parse error: expected Duration, got ${typeof obj[
+ fieldName
+ ]}`
+ );
+ }
+ if (
+ !(
+ obj[fieldName].seconds >= 0 &&
+ obj[fieldName].seconds <= 315_576_000_000 &&
+ obj[fieldName].nanos >= 0 &&
+ obj[fieldName].nanos <= 999_999_999
+ )
+ ) {
+ throw new Error(
+ `outlier detection config ${fullFieldName} parse error: values out of range for non-negative Duaration`
+ );
+ }
+ }
+}
+
+function validatePercentage(obj: any, fieldName: string, objectName?: string) {
+ const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;
+ validateFieldType(obj, fieldName, 'number', objectName);
+ if (fieldName in obj && !(obj[fieldName] >= 0 && obj[fieldName] <= 100)) {
+ throw new Error(
+ `outlier detection config ${fullFieldName} parse error: value out of range for percentage (0-100)`
+ );
+ }
+}
+
+export class OutlierDetectionLoadBalancingConfig
+ implements LoadBalancingConfig
+{
+ private readonly intervalMs: number;
+ private readonly baseEjectionTimeMs: number;
+ private readonly maxEjectionTimeMs: number;
+ private readonly maxEjectionPercent: number;
+ private readonly successRateEjection: SuccessRateEjectionConfig | null;
+ private readonly failurePercentageEjection: FailurePercentageEjectionConfig | null;
+
+ constructor(
+ intervalMs: number | null,
+ baseEjectionTimeMs: number | null,
+ maxEjectionTimeMs: number | null,
+ maxEjectionPercent: number | null,
+ successRateEjection: Partial<SuccessRateEjectionConfig> | null,
+ failurePercentageEjection: Partial<FailurePercentageEjectionConfig> | null,
+ private readonly childPolicy: LoadBalancingConfig[]
+ ) {
+ if (
+ childPolicy.length > 0 &&
+ childPolicy[0].getLoadBalancerName() === 'pick_first'
+ ) {
+ throw new Error(
+ 'outlier_detection LB policy cannot have a pick_first child policy'
+ );
+ }
+ this.intervalMs = intervalMs ?? 10_000;
+ this.baseEjectionTimeMs = baseEjectionTimeMs ?? 30_000;
+ this.maxEjectionTimeMs = maxEjectionTimeMs ?? 300_000;
+ this.maxEjectionPercent = maxEjectionPercent ?? 10;
+ this.successRateEjection = successRateEjection
+ ? { ...defaultSuccessRateEjectionConfig, ...successRateEjection }
+ : null;
+ this.failurePercentageEjection = failurePercentageEjection
+ ? {
+ ...defaultFailurePercentageEjectionConfig,
+ ...failurePercentageEjection,
+ }
+ : null;
+ }
+ getLoadBalancerName(): string {
+ return TYPE_NAME;
+ }
+ toJsonObject(): object {
+ return {
+ interval: msToDuration(this.intervalMs),
+ base_ejection_time: msToDuration(this.baseEjectionTimeMs),
+ max_ejection_time: msToDuration(this.maxEjectionTimeMs),
+ max_ejection_percent: this.maxEjectionPercent,
+ success_rate_ejection: this.successRateEjection,
+ failure_percentage_ejection: this.failurePercentageEjection,
+ child_policy: this.childPolicy.map(policy => policy.toJsonObject()),
+ };
+ }
+
+ getIntervalMs(): number {
+ return this.intervalMs;
+ }
+ getBaseEjectionTimeMs(): number {
+ return this.baseEjectionTimeMs;
+ }
+ getMaxEjectionTimeMs(): number {
+ return this.maxEjectionTimeMs;
+ }
+ getMaxEjectionPercent(): number {
+ return this.maxEjectionPercent;
+ }
+ getSuccessRateEjectionConfig(): SuccessRateEjectionConfig | null {
+ return this.successRateEjection;
+ }
+ getFailurePercentageEjectionConfig(): FailurePercentageEjectionConfig | null {
+ return this.failurePercentageEjection;
+ }
+ getChildPolicy(): LoadBalancingConfig[] {
+ return this.childPolicy;
+ }
+
+ copyWithChildPolicy(
+ childPolicy: LoadBalancingConfig[]
+ ): OutlierDetectionLoadBalancingConfig {
+ return new OutlierDetectionLoadBalancingConfig(
+ this.intervalMs,
+ this.baseEjectionTimeMs,
+ this.maxEjectionTimeMs,
+ this.maxEjectionPercent,
+ this.successRateEjection,
+ this.failurePercentageEjection,
+ childPolicy
+ );
+ }
+
+ static createFromJson(obj: any): OutlierDetectionLoadBalancingConfig {
+ validatePositiveDuration(obj, 'interval');
+ validatePositiveDuration(obj, 'base_ejection_time');
+ validatePositiveDuration(obj, 'max_ejection_time');
+ validatePercentage(obj, 'max_ejection_percent');
+ if ('success_rate_ejection' in obj) {
+ if (typeof obj.success_rate_ejection !== 'object') {
+ throw new Error(
+ 'outlier detection config success_rate_ejection must be an object'
+ );
+ }
+ validateFieldType(
+ obj.success_rate_ejection,
+ 'stdev_factor',
+ 'number',
+ 'success_rate_ejection'
+ );
+ validatePercentage(
+ obj.success_rate_ejection,
+ 'enforcement_percentage',
+ 'success_rate_ejection'
+ );
+ validateFieldType(
+ obj.success_rate_ejection,
+ 'minimum_hosts',
+ 'number',
+ 'success_rate_ejection'
+ );
+ validateFieldType(
+ obj.success_rate_ejection,
+ 'request_volume',
+ 'number',
+ 'success_rate_ejection'
+ );
+ }
+ if ('failure_percentage_ejection' in obj) {
+ if (typeof obj.failure_percentage_ejection !== 'object') {
+ throw new Error(
+ 'outlier detection config failure_percentage_ejection must be an object'
+ );
+ }
+ validatePercentage(
+ obj.failure_percentage_ejection,
+ 'threshold',
+ 'failure_percentage_ejection'
+ );
+ validatePercentage(
+ obj.failure_percentage_ejection,
+ 'enforcement_percentage',
+ 'failure_percentage_ejection'
+ );
+ validateFieldType(
+ obj.failure_percentage_ejection,
+ 'minimum_hosts',
+ 'number',
+ 'failure_percentage_ejection'
+ );
+ validateFieldType(
+ obj.failure_percentage_ejection,
+ 'request_volume',
+ 'number',
+ 'failure_percentage_ejection'
+ );
+ }
+
+ return new OutlierDetectionLoadBalancingConfig(
+ obj.interval ? durationToMs(obj.interval) : null,
+ obj.base_ejection_time ? durationToMs(obj.base_ejection_time) : null,
+ obj.max_ejection_time ? durationToMs(obj.max_ejection_time) : null,
+ obj.max_ejection_percent ?? null,
+ obj.success_rate_ejection,
+ obj.failure_percentage_ejection,
+ obj.child_policy.map(validateLoadBalancingConfig)
+ );
+ }
+}
+
+class OutlierDetectionSubchannelWrapper
+ extends BaseSubchannelWrapper
+ implements SubchannelInterface
+{
+ private childSubchannelState: ConnectivityState;
+ private stateListeners: ConnectivityStateListener[] = [];
+ private ejected = false;
+ private refCount = 0;
+ constructor(
+ childSubchannel: SubchannelInterface,
+ private mapEntry?: MapEntry
+ ) {
+ super(childSubchannel);
+ this.childSubchannelState = childSubchannel.getConnectivityState();
+ childSubchannel.addConnectivityStateListener(
+ (subchannel, previousState, newState, keepaliveTime) => {
+ this.childSubchannelState = newState;
+ if (!this.ejected) {
+ for (const listener of this.stateListeners) {
+ listener(this, previousState, newState, keepaliveTime);
+ }
+ }
+ }
+ );
+ }
+
+ getConnectivityState(): ConnectivityState {
+ if (this.ejected) {
+ return ConnectivityState.TRANSIENT_FAILURE;
+ } else {
+ return this.childSubchannelState;
+ }
+ }
+
+ /**
+ * Add a listener function to be called whenever the wrapper's
+ * connectivity state changes.
+ * @param listener
+ */
+ addConnectivityStateListener(listener: ConnectivityStateListener) {
+ this.stateListeners.push(listener);
+ }
+
+ /**
+ * Remove a listener previously added with `addConnectivityStateListener`
+ * @param listener A reference to a function previously passed to
+ * `addConnectivityStateListener`
+ */
+ removeConnectivityStateListener(listener: ConnectivityStateListener) {
+ const listenerIndex = this.stateListeners.indexOf(listener);
+ if (listenerIndex > -1) {
+ this.stateListeners.splice(listenerIndex, 1);
+ }
+ }
+
+ ref() {
+ this.child.ref();
+ this.refCount += 1;
+ }
+
+ unref() {
+ this.child.unref();
+ this.refCount -= 1;
+ if (this.refCount <= 0) {
+ if (this.mapEntry) {
+ const index = this.mapEntry.subchannelWrappers.indexOf(this);
+ if (index >= 0) {
+ this.mapEntry.subchannelWrappers.splice(index, 1);
+ }
+ }
+ }
+ }
+
+ eject() {
+ this.ejected = true;
+ for (const listener of this.stateListeners) {
+ listener(
+ this,
+ this.childSubchannelState,
+ ConnectivityState.TRANSIENT_FAILURE,
+ -1
+ );
+ }
+ }
+
+ uneject() {
+ this.ejected = false;
+ for (const listener of this.stateListeners) {
+ listener(
+ this,
+ ConnectivityState.TRANSIENT_FAILURE,
+ this.childSubchannelState,
+ -1
+ );
+ }
+ }
+
+ getMapEntry(): MapEntry | undefined {
+ return this.mapEntry;
+ }
+
+ getWrappedSubchannel(): SubchannelInterface {
+ return this.child;
+ }
+}
+
+interface CallCountBucket {
+ success: number;
+ failure: number;
+}
+
+function createEmptyBucket(): CallCountBucket {
+ return {
+ success: 0,
+ failure: 0,
+ };
+}
+
+class CallCounter {
+ private activeBucket: CallCountBucket = createEmptyBucket();
+ private inactiveBucket: CallCountBucket = createEmptyBucket();
+ addSuccess() {
+ this.activeBucket.success += 1;
+ }
+ addFailure() {
+ this.activeBucket.failure += 1;
+ }
+ switchBuckets() {
+ this.inactiveBucket = this.activeBucket;
+ this.activeBucket = createEmptyBucket();
+ }
+ getLastSuccesses() {
+ return this.inactiveBucket.success;
+ }
+ getLastFailures() {
+ return this.inactiveBucket.failure;
+ }
+}
+
+interface MapEntry {
+ counter: CallCounter;
+ currentEjectionTimestamp: Date | null;
+ ejectionTimeMultiplier: number;
+ subchannelWrappers: OutlierDetectionSubchannelWrapper[];
+}
+
+class OutlierDetectionPicker implements Picker {
+ constructor(private wrappedPicker: Picker, private countCalls: boolean) {}
+ pick(pickArgs: PickArgs): PickResult {
+ const wrappedPick = this.wrappedPicker.pick(pickArgs);
+ if (wrappedPick.pickResultType === PickResultType.COMPLETE) {
+ const subchannelWrapper =
+ wrappedPick.subchannel as OutlierDetectionSubchannelWrapper;
+ const mapEntry = subchannelWrapper.getMapEntry();
+ if (mapEntry) {
+ let onCallEnded = wrappedPick.onCallEnded;
+ if (this.countCalls) {
+ onCallEnded = statusCode => {
+ if (statusCode === Status.OK) {
+ mapEntry.counter.addSuccess();
+ } else {
+ mapEntry.counter.addFailure();
+ }
+ wrappedPick.onCallEnded?.(statusCode);
+ };
+ }
+ return {
+ ...wrappedPick,
+ subchannel: subchannelWrapper.getWrappedSubchannel(),
+ onCallEnded: onCallEnded,
+ };
+ } else {
+ return {
+ ...wrappedPick,
+ subchannel: subchannelWrapper.getWrappedSubchannel(),
+ };
+ }
+ } else {
+ return wrappedPick;
+ }
+ }
+}
+
+export class OutlierDetectionLoadBalancer implements LoadBalancer {
+ private childBalancer: ChildLoadBalancerHandler;
+ private addressMap: Map<string, MapEntry> = new Map<string, MapEntry>();
+ private latestConfig: OutlierDetectionLoadBalancingConfig | null = null;
+ private ejectionTimer: NodeJS.Timeout;
+ private timerStartTime: Date | null = null;
+
+ constructor(channelControlHelper: ChannelControlHelper) {
+ this.childBalancer = new ChildLoadBalancerHandler(
+ createChildChannelControlHelper(channelControlHelper, {
+ createSubchannel: (
+ subchannelAddress: SubchannelAddress,
+ subchannelArgs: ChannelOptions
+ ) => {
+ const originalSubchannel = channelControlHelper.createSubchannel(
+ subchannelAddress,
+ subchannelArgs
+ );
+ const mapEntry = this.addressMap.get(
+ subchannelAddressToString(subchannelAddress)
+ );
+ const subchannelWrapper = new OutlierDetectionSubchannelWrapper(
+ originalSubchannel,
+ mapEntry
+ );
+ if (mapEntry?.currentEjectionTimestamp !== null) {
+ // If the address is ejected, propagate that to the new subchannel wrapper
+ subchannelWrapper.eject();
+ }
+ mapEntry?.subchannelWrappers.push(subchannelWrapper);
+ return subchannelWrapper;
+ },
+ updateState: (connectivityState: ConnectivityState, picker: Picker) => {
+ if (connectivityState === ConnectivityState.READY) {
+ channelControlHelper.updateState(
+ connectivityState,
+ new OutlierDetectionPicker(picker, this.isCountingEnabled())
+ );
+ } else {
+ channelControlHelper.updateState(connectivityState, picker);
+ }
+ },
+ })
+ );
+ this.ejectionTimer = setInterval(() => {}, 0);
+ clearInterval(this.ejectionTimer);
+ }
+
+ private isCountingEnabled(): boolean {
+ return (
+ this.latestConfig !== null &&
+ (this.latestConfig.getSuccessRateEjectionConfig() !== null ||
+ this.latestConfig.getFailurePercentageEjectionConfig() !== null)
+ );
+ }
+
+ private getCurrentEjectionPercent() {
+ let ejectionCount = 0;
+ for (const mapEntry of this.addressMap.values()) {
+ if (mapEntry.currentEjectionTimestamp !== null) {
+ ejectionCount += 1;
+ }
+ }
+ return (ejectionCount * 100) / this.addressMap.size;
+ }
+
+ private runSuccessRateCheck(ejectionTimestamp: Date) {
+ if (!this.latestConfig) {
+ return;
+ }
+ const successRateConfig = this.latestConfig.getSuccessRateEjectionConfig();
+ if (!successRateConfig) {
+ return;
+ }
+ trace('Running success rate check');
+ // Step 1
+ const targetRequestVolume = successRateConfig.request_volume;
+ let addresesWithTargetVolume = 0;
+ const successRates: number[] = [];
+ for (const [address, mapEntry] of this.addressMap) {
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ trace(
+ 'Stats for ' +
+ address +
+ ': successes=' +
+ successes +
+ ' failures=' +
+ failures +
+ ' targetRequestVolume=' +
+ targetRequestVolume
+ );
+ if (successes + failures >= targetRequestVolume) {
+ addresesWithTargetVolume += 1;
+ successRates.push(successes / (successes + failures));
+ }
+ }
+ trace(
+ 'Found ' +
+ addresesWithTargetVolume +
+ ' success rate candidates; currentEjectionPercent=' +
+ this.getCurrentEjectionPercent() +
+ ' successRates=[' +
+ successRates +
+ ']'
+ );
+ if (addresesWithTargetVolume < successRateConfig.minimum_hosts) {
+ return;
+ }
+
+ // Step 2
+ const successRateMean =
+ successRates.reduce((a, b) => a + b) / successRates.length;
+ let successRateDeviationSum = 0;
+ for (const rate of successRates) {
+ const deviation = rate - successRateMean;
+ successRateDeviationSum += deviation * deviation;
+ }
+ const successRateVariance = successRateDeviationSum / successRates.length;
+ const successRateStdev = Math.sqrt(successRateVariance);
+ const ejectionThreshold =
+ successRateMean -
+ successRateStdev * (successRateConfig.stdev_factor / 1000);
+ trace(
+ 'stdev=' + successRateStdev + ' ejectionThreshold=' + ejectionThreshold
+ );
+
+ // Step 3
+ for (const [address, mapEntry] of this.addressMap.entries()) {
+ // Step 3.i
+ if (
+ this.getCurrentEjectionPercent() >=
+ this.latestConfig.getMaxEjectionPercent()
+ ) {
+ break;
+ }
+ // Step 3.ii
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ if (successes + failures < targetRequestVolume) {
+ continue;
+ }
+ // Step 3.iii
+ const successRate = successes / (successes + failures);
+ trace('Checking candidate ' + address + ' successRate=' + successRate);
+ if (successRate < ejectionThreshold) {
+ const randomNumber = Math.random() * 100;
+ trace(
+ 'Candidate ' +
+ address +
+ ' randomNumber=' +
+ randomNumber +
+ ' enforcement_percentage=' +
+ successRateConfig.enforcement_percentage
+ );
+ if (randomNumber < successRateConfig.enforcement_percentage) {
+ trace('Ejecting candidate ' + address);
+ this.eject(mapEntry, ejectionTimestamp);
+ }
+ }
+ }
+ }
+
+ private runFailurePercentageCheck(ejectionTimestamp: Date) {
+ if (!this.latestConfig) {
+ return;
+ }
+ const failurePercentageConfig =
+ this.latestConfig.getFailurePercentageEjectionConfig();
+ if (!failurePercentageConfig) {
+ return;
+ }
+ trace(
+ 'Running failure percentage check. threshold=' +
+ failurePercentageConfig.threshold +
+ ' request volume threshold=' +
+ failurePercentageConfig.request_volume
+ );
+ // Step 1
+ let addressesWithTargetVolume = 0;
+ for (const mapEntry of this.addressMap.values()) {
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ if (successes + failures >= failurePercentageConfig.request_volume) {
+ addressesWithTargetVolume += 1;
+ }
+ }
+ if (addressesWithTargetVolume < failurePercentageConfig.minimum_hosts) {
+ return;
+ }
+
+ // Step 2
+ for (const [address, mapEntry] of this.addressMap.entries()) {
+ // Step 2.i
+ if (
+ this.getCurrentEjectionPercent() >=
+ this.latestConfig.getMaxEjectionPercent()
+ ) {
+ break;
+ }
+ // Step 2.ii
+ const successes = mapEntry.counter.getLastSuccesses();
+ const failures = mapEntry.counter.getLastFailures();
+ trace('Candidate successes=' + successes + ' failures=' + failures);
+ if (successes + failures < failurePercentageConfig.request_volume) {
+ continue;
+ }
+ // Step 2.iii
+ const failurePercentage = (failures * 100) / (failures + successes);
+ if (failurePercentage > failurePercentageConfig.threshold) {
+ const randomNumber = Math.random() * 100;
+ trace(
+ 'Candidate ' +
+ address +
+ ' randomNumber=' +
+ randomNumber +
+ ' enforcement_percentage=' +
+ failurePercentageConfig.enforcement_percentage
+ );
+ if (randomNumber < failurePercentageConfig.enforcement_percentage) {
+ trace('Ejecting candidate ' + address);
+ this.eject(mapEntry, ejectionTimestamp);
+ }
+ }
+ }
+ }
+
+ private eject(mapEntry: MapEntry, ejectionTimestamp: Date) {
+ mapEntry.currentEjectionTimestamp = new Date();
+ mapEntry.ejectionTimeMultiplier += 1;
+ for (const subchannelWrapper of mapEntry.subchannelWrappers) {
+ subchannelWrapper.eject();
+ }
+ }
+
+ private uneject(mapEntry: MapEntry) {
+ mapEntry.currentEjectionTimestamp = null;
+ for (const subchannelWrapper of mapEntry.subchannelWrappers) {
+ subchannelWrapper.uneject();
+ }
+ }
+
+ private switchAllBuckets() {
+ for (const mapEntry of this.addressMap.values()) {
+ mapEntry.counter.switchBuckets();
+ }
+ }
+
+ private startTimer(delayMs: number) {
+ this.ejectionTimer = setTimeout(() => this.runChecks(), delayMs);
+ this.ejectionTimer.unref?.();
+ }
+
+ private runChecks() {
+ const ejectionTimestamp = new Date();
+ trace('Ejection timer running');
+
+ this.switchAllBuckets();
+
+ if (!this.latestConfig) {
+ return;
+ }
+ this.timerStartTime = ejectionTimestamp;
+ this.startTimer(this.latestConfig.getIntervalMs());
+
+ this.runSuccessRateCheck(ejectionTimestamp);
+ this.runFailurePercentageCheck(ejectionTimestamp);
+
+ for (const [address, mapEntry] of this.addressMap.entries()) {
+ if (mapEntry.currentEjectionTimestamp === null) {
+ if (mapEntry.ejectionTimeMultiplier > 0) {
+ mapEntry.ejectionTimeMultiplier -= 1;
+ }
+ } else {
+ const baseEjectionTimeMs = this.latestConfig.getBaseEjectionTimeMs();
+ const maxEjectionTimeMs = this.latestConfig.getMaxEjectionTimeMs();
+ const returnTime = new Date(
+ mapEntry.currentEjectionTimestamp.getTime()
+ );
+ returnTime.setMilliseconds(
+ returnTime.getMilliseconds() +
+ Math.min(
+ baseEjectionTimeMs * mapEntry.ejectionTimeMultiplier,
+ Math.max(baseEjectionTimeMs, maxEjectionTimeMs)
+ )
+ );
+ if (returnTime < new Date()) {
+ trace('Unejecting ' + address);
+ this.uneject(mapEntry);
+ }
+ }
+ }
+ }
+
+ updateAddressList(
+ addressList: SubchannelAddress[],
+ lbConfig: LoadBalancingConfig,
+ attributes: { [key: string]: unknown }
+ ): void {
+ if (!(lbConfig instanceof OutlierDetectionLoadBalancingConfig)) {
+ return;
+ }
+ const subchannelAddresses = new Set<string>();
+ for (const address of addressList) {
+ subchannelAddresses.add(subchannelAddressToString(address));
+ }
+ for (const address of subchannelAddresses) {
+ if (!this.addressMap.has(address)) {
+ trace('Adding map entry for ' + address);
+ this.addressMap.set(address, {
+ counter: new CallCounter(),
+ currentEjectionTimestamp: null,
+ ejectionTimeMultiplier: 0,
+ subchannelWrappers: [],
+ });
+ }
+ }
+ for (const key of this.addressMap.keys()) {
+ if (!subchannelAddresses.has(key)) {
+ trace('Removing map entry for ' + key);
+ this.addressMap.delete(key);
+ }
+ }
+ const childPolicy: LoadBalancingConfig = getFirstUsableConfig(
+ lbConfig.getChildPolicy(),
+ true
+ );
+ this.childBalancer.updateAddressList(addressList, childPolicy, attributes);
+
+ if (
+ lbConfig.getSuccessRateEjectionConfig() ||
+ lbConfig.getFailurePercentageEjectionConfig()
+ ) {
+ if (this.timerStartTime) {
+ trace('Previous timer existed. Replacing timer');
+ clearTimeout(this.ejectionTimer);
+ const remainingDelay =
+ lbConfig.getIntervalMs() -
+ (new Date().getTime() - this.timerStartTime.getTime());
+ this.startTimer(remainingDelay);
+ } else {
+ trace('Starting new timer');
+ this.timerStartTime = new Date();
+ this.startTimer(lbConfig.getIntervalMs());
+ this.switchAllBuckets();
+ }
+ } else {
+ trace('Counting disabled. Cancelling timer.');
+ this.timerStartTime = null;
+ clearTimeout(this.ejectionTimer);
+ for (const mapEntry of this.addressMap.values()) {
+ this.uneject(mapEntry);
+ mapEntry.ejectionTimeMultiplier = 0;
+ }
+ }
+
+ this.latestConfig = lbConfig;
+ }
+ exitIdle(): void {
+ this.childBalancer.exitIdle();
+ }
+ resetBackoff(): void {
+ this.childBalancer.resetBackoff();
+ }
+ destroy(): void {
+ clearTimeout(this.ejectionTimer);
+ this.childBalancer.destroy();
+ }
+ getTypeName(): string {
+ return TYPE_NAME;
+ }
+}
+
+export function setup() {
+ if (OUTLIER_DETECTION_ENABLED) {
+ registerLoadBalancerType(
+ TYPE_NAME,
+ OutlierDetectionLoadBalancer,
+ OutlierDetectionLoadBalancingConfig
+ );
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-pick-first.ts b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-pick-first.ts
new file mode 100644
index 0000000..75c9d4c
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-pick-first.ts
@@ -0,0 +1,487 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {
+ LoadBalancer,
+ ChannelControlHelper,
+ LoadBalancingConfig,
+ registerDefaultLoadBalancerType,
+ registerLoadBalancerType,
+} from './load-balancer';
+import { ConnectivityState } from './connectivity-state';
+import {
+ QueuePicker,
+ Picker,
+ PickArgs,
+ CompletePickResult,
+ PickResultType,
+ UnavailablePicker,
+} from './picker';
+import { SubchannelAddress } from './subchannel-address';
+import * as logging from './logging';
+import { LogVerbosity } from './constants';
+import {
+ SubchannelInterface,
+ ConnectivityStateListener,
+} from './subchannel-interface';
+
+const TRACER_NAME = 'pick_first';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+const TYPE_NAME = 'pick_first';
+
+/**
+ * Delay after starting a connection on a subchannel before starting a
+ * connection on the next subchannel in the list, for Happy Eyeballs algorithm.
+ */
+const CONNECTION_DELAY_INTERVAL_MS = 250;
+
+export class PickFirstLoadBalancingConfig implements LoadBalancingConfig {
+ constructor(private readonly shuffleAddressList: boolean) {}
+
+ getLoadBalancerName(): string {
+ return TYPE_NAME;
+ }
+
+ toJsonObject(): object {
+ return {
+ [TYPE_NAME]: {
+ shuffleAddressList: this.shuffleAddressList,
+ },
+ };
+ }
+
+ getShuffleAddressList() {
+ return this.shuffleAddressList;
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ static createFromJson(obj: any) {
+ if (
+ 'shuffleAddressList' in obj &&
+ !(typeof obj.shuffleAddressList === 'boolean')
+ ) {
+ throw new Error(
+ 'pick_first config field shuffleAddressList must be a boolean if provided'
+ );
+ }
+ return new PickFirstLoadBalancingConfig(obj.shuffleAddressList === true);
+ }
+}
+
+/**
+ * Picker for a `PickFirstLoadBalancer` in the READY state. Always returns the
+ * picked subchannel.
+ */
+class PickFirstPicker implements Picker {
+ constructor(private subchannel: SubchannelInterface) {}
+
+ pick(pickArgs: PickArgs): CompletePickResult {
+ return {
+ pickResultType: PickResultType.COMPLETE,
+ subchannel: this.subchannel,
+ status: null,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+}
+
+interface SubchannelChild {
+ subchannel: SubchannelInterface;
+ hasReportedTransientFailure: boolean;
+}
+
+/**
+ * Return a new array with the elements of the input array in a random order
+ * @param list The input array
+ * @returns A shuffled array of the elements of list
+ */
+export function shuffled<T>(list: T[]): T[] {
+ const result = list.slice();
+ for (let i = result.length - 1; i > 1; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ const temp = result[i];
+ result[i] = result[j];
+ result[j] = temp;
+ }
+ return result;
+}
+
+export class PickFirstLoadBalancer implements LoadBalancer {
+ /**
+ * The list of subchannels this load balancer is currently attempting to
+ * connect to.
+ */
+ private children: SubchannelChild[] = [];
+ /**
+ * The current connectivity state of the load balancer.
+ */
+ private currentState: ConnectivityState = ConnectivityState.IDLE;
+ /**
+ * The index within the `subchannels` array of the subchannel with the most
+ * recently started connection attempt.
+ */
+ private currentSubchannelIndex = 0;
+ /**
+ * The currently picked subchannel used for making calls. Populated if
+ * and only if the load balancer's current state is READY. In that case,
+ * the subchannel's current state is also READY.
+ */
+ private currentPick: SubchannelInterface | null = null;
+ /**
+ * Listener callback attached to each subchannel in the `subchannels` list
+ * while establishing a connection.
+ */
+ private subchannelStateListener: ConnectivityStateListener = (
+ subchannel,
+ previousState,
+ newState,
+ keepaliveTime,
+ errorMessage
+ ) => {
+ this.onSubchannelStateUpdate(subchannel, previousState, newState, errorMessage);
+ };
+ /**
+ * Timer reference for the timer tracking when to start
+ */
+ private connectionDelayTimeout: NodeJS.Timeout;
+
+ private triedAllSubchannels = false;
+
+ /**
+ * The LB policy enters sticky TRANSIENT_FAILURE mode when all
+ * subchannels have failed to connect at least once, and it stays in that
+ * mode until a connection attempt is successful. While in sticky TF mode,
+ * the LB policy continuously attempts to connect to all of its subchannels.
+ */
+ private stickyTransientFailureMode = false;
+
+ /**
+ * Indicates whether we called channelControlHelper.requestReresolution since
+ * the last call to updateAddressList
+ */
+ private requestedResolutionSinceLastUpdate = false;
+
+ /**
+ * The most recent error reported by any subchannel as it transitioned to
+ * TRANSIENT_FAILURE.
+ */
+ private lastError: string | null = null;
+
+ private latestAddressList: SubchannelAddress[] | null = null;
+
+ /**
+ * Load balancer that attempts to connect to each backend in the address list
+ * in order, and picks the first one that connects, using it for every
+ * request.
+ * @param channelControlHelper `ChannelControlHelper` instance provided by
+ * this load balancer's owner.
+ */
+ constructor(private readonly channelControlHelper: ChannelControlHelper) {
+ this.connectionDelayTimeout = setTimeout(() => {}, 0);
+ clearTimeout(this.connectionDelayTimeout);
+ }
+
+ private allChildrenHaveReportedTF(): boolean {
+ return this.children.every(child => child.hasReportedTransientFailure);
+ }
+
+ private calculateAndReportNewState() {
+ if (this.currentPick) {
+ this.updateState(
+ ConnectivityState.READY,
+ new PickFirstPicker(this.currentPick)
+ );
+ } else if (this.children.length === 0) {
+ this.updateState(ConnectivityState.IDLE, new QueuePicker(this));
+ } else {
+ if (this.stickyTransientFailureMode) {
+ this.updateState(
+ ConnectivityState.TRANSIENT_FAILURE,
+ new UnavailablePicker({details: `No connection established. Last error: ${this.lastError}`})
+ );
+ } else {
+ this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this));
+ }
+ }
+ }
+
+ private requestReresolution() {
+ this.requestedResolutionSinceLastUpdate = true;
+ this.channelControlHelper.requestReresolution();
+ }
+
+ private maybeEnterStickyTransientFailureMode() {
+ if (!this.allChildrenHaveReportedTF()) {
+ return;
+ }
+ if (!this.requestedResolutionSinceLastUpdate) {
+ /* Each time we get an update we reset each subchannel's
+ * hasReportedTransientFailure flag, so the next time we get to this
+ * point after that, each subchannel has reported TRANSIENT_FAILURE
+ * at least once since then. That is the trigger for requesting
+ * reresolution, whether or not the LB policy is already in sticky TF
+ * mode. */
+ this.requestReresolution();
+ }
+ if (this.stickyTransientFailureMode) {
+ return;
+ }
+ this.stickyTransientFailureMode = true;
+ for (const { subchannel } of this.children) {
+ subchannel.startConnecting();
+ }
+ this.calculateAndReportNewState();
+ }
+
+ private removeCurrentPick() {
+ if (this.currentPick !== null) {
+ /* Unref can cause a state change, which can cause a change in the value
+ * of this.currentPick, so we hold a local reference to make sure that
+ * does not impact this function. */
+ const currentPick = this.currentPick;
+ this.currentPick = null;
+ currentPick.unref();
+ currentPick.removeConnectivityStateListener(this.subchannelStateListener);
+ this.channelControlHelper.removeChannelzChild(
+ currentPick.getChannelzRef()
+ );
+ }
+ }
+
+ private onSubchannelStateUpdate(
+ subchannel: SubchannelInterface,
+ previousState: ConnectivityState,
+ newState: ConnectivityState,
+ errorMessage?: string
+ ) {
+ if (this.currentPick?.realSubchannelEquals(subchannel)) {
+ if (newState !== ConnectivityState.READY) {
+ this.removeCurrentPick();
+ this.calculateAndReportNewState();
+ this.requestReresolution();
+ }
+ return;
+ }
+ for (const [index, child] of this.children.entries()) {
+ if (subchannel.realSubchannelEquals(child.subchannel)) {
+ if (newState === ConnectivityState.READY) {
+ this.pickSubchannel(child.subchannel);
+ }
+ if (newState === ConnectivityState.TRANSIENT_FAILURE) {
+ child.hasReportedTransientFailure = true;
+ if (errorMessage) {
+ this.lastError = errorMessage;
+ }
+ this.maybeEnterStickyTransientFailureMode();
+ if (index === this.currentSubchannelIndex) {
+ this.startNextSubchannelConnecting(index + 1);
+ }
+ }
+ child.subchannel.startConnecting();
+ return;
+ }
+ }
+ }
+
+ private startNextSubchannelConnecting(startIndex: number) {
+ clearTimeout(this.connectionDelayTimeout);
+ if (this.triedAllSubchannels) {
+ return;
+ }
+ for (const [index, child] of this.children.entries()) {
+ if (index >= startIndex) {
+ const subchannelState = child.subchannel.getConnectivityState();
+ if (
+ subchannelState === ConnectivityState.IDLE ||
+ subchannelState === ConnectivityState.CONNECTING
+ ) {
+ this.startConnecting(index);
+ return;
+ }
+ }
+ }
+ this.triedAllSubchannels = true;
+ this.maybeEnterStickyTransientFailureMode();
+ }
+
+ /**
+ * Have a single subchannel in the `subchannels` list start connecting.
+ * @param subchannelIndex The index into the `subchannels` list.
+ */
+ private startConnecting(subchannelIndex: number) {
+ clearTimeout(this.connectionDelayTimeout);
+ this.currentSubchannelIndex = subchannelIndex;
+ if (
+ this.children[subchannelIndex].subchannel.getConnectivityState() ===
+ ConnectivityState.IDLE
+ ) {
+ trace(
+ 'Start connecting to subchannel with address ' +
+ this.children[subchannelIndex].subchannel.getAddress()
+ );
+ process.nextTick(() => {
+ this.children[subchannelIndex]?.subchannel.startConnecting();
+ });
+ }
+ this.connectionDelayTimeout = setTimeout(() => {
+ this.startNextSubchannelConnecting(subchannelIndex + 1);
+ }, CONNECTION_DELAY_INTERVAL_MS).unref?.();
+ }
+
+ private pickSubchannel(subchannel: SubchannelInterface) {
+ if (this.currentPick && subchannel.realSubchannelEquals(this.currentPick)) {
+ return;
+ }
+ trace('Pick subchannel with address ' + subchannel.getAddress());
+ this.stickyTransientFailureMode = false;
+ if (this.currentPick !== null) {
+ this.currentPick.unref();
+ this.channelControlHelper.removeChannelzChild(
+ this.currentPick.getChannelzRef()
+ );
+ this.currentPick.removeConnectivityStateListener(
+ this.subchannelStateListener
+ );
+ }
+ this.currentPick = subchannel;
+ subchannel.ref();
+ this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());
+ this.resetSubchannelList();
+ clearTimeout(this.connectionDelayTimeout);
+ this.calculateAndReportNewState();
+ }
+
+ private updateState(newState: ConnectivityState, picker: Picker) {
+ trace(
+ ConnectivityState[this.currentState] +
+ ' -> ' +
+ ConnectivityState[newState]
+ );
+ this.currentState = newState;
+ this.channelControlHelper.updateState(newState, picker);
+ }
+
+ private resetSubchannelList() {
+ for (const child of this.children) {
+ if (!(this.currentPick && child.subchannel.realSubchannelEquals(this.currentPick))) {
+ /* The connectivity state listener is the same whether the subchannel
+ * is in the list of children or it is the currentPick, so if it is in
+ * both, removing it here would cause problems. In particular, that
+ * always happens immediately after the subchannel is picked. */
+ child.subchannel.removeConnectivityStateListener(
+ this.subchannelStateListener
+ );
+ }
+ /* Refs are counted independently for the children list and the
+ * currentPick, so we call unref whether or not the child is the
+ * currentPick. Channelz child references are also refcounted, so
+ * removeChannelzChild can be handled the same way. */
+ child.subchannel.unref();
+ this.channelControlHelper.removeChannelzChild(
+ child.subchannel.getChannelzRef()
+ );
+ }
+ this.currentSubchannelIndex = 0;
+ this.children = [];
+ this.triedAllSubchannels = false;
+ this.requestedResolutionSinceLastUpdate = false;
+ }
+
+ private connectToAddressList(addressList: SubchannelAddress[]) {
+ const newChildrenList = addressList.map(address => ({
+ subchannel: this.channelControlHelper.createSubchannel(address, {}),
+ hasReportedTransientFailure: false,
+ }));
+ /* Ref each subchannel before resetting the list, to ensure that
+ * subchannels shared between the list don't drop to 0 refs during the
+ * transition. */
+ for (const { subchannel } of newChildrenList) {
+ subchannel.ref();
+ this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());
+ }
+ this.resetSubchannelList();
+ this.children = newChildrenList;
+ for (const { subchannel } of this.children) {
+ subchannel.addConnectivityStateListener(this.subchannelStateListener);
+ if (subchannel.getConnectivityState() === ConnectivityState.READY) {
+ this.pickSubchannel(subchannel);
+ return;
+ }
+ }
+ for (const child of this.children) {
+ if (
+ child.subchannel.getConnectivityState() ===
+ ConnectivityState.TRANSIENT_FAILURE
+ ) {
+ child.hasReportedTransientFailure = true;
+ }
+ }
+ this.startNextSubchannelConnecting(0);
+ this.calculateAndReportNewState();
+ }
+
+ updateAddressList(
+ addressList: SubchannelAddress[],
+ lbConfig: LoadBalancingConfig
+ ): void {
+ if (!(lbConfig instanceof PickFirstLoadBalancingConfig)) {
+ return;
+ }
+ /* Previously, an update would be discarded if it was identical to the
+ * previous update, to minimize churn. Now the DNS resolver is
+ * rate-limited, so that is less of a concern. */
+ if (lbConfig.getShuffleAddressList()) {
+ addressList = shuffled(addressList);
+ }
+ this.latestAddressList = addressList;
+ this.connectToAddressList(addressList);
+ }
+
+ exitIdle() {
+ if (this.currentState === ConnectivityState.IDLE && this.latestAddressList) {
+ this.connectToAddressList(this.latestAddressList);
+ }
+ }
+
+ resetBackoff() {
+ /* The pick first load balancer does not have a connection backoff, so this
+ * does nothing */
+ }
+
+ destroy() {
+ this.resetSubchannelList();
+ this.removeCurrentPick();
+ }
+
+ getTypeName(): string {
+ return TYPE_NAME;
+ }
+}
+
+export function setup(): void {
+ registerLoadBalancerType(
+ TYPE_NAME,
+ PickFirstLoadBalancer,
+ PickFirstLoadBalancingConfig
+ );
+ registerDefaultLoadBalancerType(TYPE_NAME);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-round-robin.ts b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-round-robin.ts
new file mode 100644
index 0000000..062aa9f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer-round-robin.ts
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {
+ LoadBalancer,
+ ChannelControlHelper,
+ LoadBalancingConfig,
+ registerLoadBalancerType,
+} from './load-balancer';
+import { ConnectivityState } from './connectivity-state';
+import {
+ QueuePicker,
+ Picker,
+ PickArgs,
+ CompletePickResult,
+ PickResultType,
+ UnavailablePicker,
+} from './picker';
+import {
+ SubchannelAddress,
+ subchannelAddressToString,
+} from './subchannel-address';
+import * as logging from './logging';
+import { LogVerbosity } from './constants';
+import {
+ ConnectivityStateListener,
+ SubchannelInterface,
+} from './subchannel-interface';
+
+const TRACER_NAME = 'round_robin';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+const TYPE_NAME = 'round_robin';
+
+class RoundRobinLoadBalancingConfig implements LoadBalancingConfig {
+ getLoadBalancerName(): string {
+ return TYPE_NAME;
+ }
+
+ constructor() {}
+
+ toJsonObject(): object {
+ return {
+ [TYPE_NAME]: {},
+ };
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ static createFromJson(obj: any) {
+ return new RoundRobinLoadBalancingConfig();
+ }
+}
+
+class RoundRobinPicker implements Picker {
+ constructor(
+ private readonly subchannelList: SubchannelInterface[],
+ private nextIndex = 0
+ ) {}
+
+ pick(pickArgs: PickArgs): CompletePickResult {
+ const pickedSubchannel = this.subchannelList[this.nextIndex];
+ this.nextIndex = (this.nextIndex + 1) % this.subchannelList.length;
+ return {
+ pickResultType: PickResultType.COMPLETE,
+ subchannel: pickedSubchannel,
+ status: null,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+
+ /**
+ * Check what the next subchannel returned would be. Used by the load
+ * balancer implementation to preserve this part of the picker state if
+ * possible when a subchannel connects or disconnects.
+ */
+ peekNextSubchannel(): SubchannelInterface {
+ return this.subchannelList[this.nextIndex];
+ }
+}
+
+export class RoundRobinLoadBalancer implements LoadBalancer {
+ private subchannels: SubchannelInterface[] = [];
+
+ private currentState: ConnectivityState = ConnectivityState.IDLE;
+
+ private subchannelStateListener: ConnectivityStateListener;
+
+ private currentReadyPicker: RoundRobinPicker | null = null;
+
+ private lastError: string | null = null;
+
+ constructor(private readonly channelControlHelper: ChannelControlHelper) {
+ this.subchannelStateListener = (
+ subchannel: SubchannelInterface,
+ previousState: ConnectivityState,
+ newState: ConnectivityState,
+ keepaliveTime: number,
+ errorMessage?: string
+ ) => {
+ this.calculateAndUpdateState();
+ if (
+ newState === ConnectivityState.TRANSIENT_FAILURE ||
+ newState === ConnectivityState.IDLE
+ ) {
+ if (errorMessage) {
+ this.lastError = errorMessage;
+ }
+ this.channelControlHelper.requestReresolution();
+ subchannel.startConnecting();
+ }
+ };
+ }
+
+ private countSubchannelsWithState(state: ConnectivityState) {
+ return this.subchannels.filter(
+ subchannel => subchannel.getConnectivityState() === state
+ ).length;
+ }
+
+ private calculateAndUpdateState() {
+ if (this.countSubchannelsWithState(ConnectivityState.READY) > 0) {
+ const readySubchannels = this.subchannels.filter(
+ subchannel =>
+ subchannel.getConnectivityState() === ConnectivityState.READY
+ );
+ let index = 0;
+ if (this.currentReadyPicker !== null) {
+ index = readySubchannels.indexOf(
+ this.currentReadyPicker.peekNextSubchannel()
+ );
+ if (index < 0) {
+ index = 0;
+ }
+ }
+ this.updateState(
+ ConnectivityState.READY,
+ new RoundRobinPicker(readySubchannels, index)
+ );
+ } else if (
+ this.countSubchannelsWithState(ConnectivityState.CONNECTING) > 0
+ ) {
+ this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this));
+ } else if (
+ this.countSubchannelsWithState(ConnectivityState.TRANSIENT_FAILURE) > 0
+ ) {
+ this.updateState(
+ ConnectivityState.TRANSIENT_FAILURE,
+ new UnavailablePicker({details: `No connection established. Last error: ${this.lastError}`})
+ );
+ } else {
+ this.updateState(ConnectivityState.IDLE, new QueuePicker(this));
+ }
+ }
+
+ private updateState(newState: ConnectivityState, picker: Picker) {
+ trace(
+ ConnectivityState[this.currentState] +
+ ' -> ' +
+ ConnectivityState[newState]
+ );
+ if (newState === ConnectivityState.READY) {
+ this.currentReadyPicker = picker as RoundRobinPicker;
+ } else {
+ this.currentReadyPicker = null;
+ }
+ this.currentState = newState;
+ this.channelControlHelper.updateState(newState, picker);
+ }
+
+ private resetSubchannelList() {
+ for (const subchannel of this.subchannels) {
+ subchannel.removeConnectivityStateListener(this.subchannelStateListener);
+ subchannel.unref();
+ this.channelControlHelper.removeChannelzChild(
+ subchannel.getChannelzRef()
+ );
+ }
+ this.subchannels = [];
+ }
+
+ updateAddressList(
+ addressList: SubchannelAddress[],
+ lbConfig: LoadBalancingConfig
+ ): void {
+ this.resetSubchannelList();
+ trace(
+ 'Connect to address list ' +
+ addressList.map(address => subchannelAddressToString(address))
+ );
+ this.subchannels = addressList.map(address =>
+ this.channelControlHelper.createSubchannel(address, {})
+ );
+ for (const subchannel of this.subchannels) {
+ subchannel.ref();
+ subchannel.addConnectivityStateListener(this.subchannelStateListener);
+ this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());
+ const subchannelState = subchannel.getConnectivityState();
+ if (
+ subchannelState === ConnectivityState.IDLE ||
+ subchannelState === ConnectivityState.TRANSIENT_FAILURE
+ ) {
+ subchannel.startConnecting();
+ }
+ }
+ this.calculateAndUpdateState();
+ }
+
+ exitIdle(): void {
+ for (const subchannel of this.subchannels) {
+ subchannel.startConnecting();
+ }
+ }
+ resetBackoff(): void {
+ /* The pick first load balancer does not have a connection backoff, so this
+ * does nothing */
+ }
+ destroy(): void {
+ this.resetSubchannelList();
+ }
+ getTypeName(): string {
+ return TYPE_NAME;
+ }
+}
+
+export function setup() {
+ registerLoadBalancerType(
+ TYPE_NAME,
+ RoundRobinLoadBalancer,
+ RoundRobinLoadBalancingConfig
+ );
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer.ts b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer.ts
new file mode 100644
index 0000000..f186387
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancer.ts
@@ -0,0 +1,230 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ChannelOptions } from './channel-options';
+import { SubchannelAddress } from './subchannel-address';
+import { ConnectivityState } from './connectivity-state';
+import { Picker } from './picker';
+import { ChannelRef, SubchannelRef } from './channelz';
+import { SubchannelInterface } from './subchannel-interface';
+
+/**
+ * A collection of functions associated with a channel that a load balancer
+ * can call as necessary.
+ */
+export interface ChannelControlHelper {
+ /**
+ * Returns a subchannel connected to the specified address.
+ * @param subchannelAddress The address to connect to
+ * @param subchannelArgs Extra channel arguments specified by the load balancer
+ */
+ createSubchannel(
+ subchannelAddress: SubchannelAddress,
+ subchannelArgs: ChannelOptions
+ ): SubchannelInterface;
+ /**
+ * Passes a new subchannel picker up to the channel. This is called if either
+ * the connectivity state changes or if a different picker is needed for any
+ * other reason.
+ * @param connectivityState New connectivity state
+ * @param picker New picker
+ */
+ updateState(connectivityState: ConnectivityState, picker: Picker): void;
+ /**
+ * Request new data from the resolver.
+ */
+ requestReresolution(): void;
+ addChannelzChild(child: ChannelRef | SubchannelRef): void;
+ removeChannelzChild(child: ChannelRef | SubchannelRef): void;
+}
+
+/**
+ * Create a child ChannelControlHelper that overrides some methods of the
+ * parent while letting others pass through to the parent unmodified. This
+ * allows other code to create these children without needing to know about
+ * all of the methods to be passed through.
+ * @param parent
+ * @param overrides
+ */
+export function createChildChannelControlHelper(
+ parent: ChannelControlHelper,
+ overrides: Partial<ChannelControlHelper>
+): ChannelControlHelper {
+ return {
+ createSubchannel:
+ overrides.createSubchannel?.bind(overrides) ??
+ parent.createSubchannel.bind(parent),
+ updateState:
+ overrides.updateState?.bind(overrides) ?? parent.updateState.bind(parent),
+ requestReresolution:
+ overrides.requestReresolution?.bind(overrides) ??
+ parent.requestReresolution.bind(parent),
+ addChannelzChild:
+ overrides.addChannelzChild?.bind(overrides) ??
+ parent.addChannelzChild.bind(parent),
+ removeChannelzChild:
+ overrides.removeChannelzChild?.bind(overrides) ??
+ parent.removeChannelzChild.bind(parent),
+ };
+}
+
+/**
+ * Tracks one or more connected subchannels and determines which subchannel
+ * each request should use.
+ */
+export interface LoadBalancer {
+ /**
+ * Gives the load balancer a new list of addresses to start connecting to.
+ * The load balancer will start establishing connections with the new list,
+ * but will continue using any existing connections until the new connections
+ * are established
+ * @param addressList The new list of addresses to connect to
+ * @param lbConfig The load balancing config object from the service config,
+ * if one was provided
+ */
+ updateAddressList(
+ addressList: SubchannelAddress[],
+ lbConfig: LoadBalancingConfig,
+ attributes: { [key: string]: unknown }
+ ): void;
+ /**
+ * If the load balancer is currently in the IDLE state, start connecting.
+ */
+ exitIdle(): void;
+ /**
+ * If the load balancer is currently in the CONNECTING or TRANSIENT_FAILURE
+ * state, reset the current connection backoff timeout to its base value and
+ * transition to CONNECTING if in TRANSIENT_FAILURE.
+ */
+ resetBackoff(): void;
+ /**
+ * The load balancer unrefs all of its subchannels and stops calling methods
+ * of its channel control helper.
+ */
+ destroy(): void;
+ /**
+ * Get the type name for this load balancer type. Must be constant across an
+ * entire load balancer implementation class and must match the name that the
+ * balancer implementation class was registered with.
+ */
+ getTypeName(): string;
+}
+
+export interface LoadBalancerConstructor {
+ new (channelControlHelper: ChannelControlHelper): LoadBalancer;
+}
+
+export interface LoadBalancingConfig {
+ getLoadBalancerName(): string;
+ toJsonObject(): object;
+}
+
+export interface LoadBalancingConfigConstructor {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ new (...args: any): LoadBalancingConfig;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ createFromJson(obj: any): LoadBalancingConfig;
+}
+
+const registeredLoadBalancerTypes: {
+ [name: string]: {
+ LoadBalancer: LoadBalancerConstructor;
+ LoadBalancingConfig: LoadBalancingConfigConstructor;
+ };
+} = {};
+
+let defaultLoadBalancerType: string | null = null;
+
+export function registerLoadBalancerType(
+ typeName: string,
+ loadBalancerType: LoadBalancerConstructor,
+ loadBalancingConfigType: LoadBalancingConfigConstructor
+) {
+ registeredLoadBalancerTypes[typeName] = {
+ LoadBalancer: loadBalancerType,
+ LoadBalancingConfig: loadBalancingConfigType,
+ };
+}
+
+export function registerDefaultLoadBalancerType(typeName: string) {
+ defaultLoadBalancerType = typeName;
+}
+
+export function createLoadBalancer(
+ config: LoadBalancingConfig,
+ channelControlHelper: ChannelControlHelper
+): LoadBalancer | null {
+ const typeName = config.getLoadBalancerName();
+ if (typeName in registeredLoadBalancerTypes) {
+ return new registeredLoadBalancerTypes[typeName].LoadBalancer(
+ channelControlHelper
+ );
+ } else {
+ return null;
+ }
+}
+
+export function isLoadBalancerNameRegistered(typeName: string): boolean {
+ return typeName in registeredLoadBalancerTypes;
+}
+
+export function getFirstUsableConfig(
+ configs: LoadBalancingConfig[],
+ fallbackTodefault?: true
+): LoadBalancingConfig;
+export function getFirstUsableConfig(
+ configs: LoadBalancingConfig[],
+ fallbackTodefault = false
+): LoadBalancingConfig | null {
+ for (const config of configs) {
+ if (config.getLoadBalancerName() in registeredLoadBalancerTypes) {
+ return config;
+ }
+ }
+ if (fallbackTodefault) {
+ if (defaultLoadBalancerType) {
+ return new registeredLoadBalancerTypes[
+ defaultLoadBalancerType
+ ]!.LoadBalancingConfig();
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+}
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export function validateLoadBalancingConfig(obj: any): LoadBalancingConfig {
+ if (!(obj !== null && typeof obj === 'object')) {
+ throw new Error('Load balancing config must be an object');
+ }
+ const keys = Object.keys(obj);
+ if (keys.length !== 1) {
+ throw new Error(
+ 'Provided load balancing config has multiple conflicting entries'
+ );
+ }
+ const typeName = keys[0];
+ if (typeName in registeredLoadBalancerTypes) {
+ return registeredLoadBalancerTypes[
+ typeName
+ ].LoadBalancingConfig.createFromJson(obj[typeName]);
+ } else {
+ throw new Error(`Unrecognized load balancing config name ${typeName}`);
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/load-balancing-call.ts b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancing-call.ts
new file mode 100644
index 0000000..2721e96
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/load-balancing-call.ts
@@ -0,0 +1,351 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { CallCredentials } from './call-credentials';
+import {
+ Call,
+ InterceptingListener,
+ MessageContext,
+ StatusObject,
+} from './call-interface';
+import { SubchannelCall } from './subchannel-call';
+import { ConnectivityState } from './connectivity-state';
+import { LogVerbosity, Status } from './constants';
+import { Deadline, getDeadlineTimeoutString } from './deadline';
+import { InternalChannel } from './internal-channel';
+import { Metadata } from './metadata';
+import { PickResultType } from './picker';
+import { CallConfig } from './resolver';
+import { splitHostPort } from './uri-parser';
+import * as logging from './logging';
+import { restrictControlPlaneStatusCode } from './control-plane-status';
+import * as http2 from 'http2';
+
+const TRACER_NAME = 'load_balancing_call';
+
+export type RpcProgress = 'NOT_STARTED' | 'DROP' | 'REFUSED' | 'PROCESSED';
+
+export interface StatusObjectWithProgress extends StatusObject {
+ progress: RpcProgress;
+}
+
+export interface LoadBalancingCallInterceptingListener
+ extends InterceptingListener {
+ onReceiveStatus(status: StatusObjectWithProgress): void;
+}
+
+export class LoadBalancingCall implements Call {
+ private child: SubchannelCall | null = null;
+ private readPending = false;
+ private pendingMessage: { context: MessageContext; message: Buffer } | null =
+ null;
+ private pendingHalfClose = false;
+ private ended = false;
+ private serviceUrl: string;
+ private metadata: Metadata | null = null;
+ private listener: InterceptingListener | null = null;
+ private onCallEnded: ((statusCode: Status) => void) | null = null;
+ constructor(
+ private readonly channel: InternalChannel,
+ private readonly callConfig: CallConfig,
+ private readonly methodName: string,
+ private readonly host: string,
+ private readonly credentials: CallCredentials,
+ private readonly deadline: Deadline,
+ private readonly callNumber: number
+ ) {
+ const splitPath: string[] = this.methodName.split('/');
+ let serviceName = '';
+ /* The standard path format is "/{serviceName}/{methodName}", so if we split
+ * by '/', the first item should be empty and the second should be the
+ * service name */
+ if (splitPath.length >= 2) {
+ serviceName = splitPath[1];
+ }
+ const hostname = splitHostPort(this.host)?.host ?? 'localhost';
+ /* Currently, call credentials are only allowed on HTTPS connections, so we
+ * can assume that the scheme is "https" */
+ this.serviceUrl = `https://${hostname}/${serviceName}`;
+ }
+
+ private trace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ '[' + this.callNumber + '] ' + text
+ );
+ }
+
+ private outputStatus(status: StatusObject, progress: RpcProgress) {
+ if (!this.ended) {
+ this.ended = true;
+ this.trace(
+ 'ended with status: code=' +
+ status.code +
+ ' details="' +
+ status.details +
+ '"'
+ );
+ const finalStatus = { ...status, progress };
+ this.listener?.onReceiveStatus(finalStatus);
+ this.onCallEnded?.(finalStatus.code);
+ }
+ }
+
+ doPick() {
+ if (this.ended) {
+ return;
+ }
+ if (!this.metadata) {
+ throw new Error('doPick called before start');
+ }
+ this.trace('Pick called');
+ const pickResult = this.channel.doPick(
+ this.metadata,
+ this.callConfig.pickInformation
+ );
+ const subchannelString = pickResult.subchannel
+ ? '(' +
+ pickResult.subchannel.getChannelzRef().id +
+ ') ' +
+ pickResult.subchannel.getAddress()
+ : '' + pickResult.subchannel;
+ this.trace(
+ 'Pick result: ' +
+ PickResultType[pickResult.pickResultType] +
+ ' subchannel: ' +
+ subchannelString +
+ ' status: ' +
+ pickResult.status?.code +
+ ' ' +
+ pickResult.status?.details
+ );
+ switch (pickResult.pickResultType) {
+ case PickResultType.COMPLETE:
+ this.credentials
+ .generateMetadata({ service_url: this.serviceUrl })
+ .then(
+ credsMetadata => {
+ /* If this call was cancelled (e.g. by the deadline) before
+ * metadata generation finished, we shouldn't do anything with
+ * it. */
+ if (this.ended) {
+ this.trace('Credentials metadata generation finished after call ended');
+ return;
+ }
+ const finalMetadata = this.metadata!.clone();
+ finalMetadata.merge(credsMetadata);
+ if (finalMetadata.get('authorization').length > 1) {
+ this.outputStatus(
+ {
+ code: Status.INTERNAL,
+ details:
+ '"authorization" metadata cannot have multiple values',
+ metadata: new Metadata(),
+ },
+ 'PROCESSED'
+ );
+ }
+ if (
+ pickResult.subchannel!.getConnectivityState() !==
+ ConnectivityState.READY
+ ) {
+ this.trace(
+ 'Picked subchannel ' +
+ subchannelString +
+ ' has state ' +
+ ConnectivityState[
+ pickResult.subchannel!.getConnectivityState()
+ ] +
+ ' after getting credentials metadata. Retrying pick'
+ );
+ this.doPick();
+ return;
+ }
+
+ if (this.deadline !== Infinity) {
+ finalMetadata.set(
+ 'grpc-timeout',
+ getDeadlineTimeoutString(this.deadline)
+ );
+ }
+ try {
+ this.child = pickResult
+ .subchannel!.getRealSubchannel()
+ .createCall(finalMetadata, this.host, this.methodName, {
+ onReceiveMetadata: metadata => {
+ this.trace('Received metadata');
+ this.listener!.onReceiveMetadata(metadata);
+ },
+ onReceiveMessage: message => {
+ this.trace('Received message');
+ this.listener!.onReceiveMessage(message);
+ },
+ onReceiveStatus: status => {
+ this.trace('Received status');
+ if (
+ status.rstCode ===
+ http2.constants.NGHTTP2_REFUSED_STREAM
+ ) {
+ this.outputStatus(status, 'REFUSED');
+ } else {
+ this.outputStatus(status, 'PROCESSED');
+ }
+ },
+ });
+ } catch (error) {
+ this.trace(
+ 'Failed to start call on picked subchannel ' +
+ subchannelString +
+ ' with error ' +
+ (error as Error).message
+ );
+ this.outputStatus(
+ {
+ code: Status.INTERNAL,
+ details:
+ 'Failed to start HTTP/2 stream with error ' +
+ (error as Error).message,
+ metadata: new Metadata(),
+ },
+ 'NOT_STARTED'
+ );
+ return;
+ }
+ this.callConfig.onCommitted?.();
+ pickResult.onCallStarted?.();
+ this.onCallEnded = pickResult.onCallEnded;
+ this.trace(
+ 'Created child call [' + this.child.getCallNumber() + ']'
+ );
+ if (this.readPending) {
+ this.child.startRead();
+ }
+ if (this.pendingMessage) {
+ this.child.sendMessageWithContext(
+ this.pendingMessage.context,
+ this.pendingMessage.message
+ );
+ }
+ if (this.pendingHalfClose) {
+ this.child.halfClose();
+ }
+ },
+ (error: Error & { code: number }) => {
+ // We assume the error code isn't 0 (Status.OK)
+ const { code, details } = restrictControlPlaneStatusCode(
+ typeof error.code === 'number' ? error.code : Status.UNKNOWN,
+ `Getting metadata from plugin failed with error: ${error.message}`
+ );
+ this.outputStatus(
+ {
+ code: code,
+ details: details,
+ metadata: new Metadata(),
+ },
+ 'PROCESSED'
+ );
+ }
+ );
+ break;
+ case PickResultType.DROP:
+ const { code, details } = restrictControlPlaneStatusCode(
+ pickResult.status!.code,
+ pickResult.status!.details
+ );
+ setImmediate(() => {
+ this.outputStatus(
+ { code, details, metadata: pickResult.status!.metadata },
+ 'DROP'
+ );
+ });
+ break;
+ case PickResultType.TRANSIENT_FAILURE:
+ if (this.metadata.getOptions().waitForReady) {
+ this.channel.queueCallForPick(this);
+ } else {
+ const { code, details } = restrictControlPlaneStatusCode(
+ pickResult.status!.code,
+ pickResult.status!.details
+ );
+ setImmediate(() => {
+ this.outputStatus(
+ { code, details, metadata: pickResult.status!.metadata },
+ 'PROCESSED'
+ );
+ });
+ }
+ break;
+ case PickResultType.QUEUE:
+ this.channel.queueCallForPick(this);
+ }
+ }
+
+ cancelWithStatus(status: Status, details: string): void {
+ this.trace(
+ 'cancelWithStatus code: ' + status + ' details: "' + details + '"'
+ );
+ this.child?.cancelWithStatus(status, details);
+ this.outputStatus(
+ { code: status, details: details, metadata: new Metadata() },
+ 'PROCESSED'
+ );
+ }
+ getPeer(): string {
+ return this.child?.getPeer() ?? this.channel.getTarget();
+ }
+ start(
+ metadata: Metadata,
+ listener: LoadBalancingCallInterceptingListener
+ ): void {
+ this.trace('start called');
+ this.listener = listener;
+ this.metadata = metadata;
+ this.doPick();
+ }
+ sendMessageWithContext(context: MessageContext, message: Buffer): void {
+ this.trace('write() called with message of length ' + message.length);
+ if (this.child) {
+ this.child.sendMessageWithContext(context, message);
+ } else {
+ this.pendingMessage = { context, message };
+ }
+ }
+ startRead(): void {
+ this.trace('startRead called');
+ if (this.child) {
+ this.child.startRead();
+ } else {
+ this.readPending = true;
+ }
+ }
+ halfClose(): void {
+ this.trace('halfClose called');
+ if (this.child) {
+ this.child.halfClose();
+ } else {
+ this.pendingHalfClose = true;
+ }
+ }
+ setCredentials(credentials: CallCredentials): void {
+ throw new Error('Method not implemented.');
+ }
+
+ getCallNumber(): number {
+ return this.callNumber;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/logging.ts b/frontend-old/node_modules/@grpc/grpc-js/src/logging.ts
new file mode 100644
index 0000000..e1b396f
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/logging.ts
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { LogVerbosity } from './constants';
+import { pid } from 'process';
+
+const clientVersion = require('../../package.json').version;
+
+const DEFAULT_LOGGER: Partial<Console> = {
+ error: (message?: any, ...optionalParams: any[]) => {
+ console.error('E ' + message, ...optionalParams);
+ },
+ info: (message?: any, ...optionalParams: any[]) => {
+ console.error('I ' + message, ...optionalParams);
+ },
+ debug: (message?: any, ...optionalParams: any[]) => {
+ console.error('D ' + message, ...optionalParams);
+ },
+};
+
+let _logger: Partial<Console> = DEFAULT_LOGGER;
+let _logVerbosity: LogVerbosity = LogVerbosity.ERROR;
+
+const verbosityString =
+ process.env.GRPC_NODE_VERBOSITY ?? process.env.GRPC_VERBOSITY ?? '';
+
+switch (verbosityString.toUpperCase()) {
+ case 'DEBUG':
+ _logVerbosity = LogVerbosity.DEBUG;
+ break;
+ case 'INFO':
+ _logVerbosity = LogVerbosity.INFO;
+ break;
+ case 'ERROR':
+ _logVerbosity = LogVerbosity.ERROR;
+ break;
+ case 'NONE':
+ _logVerbosity = LogVerbosity.NONE;
+ break;
+ default:
+ // Ignore any other values
+}
+
+export const getLogger = (): Partial<Console> => {
+ return _logger;
+};
+
+export const setLogger = (logger: Partial<Console>): void => {
+ _logger = logger;
+};
+
+export const setLoggerVerbosity = (verbosity: LogVerbosity): void => {
+ _logVerbosity = verbosity;
+};
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export const log = (severity: LogVerbosity, ...args: any[]): void => {
+ let logFunction: typeof DEFAULT_LOGGER.error;
+ if (severity >= _logVerbosity) {
+ switch (severity) {
+ case LogVerbosity.DEBUG:
+ logFunction = _logger.debug;
+ break;
+ case LogVerbosity.INFO:
+ logFunction = _logger.info;
+ break;
+ case LogVerbosity.ERROR:
+ logFunction = _logger.error;
+ break;
+ }
+ /* Fall back to _logger.error when other methods are not available for
+ * compatiblity with older behavior that always logged to _logger.error */
+ if (!logFunction) {
+ logFunction = _logger.error;
+ }
+ if (logFunction) {
+ logFunction.bind(_logger)(...args);
+ }
+ }
+};
+
+const tracersString =
+ process.env.GRPC_NODE_TRACE ?? process.env.GRPC_TRACE ?? '';
+const enabledTracers = new Set<string>();
+const disabledTracers = new Set<string>();
+for (const tracerName of tracersString.split(',')) {
+ if (tracerName.startsWith('-')) {
+ disabledTracers.add(tracerName.substring(1));
+ } else {
+ enabledTracers.add(tracerName);
+ }
+}
+const allEnabled = enabledTracers.has('all');
+
+export function trace(
+ severity: LogVerbosity,
+ tracer: string,
+ text: string
+): void {
+ if (isTracerEnabled(tracer)) {
+ log(severity, new Date().toISOString() + ' | v' + clientVersion + ' ' + pid + ' | ' + tracer + ' | ' + text);
+ }
+}
+
+export function isTracerEnabled(tracer: string): boolean {
+ return (
+ !disabledTracers.has(tracer) && (allEnabled || enabledTracers.has(tracer))
+ );
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/make-client.ts b/frontend-old/node_modules/@grpc/grpc-js/src/make-client.ts
new file mode 100644
index 0000000..10d1e95
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/make-client.ts
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import { Client } from './client';
+import { UntypedServiceImplementation } from './server';
+
+export interface Serialize<T> {
+ (value: T): Buffer;
+}
+
+export interface Deserialize<T> {
+ (bytes: Buffer): T;
+}
+
+export interface ClientMethodDefinition<RequestType, ResponseType> {
+ path: string;
+ requestStream: boolean;
+ responseStream: boolean;
+ requestSerialize: Serialize<RequestType>;
+ responseDeserialize: Deserialize<ResponseType>;
+ originalName?: string;
+}
+
+export interface ServerMethodDefinition<RequestType, ResponseType> {
+ path: string;
+ requestStream: boolean;
+ responseStream: boolean;
+ responseSerialize: Serialize<ResponseType>;
+ requestDeserialize: Deserialize<RequestType>;
+ originalName?: string;
+}
+
+export interface MethodDefinition<RequestType, ResponseType>
+ extends ClientMethodDefinition<RequestType, ResponseType>,
+ ServerMethodDefinition<RequestType, ResponseType> {}
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+export type ServiceDefinition<
+ ImplementationType = UntypedServiceImplementation
+> = {
+ readonly [index in keyof ImplementationType]: MethodDefinition<any, any>;
+};
+/* eslint-enable @typescript-eslint/no-explicit-any */
+
+export interface ProtobufTypeDefinition {
+ format: string;
+ type: object;
+ fileDescriptorProtos: Buffer[];
+}
+
+export interface PackageDefinition {
+ [index: string]: ServiceDefinition | ProtobufTypeDefinition;
+}
+
+/**
+ * Map with short names for each of the requester maker functions. Used in
+ * makeClientConstructor
+ * @private
+ */
+const requesterFuncs = {
+ unary: Client.prototype.makeUnaryRequest,
+ server_stream: Client.prototype.makeServerStreamRequest,
+ client_stream: Client.prototype.makeClientStreamRequest,
+ bidi: Client.prototype.makeBidiStreamRequest,
+};
+
+export interface ServiceClient extends Client {
+ [methodName: string]: Function;
+}
+
+export interface ServiceClientConstructor {
+ new (
+ address: string,
+ credentials: ChannelCredentials,
+ options?: Partial<ChannelOptions>
+ ): ServiceClient;
+ service: ServiceDefinition;
+ serviceName: string;
+}
+
+/**
+ * Returns true, if given key is included in the blacklisted
+ * keys.
+ * @param key key for check, string.
+ */
+function isPrototypePolluted(key: string): boolean {
+ return ['__proto__', 'prototype', 'constructor'].includes(key);
+}
+
+/**
+ * Creates a constructor for a client with the given methods, as specified in
+ * the methods argument. The resulting class will have an instance method for
+ * each method in the service, which is a partial application of one of the
+ * [Client]{@link grpc.Client} request methods, depending on `requestSerialize`
+ * and `responseSerialize`, with the `method`, `serialize`, and `deserialize`
+ * arguments predefined.
+ * @param methods An object mapping method names to
+ * method attributes
+ * @param serviceName The fully qualified name of the service
+ * @param classOptions An options object.
+ * @return New client constructor, which is a subclass of
+ * {@link grpc.Client}, and has the same arguments as that constructor.
+ */
+export function makeClientConstructor(
+ methods: ServiceDefinition,
+ serviceName: string,
+ classOptions?: {}
+): ServiceClientConstructor {
+ if (!classOptions) {
+ classOptions = {};
+ }
+
+ class ServiceClientImpl extends Client implements ServiceClient {
+ static service: ServiceDefinition;
+ static serviceName: string;
+ [methodName: string]: Function;
+ }
+
+ Object.keys(methods).forEach(name => {
+ if (isPrototypePolluted(name)) {
+ return;
+ }
+ const attrs = methods[name];
+ let methodType: keyof typeof requesterFuncs;
+ // TODO(murgatroid99): Verify that we don't need this anymore
+ if (typeof name === 'string' && name.charAt(0) === '$') {
+ throw new Error('Method names cannot start with $');
+ }
+ if (attrs.requestStream) {
+ if (attrs.responseStream) {
+ methodType = 'bidi';
+ } else {
+ methodType = 'client_stream';
+ }
+ } else {
+ if (attrs.responseStream) {
+ methodType = 'server_stream';
+ } else {
+ methodType = 'unary';
+ }
+ }
+ const serialize = attrs.requestSerialize;
+ const deserialize = attrs.responseDeserialize;
+ const methodFunc = partial(
+ requesterFuncs[methodType],
+ attrs.path,
+ serialize,
+ deserialize
+ );
+ ServiceClientImpl.prototype[name] = methodFunc;
+ // Associate all provided attributes with the method
+ Object.assign(ServiceClientImpl.prototype[name], attrs);
+ if (attrs.originalName && !isPrototypePolluted(attrs.originalName)) {
+ ServiceClientImpl.prototype[attrs.originalName] =
+ ServiceClientImpl.prototype[name];
+ }
+ });
+
+ ServiceClientImpl.service = methods;
+ ServiceClientImpl.serviceName = serviceName;
+
+ return ServiceClientImpl;
+}
+
+function partial(
+ fn: Function,
+ path: string,
+ serialize: Function,
+ deserialize: Function
+): Function {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ return function (this: any, ...args: any[]) {
+ return fn.call(this, path, serialize, deserialize, ...args);
+ };
+}
+
+export interface GrpcObject {
+ [index: string]:
+ | GrpcObject
+ | ServiceClientConstructor
+ | ProtobufTypeDefinition;
+}
+
+function isProtobufTypeDefinition(
+ obj: ServiceDefinition | ProtobufTypeDefinition
+): obj is ProtobufTypeDefinition {
+ return 'format' in obj;
+}
+
+/**
+ * Load a gRPC package definition as a gRPC object hierarchy.
+ * @param packageDef The package definition object.
+ * @return The resulting gRPC object.
+ */
+export function loadPackageDefinition(
+ packageDef: PackageDefinition
+): GrpcObject {
+ const result: GrpcObject = {};
+ for (const serviceFqn in packageDef) {
+ if (Object.prototype.hasOwnProperty.call(packageDef, serviceFqn)) {
+ const service = packageDef[serviceFqn];
+ const nameComponents = serviceFqn.split('.');
+ if (nameComponents.some((comp: string) => isPrototypePolluted(comp))) {
+ continue;
+ }
+ const serviceName = nameComponents[nameComponents.length - 1];
+ let current = result;
+ for (const packageName of nameComponents.slice(0, -1)) {
+ if (!current[packageName]) {
+ current[packageName] = {};
+ }
+ current = current[packageName] as GrpcObject;
+ }
+ if (isProtobufTypeDefinition(service)) {
+ current[serviceName] = service;
+ } else {
+ current[serviceName] = makeClientConstructor(service, serviceName, {});
+ }
+ }
+ }
+ return result;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/metadata.ts b/frontend-old/node_modules/@grpc/grpc-js/src/metadata.ts
new file mode 100644
index 0000000..eabd2df
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/metadata.ts
@@ -0,0 +1,298 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import * as http2 from 'http2';
+import { log } from './logging';
+import { LogVerbosity } from './constants';
+import { getErrorMessage } from './error';
+const LEGAL_KEY_REGEX = /^[0-9a-z_.-]+$/;
+const LEGAL_NON_BINARY_VALUE_REGEX = /^[ -~]*$/;
+
+export type MetadataValue = string | Buffer;
+export type MetadataObject = Map<string, MetadataValue[]>;
+
+function isLegalKey(key: string): boolean {
+ return LEGAL_KEY_REGEX.test(key);
+}
+
+function isLegalNonBinaryValue(value: string): boolean {
+ return LEGAL_NON_BINARY_VALUE_REGEX.test(value);
+}
+
+function isBinaryKey(key: string): boolean {
+ return key.endsWith('-bin');
+}
+
+function isCustomMetadata(key: string): boolean {
+ return !key.startsWith('grpc-');
+}
+
+function normalizeKey(key: string): string {
+ return key.toLowerCase();
+}
+
+function validate(key: string, value?: MetadataValue): void {
+ if (!isLegalKey(key)) {
+ throw new Error('Metadata key "' + key + '" contains illegal characters');
+ }
+
+ if (value !== null && value !== undefined) {
+ if (isBinaryKey(key)) {
+ if (!Buffer.isBuffer(value)) {
+ throw new Error("keys that end with '-bin' must have Buffer values");
+ }
+ } else {
+ if (Buffer.isBuffer(value)) {
+ throw new Error(
+ "keys that don't end with '-bin' must have String values"
+ );
+ }
+ if (!isLegalNonBinaryValue(value)) {
+ throw new Error(
+ 'Metadata string value "' + value + '" contains illegal characters'
+ );
+ }
+ }
+ }
+}
+
+export interface MetadataOptions {
+ /* Signal that the request is idempotent. Defaults to false */
+ idempotentRequest?: boolean;
+ /* Signal that the call should not return UNAVAILABLE before it has
+ * started. Defaults to false. */
+ waitForReady?: boolean;
+ /* Signal that the call is cacheable. GRPC is free to use GET verb.
+ * Defaults to false */
+ cacheableRequest?: boolean;
+ /* Signal that the initial metadata should be corked. Defaults to false. */
+ corked?: boolean;
+}
+
+/**
+ * A class for storing metadata. Keys are normalized to lowercase ASCII.
+ */
+export class Metadata {
+ protected internalRepr: MetadataObject = new Map<string, MetadataValue[]>();
+ private options: MetadataOptions;
+
+ constructor(options: MetadataOptions = {}) {
+ this.options = options;
+ }
+
+ /**
+ * Sets the given value for the given key by replacing any other values
+ * associated with that key. Normalizes the key.
+ * @param key The key to whose value should be set.
+ * @param value The value to set. Must be a buffer if and only
+ * if the normalized key ends with '-bin'.
+ */
+ set(key: string, value: MetadataValue): void {
+ key = normalizeKey(key);
+ validate(key, value);
+ this.internalRepr.set(key, [value]);
+ }
+
+ /**
+ * Adds the given value for the given key by appending to a list of previous
+ * values associated with that key. Normalizes the key.
+ * @param key The key for which a new value should be appended.
+ * @param value The value to add. Must be a buffer if and only
+ * if the normalized key ends with '-bin'.
+ */
+ add(key: string, value: MetadataValue): void {
+ key = normalizeKey(key);
+ validate(key, value);
+
+ const existingValue: MetadataValue[] | undefined =
+ this.internalRepr.get(key);
+
+ if (existingValue === undefined) {
+ this.internalRepr.set(key, [value]);
+ } else {
+ existingValue.push(value);
+ }
+ }
+
+ /**
+ * Removes the given key and any associated values. Normalizes the key.
+ * @param key The key whose values should be removed.
+ */
+ remove(key: string): void {
+ key = normalizeKey(key);
+ // validate(key);
+ this.internalRepr.delete(key);
+ }
+
+ /**
+ * Gets a list of all values associated with the key. Normalizes the key.
+ * @param key The key whose value should be retrieved.
+ * @return A list of values associated with the given key.
+ */
+ get(key: string): MetadataValue[] {
+ key = normalizeKey(key);
+ // validate(key);
+ return this.internalRepr.get(key) || [];
+ }
+
+ /**
+ * Gets a plain object mapping each key to the first value associated with it.
+ * This reflects the most common way that people will want to see metadata.
+ * @return A key/value mapping of the metadata.
+ */
+ getMap(): { [key: string]: MetadataValue } {
+ const result: { [key: string]: MetadataValue } = {};
+
+ for (const [key, values] of this.internalRepr) {
+ if (values.length > 0) {
+ const v = values[0];
+ result[key] = Buffer.isBuffer(v) ? Buffer.from(v) : v;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Clones the metadata object.
+ * @return The newly cloned object.
+ */
+ clone(): Metadata {
+ const newMetadata = new Metadata(this.options);
+ const newInternalRepr = newMetadata.internalRepr;
+
+ for (const [key, value] of this.internalRepr) {
+ const clonedValue: MetadataValue[] = value.map(v => {
+ if (Buffer.isBuffer(v)) {
+ return Buffer.from(v);
+ } else {
+ return v;
+ }
+ });
+
+ newInternalRepr.set(key, clonedValue);
+ }
+
+ return newMetadata;
+ }
+
+ /**
+ * Merges all key-value pairs from a given Metadata object into this one.
+ * If both this object and the given object have values in the same key,
+ * values from the other Metadata object will be appended to this object's
+ * values.
+ * @param other A Metadata object.
+ */
+ merge(other: Metadata): void {
+ for (const [key, values] of other.internalRepr) {
+ const mergedValue: MetadataValue[] = (
+ this.internalRepr.get(key) || []
+ ).concat(values);
+
+ this.internalRepr.set(key, mergedValue);
+ }
+ }
+
+ setOptions(options: MetadataOptions) {
+ this.options = options;
+ }
+
+ getOptions(): MetadataOptions {
+ return this.options;
+ }
+
+ /**
+ * Creates an OutgoingHttpHeaders object that can be used with the http2 API.
+ */
+ toHttp2Headers(): http2.OutgoingHttpHeaders {
+ // NOTE: Node <8.9 formats http2 headers incorrectly.
+ const result: http2.OutgoingHttpHeaders = {};
+
+ for (const [key, values] of this.internalRepr) {
+ // We assume that the user's interaction with this object is limited to
+ // through its public API (i.e. keys and values are already validated).
+ result[key] = values.map(bufToString);
+ }
+
+ return result;
+ }
+
+ /**
+ * This modifies the behavior of JSON.stringify to show an object
+ * representation of the metadata map.
+ */
+ toJSON() {
+ const result: { [key: string]: MetadataValue[] } = {};
+ for (const [key, values] of this.internalRepr) {
+ result[key] = values;
+ }
+ return result;
+ }
+
+ /**
+ * Returns a new Metadata object based fields in a given IncomingHttpHeaders
+ * object.
+ * @param headers An IncomingHttpHeaders object.
+ */
+ static fromHttp2Headers(headers: http2.IncomingHttpHeaders): Metadata {
+ const result = new Metadata();
+ for (const key of Object.keys(headers)) {
+ // Reserved headers (beginning with `:`) are not valid keys.
+ if (key.charAt(0) === ':') {
+ continue;
+ }
+
+ const values = headers[key];
+
+ try {
+ if (isBinaryKey(key)) {
+ if (Array.isArray(values)) {
+ values.forEach(value => {
+ result.add(key, Buffer.from(value, 'base64'));
+ });
+ } else if (values !== undefined) {
+ if (isCustomMetadata(key)) {
+ values.split(',').forEach(v => {
+ result.add(key, Buffer.from(v.trim(), 'base64'));
+ });
+ } else {
+ result.add(key, Buffer.from(values, 'base64'));
+ }
+ }
+ } else {
+ if (Array.isArray(values)) {
+ values.forEach(value => {
+ result.add(key, value);
+ });
+ } else if (values !== undefined) {
+ result.add(key, values);
+ }
+ }
+ } catch (error) {
+ const message = `Failed to add metadata entry ${key}: ${values}. ${getErrorMessage(
+ error
+ )}. For more information see https://github.com/grpc/grpc-node/issues/1173`;
+ log(LogVerbosity.ERROR, message);
+ }
+ }
+
+ return result;
+ }
+}
+
+const bufToString = (val: string | Buffer): string => {
+ return Buffer.isBuffer(val) ? val.toString('base64') : val;
+};
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/object-stream.ts b/frontend-old/node_modules/@grpc/grpc-js/src/object-stream.ts
new file mode 100644
index 0000000..49ef1f3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/object-stream.ts
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { Readable, Writable } from 'stream';
+import { EmitterAugmentation1 } from './events';
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+export type WriteCallback = (error: Error | null | undefined) => void;
+
+export interface IntermediateObjectReadable<T> extends Readable {
+ read(size?: number): any & T;
+}
+
+export type ObjectReadable<T> = {
+ read(size?: number): T;
+} & EmitterAugmentation1<'data', T> &
+ IntermediateObjectReadable<T>;
+
+export interface IntermediateObjectWritable<T> extends Writable {
+ _write(chunk: any & T, encoding: string, callback: Function): void;
+ write(chunk: any & T, cb?: WriteCallback): boolean;
+ write(chunk: any & T, encoding?: any, cb?: WriteCallback): boolean;
+ setDefaultEncoding(encoding: string): this;
+ end(): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(
+ chunk: any & T,
+ cb?: Function
+ ): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(
+ chunk: any & T,
+ encoding?: any,
+ cb?: Function
+ ): ReturnType<Writable['end']> extends Writable ? this : void;
+}
+
+export interface ObjectWritable<T> extends IntermediateObjectWritable<T> {
+ _write(chunk: T, encoding: string, callback: Function): void;
+ write(chunk: T, cb?: Function): boolean;
+ write(chunk: T, encoding?: any, cb?: Function): boolean;
+ setDefaultEncoding(encoding: string): this;
+ end(): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(
+ chunk: T,
+ cb?: Function
+ ): ReturnType<Writable['end']> extends Writable ? this : void;
+ end(
+ chunk: T,
+ encoding?: any,
+ cb?: Function
+ ): ReturnType<Writable['end']> extends Writable ? this : void;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/picker.ts b/frontend-old/node_modules/@grpc/grpc-js/src/picker.ts
new file mode 100644
index 0000000..6474269
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/picker.ts
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { StatusObject } from './call-interface';
+import { Metadata } from './metadata';
+import { Status } from './constants';
+import { LoadBalancer } from './load-balancer';
+import { SubchannelInterface } from './subchannel-interface';
+
+export enum PickResultType {
+ COMPLETE,
+ QUEUE,
+ TRANSIENT_FAILURE,
+ DROP,
+}
+
+export interface PickResult {
+ pickResultType: PickResultType;
+ /**
+ * The subchannel to use as the transport for the call. Only meaningful if
+ * `pickResultType` is COMPLETE. If null, indicates that the call should be
+ * dropped.
+ */
+ subchannel: SubchannelInterface | null;
+ /**
+ * The status object to end the call with. Populated if and only if
+ * `pickResultType` is TRANSIENT_FAILURE.
+ */
+ status: StatusObject | null;
+ onCallStarted: (() => void) | null;
+ onCallEnded: ((statusCode: Status) => void) | null;
+}
+
+export interface CompletePickResult extends PickResult {
+ pickResultType: PickResultType.COMPLETE;
+ subchannel: SubchannelInterface | null;
+ status: null;
+ onCallStarted: (() => void) | null;
+ onCallEnded: ((statusCode: Status) => void) | null;
+}
+
+export interface QueuePickResult extends PickResult {
+ pickResultType: PickResultType.QUEUE;
+ subchannel: null;
+ status: null;
+ onCallStarted: null;
+ onCallEnded: null;
+}
+
+export interface TransientFailurePickResult extends PickResult {
+ pickResultType: PickResultType.TRANSIENT_FAILURE;
+ subchannel: null;
+ status: StatusObject;
+ onCallStarted: null;
+ onCallEnded: null;
+}
+
+export interface DropCallPickResult extends PickResult {
+ pickResultType: PickResultType.DROP;
+ subchannel: null;
+ status: StatusObject;
+ onCallStarted: null;
+ onCallEnded: null;
+}
+
+export interface PickArgs {
+ metadata: Metadata;
+ extraPickInfo: { [key: string]: string };
+}
+
+/**
+ * A proxy object representing the momentary state of a load balancer. Picks
+ * subchannels or returns other information based on that state. Should be
+ * replaced every time the load balancer changes state.
+ */
+export interface Picker {
+ pick(pickArgs: PickArgs): PickResult;
+}
+
+/**
+ * A standard picker representing a load balancer in the TRANSIENT_FAILURE
+ * state. Always responds to every pick request with an UNAVAILABLE status.
+ */
+export class UnavailablePicker implements Picker {
+ private status: StatusObject;
+ constructor(status?: Partial<StatusObject>) {
+ this.status = {
+ code: Status.UNAVAILABLE,
+ details: 'No connection established',
+ metadata: new Metadata(),
+ ...status,
+ };
+ }
+ pick(pickArgs: PickArgs): TransientFailurePickResult {
+ return {
+ pickResultType: PickResultType.TRANSIENT_FAILURE,
+ subchannel: null,
+ status: this.status,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+}
+
+/**
+ * A standard picker representing a load balancer in the IDLE or CONNECTING
+ * state. Always responds to every pick request with a QUEUE pick result
+ * indicating that the pick should be tried again with the next `Picker`. Also
+ * reports back to the load balancer that a connection should be established
+ * once any pick is attempted.
+ */
+export class QueuePicker {
+ private calledExitIdle = false;
+ // Constructed with a load balancer. Calls exitIdle on it the first time pick is called
+ constructor(private loadBalancer: LoadBalancer) {}
+
+ pick(pickArgs: PickArgs): QueuePickResult {
+ if (!this.calledExitIdle) {
+ process.nextTick(() => {
+ this.loadBalancer.exitIdle();
+ });
+ this.calledExitIdle = true;
+ }
+ return {
+ pickResultType: PickResultType.QUEUE,
+ subchannel: null,
+ status: null,
+ onCallStarted: null,
+ onCallEnded: null,
+ };
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/resolver-dns.ts b/frontend-old/node_modules/@grpc/grpc-js/src/resolver-dns.ts
new file mode 100644
index 0000000..31e0d0b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/resolver-dns.ts
@@ -0,0 +1,412 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {
+ Resolver,
+ ResolverListener,
+ registerResolver,
+ registerDefaultScheme,
+} from './resolver';
+import * as dns from 'dns';
+import * as util from 'util';
+import { extractAndSelectServiceConfig, ServiceConfig } from './service-config';
+import { Status } from './constants';
+import { StatusObject } from './call-interface';
+import { Metadata } from './metadata';
+import * as logging from './logging';
+import { LogVerbosity } from './constants';
+import { SubchannelAddress, TcpSubchannelAddress } from './subchannel-address';
+import { GrpcUri, uriToString, splitHostPort } from './uri-parser';
+import { isIPv6, isIPv4 } from 'net';
+import { ChannelOptions } from './channel-options';
+import { BackoffOptions, BackoffTimeout } from './backoff-timeout';
+
+const TRACER_NAME = 'dns_resolver';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+/**
+ * The default TCP port to connect to if not explicitly specified in the target.
+ */
+export const DEFAULT_PORT = 443;
+
+const DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS = 30_000;
+
+const resolveTxtPromise = util.promisify(dns.resolveTxt);
+const dnsLookupPromise = util.promisify(dns.lookup);
+
+/**
+ * Merge any number of arrays into a single alternating array
+ * @param arrays
+ */
+function mergeArrays<T>(...arrays: T[][]): T[] {
+ const result: T[] = [];
+ for (
+ let i = 0;
+ i <
+ Math.max.apply(
+ null,
+ arrays.map(array => array.length)
+ );
+ i++
+ ) {
+ for (const array of arrays) {
+ if (i < array.length) {
+ result.push(array[i]);
+ }
+ }
+ }
+ return result;
+}
+
+/**
+ * Resolver implementation that handles DNS names and IP addresses.
+ */
+class DnsResolver implements Resolver {
+ private readonly ipResult: SubchannelAddress[] | null;
+ private readonly dnsHostname: string | null;
+ private readonly port: number | null;
+ /**
+ * Minimum time between resolutions, measured as the time between starting
+ * successive resolution requests. Only applies to successful resolutions.
+ * Failures are handled by the backoff timer.
+ */
+ private readonly minTimeBetweenResolutionsMs: number;
+ private pendingLookupPromise: Promise<dns.LookupAddress[]> | null = null;
+ private pendingTxtPromise: Promise<string[][]> | null = null;
+ private latestLookupResult: TcpSubchannelAddress[] | null = null;
+ private latestServiceConfig: ServiceConfig | null = null;
+ private latestServiceConfigError: StatusObject | null = null;
+ private percentage: number;
+ private defaultResolutionError: StatusObject;
+ private backoff: BackoffTimeout;
+ private continueResolving = false;
+ private nextResolutionTimer: NodeJS.Timeout;
+ private isNextResolutionTimerRunning = false;
+ private isServiceConfigEnabled = true;
+ private returnedIpResult = false;
+ constructor(
+ private target: GrpcUri,
+ private listener: ResolverListener,
+ channelOptions: ChannelOptions
+ ) {
+ trace('Resolver constructed for target ' + uriToString(target));
+ const hostPort = splitHostPort(target.path);
+ if (hostPort === null) {
+ this.ipResult = null;
+ this.dnsHostname = null;
+ this.port = null;
+ } else {
+ if (isIPv4(hostPort.host) || isIPv6(hostPort.host)) {
+ this.ipResult = [
+ {
+ host: hostPort.host,
+ port: hostPort.port ?? DEFAULT_PORT,
+ },
+ ];
+ this.dnsHostname = null;
+ this.port = null;
+ } else {
+ this.ipResult = null;
+ this.dnsHostname = hostPort.host;
+ this.port = hostPort.port ?? DEFAULT_PORT;
+ }
+ }
+ this.percentage = Math.random() * 100;
+
+ if (channelOptions['grpc.service_config_disable_resolution'] === 1) {
+ this.isServiceConfigEnabled = false;
+ }
+
+ this.defaultResolutionError = {
+ code: Status.UNAVAILABLE,
+ details: `Name resolution failed for target ${uriToString(this.target)}`,
+ metadata: new Metadata(),
+ };
+
+ const backoffOptions: BackoffOptions = {
+ initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],
+ maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],
+ };
+
+ this.backoff = new BackoffTimeout(() => {
+ if (this.continueResolving) {
+ this.startResolutionWithBackoff();
+ }
+ }, backoffOptions);
+ this.backoff.unref();
+
+ this.minTimeBetweenResolutionsMs =
+ channelOptions['grpc.dns_min_time_between_resolutions_ms'] ??
+ DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS;
+ this.nextResolutionTimer = setTimeout(() => {}, 0);
+ clearTimeout(this.nextResolutionTimer);
+ }
+
+ /**
+ * If the target is an IP address, just provide that address as a result.
+ * Otherwise, initiate A, AAAA, and TXT lookups
+ */
+ private startResolution() {
+ if (this.ipResult !== null) {
+ if (!this.returnedIpResult) {
+ trace('Returning IP address for target ' + uriToString(this.target));
+ setImmediate(() => {
+ this.listener.onSuccessfulResolution(
+ this.ipResult!,
+ null,
+ null,
+ null,
+ {}
+ );
+ });
+ this.returnedIpResult = true;
+ }
+ this.backoff.stop();
+ this.backoff.reset();
+ this.stopNextResolutionTimer();
+ return;
+ }
+ if (this.dnsHostname === null) {
+ trace('Failed to parse DNS address ' + uriToString(this.target));
+ setImmediate(() => {
+ this.listener.onError({
+ code: Status.UNAVAILABLE,
+ details: `Failed to parse DNS address ${uriToString(this.target)}`,
+ metadata: new Metadata(),
+ });
+ });
+ this.stopNextResolutionTimer();
+ } else {
+ if (this.pendingLookupPromise !== null) {
+ return;
+ }
+ trace('Looking up DNS hostname ' + this.dnsHostname);
+ /* We clear out latestLookupResult here to ensure that it contains the
+ * latest result since the last time we started resolving. That way, the
+ * TXT resolution handler can use it, but only if it finishes second. We
+ * don't clear out any previous service config results because it's
+ * better to use a service config that's slightly out of date than to
+ * revert to an effectively blank one. */
+ this.latestLookupResult = null;
+ const hostname: string = this.dnsHostname;
+ /* We lookup both address families here and then split them up later
+ * because when looking up a single family, dns.lookup outputs an error
+ * if the name exists but there are no records for that family, and that
+ * error is indistinguishable from other kinds of errors */
+ this.pendingLookupPromise = dnsLookupPromise(hostname, { all: true });
+ this.pendingLookupPromise.then(
+ addressList => {
+ if (this.pendingLookupPromise === null) {
+ return;
+ }
+ this.pendingLookupPromise = null;
+ this.backoff.reset();
+ this.backoff.stop();
+ const ip4Addresses: dns.LookupAddress[] = addressList.filter(
+ addr => addr.family === 4
+ );
+ const ip6Addresses: dns.LookupAddress[] = addressList.filter(
+ addr => addr.family === 6
+ );
+ this.latestLookupResult = mergeArrays(ip6Addresses, ip4Addresses).map(
+ addr => ({ host: addr.address, port: +this.port! })
+ );
+ const allAddressesString: string =
+ '[' +
+ this.latestLookupResult
+ .map(addr => addr.host + ':' + addr.port)
+ .join(',') +
+ ']';
+ trace(
+ 'Resolved addresses for target ' +
+ uriToString(this.target) +
+ ': ' +
+ allAddressesString
+ );
+ if (this.latestLookupResult.length === 0) {
+ this.listener.onError(this.defaultResolutionError);
+ return;
+ }
+ /* If the TXT lookup has not yet finished, both of the last two
+ * arguments will be null, which is the equivalent of getting an
+ * empty TXT response. When the TXT lookup does finish, its handler
+ * can update the service config by using the same address list */
+ this.listener.onSuccessfulResolution(
+ this.latestLookupResult,
+ this.latestServiceConfig,
+ this.latestServiceConfigError,
+ null,
+ {}
+ );
+ },
+ err => {
+ if (this.pendingLookupPromise === null) {
+ return;
+ }
+ trace(
+ 'Resolution error for target ' +
+ uriToString(this.target) +
+ ': ' +
+ (err as Error).message
+ );
+ this.pendingLookupPromise = null;
+ this.stopNextResolutionTimer();
+ this.listener.onError(this.defaultResolutionError);
+ }
+ );
+ /* If there already is a still-pending TXT resolution, we can just use
+ * that result when it comes in */
+ if (this.isServiceConfigEnabled && this.pendingTxtPromise === null) {
+ /* We handle the TXT query promise differently than the others because
+ * the name resolution attempt as a whole is a success even if the TXT
+ * lookup fails */
+ this.pendingTxtPromise = resolveTxtPromise(hostname);
+ this.pendingTxtPromise.then(
+ txtRecord => {
+ if (this.pendingTxtPromise === null) {
+ return;
+ }
+ this.pendingTxtPromise = null;
+ try {
+ this.latestServiceConfig = extractAndSelectServiceConfig(
+ txtRecord,
+ this.percentage
+ );
+ } catch (err) {
+ this.latestServiceConfigError = {
+ code: Status.UNAVAILABLE,
+ details: `Parsing service config failed with error ${
+ (err as Error).message
+ }`,
+ metadata: new Metadata(),
+ };
+ }
+ if (this.latestLookupResult !== null) {
+ /* We rely here on the assumption that calling this function with
+ * identical parameters will be essentialy idempotent, and calling
+ * it with the same address list and a different service config
+ * should result in a fast and seamless switchover. */
+ this.listener.onSuccessfulResolution(
+ this.latestLookupResult,
+ this.latestServiceConfig,
+ this.latestServiceConfigError,
+ null,
+ {}
+ );
+ }
+ },
+ err => {
+ /* If TXT lookup fails we should do nothing, which means that we
+ * continue to use the result of the most recent successful lookup,
+ * or the default null config object if there has never been a
+ * successful lookup. We do not set the latestServiceConfigError
+ * here because that is specifically used for response validation
+ * errors. We still need to handle this error so that it does not
+ * bubble up as an unhandled promise rejection. */
+ }
+ );
+ }
+ }
+ }
+
+ private startNextResolutionTimer() {
+ clearTimeout(this.nextResolutionTimer);
+ this.nextResolutionTimer = setTimeout(() => {
+ this.stopNextResolutionTimer();
+ if (this.continueResolving) {
+ this.startResolutionWithBackoff();
+ }
+ }, this.minTimeBetweenResolutionsMs).unref?.();
+ this.isNextResolutionTimerRunning = true;
+ }
+
+ private stopNextResolutionTimer() {
+ clearTimeout(this.nextResolutionTimer);
+ this.isNextResolutionTimerRunning = false;
+ }
+
+ private startResolutionWithBackoff() {
+ if (this.pendingLookupPromise === null) {
+ this.continueResolving = false;
+ this.backoff.runOnce();
+ this.startNextResolutionTimer();
+ this.startResolution();
+ }
+ }
+
+ updateResolution() {
+ /* If there is a pending lookup, just let it finish. Otherwise, if the
+ * nextResolutionTimer or backoff timer is running, set the
+ * continueResolving flag to resolve when whichever of those timers
+ * fires. Otherwise, start resolving immediately. */
+ if (this.pendingLookupPromise === null) {
+ if (this.isNextResolutionTimerRunning || this.backoff.isRunning()) {
+ if (this.isNextResolutionTimerRunning) {
+ trace('resolution update delayed by "min time between resolutions" rate limit');
+ } else {
+ trace('resolution update delayed by backoff timer until ' + this.backoff.getEndTime().toISOString());
+ }
+ this.continueResolving = true;
+ } else {
+ this.startResolutionWithBackoff();
+ }
+ }
+ }
+
+ /**
+ * Reset the resolver to the same state it had when it was created. In-flight
+ * DNS requests cannot be cancelled, but they are discarded and their results
+ * will be ignored.
+ */
+ destroy() {
+ this.continueResolving = false;
+ this.backoff.reset();
+ this.backoff.stop();
+ this.stopNextResolutionTimer();
+ this.pendingLookupPromise = null;
+ this.pendingTxtPromise = null;
+ this.latestLookupResult = null;
+ this.latestServiceConfig = null;
+ this.latestServiceConfigError = null;
+ this.returnedIpResult = false;
+ }
+
+ /**
+ * Get the default authority for the given target. For IP targets, that is
+ * the IP address. For DNS targets, it is the hostname.
+ * @param target
+ */
+ static getDefaultAuthority(target: GrpcUri): string {
+ return target.path;
+ }
+}
+
+/**
+ * Set up the DNS resolver class by registering it as the handler for the
+ * "dns:" prefix and as the default resolver.
+ */
+export function setup(): void {
+ registerResolver('dns', DnsResolver);
+ registerDefaultScheme('dns');
+}
+
+export interface DnsUrl {
+ host: string;
+ port?: string;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/resolver-ip.ts b/frontend-old/node_modules/@grpc/grpc-js/src/resolver-ip.ts
new file mode 100644
index 0000000..7cf4f56
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/resolver-ip.ts
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { isIPv4, isIPv6 } from 'net';
+import { StatusObject } from './call-interface';
+import { ChannelOptions } from './channel-options';
+import { LogVerbosity, Status } from './constants';
+import { Metadata } from './metadata';
+import { registerResolver, Resolver, ResolverListener } from './resolver';
+import { SubchannelAddress } from './subchannel-address';
+import { GrpcUri, splitHostPort, uriToString } from './uri-parser';
+import * as logging from './logging';
+
+const TRACER_NAME = 'ip_resolver';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+const IPV4_SCHEME = 'ipv4';
+const IPV6_SCHEME = 'ipv6';
+
+/**
+ * The default TCP port to connect to if not explicitly specified in the target.
+ */
+const DEFAULT_PORT = 443;
+
+class IpResolver implements Resolver {
+ private addresses: SubchannelAddress[] = [];
+ private error: StatusObject | null = null;
+ private hasReturnedResult = false;
+ constructor(
+ target: GrpcUri,
+ private listener: ResolverListener,
+ channelOptions: ChannelOptions
+ ) {
+ trace('Resolver constructed for target ' + uriToString(target));
+ const addresses: SubchannelAddress[] = [];
+ if (!(target.scheme === IPV4_SCHEME || target.scheme === IPV6_SCHEME)) {
+ this.error = {
+ code: Status.UNAVAILABLE,
+ details: `Unrecognized scheme ${target.scheme} in IP resolver`,
+ metadata: new Metadata(),
+ };
+ return;
+ }
+ const pathList = target.path.split(',');
+ for (const path of pathList) {
+ const hostPort = splitHostPort(path);
+ if (hostPort === null) {
+ this.error = {
+ code: Status.UNAVAILABLE,
+ details: `Failed to parse ${target.scheme} address ${path}`,
+ metadata: new Metadata(),
+ };
+ return;
+ }
+ if (
+ (target.scheme === IPV4_SCHEME && !isIPv4(hostPort.host)) ||
+ (target.scheme === IPV6_SCHEME && !isIPv6(hostPort.host))
+ ) {
+ this.error = {
+ code: Status.UNAVAILABLE,
+ details: `Failed to parse ${target.scheme} address ${path}`,
+ metadata: new Metadata(),
+ };
+ return;
+ }
+ addresses.push({
+ host: hostPort.host,
+ port: hostPort.port ?? DEFAULT_PORT,
+ });
+ }
+ this.addresses = addresses;
+ trace('Parsed ' + target.scheme + ' address list ' + this.addresses);
+ }
+ updateResolution(): void {
+ if (!this.hasReturnedResult) {
+ this.hasReturnedResult = true;
+ process.nextTick(() => {
+ if (this.error) {
+ this.listener.onError(this.error);
+ } else {
+ this.listener.onSuccessfulResolution(
+ this.addresses,
+ null,
+ null,
+ null,
+ {}
+ );
+ }
+ });
+ }
+ }
+ destroy(): void {
+ this.hasReturnedResult = false;
+ }
+
+ static getDefaultAuthority(target: GrpcUri): string {
+ return target.path.split(',')[0];
+ }
+}
+
+export function setup() {
+ registerResolver(IPV4_SCHEME, IpResolver);
+ registerResolver(IPV6_SCHEME, IpResolver);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/resolver-uds.ts b/frontend-old/node_modules/@grpc/grpc-js/src/resolver-uds.ts
new file mode 100644
index 0000000..2110e85
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/resolver-uds.ts
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Resolver, ResolverListener, registerResolver } from './resolver';
+import { SubchannelAddress } from './subchannel-address';
+import { GrpcUri } from './uri-parser';
+import { ChannelOptions } from './channel-options';
+
+class UdsResolver implements Resolver {
+ private addresses: SubchannelAddress[] = [];
+ private hasReturnedResult = false;
+ constructor(
+ target: GrpcUri,
+ private listener: ResolverListener,
+ channelOptions: ChannelOptions
+ ) {
+ let path: string;
+ if (target.authority === '') {
+ path = '/' + target.path;
+ } else {
+ path = target.path;
+ }
+ this.addresses = [{ path }];
+ }
+ updateResolution(): void {
+ if (!this.hasReturnedResult) {
+ this.hasReturnedResult = true;
+ process.nextTick(
+ this.listener.onSuccessfulResolution,
+ this.addresses,
+ null,
+ null,
+ null,
+ {}
+ );
+ }
+ }
+
+ destroy() {
+ // This resolver owns no resources, so we do nothing here.
+ }
+
+ static getDefaultAuthority(target: GrpcUri): string {
+ return 'localhost';
+ }
+}
+
+export function setup() {
+ registerResolver('unix', UdsResolver);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/resolver.ts b/frontend-old/node_modules/@grpc/grpc-js/src/resolver.ts
new file mode 100644
index 0000000..4350862
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/resolver.ts
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { MethodConfig, ServiceConfig } from './service-config';
+import { StatusObject } from './call-interface';
+import { SubchannelAddress } from './subchannel-address';
+import { GrpcUri, uriToString } from './uri-parser';
+import { ChannelOptions } from './channel-options';
+import { Metadata } from './metadata';
+import { Status } from './constants';
+import { Filter, FilterFactory } from './filter';
+
+export interface CallConfig {
+ methodConfig: MethodConfig;
+ onCommitted?: () => void;
+ pickInformation: { [key: string]: string };
+ status: Status;
+ dynamicFilterFactories: FilterFactory<Filter>[];
+}
+
+/**
+ * Selects a configuration for a method given the name and metadata. Defined in
+ * https://github.com/grpc/proposal/blob/master/A31-xds-timeout-support-and-config-selector.md#new-functionality-in-grpc
+ */
+export interface ConfigSelector {
+ (methodName: string, metadata: Metadata): CallConfig;
+}
+
+/**
+ * A listener object passed to the resolver's constructor that provides name
+ * resolution updates back to the resolver's owner.
+ */
+export interface ResolverListener {
+ /**
+ * Called whenever the resolver has new name resolution results to report
+ * @param addressList The new list of backend addresses
+ * @param serviceConfig The new service configuration corresponding to the
+ * `addressList`. Will be `null` if no service configuration was
+ * retrieved or if the service configuration was invalid
+ * @param serviceConfigError If non-`null`, indicates that the retrieved
+ * service configuration was invalid
+ */
+ onSuccessfulResolution(
+ addressList: SubchannelAddress[],
+ serviceConfig: ServiceConfig | null,
+ serviceConfigError: StatusObject | null,
+ configSelector: ConfigSelector | null,
+ attributes: { [key: string]: unknown }
+ ): void;
+ /**
+ * Called whenever a name resolution attempt fails.
+ * @param error Describes how resolution failed
+ */
+ onError(error: StatusObject): void;
+}
+
+/**
+ * A resolver class that handles one or more of the name syntax schemes defined
+ * in the [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)
+ */
+export interface Resolver {
+ /**
+ * Indicates that the caller wants new name resolution data. Calling this
+ * function may eventually result in calling one of the `ResolverListener`
+ * functions, but that is not guaranteed. Those functions will never be
+ * called synchronously with the constructor or updateResolution.
+ */
+ updateResolution(): void;
+
+ /**
+ * Discard all resources owned by the resolver. A later call to
+ * `updateResolution` should reinitialize those resources. No
+ * `ResolverListener` callbacks should be called after `destroy` is called
+ * until `updateResolution` is called again.
+ */
+ destroy(): void;
+}
+
+export interface ResolverConstructor {
+ new (
+ target: GrpcUri,
+ listener: ResolverListener,
+ channelOptions: ChannelOptions
+ ): Resolver;
+ /**
+ * Get the default authority for a target. This loosely corresponds to that
+ * target's hostname. Throws an error if this resolver class cannot parse the
+ * `target`.
+ * @param target
+ */
+ getDefaultAuthority(target: GrpcUri): string;
+}
+
+const registeredResolvers: { [scheme: string]: ResolverConstructor } = {};
+let defaultScheme: string | null = null;
+
+/**
+ * Register a resolver class to handle target names prefixed with the `prefix`
+ * string. This prefix should correspond to a URI scheme name listed in the
+ * [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)
+ * @param prefix
+ * @param resolverClass
+ */
+export function registerResolver(
+ scheme: string,
+ resolverClass: ResolverConstructor
+) {
+ registeredResolvers[scheme] = resolverClass;
+}
+
+/**
+ * Register a default resolver to handle target names that do not start with
+ * any registered prefix.
+ * @param resolverClass
+ */
+export function registerDefaultScheme(scheme: string) {
+ defaultScheme = scheme;
+}
+
+/**
+ * Create a name resolver for the specified target, if possible. Throws an
+ * error if no such name resolver can be created.
+ * @param target
+ * @param listener
+ */
+export function createResolver(
+ target: GrpcUri,
+ listener: ResolverListener,
+ options: ChannelOptions
+): Resolver {
+ if (target.scheme !== undefined && target.scheme in registeredResolvers) {
+ return new registeredResolvers[target.scheme](target, listener, options);
+ } else {
+ throw new Error(
+ `No resolver could be created for target ${uriToString(target)}`
+ );
+ }
+}
+
+/**
+ * Get the default authority for the specified target, if possible. Throws an
+ * error if no registered name resolver can parse that target string.
+ * @param target
+ */
+export function getDefaultAuthority(target: GrpcUri): string {
+ if (target.scheme !== undefined && target.scheme in registeredResolvers) {
+ return registeredResolvers[target.scheme].getDefaultAuthority(target);
+ } else {
+ throw new Error(`Invalid target ${uriToString(target)}`);
+ }
+}
+
+export function mapUriDefaultScheme(target: GrpcUri): GrpcUri | null {
+ if (target.scheme === undefined || !(target.scheme in registeredResolvers)) {
+ if (defaultScheme !== null) {
+ return {
+ scheme: defaultScheme,
+ authority: undefined,
+ path: uriToString(target),
+ };
+ } else {
+ return null;
+ }
+ }
+ return target;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/resolving-call.ts b/frontend-old/node_modules/@grpc/grpc-js/src/resolving-call.ts
new file mode 100644
index 0000000..723533d
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/resolving-call.ts
@@ -0,0 +1,331 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { CallCredentials } from './call-credentials';
+import {
+ Call,
+ CallStreamOptions,
+ InterceptingListener,
+ MessageContext,
+ StatusObject,
+} from './call-interface';
+import { LogVerbosity, Propagate, Status } from './constants';
+import {
+ Deadline,
+ deadlineToString,
+ getRelativeTimeout,
+ minDeadline,
+} from './deadline';
+import { FilterStack, FilterStackFactory } from './filter-stack';
+import { InternalChannel } from './internal-channel';
+import { Metadata } from './metadata';
+import * as logging from './logging';
+import { restrictControlPlaneStatusCode } from './control-plane-status';
+
+const TRACER_NAME = 'resolving_call';
+
+export class ResolvingCall implements Call {
+ private child: Call | null = null;
+ private readPending = false;
+ private pendingMessage: { context: MessageContext; message: Buffer } | null =
+ null;
+ private pendingHalfClose = false;
+ private ended = false;
+ private readFilterPending = false;
+ private writeFilterPending = false;
+ private pendingChildStatus: StatusObject | null = null;
+ private metadata: Metadata | null = null;
+ private listener: InterceptingListener | null = null;
+ private deadline: Deadline;
+ private host: string;
+ private statusWatchers: ((status: StatusObject) => void)[] = [];
+ private deadlineTimer: NodeJS.Timeout = setTimeout(() => {}, 0);
+ private filterStack: FilterStack | null = null;
+
+ constructor(
+ private readonly channel: InternalChannel,
+ private readonly method: string,
+ options: CallStreamOptions,
+ private readonly filterStackFactory: FilterStackFactory,
+ private credentials: CallCredentials,
+ private callNumber: number
+ ) {
+ this.deadline = options.deadline;
+ this.host = options.host;
+ if (options.parentCall) {
+ if (options.flags & Propagate.CANCELLATION) {
+ options.parentCall.on('cancelled', () => {
+ this.cancelWithStatus(Status.CANCELLED, 'Cancelled by parent call');
+ });
+ }
+ if (options.flags & Propagate.DEADLINE) {
+ this.trace(
+ 'Propagating deadline from parent: ' +
+ options.parentCall.getDeadline()
+ );
+ this.deadline = minDeadline(
+ this.deadline,
+ options.parentCall.getDeadline()
+ );
+ }
+ }
+ this.trace('Created');
+ this.runDeadlineTimer();
+ }
+
+ private trace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ '[' + this.callNumber + '] ' + text
+ );
+ }
+
+ private runDeadlineTimer() {
+ clearTimeout(this.deadlineTimer);
+ this.trace('Deadline: ' + deadlineToString(this.deadline));
+ const timeout = getRelativeTimeout(this.deadline);
+ if (timeout !== Infinity) {
+ this.trace('Deadline will be reached in ' + timeout + 'ms');
+ const handleDeadline = () => {
+ this.cancelWithStatus(Status.DEADLINE_EXCEEDED, 'Deadline exceeded');
+ };
+ if (timeout <= 0) {
+ process.nextTick(handleDeadline);
+ } else {
+ this.deadlineTimer = setTimeout(handleDeadline, timeout);
+ }
+ }
+ }
+
+ private outputStatus(status: StatusObject) {
+ if (!this.ended) {
+ this.ended = true;
+ if (!this.filterStack) {
+ this.filterStack = this.filterStackFactory.createFilter();
+ }
+ clearTimeout(this.deadlineTimer);
+ const filteredStatus = this.filterStack.receiveTrailers(status);
+ this.trace(
+ 'ended with status: code=' +
+ filteredStatus.code +
+ ' details="' +
+ filteredStatus.details +
+ '"'
+ );
+ this.statusWatchers.forEach(watcher => watcher(filteredStatus));
+ process.nextTick(() => {
+ this.listener?.onReceiveStatus(filteredStatus);
+ });
+ }
+ }
+
+ private sendMessageOnChild(context: MessageContext, message: Buffer): void {
+ if (!this.child) {
+ throw new Error('sendMessageonChild called with child not populated');
+ }
+ const child = this.child;
+ this.writeFilterPending = true;
+ this.filterStack!.sendMessage(
+ Promise.resolve({ message: message, flags: context.flags })
+ ).then(
+ filteredMessage => {
+ this.writeFilterPending = false;
+ child.sendMessageWithContext(context, filteredMessage.message);
+ if (this.pendingHalfClose) {
+ child.halfClose();
+ }
+ },
+ (status: StatusObject) => {
+ this.cancelWithStatus(status.code, status.details);
+ }
+ );
+ }
+
+ getConfig(): void {
+ if (this.ended) {
+ return;
+ }
+ if (!this.metadata || !this.listener) {
+ throw new Error('getConfig called before start');
+ }
+ const configResult = this.channel.getConfig(this.method, this.metadata);
+ if (configResult.type === 'NONE') {
+ this.channel.queueCallForConfig(this);
+ return;
+ } else if (configResult.type === 'ERROR') {
+ if (this.metadata.getOptions().waitForReady) {
+ this.channel.queueCallForConfig(this);
+ } else {
+ this.outputStatus(configResult.error);
+ }
+ return;
+ }
+ // configResult.type === 'SUCCESS'
+ const config = configResult.config;
+ if (config.status !== Status.OK) {
+ const { code, details } = restrictControlPlaneStatusCode(
+ config.status,
+ 'Failed to route call to method ' + this.method
+ );
+ this.outputStatus({
+ code: code,
+ details: details,
+ metadata: new Metadata(),
+ });
+ return;
+ }
+
+ if (config.methodConfig.timeout) {
+ const configDeadline = new Date();
+ configDeadline.setSeconds(
+ configDeadline.getSeconds() + config.methodConfig.timeout.seconds
+ );
+ configDeadline.setMilliseconds(
+ configDeadline.getMilliseconds() +
+ config.methodConfig.timeout.nanos / 1_000_000
+ );
+ this.deadline = minDeadline(this.deadline, configDeadline);
+ this.runDeadlineTimer();
+ }
+
+ this.filterStackFactory.push(config.dynamicFilterFactories);
+ this.filterStack = this.filterStackFactory.createFilter();
+ this.filterStack.sendMetadata(Promise.resolve(this.metadata)).then(
+ filteredMetadata => {
+ this.child = this.channel.createInnerCall(
+ config,
+ this.method,
+ this.host,
+ this.credentials,
+ this.deadline
+ );
+ this.trace('Created child [' + this.child.getCallNumber() + ']');
+ this.child.start(filteredMetadata, {
+ onReceiveMetadata: metadata => {
+ this.trace('Received metadata');
+ this.listener!.onReceiveMetadata(
+ this.filterStack!.receiveMetadata(metadata)
+ );
+ },
+ onReceiveMessage: message => {
+ this.trace('Received message');
+ this.readFilterPending = true;
+ this.filterStack!.receiveMessage(message).then(
+ filteredMesssage => {
+ this.trace('Finished filtering received message');
+ this.readFilterPending = false;
+ this.listener!.onReceiveMessage(filteredMesssage);
+ if (this.pendingChildStatus) {
+ this.outputStatus(this.pendingChildStatus);
+ }
+ },
+ (status: StatusObject) => {
+ this.cancelWithStatus(status.code, status.details);
+ }
+ );
+ },
+ onReceiveStatus: status => {
+ this.trace('Received status');
+ if (this.readFilterPending) {
+ this.pendingChildStatus = status;
+ } else {
+ this.outputStatus(status);
+ }
+ },
+ });
+ if (this.readPending) {
+ this.child.startRead();
+ }
+ if (this.pendingMessage) {
+ this.sendMessageOnChild(
+ this.pendingMessage.context,
+ this.pendingMessage.message
+ );
+ } else if (this.pendingHalfClose) {
+ this.child.halfClose();
+ }
+ },
+ (status: StatusObject) => {
+ this.outputStatus(status);
+ }
+ );
+ }
+
+ reportResolverError(status: StatusObject) {
+ if (this.metadata?.getOptions().waitForReady) {
+ this.channel.queueCallForConfig(this);
+ } else {
+ this.outputStatus(status);
+ }
+ }
+ cancelWithStatus(status: Status, details: string): void {
+ this.trace(
+ 'cancelWithStatus code: ' + status + ' details: "' + details + '"'
+ );
+ this.child?.cancelWithStatus(status, details);
+ this.outputStatus({
+ code: status,
+ details: details,
+ metadata: new Metadata(),
+ });
+ }
+ getPeer(): string {
+ return this.child?.getPeer() ?? this.channel.getTarget();
+ }
+ start(metadata: Metadata, listener: InterceptingListener): void {
+ this.trace('start called');
+ this.metadata = metadata.clone();
+ this.listener = listener;
+ this.getConfig();
+ }
+ sendMessageWithContext(context: MessageContext, message: Buffer): void {
+ this.trace('write() called with message of length ' + message.length);
+ if (this.child) {
+ this.sendMessageOnChild(context, message);
+ } else {
+ this.pendingMessage = { context, message };
+ }
+ }
+ startRead(): void {
+ this.trace('startRead called');
+ if (this.child) {
+ this.child.startRead();
+ } else {
+ this.readPending = true;
+ }
+ }
+ halfClose(): void {
+ this.trace('halfClose called');
+ if (this.child && !this.writeFilterPending) {
+ this.child.halfClose();
+ } else {
+ this.pendingHalfClose = true;
+ }
+ }
+ setCredentials(credentials: CallCredentials): void {
+ this.credentials = this.credentials.compose(credentials);
+ }
+
+ addStatusWatcher(watcher: (status: StatusObject) => void) {
+ this.statusWatchers.push(watcher);
+ }
+
+ getCallNumber(): number {
+ return this.callNumber;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/resolving-load-balancer.ts b/frontend-old/node_modules/@grpc/grpc-js/src/resolving-load-balancer.ts
new file mode 100644
index 0000000..ceec4b5
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/resolving-load-balancer.ts
@@ -0,0 +1,403 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {
+ ChannelControlHelper,
+ LoadBalancer,
+ LoadBalancingConfig,
+ getFirstUsableConfig,
+} from './load-balancer';
+import {
+ MethodConfig,
+ ServiceConfig,
+ validateServiceConfig,
+} from './service-config';
+import { ConnectivityState } from './connectivity-state';
+import { ConfigSelector, createResolver, Resolver } from './resolver';
+import { ServiceError } from './call';
+import { Picker, UnavailablePicker, QueuePicker } from './picker';
+import { BackoffOptions, BackoffTimeout } from './backoff-timeout';
+import { Status } from './constants';
+import { StatusObject } from './call-interface';
+import { Metadata } from './metadata';
+import * as logging from './logging';
+import { LogVerbosity } from './constants';
+import { SubchannelAddress } from './subchannel-address';
+import { GrpcUri, uriToString } from './uri-parser';
+import { ChildLoadBalancerHandler } from './load-balancer-child-handler';
+import { ChannelOptions } from './channel-options';
+
+const TRACER_NAME = 'resolving_load_balancer';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+type NameMatchLevel = 'EMPTY' | 'SERVICE' | 'SERVICE_AND_METHOD';
+
+/**
+ * Name match levels in order from most to least specific. This is the order in
+ * which searches will be performed.
+ */
+const NAME_MATCH_LEVEL_ORDER: NameMatchLevel[] = [
+ 'SERVICE_AND_METHOD',
+ 'SERVICE',
+ 'EMPTY',
+];
+
+function hasMatchingName(
+ service: string,
+ method: string,
+ methodConfig: MethodConfig,
+ matchLevel: NameMatchLevel
+): boolean {
+ for (const name of methodConfig.name) {
+ switch (matchLevel) {
+ case 'EMPTY':
+ if (!name.service && !name.method) {
+ return true;
+ }
+ break;
+ case 'SERVICE':
+ if (name.service === service && !name.method) {
+ return true;
+ }
+ break;
+ case 'SERVICE_AND_METHOD':
+ if (name.service === service && name.method === method) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+function findMatchingConfig(
+ service: string,
+ method: string,
+ methodConfigs: MethodConfig[],
+ matchLevel: NameMatchLevel
+): MethodConfig | null {
+ for (const config of methodConfigs) {
+ if (hasMatchingName(service, method, config, matchLevel)) {
+ return config;
+ }
+ }
+ return null;
+}
+
+function getDefaultConfigSelector(
+ serviceConfig: ServiceConfig | null
+): ConfigSelector {
+ return function defaultConfigSelector(
+ methodName: string,
+ metadata: Metadata
+ ) {
+ const splitName = methodName.split('/').filter(x => x.length > 0);
+ const service = splitName[0] ?? '';
+ const method = splitName[1] ?? '';
+ if (serviceConfig && serviceConfig.methodConfig) {
+ /* Check for the following in order, and return the first method
+ * config that matches:
+ * 1. A name that exactly matches the service and method
+ * 2. A name with no method set that matches the service
+ * 3. An empty name
+ */
+ for (const matchLevel of NAME_MATCH_LEVEL_ORDER) {
+ const matchingConfig = findMatchingConfig(
+ service,
+ method,
+ serviceConfig.methodConfig,
+ matchLevel
+ );
+ if (matchingConfig) {
+ return {
+ methodConfig: matchingConfig,
+ pickInformation: {},
+ status: Status.OK,
+ dynamicFilterFactories: [],
+ };
+ }
+ }
+ }
+ return {
+ methodConfig: { name: [] },
+ pickInformation: {},
+ status: Status.OK,
+ dynamicFilterFactories: [],
+ };
+ };
+}
+
+export interface ResolutionCallback {
+ (serviceConfig: ServiceConfig, configSelector: ConfigSelector): void;
+}
+
+export interface ResolutionFailureCallback {
+ (status: StatusObject): void;
+}
+
+export class ResolvingLoadBalancer implements LoadBalancer {
+ /**
+ * The resolver class constructed for the target address.
+ */
+ private readonly innerResolver: Resolver;
+
+ private readonly childLoadBalancer: ChildLoadBalancerHandler;
+ private latestChildState: ConnectivityState = ConnectivityState.IDLE;
+ private latestChildPicker: Picker = new QueuePicker(this);
+ /**
+ * This resolving load balancer's current connectivity state.
+ */
+ private currentState: ConnectivityState = ConnectivityState.IDLE;
+ private readonly defaultServiceConfig: ServiceConfig;
+ /**
+ * The service config object from the last successful resolution, if
+ * available. A value of null indicates that we have not yet received a valid
+ * service config from the resolver.
+ */
+ private previousServiceConfig: ServiceConfig | null = null;
+
+ /**
+ * The backoff timer for handling name resolution failures.
+ */
+ private readonly backoffTimeout: BackoffTimeout;
+
+ /**
+ * Indicates whether we should attempt to resolve again after the backoff
+ * timer runs out.
+ */
+ private continueResolving = false;
+
+ /**
+ * Wrapper class that behaves like a `LoadBalancer` and also handles name
+ * resolution internally.
+ * @param target The address of the backend to connect to.
+ * @param channelControlHelper `ChannelControlHelper` instance provided by
+ * this load balancer's owner.
+ * @param defaultServiceConfig The default service configuration to be used
+ * if none is provided by the name resolver. A `null` value indicates
+ * that the default behavior should be the default unconfigured behavior.
+ * In practice, that means using the "pick first" load balancer
+ * implmentation
+ */
+ constructor(
+ private readonly target: GrpcUri,
+ private readonly channelControlHelper: ChannelControlHelper,
+ channelOptions: ChannelOptions,
+ private readonly onSuccessfulResolution: ResolutionCallback,
+ private readonly onFailedResolution: ResolutionFailureCallback
+ ) {
+ if (channelOptions['grpc.service_config']) {
+ this.defaultServiceConfig = validateServiceConfig(
+ JSON.parse(channelOptions['grpc.service_config']!)
+ );
+ } else {
+ this.defaultServiceConfig = {
+ loadBalancingConfig: [],
+ methodConfig: [],
+ };
+ }
+ this.updateState(ConnectivityState.IDLE, new QueuePicker(this));
+ this.childLoadBalancer = new ChildLoadBalancerHandler({
+ createSubchannel:
+ channelControlHelper.createSubchannel.bind(channelControlHelper),
+ requestReresolution: () => {
+ /* If the backoffTimeout is running, we're still backing off from
+ * making resolve requests, so we shouldn't make another one here.
+ * In that case, the backoff timer callback will call
+ * updateResolution */
+ if (this.backoffTimeout.isRunning()) {
+ trace('requestReresolution delayed by backoff timer until ' + this.backoffTimeout.getEndTime().toISOString());
+ this.continueResolving = true;
+ } else {
+ this.updateResolution();
+ }
+ },
+ updateState: (newState: ConnectivityState, picker: Picker) => {
+ this.latestChildState = newState;
+ this.latestChildPicker = picker;
+ this.updateState(newState, picker);
+ },
+ addChannelzChild:
+ channelControlHelper.addChannelzChild.bind(channelControlHelper),
+ removeChannelzChild:
+ channelControlHelper.removeChannelzChild.bind(channelControlHelper),
+ });
+ this.innerResolver = createResolver(
+ target,
+ {
+ onSuccessfulResolution: (
+ addressList: SubchannelAddress[],
+ serviceConfig: ServiceConfig | null,
+ serviceConfigError: ServiceError | null,
+ configSelector: ConfigSelector | null,
+ attributes: { [key: string]: unknown }
+ ) => {
+ this.backoffTimeout.stop();
+ this.backoffTimeout.reset();
+ let workingServiceConfig: ServiceConfig | null = null;
+ /* This first group of conditionals implements the algorithm described
+ * in https://github.com/grpc/proposal/blob/master/A21-service-config-error-handling.md
+ * in the section called "Behavior on receiving a new gRPC Config".
+ */
+ if (serviceConfig === null) {
+ // Step 4 and 5
+ if (serviceConfigError === null) {
+ // Step 5
+ this.previousServiceConfig = null;
+ workingServiceConfig = this.defaultServiceConfig;
+ } else {
+ // Step 4
+ if (this.previousServiceConfig === null) {
+ // Step 4.ii
+ this.handleResolutionFailure(serviceConfigError);
+ } else {
+ // Step 4.i
+ workingServiceConfig = this.previousServiceConfig;
+ }
+ }
+ } else {
+ // Step 3
+ workingServiceConfig = serviceConfig;
+ this.previousServiceConfig = serviceConfig;
+ }
+ const workingConfigList =
+ workingServiceConfig?.loadBalancingConfig ?? [];
+ const loadBalancingConfig = getFirstUsableConfig(
+ workingConfigList,
+ true
+ );
+ if (loadBalancingConfig === null) {
+ // There were load balancing configs but none are supported. This counts as a resolution failure
+ this.handleResolutionFailure({
+ code: Status.UNAVAILABLE,
+ details:
+ 'All load balancer options in service config are not compatible',
+ metadata: new Metadata(),
+ });
+ return;
+ }
+ this.childLoadBalancer.updateAddressList(
+ addressList,
+ loadBalancingConfig,
+ attributes
+ );
+ const finalServiceConfig =
+ workingServiceConfig ?? this.defaultServiceConfig;
+ this.onSuccessfulResolution(
+ finalServiceConfig,
+ configSelector ?? getDefaultConfigSelector(finalServiceConfig)
+ );
+ },
+ onError: (error: StatusObject) => {
+ this.handleResolutionFailure(error);
+ },
+ },
+ channelOptions
+ );
+ const backoffOptions: BackoffOptions = {
+ initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],
+ maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],
+ };
+ this.backoffTimeout = new BackoffTimeout(() => {
+ if (this.continueResolving) {
+ this.updateResolution();
+ this.continueResolving = false;
+ } else {
+ this.updateState(this.latestChildState, this.latestChildPicker);
+ }
+ }, backoffOptions);
+ this.backoffTimeout.unref();
+ }
+
+ private updateResolution() {
+ this.innerResolver.updateResolution();
+ if (this.currentState === ConnectivityState.IDLE) {
+ this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this));
+ }
+ this.backoffTimeout.runOnce();
+ }
+
+ private updateState(connectivityState: ConnectivityState, picker: Picker) {
+ trace(
+ uriToString(this.target) +
+ ' ' +
+ ConnectivityState[this.currentState] +
+ ' -> ' +
+ ConnectivityState[connectivityState]
+ );
+ // Ensure that this.exitIdle() is called by the picker
+ if (connectivityState === ConnectivityState.IDLE) {
+ picker = new QueuePicker(this);
+ }
+ this.currentState = connectivityState;
+ this.channelControlHelper.updateState(connectivityState, picker);
+ }
+
+ private handleResolutionFailure(error: StatusObject) {
+ if (this.latestChildState === ConnectivityState.IDLE) {
+ this.updateState(
+ ConnectivityState.TRANSIENT_FAILURE,
+ new UnavailablePicker(error)
+ );
+ this.onFailedResolution(error);
+ }
+ }
+
+ exitIdle() {
+ if (
+ this.currentState === ConnectivityState.IDLE ||
+ this.currentState === ConnectivityState.TRANSIENT_FAILURE
+ ) {
+ if (this.backoffTimeout.isRunning()) {
+ this.continueResolving = true;
+ } else {
+ this.updateResolution();
+ }
+ }
+ this.childLoadBalancer.exitIdle();
+ }
+
+ updateAddressList(
+ addressList: SubchannelAddress[],
+ lbConfig: LoadBalancingConfig | null
+ ): never {
+ throw new Error('updateAddressList not supported on ResolvingLoadBalancer');
+ }
+
+ resetBackoff() {
+ this.backoffTimeout.reset();
+ this.childLoadBalancer.resetBackoff();
+ }
+
+ destroy() {
+ this.childLoadBalancer.destroy();
+ this.innerResolver.destroy();
+ this.backoffTimeout.reset();
+ this.backoffTimeout.stop();
+ this.latestChildState = ConnectivityState.IDLE;
+ this.latestChildPicker = new QueuePicker(this);
+ this.currentState = ConnectivityState.IDLE;
+ this.previousServiceConfig = null;
+ this.continueResolving = false;
+ }
+
+ getTypeName() {
+ return 'resolving_load_balancer';
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/retrying-call.ts b/frontend-old/node_modules/@grpc/grpc-js/src/retrying-call.ts
new file mode 100644
index 0000000..e6e1cbb
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/retrying-call.ts
@@ -0,0 +1,821 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { CallCredentials } from './call-credentials';
+import { LogVerbosity, Status } from './constants';
+import { Deadline } from './deadline';
+import { Metadata } from './metadata';
+import { CallConfig } from './resolver';
+import * as logging from './logging';
+import {
+ Call,
+ InterceptingListener,
+ MessageContext,
+ StatusObject,
+ WriteCallback,
+ WriteObject,
+} from './call-interface';
+import {
+ LoadBalancingCall,
+ StatusObjectWithProgress,
+} from './load-balancing-call';
+import { InternalChannel } from './internal-channel';
+
+const TRACER_NAME = 'retrying_call';
+
+export class RetryThrottler {
+ private tokens: number;
+ constructor(
+ private readonly maxTokens: number,
+ private readonly tokenRatio: number,
+ previousRetryThrottler?: RetryThrottler
+ ) {
+ if (previousRetryThrottler) {
+ /* When carrying over tokens from a previous config, rescale them to the
+ * new max value */
+ this.tokens =
+ previousRetryThrottler.tokens *
+ (maxTokens / previousRetryThrottler.maxTokens);
+ } else {
+ this.tokens = maxTokens;
+ }
+ }
+
+ addCallSucceeded() {
+ this.tokens = Math.max(this.tokens + this.tokenRatio, this.maxTokens);
+ }
+
+ addCallFailed() {
+ this.tokens = Math.min(this.tokens - 1, 0);
+ }
+
+ canRetryCall() {
+ return this.tokens > this.maxTokens / 2;
+ }
+}
+
+export class MessageBufferTracker {
+ private totalAllocated = 0;
+ private allocatedPerCall: Map<number, number> = new Map<number, number>();
+
+ constructor(private totalLimit: number, private limitPerCall: number) {}
+
+ allocate(size: number, callId: number): boolean {
+ const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;
+ if (
+ this.limitPerCall - currentPerCall < size ||
+ this.totalLimit - this.totalAllocated < size
+ ) {
+ return false;
+ }
+ this.allocatedPerCall.set(callId, currentPerCall + size);
+ this.totalAllocated += size;
+ return true;
+ }
+
+ free(size: number, callId: number) {
+ if (this.totalAllocated < size) {
+ throw new Error(
+ `Invalid buffer allocation state: call ${callId} freed ${size} > total allocated ${this.totalAllocated}`
+ );
+ }
+ this.totalAllocated -= size;
+ const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;
+ if (currentPerCall < size) {
+ throw new Error(
+ `Invalid buffer allocation state: call ${callId} freed ${size} > allocated for call ${currentPerCall}`
+ );
+ }
+ this.allocatedPerCall.set(callId, currentPerCall - size);
+ }
+
+ freeAll(callId: number) {
+ const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;
+ if (this.totalAllocated < currentPerCall) {
+ throw new Error(
+ `Invalid buffer allocation state: call ${callId} allocated ${currentPerCall} > total allocated ${this.totalAllocated}`
+ );
+ }
+ this.totalAllocated -= currentPerCall;
+ this.allocatedPerCall.delete(callId);
+ }
+}
+
+type UnderlyingCallState = 'ACTIVE' | 'COMPLETED';
+
+interface UnderlyingCall {
+ state: UnderlyingCallState;
+ call: LoadBalancingCall;
+ nextMessageToSend: number;
+}
+
+/**
+ * A retrying call can be in one of these states:
+ * RETRY: Retries are configured and new attempts may be sent
+ * HEDGING: Hedging is configured and new attempts may be sent
+ * TRANSPARENT_ONLY: Neither retries nor hedging are configured, and
+ * transparent retry attempts may still be sent
+ * COMMITTED: One attempt is committed, and no new attempts will be
+ * sent
+ */
+type RetryingCallState = 'RETRY' | 'HEDGING' | 'TRANSPARENT_ONLY' | 'COMMITTED';
+
+/**
+ * The different types of objects that can be stored in the write buffer, with
+ * the following meanings:
+ * MESSAGE: This is a message to be sent.
+ * HALF_CLOSE: When this entry is reached, the calls should send a half-close.
+ * FREED: This slot previously contained a message that has been sent on all
+ * child calls and is no longer needed.
+ */
+type WriteBufferEntryType = 'MESSAGE' | 'HALF_CLOSE' | 'FREED';
+
+/**
+ * Entry in the buffer of messages to send to the remote end.
+ */
+interface WriteBufferEntry {
+ entryType: WriteBufferEntryType;
+ /**
+ * Message to send.
+ * Only populated if entryType is MESSAGE.
+ */
+ message?: WriteObject;
+ /**
+ * Callback to call after sending the message.
+ * Only populated if entryType is MESSAGE and the call is in the COMMITTED
+ * state.
+ */
+ callback?: WriteCallback;
+ /**
+ * Indicates whether the message is allocated in the buffer tracker. Ignored
+ * if entryType is not MESSAGE. Should be the return value of
+ * bufferTracker.allocate.
+ */
+ allocated: boolean;
+}
+
+const PREVIONS_RPC_ATTEMPTS_METADATA_KEY = 'grpc-previous-rpc-attempts';
+
+export class RetryingCall implements Call {
+ private state: RetryingCallState;
+ private listener: InterceptingListener | null = null;
+ private initialMetadata: Metadata | null = null;
+ private underlyingCalls: UnderlyingCall[] = [];
+ private writeBuffer: WriteBufferEntry[] = [];
+ /**
+ * The offset of message indices in the writeBuffer. For example, if
+ * writeBufferOffset is 10, message 10 is in writeBuffer[0] and message 15
+ * is in writeBuffer[5].
+ */
+ private writeBufferOffset = 0;
+ /**
+ * Tracks whether a read has been started, so that we know whether to start
+ * reads on new child calls. This only matters for the first read, because
+ * once a message comes in the child call becomes committed and there will
+ * be no new child calls.
+ */
+ private readStarted = false;
+ private transparentRetryUsed = false;
+ /**
+ * Number of attempts so far
+ */
+ private attempts = 0;
+ private hedgingTimer: NodeJS.Timeout | null = null;
+ private committedCallIndex: number | null = null;
+ private initialRetryBackoffSec = 0;
+ private nextRetryBackoffSec = 0;
+ constructor(
+ private readonly channel: InternalChannel,
+ private readonly callConfig: CallConfig,
+ private readonly methodName: string,
+ private readonly host: string,
+ private readonly credentials: CallCredentials,
+ private readonly deadline: Deadline,
+ private readonly callNumber: number,
+ private readonly bufferTracker: MessageBufferTracker,
+ private readonly retryThrottler?: RetryThrottler
+ ) {
+ if (callConfig.methodConfig.retryPolicy) {
+ this.state = 'RETRY';
+ const retryPolicy = callConfig.methodConfig.retryPolicy;
+ this.nextRetryBackoffSec = this.initialRetryBackoffSec = Number(
+ retryPolicy.initialBackoff.substring(
+ 0,
+ retryPolicy.initialBackoff.length - 1
+ )
+ );
+ } else if (callConfig.methodConfig.hedgingPolicy) {
+ this.state = 'HEDGING';
+ } else {
+ this.state = 'TRANSPARENT_ONLY';
+ }
+ }
+ getCallNumber(): number {
+ return this.callNumber;
+ }
+
+ private trace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ '[' + this.callNumber + '] ' + text
+ );
+ }
+
+ private reportStatus(statusObject: StatusObject) {
+ this.trace(
+ 'ended with status: code=' +
+ statusObject.code +
+ ' details="' +
+ statusObject.details +
+ '"'
+ );
+ this.bufferTracker.freeAll(this.callNumber);
+ this.writeBufferOffset = this.writeBufferOffset + this.writeBuffer.length;
+ this.writeBuffer = [];
+ process.nextTick(() => {
+ // Explicitly construct status object to remove progress field
+ this.listener?.onReceiveStatus({
+ code: statusObject.code,
+ details: statusObject.details,
+ metadata: statusObject.metadata,
+ });
+ });
+ }
+
+ cancelWithStatus(status: Status, details: string): void {
+ this.trace(
+ 'cancelWithStatus code: ' + status + ' details: "' + details + '"'
+ );
+ this.reportStatus({ code: status, details, metadata: new Metadata() });
+ for (const { call } of this.underlyingCalls) {
+ call.cancelWithStatus(status, details);
+ }
+ }
+ getPeer(): string {
+ if (this.committedCallIndex !== null) {
+ return this.underlyingCalls[this.committedCallIndex].call.getPeer();
+ } else {
+ return 'unknown';
+ }
+ }
+
+ private getBufferEntry(messageIndex: number): WriteBufferEntry {
+ return (
+ this.writeBuffer[messageIndex - this.writeBufferOffset] ?? {
+ entryType: 'FREED',
+ allocated: false,
+ }
+ );
+ }
+
+ private getNextBufferIndex() {
+ return this.writeBufferOffset + this.writeBuffer.length;
+ }
+
+ private clearSentMessages() {
+ if (this.state !== 'COMMITTED') {
+ return;
+ }
+ const earliestNeededMessageIndex =
+ this.underlyingCalls[this.committedCallIndex!].nextMessageToSend;
+ for (
+ let messageIndex = this.writeBufferOffset;
+ messageIndex < earliestNeededMessageIndex;
+ messageIndex++
+ ) {
+ const bufferEntry = this.getBufferEntry(messageIndex);
+ if (bufferEntry.allocated) {
+ this.bufferTracker.free(
+ bufferEntry.message!.message.length,
+ this.callNumber
+ );
+ }
+ }
+ this.writeBuffer = this.writeBuffer.slice(
+ earliestNeededMessageIndex - this.writeBufferOffset
+ );
+ this.writeBufferOffset = earliestNeededMessageIndex;
+ }
+
+ private commitCall(index: number) {
+ if (this.state === 'COMMITTED') {
+ return;
+ }
+ if (this.underlyingCalls[index].state === 'COMPLETED') {
+ return;
+ }
+ this.trace(
+ 'Committing call [' +
+ this.underlyingCalls[index].call.getCallNumber() +
+ '] at index ' +
+ index
+ );
+ this.state = 'COMMITTED';
+ this.committedCallIndex = index;
+ for (let i = 0; i < this.underlyingCalls.length; i++) {
+ if (i === index) {
+ continue;
+ }
+ if (this.underlyingCalls[i].state === 'COMPLETED') {
+ continue;
+ }
+ this.underlyingCalls[i].state = 'COMPLETED';
+ this.underlyingCalls[i].call.cancelWithStatus(
+ Status.CANCELLED,
+ 'Discarded in favor of other hedged attempt'
+ );
+ }
+ this.clearSentMessages();
+ }
+
+ private commitCallWithMostMessages() {
+ if (this.state === 'COMMITTED') {
+ return;
+ }
+ let mostMessages = -1;
+ let callWithMostMessages = -1;
+ for (const [index, childCall] of this.underlyingCalls.entries()) {
+ if (
+ childCall.state === 'ACTIVE' &&
+ childCall.nextMessageToSend > mostMessages
+ ) {
+ mostMessages = childCall.nextMessageToSend;
+ callWithMostMessages = index;
+ }
+ }
+ if (callWithMostMessages === -1) {
+ /* There are no active calls, disable retries to force the next call that
+ * is started to be committed. */
+ this.state = 'TRANSPARENT_ONLY';
+ } else {
+ this.commitCall(callWithMostMessages);
+ }
+ }
+
+ private isStatusCodeInList(list: (Status | string)[], code: Status) {
+ return list.some(
+ value =>
+ value === code ||
+ value.toString().toLowerCase() === Status[code].toLowerCase()
+ );
+ }
+
+ private getNextRetryBackoffMs() {
+ const retryPolicy = this.callConfig?.methodConfig.retryPolicy;
+ if (!retryPolicy) {
+ return 0;
+ }
+ const nextBackoffMs = Math.random() * this.nextRetryBackoffSec * 1000;
+ const maxBackoffSec = Number(
+ retryPolicy.maxBackoff.substring(0, retryPolicy.maxBackoff.length - 1)
+ );
+ this.nextRetryBackoffSec = Math.min(
+ this.nextRetryBackoffSec * retryPolicy.backoffMultiplier,
+ maxBackoffSec
+ );
+ return nextBackoffMs;
+ }
+
+ private maybeRetryCall(
+ pushback: number | null,
+ callback: (retried: boolean) => void
+ ) {
+ if (this.state !== 'RETRY') {
+ callback(false);
+ return;
+ }
+ const retryPolicy = this.callConfig!.methodConfig.retryPolicy!;
+ if (this.attempts >= Math.min(retryPolicy.maxAttempts, 5)) {
+ callback(false);
+ return;
+ }
+ let retryDelayMs: number;
+ if (pushback === null) {
+ retryDelayMs = this.getNextRetryBackoffMs();
+ } else if (pushback < 0) {
+ this.state = 'TRANSPARENT_ONLY';
+ callback(false);
+ return;
+ } else {
+ retryDelayMs = pushback;
+ this.nextRetryBackoffSec = this.initialRetryBackoffSec;
+ }
+ setTimeout(() => {
+ if (this.state !== 'RETRY') {
+ callback(false);
+ return;
+ }
+ if (this.retryThrottler?.canRetryCall() ?? true) {
+ callback(true);
+ this.attempts += 1;
+ this.startNewAttempt();
+ }
+ }, retryDelayMs);
+ }
+
+ private countActiveCalls(): number {
+ let count = 0;
+ for (const call of this.underlyingCalls) {
+ if (call?.state === 'ACTIVE') {
+ count += 1;
+ }
+ }
+ return count;
+ }
+
+ private handleProcessedStatus(
+ status: StatusObject,
+ callIndex: number,
+ pushback: number | null
+ ) {
+ switch (this.state) {
+ case 'COMMITTED':
+ case 'TRANSPARENT_ONLY':
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ break;
+ case 'HEDGING':
+ if (
+ this.isStatusCodeInList(
+ this.callConfig!.methodConfig.hedgingPolicy!.nonFatalStatusCodes ??
+ [],
+ status.code
+ )
+ ) {
+ this.retryThrottler?.addCallFailed();
+ let delayMs: number;
+ if (pushback === null) {
+ delayMs = 0;
+ } else if (pushback < 0) {
+ this.state = 'TRANSPARENT_ONLY';
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ return;
+ } else {
+ delayMs = pushback;
+ }
+ setTimeout(() => {
+ this.maybeStartHedgingAttempt();
+ // If after trying to start a call there are no active calls, this was the last one
+ if (this.countActiveCalls() === 0) {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ }, delayMs);
+ } else {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ break;
+ case 'RETRY':
+ if (
+ this.isStatusCodeInList(
+ this.callConfig!.methodConfig.retryPolicy!.retryableStatusCodes,
+ status.code
+ )
+ ) {
+ this.retryThrottler?.addCallFailed();
+ this.maybeRetryCall(pushback, retried => {
+ if (!retried) {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ });
+ } else {
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ }
+ break;
+ }
+ }
+
+ private getPushback(metadata: Metadata): number | null {
+ const mdValue = metadata.get('grpc-retry-pushback-ms');
+ if (mdValue.length === 0) {
+ return null;
+ }
+ try {
+ return parseInt(mdValue[0] as string);
+ } catch (e) {
+ return -1;
+ }
+ }
+
+ private handleChildStatus(
+ status: StatusObjectWithProgress,
+ callIndex: number
+ ) {
+ if (this.underlyingCalls[callIndex].state === 'COMPLETED') {
+ return;
+ }
+ this.trace(
+ 'state=' +
+ this.state +
+ ' handling status with progress ' +
+ status.progress +
+ ' from child [' +
+ this.underlyingCalls[callIndex].call.getCallNumber() +
+ '] in state ' +
+ this.underlyingCalls[callIndex].state
+ );
+ this.underlyingCalls[callIndex].state = 'COMPLETED';
+ if (status.code === Status.OK) {
+ this.retryThrottler?.addCallSucceeded();
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ return;
+ }
+ if (this.state === 'COMMITTED') {
+ this.reportStatus(status);
+ return;
+ }
+ const pushback = this.getPushback(status.metadata);
+ switch (status.progress) {
+ case 'NOT_STARTED':
+ // RPC never leaves the client, always safe to retry
+ this.startNewAttempt();
+ break;
+ case 'REFUSED':
+ // RPC reaches the server library, but not the server application logic
+ if (this.transparentRetryUsed) {
+ this.handleProcessedStatus(status, callIndex, pushback);
+ } else {
+ this.transparentRetryUsed = true;
+ this.startNewAttempt();
+ }
+ break;
+ case 'DROP':
+ this.commitCall(callIndex);
+ this.reportStatus(status);
+ break;
+ case 'PROCESSED':
+ this.handleProcessedStatus(status, callIndex, pushback);
+ break;
+ }
+ }
+
+ private maybeStartHedgingAttempt() {
+ if (this.state !== 'HEDGING') {
+ return;
+ }
+ if (!this.callConfig.methodConfig.hedgingPolicy) {
+ return;
+ }
+ const hedgingPolicy = this.callConfig.methodConfig.hedgingPolicy;
+ if (this.attempts >= Math.min(hedgingPolicy.maxAttempts, 5)) {
+ return;
+ }
+ this.attempts += 1;
+ this.startNewAttempt();
+ this.maybeStartHedgingTimer();
+ }
+
+ private maybeStartHedgingTimer() {
+ if (this.hedgingTimer) {
+ clearTimeout(this.hedgingTimer);
+ }
+ if (this.state !== 'HEDGING') {
+ return;
+ }
+ if (!this.callConfig.methodConfig.hedgingPolicy) {
+ return;
+ }
+ const hedgingPolicy = this.callConfig.methodConfig.hedgingPolicy;
+ if (this.attempts >= Math.min(hedgingPolicy.maxAttempts, 5)) {
+ return;
+ }
+ const hedgingDelayString = hedgingPolicy.hedgingDelay ?? '0s';
+ const hedgingDelaySec = Number(
+ hedgingDelayString.substring(0, hedgingDelayString.length - 1)
+ );
+ this.hedgingTimer = setTimeout(() => {
+ this.maybeStartHedgingAttempt();
+ }, hedgingDelaySec * 1000);
+ this.hedgingTimer.unref?.();
+ }
+
+ private startNewAttempt() {
+ const child = this.channel.createLoadBalancingCall(
+ this.callConfig,
+ this.methodName,
+ this.host,
+ this.credentials,
+ this.deadline
+ );
+ this.trace(
+ 'Created child call [' +
+ child.getCallNumber() +
+ '] for attempt ' +
+ this.attempts
+ );
+ const index = this.underlyingCalls.length;
+ this.underlyingCalls.push({
+ state: 'ACTIVE',
+ call: child,
+ nextMessageToSend: 0,
+ });
+ const previousAttempts = this.attempts - 1;
+ const initialMetadata = this.initialMetadata!.clone();
+ if (previousAttempts > 0) {
+ initialMetadata.set(
+ PREVIONS_RPC_ATTEMPTS_METADATA_KEY,
+ `${previousAttempts}`
+ );
+ }
+ let receivedMetadata = false;
+ child.start(initialMetadata, {
+ onReceiveMetadata: metadata => {
+ this.trace(
+ 'Received metadata from child [' + child.getCallNumber() + ']'
+ );
+ this.commitCall(index);
+ receivedMetadata = true;
+ if (previousAttempts > 0) {
+ metadata.set(
+ PREVIONS_RPC_ATTEMPTS_METADATA_KEY,
+ `${previousAttempts}`
+ );
+ }
+ if (this.underlyingCalls[index].state === 'ACTIVE') {
+ this.listener!.onReceiveMetadata(metadata);
+ }
+ },
+ onReceiveMessage: message => {
+ this.trace(
+ 'Received message from child [' + child.getCallNumber() + ']'
+ );
+ this.commitCall(index);
+ if (this.underlyingCalls[index].state === 'ACTIVE') {
+ this.listener!.onReceiveMessage(message);
+ }
+ },
+ onReceiveStatus: status => {
+ this.trace(
+ 'Received status from child [' + child.getCallNumber() + ']'
+ );
+ if (!receivedMetadata && previousAttempts > 0) {
+ status.metadata.set(
+ PREVIONS_RPC_ATTEMPTS_METADATA_KEY,
+ `${previousAttempts}`
+ );
+ }
+ this.handleChildStatus(status, index);
+ },
+ });
+ this.sendNextChildMessage(index);
+ if (this.readStarted) {
+ child.startRead();
+ }
+ }
+
+ start(metadata: Metadata, listener: InterceptingListener): void {
+ this.trace('start called');
+ this.listener = listener;
+ this.initialMetadata = metadata;
+ this.attempts += 1;
+ this.startNewAttempt();
+ this.maybeStartHedgingTimer();
+ }
+
+ private handleChildWriteCompleted(childIndex: number) {
+ const childCall = this.underlyingCalls[childIndex];
+ const messageIndex = childCall.nextMessageToSend;
+ this.getBufferEntry(messageIndex).callback?.();
+ this.clearSentMessages();
+ childCall.nextMessageToSend += 1;
+ this.sendNextChildMessage(childIndex);
+ }
+
+ private sendNextChildMessage(childIndex: number) {
+ const childCall = this.underlyingCalls[childIndex];
+ if (childCall.state === 'COMPLETED') {
+ return;
+ }
+ if (this.getBufferEntry(childCall.nextMessageToSend)) {
+ const bufferEntry = this.getBufferEntry(childCall.nextMessageToSend);
+ switch (bufferEntry.entryType) {
+ case 'MESSAGE':
+ childCall.call.sendMessageWithContext(
+ {
+ callback: error => {
+ // Ignore error
+ this.handleChildWriteCompleted(childIndex);
+ },
+ },
+ bufferEntry.message!.message
+ );
+ break;
+ case 'HALF_CLOSE':
+ childCall.nextMessageToSend += 1;
+ childCall.call.halfClose();
+ break;
+ case 'FREED':
+ // Should not be possible
+ break;
+ }
+ }
+ }
+
+ sendMessageWithContext(context: MessageContext, message: Buffer): void {
+ this.trace('write() called with message of length ' + message.length);
+ const writeObj: WriteObject = {
+ message,
+ flags: context.flags,
+ };
+ const messageIndex = this.getNextBufferIndex();
+ const bufferEntry: WriteBufferEntry = {
+ entryType: 'MESSAGE',
+ message: writeObj,
+ allocated: this.bufferTracker.allocate(message.length, this.callNumber),
+ };
+ this.writeBuffer.push(bufferEntry);
+ if (bufferEntry.allocated) {
+ context.callback?.();
+ for (const [callIndex, call] of this.underlyingCalls.entries()) {
+ if (
+ call.state === 'ACTIVE' &&
+ call.nextMessageToSend === messageIndex
+ ) {
+ call.call.sendMessageWithContext(
+ {
+ callback: error => {
+ // Ignore error
+ this.handleChildWriteCompleted(callIndex);
+ },
+ },
+ message
+ );
+ }
+ }
+ } else {
+ this.commitCallWithMostMessages();
+ // commitCallWithMostMessages can fail if we are between ping attempts
+ if (this.committedCallIndex === null) {
+ return;
+ }
+ const call = this.underlyingCalls[this.committedCallIndex];
+ bufferEntry.callback = context.callback;
+ if (call.state === 'ACTIVE' && call.nextMessageToSend === messageIndex) {
+ call.call.sendMessageWithContext(
+ {
+ callback: error => {
+ // Ignore error
+ this.handleChildWriteCompleted(this.committedCallIndex!);
+ },
+ },
+ message
+ );
+ }
+ }
+ }
+ startRead(): void {
+ this.trace('startRead called');
+ this.readStarted = true;
+ for (const underlyingCall of this.underlyingCalls) {
+ if (underlyingCall?.state === 'ACTIVE') {
+ underlyingCall.call.startRead();
+ }
+ }
+ }
+ halfClose(): void {
+ this.trace('halfClose called');
+ const halfCloseIndex = this.getNextBufferIndex();
+ this.writeBuffer.push({
+ entryType: 'HALF_CLOSE',
+ allocated: false,
+ });
+ for (const call of this.underlyingCalls) {
+ if (
+ call?.state === 'ACTIVE' &&
+ call.nextMessageToSend === halfCloseIndex
+ ) {
+ call.nextMessageToSend += 1;
+ call.call.halfClose();
+ }
+ }
+ }
+ setCredentials(newCredentials: CallCredentials): void {
+ throw new Error('Method not implemented.');
+ }
+ getMethod(): string {
+ return this.methodName;
+ }
+ getHost(): string {
+ return this.host;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/server-call.ts b/frontend-old/node_modules/@grpc/grpc-js/src/server-call.ts
new file mode 100644
index 0000000..3032c6e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/server-call.ts
@@ -0,0 +1,1022 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { EventEmitter } from 'events';
+import * as http2 from 'http2';
+import { Duplex, Readable, Writable } from 'stream';
+import * as zlib from 'zlib';
+
+import {
+ Status,
+ DEFAULT_MAX_SEND_MESSAGE_LENGTH,
+ DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH,
+ LogVerbosity,
+} from './constants';
+import { Deserialize, Serialize } from './make-client';
+import { Metadata } from './metadata';
+import { StreamDecoder } from './stream-decoder';
+import { ObjectReadable, ObjectWritable } from './object-stream';
+import { ChannelOptions } from './channel-options';
+import * as logging from './logging';
+import { StatusObject, PartialStatusObject } from './call-interface';
+import { Deadline } from './deadline';
+import { getErrorCode, getErrorMessage } from './error';
+
+const TRACER_NAME = 'server_call';
+
+function trace(text: string): void {
+ logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);
+}
+
+interface DeadlineUnitIndexSignature {
+ [name: string]: number;
+}
+
+const GRPC_ACCEPT_ENCODING_HEADER = 'grpc-accept-encoding';
+const GRPC_ENCODING_HEADER = 'grpc-encoding';
+const GRPC_MESSAGE_HEADER = 'grpc-message';
+const GRPC_STATUS_HEADER = 'grpc-status';
+const GRPC_TIMEOUT_HEADER = 'grpc-timeout';
+const DEADLINE_REGEX = /(\d{1,8})\s*([HMSmun])/;
+const deadlineUnitsToMs: DeadlineUnitIndexSignature = {
+ H: 3600000,
+ M: 60000,
+ S: 1000,
+ m: 1,
+ u: 0.001,
+ n: 0.000001,
+};
+const defaultCompressionHeaders = {
+ // TODO(cjihrig): Remove these encoding headers from the default response
+ // once compression is integrated.
+ [GRPC_ACCEPT_ENCODING_HEADER]: 'identity,deflate,gzip',
+ [GRPC_ENCODING_HEADER]: 'identity',
+};
+const defaultResponseHeaders = {
+ [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK,
+ [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: 'application/grpc+proto',
+};
+const defaultResponseOptions = {
+ waitForTrailers: true,
+} as http2.ServerStreamResponseOptions;
+
+export type ServerStatusResponse = Partial<StatusObject>;
+
+export type ServerErrorResponse = ServerStatusResponse & Error;
+
+export type ServerSurfaceCall = {
+ cancelled: boolean;
+ readonly metadata: Metadata;
+ getPeer(): string;
+ sendMetadata(responseMetadata: Metadata): void;
+ getDeadline(): Deadline;
+ getPath(): string;
+} & EventEmitter;
+
+export type ServerUnaryCall<RequestType, ResponseType> = ServerSurfaceCall & {
+ request: RequestType;
+};
+export type ServerReadableStream<RequestType, ResponseType> =
+ ServerSurfaceCall & ObjectReadable<RequestType>;
+export type ServerWritableStream<RequestType, ResponseType> =
+ ServerSurfaceCall &
+ ObjectWritable<ResponseType> & {
+ request: RequestType;
+ end: (metadata?: Metadata) => void;
+ };
+export type ServerDuplexStream<RequestType, ResponseType> = ServerSurfaceCall &
+ ObjectReadable<RequestType> &
+ ObjectWritable<ResponseType> & { end: (metadata?: Metadata) => void };
+
+export class ServerUnaryCallImpl<RequestType, ResponseType>
+ extends EventEmitter
+ implements ServerUnaryCall<RequestType, ResponseType>
+{
+ cancelled: boolean;
+
+ constructor(
+ private call: Http2ServerCallStream<RequestType, ResponseType>,
+ public metadata: Metadata,
+ public request: RequestType
+ ) {
+ super();
+ this.cancelled = false;
+ this.call.setupSurfaceCall(this);
+ }
+
+ getPeer(): string {
+ return this.call.getPeer();
+ }
+
+ sendMetadata(responseMetadata: Metadata): void {
+ this.call.sendMetadata(responseMetadata);
+ }
+
+ getDeadline(): Deadline {
+ return this.call.getDeadline();
+ }
+
+ getPath(): string {
+ return this.call.getPath();
+ }
+}
+
+export class ServerReadableStreamImpl<RequestType, ResponseType>
+ extends Readable
+ implements ServerReadableStream<RequestType, ResponseType>
+{
+ cancelled: boolean;
+
+ constructor(
+ private call: Http2ServerCallStream<RequestType, ResponseType>,
+ public metadata: Metadata,
+ public deserialize: Deserialize<RequestType>,
+ encoding: string
+ ) {
+ super({ objectMode: true });
+ this.cancelled = false;
+ this.call.setupSurfaceCall(this);
+ this.call.setupReadable(this, encoding);
+ }
+
+ _read(size: number) {
+ if (!this.call.consumeUnpushedMessages(this)) {
+ return;
+ }
+
+ this.call.resume();
+ }
+
+ getPeer(): string {
+ return this.call.getPeer();
+ }
+
+ sendMetadata(responseMetadata: Metadata): void {
+ this.call.sendMetadata(responseMetadata);
+ }
+
+ getDeadline(): Deadline {
+ return this.call.getDeadline();
+ }
+
+ getPath(): string {
+ return this.call.getPath();
+ }
+}
+
+export class ServerWritableStreamImpl<RequestType, ResponseType>
+ extends Writable
+ implements ServerWritableStream<RequestType, ResponseType>
+{
+ cancelled: boolean;
+ private trailingMetadata: Metadata;
+
+ constructor(
+ private call: Http2ServerCallStream<RequestType, ResponseType>,
+ public metadata: Metadata,
+ public serialize: Serialize<ResponseType>,
+ public request: RequestType
+ ) {
+ super({ objectMode: true });
+ this.cancelled = false;
+ this.trailingMetadata = new Metadata();
+ this.call.setupSurfaceCall(this);
+
+ this.on('error', err => {
+ this.call.sendError(err);
+ this.end();
+ });
+ }
+
+ getPeer(): string {
+ return this.call.getPeer();
+ }
+
+ sendMetadata(responseMetadata: Metadata): void {
+ this.call.sendMetadata(responseMetadata);
+ }
+
+ getDeadline(): Deadline {
+ return this.call.getDeadline();
+ }
+
+ getPath(): string {
+ return this.call.getPath();
+ }
+
+ _write(
+ chunk: ResponseType,
+ encoding: string,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ callback: (...args: any[]) => void
+ ) {
+ try {
+ const response = this.call.serializeMessage(chunk);
+
+ if (!this.call.write(response)) {
+ this.call.once('drain', callback);
+ return;
+ }
+ } catch (err) {
+ this.emit('error', {
+ details: getErrorMessage(err),
+ code: Status.INTERNAL,
+ });
+ }
+
+ callback();
+ }
+
+ _final(callback: Function): void {
+ this.call.sendStatus({
+ code: Status.OK,
+ details: 'OK',
+ metadata: this.trailingMetadata,
+ });
+ callback(null);
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ end(metadata?: any) {
+ if (metadata) {
+ this.trailingMetadata = metadata;
+ }
+
+ return super.end();
+ }
+}
+
+export class ServerDuplexStreamImpl<RequestType, ResponseType>
+ extends Duplex
+ implements ServerDuplexStream<RequestType, ResponseType>
+{
+ cancelled: boolean;
+ /* This field appears to be unsued, but it is actually used in _final, which is assiged from
+ * ServerWritableStreamImpl.prototype._final below. */
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore noUnusedLocals
+ private trailingMetadata: Metadata;
+
+ constructor(
+ private call: Http2ServerCallStream<RequestType, ResponseType>,
+ public metadata: Metadata,
+ public serialize: Serialize<ResponseType>,
+ public deserialize: Deserialize<RequestType>,
+ encoding: string
+ ) {
+ super({ objectMode: true });
+ this.cancelled = false;
+ this.trailingMetadata = new Metadata();
+ this.call.setupSurfaceCall(this);
+ this.call.setupReadable(this, encoding);
+
+ this.on('error', err => {
+ this.call.sendError(err);
+ this.end();
+ });
+ }
+
+ getPeer(): string {
+ return this.call.getPeer();
+ }
+
+ sendMetadata(responseMetadata: Metadata): void {
+ this.call.sendMetadata(responseMetadata);
+ }
+
+ getDeadline(): Deadline {
+ return this.call.getDeadline();
+ }
+
+ getPath(): string {
+ return this.call.getPath();
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ end(metadata?: any) {
+ if (metadata) {
+ this.trailingMetadata = metadata;
+ }
+
+ return super.end();
+ }
+}
+
+ServerDuplexStreamImpl.prototype._read =
+ ServerReadableStreamImpl.prototype._read;
+ServerDuplexStreamImpl.prototype._write =
+ ServerWritableStreamImpl.prototype._write;
+ServerDuplexStreamImpl.prototype._final =
+ ServerWritableStreamImpl.prototype._final;
+
+// Unary response callback signature.
+export type sendUnaryData<ResponseType> = (
+ error: ServerErrorResponse | ServerStatusResponse | null,
+ value?: ResponseType | null,
+ trailer?: Metadata,
+ flags?: number
+) => void;
+
+// User provided handler for unary calls.
+export type handleUnaryCall<RequestType, ResponseType> = (
+ call: ServerUnaryCall<RequestType, ResponseType>,
+ callback: sendUnaryData<ResponseType>
+) => void;
+
+// User provided handler for client streaming calls.
+export type handleClientStreamingCall<RequestType, ResponseType> = (
+ call: ServerReadableStream<RequestType, ResponseType>,
+ callback: sendUnaryData<ResponseType>
+) => void;
+
+// User provided handler for server streaming calls.
+export type handleServerStreamingCall<RequestType, ResponseType> = (
+ call: ServerWritableStream<RequestType, ResponseType>
+) => void;
+
+// User provided handler for bidirectional streaming calls.
+export type handleBidiStreamingCall<RequestType, ResponseType> = (
+ call: ServerDuplexStream<RequestType, ResponseType>
+) => void;
+
+export type HandleCall<RequestType, ResponseType> =
+ | handleUnaryCall<RequestType, ResponseType>
+ | handleClientStreamingCall<RequestType, ResponseType>
+ | handleServerStreamingCall<RequestType, ResponseType>
+ | handleBidiStreamingCall<RequestType, ResponseType>;
+
+export interface UnaryHandler<RequestType, ResponseType> {
+ func: handleUnaryCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+
+export interface ClientStreamingHandler<RequestType, ResponseType> {
+ func: handleClientStreamingCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+
+export interface ServerStreamingHandler<RequestType, ResponseType> {
+ func: handleServerStreamingCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+
+export interface BidiStreamingHandler<RequestType, ResponseType> {
+ func: handleBidiStreamingCall<RequestType, ResponseType>;
+ serialize: Serialize<ResponseType>;
+ deserialize: Deserialize<RequestType>;
+ type: HandlerType;
+ path: string;
+}
+
+export type Handler<RequestType, ResponseType> =
+ | UnaryHandler<RequestType, ResponseType>
+ | ClientStreamingHandler<RequestType, ResponseType>
+ | ServerStreamingHandler<RequestType, ResponseType>
+ | BidiStreamingHandler<RequestType, ResponseType>;
+
+export type HandlerType = 'bidi' | 'clientStream' | 'serverStream' | 'unary';
+
+// Internal class that wraps the HTTP2 request.
+export class Http2ServerCallStream<
+ RequestType,
+ ResponseType
+> extends EventEmitter {
+ cancelled = false;
+ deadlineTimer: NodeJS.Timeout | null = null;
+ private statusSent = false;
+ private deadline: Deadline = Infinity;
+ private wantTrailers = false;
+ private metadataSent = false;
+ private canPush = false;
+ private isPushPending = false;
+ private bufferedMessages: Array<Buffer | null> = [];
+ private messagesToPush: Array<RequestType | null> = [];
+ private maxSendMessageSize: number = DEFAULT_MAX_SEND_MESSAGE_LENGTH;
+ private maxReceiveMessageSize: number = DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;
+
+ constructor(
+ private stream: http2.ServerHttp2Stream,
+ private handler: Handler<RequestType, ResponseType>,
+ options: ChannelOptions
+ ) {
+ super();
+
+ this.stream.once('error', (err: ServerErrorResponse) => {
+ /* We need an error handler to avoid uncaught error event exceptions, but
+ * there is nothing we can reasonably do here. Any error event should
+ * have a corresponding close event, which handles emitting the cancelled
+ * event. And the stream is now in a bad state, so we can't reasonably
+ * expect to be able to send an error over it. */
+ });
+
+ this.stream.once('close', () => {
+ trace(
+ 'Request to method ' +
+ this.handler?.path +
+ ' stream closed with rstCode ' +
+ this.stream.rstCode
+ );
+
+ if (!this.statusSent) {
+ this.cancelled = true;
+ this.emit('cancelled', 'cancelled');
+ this.emit('streamEnd', false);
+ this.sendStatus({
+ code: Status.CANCELLED,
+ details: 'Cancelled by client',
+ metadata: null,
+ });
+ if (this.deadlineTimer) clearTimeout(this.deadlineTimer);
+ }
+ });
+
+ this.stream.on('drain', () => {
+ this.emit('drain');
+ });
+
+ if ('grpc.max_send_message_length' in options) {
+ this.maxSendMessageSize = options['grpc.max_send_message_length']!;
+ }
+ if ('grpc.max_receive_message_length' in options) {
+ this.maxReceiveMessageSize = options['grpc.max_receive_message_length']!;
+ }
+ }
+
+ private checkCancelled(): boolean {
+ /* In some cases the stream can become destroyed before the close event
+ * fires. That creates a race condition that this check works around */
+ if (this.stream.destroyed || this.stream.closed) {
+ this.cancelled = true;
+ }
+ return this.cancelled;
+ }
+
+ private getDecompressedMessage(
+ message: Buffer,
+ encoding: string
+ ): Buffer | Promise<Buffer> { const messageContents = message.subarray(5);
+ if (encoding === 'identity') {
+ return messageContents;
+ } else if (encoding === 'deflate' || encoding === 'gzip') {
+ let decompresser: zlib.Gunzip | zlib.Deflate;
+ if (encoding === 'deflate') {
+ decompresser = zlib.createInflate();
+ } else {
+ decompresser = zlib.createGunzip();
+ }
+ return new Promise((resolve, reject) => {
+ let totalLength = 0
+ const messageParts: Buffer[] = [];
+ decompresser.on('data', (chunk: Buffer) => {
+ messageParts.push(chunk);
+ totalLength += chunk.byteLength;
+ if (this.maxReceiveMessageSize !== -1 && totalLength > this.maxReceiveMessageSize) {
+ decompresser.destroy();
+ reject({
+ code: Status.RESOURCE_EXHAUSTED,
+ details: `Received message that decompresses to a size larger than ${this.maxReceiveMessageSize}`
+ });
+ }
+ });
+ decompresser.on('end', () => {
+ resolve(Buffer.concat(messageParts));
+ });
+ decompresser.write(messageContents);
+ decompresser.end();
+ });
+ } else {
+ return Promise.reject({
+ code: Status.UNIMPLEMENTED,
+ details: `Received message compressed with unsupported encoding "${encoding}"`,
+ });
+ }
+ }
+
+ sendMetadata(customMetadata?: Metadata) {
+ if (this.checkCancelled()) {
+ return;
+ }
+
+ if (this.metadataSent) {
+ return;
+ }
+
+ this.metadataSent = true;
+ const custom = customMetadata ? customMetadata.toHttp2Headers() : null;
+ // TODO(cjihrig): Include compression headers.
+ const headers = {
+ ...defaultResponseHeaders,
+ ...defaultCompressionHeaders,
+ ...custom,
+ };
+ this.stream.respond(headers, defaultResponseOptions);
+ }
+
+ receiveMetadata(headers: http2.IncomingHttpHeaders) {
+ const metadata = Metadata.fromHttp2Headers(headers);
+
+ if (logging.isTracerEnabled(TRACER_NAME)) {
+ trace(
+ 'Request to ' +
+ this.handler.path +
+ ' received headers ' +
+ JSON.stringify(metadata.toJSON())
+ );
+ }
+
+ // TODO(cjihrig): Receive compression metadata.
+
+ const timeoutHeader = metadata.get(GRPC_TIMEOUT_HEADER);
+
+ if (timeoutHeader.length > 0) {
+ const match = timeoutHeader[0].toString().match(DEADLINE_REGEX);
+
+ if (match === null) {
+ const err = new Error('Invalid deadline') as ServerErrorResponse;
+ err.code = Status.OUT_OF_RANGE;
+ this.sendError(err);
+ return metadata;
+ }
+
+ const timeout = (+match[1] * deadlineUnitsToMs[match[2]]) | 0;
+
+ const now = new Date();
+ this.deadline = now.setMilliseconds(now.getMilliseconds() + timeout);
+ this.deadlineTimer = setTimeout(handleExpiredDeadline, timeout, this);
+ metadata.remove(GRPC_TIMEOUT_HEADER);
+ }
+
+ // Remove several headers that should not be propagated to the application
+ metadata.remove(http2.constants.HTTP2_HEADER_ACCEPT_ENCODING);
+ metadata.remove(http2.constants.HTTP2_HEADER_TE);
+ metadata.remove(http2.constants.HTTP2_HEADER_CONTENT_TYPE);
+ metadata.remove('grpc-accept-encoding');
+
+ return metadata;
+ }
+
+ receiveUnaryMessage(encoding: string): Promise<RequestType> {
+ return new Promise((resolve, reject) => {
+ const { stream } = this;
+
+ let receivedLength = 0;
+
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
+ const call = this;
+ const body: Buffer[] = [];
+ const limit = this.maxReceiveMessageSize;
+
+ this.stream.on('data', onData);
+ this.stream.on('end', onEnd);
+ this.stream.on('error', onEnd);
+
+ function onData(chunk: Buffer) {
+ receivedLength += chunk.byteLength;
+
+ if (limit !== -1 && receivedLength > limit) {
+ stream.removeListener('data', onData);
+ stream.removeListener('end', onEnd);
+ stream.removeListener('error', onEnd);
+
+ reject({
+ code: Status.RESOURCE_EXHAUSTED,
+ details: `Received message larger than max (${receivedLength} vs. ${limit})`,
+ });
+ return;
+ }
+
+ body.push(chunk);
+ }
+
+ function onEnd(err?: Error) {
+ stream.removeListener('data', onData);
+ stream.removeListener('end', onEnd);
+ stream.removeListener('error', onEnd);
+
+ if (err !== undefined) {
+ reject({ code: Status.INTERNAL, details: err.message });
+ return;
+ }
+
+ if (receivedLength === 0) {
+ reject({
+ code: Status.INTERNAL,
+ details: 'received empty unary message',
+ });
+ return;
+ }
+
+ call.emit('receiveMessage');
+
+ const requestBytes = Buffer.concat(body, receivedLength);
+ const compressed = requestBytes.readUInt8(0) === 1;
+ const compressedMessageEncoding = compressed ? encoding : 'identity';
+ const decompressedMessage = call.getDecompressedMessage(
+ requestBytes,
+ compressedMessageEncoding
+ );
+
+ if (Buffer.isBuffer(decompressedMessage)) {
+ resolve(
+ call.deserializeMessageWithInternalError(decompressedMessage)
+ );
+ return;
+ }
+
+ decompressedMessage.then(
+ decompressed =>
+ resolve(call.deserializeMessageWithInternalError(decompressed)),
+ (err: any) =>
+ reject(
+ err.code
+ ? err
+ : {
+ code: Status.INTERNAL,
+ details: `Received "grpc-encoding" header "${encoding}" but ${encoding} decompression failed`,
+ }
+ )
+ );
+ }
+ });
+ }
+
+ private async deserializeMessageWithInternalError(buffer: Buffer) {
+ try {
+ return this.deserializeMessage(buffer);
+ } catch (err) {
+ throw {
+ details: getErrorMessage(err),
+ code: Status.INTERNAL,
+ };
+ }
+ }
+
+ serializeMessage(value: ResponseType) {
+ const messageBuffer = this.handler.serialize(value);
+
+ // TODO(cjihrig): Call compression aware serializeMessage().
+ const byteLength = messageBuffer.byteLength;
+ const output = Buffer.allocUnsafe(byteLength + 5);
+ output.writeUInt8(0, 0);
+ output.writeUInt32BE(byteLength, 1);
+ messageBuffer.copy(output, 5);
+ return output;
+ }
+
+ deserializeMessage(bytes: Buffer) {
+ return this.handler.deserialize(bytes);
+ }
+
+ async sendUnaryMessage(
+ err: ServerErrorResponse | ServerStatusResponse | null,
+ value?: ResponseType | null,
+ metadata?: Metadata | null,
+ flags?: number
+ ) {
+ if (this.checkCancelled()) {
+ return;
+ }
+
+ if (metadata === undefined) {
+ metadata = null;
+ }
+
+ if (err) {
+ if (!Object.prototype.hasOwnProperty.call(err, 'metadata') && metadata) {
+ err.metadata = metadata;
+ }
+ this.sendError(err);
+ return;
+ }
+
+ try {
+ const response = this.serializeMessage(value!);
+
+ this.write(response);
+ this.sendStatus({ code: Status.OK, details: 'OK', metadata });
+ } catch (err) {
+ this.sendError({
+ details: getErrorMessage(err),
+ code: Status.INTERNAL,
+ });
+ }
+ }
+
+ sendStatus(statusObj: PartialStatusObject) {
+ this.emit('callEnd', statusObj.code);
+ this.emit('streamEnd', statusObj.code === Status.OK);
+ if (this.checkCancelled()) {
+ return;
+ }
+
+ trace(
+ 'Request to method ' +
+ this.handler?.path +
+ ' ended with status code: ' +
+ Status[statusObj.code] +
+ ' details: ' +
+ statusObj.details
+ );
+
+ if (this.deadlineTimer) clearTimeout(this.deadlineTimer);
+
+ if (this.stream.headersSent) {
+ if (!this.wantTrailers) {
+ this.wantTrailers = true;
+ this.stream.once('wantTrailers', () => {
+ const trailersToSend = {
+ [GRPC_STATUS_HEADER]: statusObj.code,
+ [GRPC_MESSAGE_HEADER]: encodeURI(statusObj.details),
+ ...statusObj.metadata?.toHttp2Headers(),
+ };
+
+ this.stream.sendTrailers(trailersToSend);
+ this.statusSent = true;
+ });
+ this.stream.end();
+ }
+ } else {
+ // Trailers-only response
+ const trailersToSend = {
+ [GRPC_STATUS_HEADER]: statusObj.code,
+ [GRPC_MESSAGE_HEADER]: encodeURI(statusObj.details),
+ ...defaultResponseHeaders,
+ ...statusObj.metadata?.toHttp2Headers(),
+ };
+ this.stream.respond(trailersToSend, { endStream: true });
+ this.statusSent = true;
+ }
+ }
+
+ sendError(error: ServerErrorResponse | ServerStatusResponse) {
+ const status: PartialStatusObject = {
+ code: Status.UNKNOWN,
+ details: 'message' in error ? error.message : 'Unknown Error',
+ metadata:
+ 'metadata' in error && error.metadata !== undefined
+ ? error.metadata
+ : null,
+ };
+
+ if (
+ 'code' in error &&
+ typeof error.code === 'number' &&
+ Number.isInteger(error.code)
+ ) {
+ status.code = error.code;
+
+ if ('details' in error && typeof error.details === 'string') {
+ status.details = error.details!;
+ }
+ }
+
+ this.sendStatus(status);
+ }
+
+ write(chunk: Buffer) {
+ if (this.checkCancelled()) {
+ return;
+ }
+
+ if (
+ this.maxSendMessageSize !== -1 &&
+ chunk.length > this.maxSendMessageSize
+ ) {
+ this.sendError({
+ code: Status.RESOURCE_EXHAUSTED,
+ details: `Sent message larger than max (${chunk.length} vs. ${this.maxSendMessageSize})`,
+ });
+ return;
+ }
+
+ this.sendMetadata();
+ this.emit('sendMessage');
+ return this.stream.write(chunk);
+ }
+
+ resume() {
+ this.stream.resume();
+ }
+
+ setupSurfaceCall(call: ServerSurfaceCall) {
+ this.once('cancelled', reason => {
+ call.cancelled = true;
+ call.emit('cancelled', reason);
+ });
+
+ this.once('callEnd', status => call.emit('callEnd', status));
+ }
+
+ setupReadable(
+ readable:
+ | ServerReadableStream<RequestType, ResponseType>
+ | ServerDuplexStream<RequestType, ResponseType>,
+ encoding: string
+ ) {
+ const decoder = new StreamDecoder(this.maxReceiveMessageSize);
+
+ let readsDone = false;
+
+ let pendingMessageProcessing = false;
+
+ let pushedEnd = false;
+
+ const maybePushEnd = async () => {
+ if (!pushedEnd && readsDone && !pendingMessageProcessing) {
+ pushedEnd = true;
+ await this.pushOrBufferMessage(readable, null);
+ }
+ };
+
+ this.stream.on('data', async (data: Buffer) => {
+ let messages: Buffer[];
+ try {
+ messages = decoder.write(data);
+ } catch (e) {
+ this.sendError({
+ code: Status.RESOURCE_EXHAUSTED,
+ details: (e as Error).message
+ });
+ return;
+ }
+
+ pendingMessageProcessing = true;
+ this.stream.pause();
+ for (const message of messages) {
+ this.emit('receiveMessage');
+
+ const compressed = message.readUInt8(0) === 1;
+ const compressedMessageEncoding = compressed ? encoding : 'identity';
+ let decompressedMessage: Buffer;
+ try {
+ decompressedMessage = await this.getDecompressedMessage(
+ message,
+ compressedMessageEncoding
+ );
+ } catch (e) {
+ this.sendError(e as Partial<StatusObject>);
+ return;
+ }
+
+ // Encountered an error with decompression; it'll already have been propogated back
+ // Just return early
+ if (!decompressedMessage) return;
+
+ await this.pushOrBufferMessage(readable, decompressedMessage);
+ }
+ pendingMessageProcessing = false;
+ this.stream.resume();
+ await maybePushEnd();
+ });
+
+ this.stream.once('end', async () => {
+ readsDone = true;
+ await maybePushEnd();
+ });
+ }
+
+ consumeUnpushedMessages(
+ readable:
+ | ServerReadableStream<RequestType, ResponseType>
+ | ServerDuplexStream<RequestType, ResponseType>
+ ): boolean {
+ this.canPush = true;
+
+ while (this.messagesToPush.length > 0) {
+ const nextMessage = this.messagesToPush.shift();
+ const canPush = readable.push(nextMessage);
+
+ if (nextMessage === null || canPush === false) {
+ this.canPush = false;
+ break;
+ }
+ }
+
+ return this.canPush;
+ }
+
+ private async pushOrBufferMessage(
+ readable:
+ | ServerReadableStream<RequestType, ResponseType>
+ | ServerDuplexStream<RequestType, ResponseType>,
+ messageBytes: Buffer | null
+ ): Promise<void> {
+ if (this.isPushPending) {
+ this.bufferedMessages.push(messageBytes);
+ } else {
+ await this.pushMessage(readable, messageBytes);
+ }
+ }
+
+ private async pushMessage(
+ readable:
+ | ServerReadableStream<RequestType, ResponseType>
+ | ServerDuplexStream<RequestType, ResponseType>,
+ messageBytes: Buffer | null
+ ) {
+ if (messageBytes === null) {
+ trace('Received end of stream');
+ if (this.canPush) {
+ readable.push(null);
+ } else {
+ this.messagesToPush.push(null);
+ }
+
+ return;
+ }
+
+ trace('Received message of length ' + messageBytes.length);
+
+ this.isPushPending = true;
+
+ try {
+ const deserialized = await this.deserializeMessage(messageBytes);
+
+ if (this.canPush) {
+ if (!readable.push(deserialized)) {
+ this.canPush = false;
+ this.stream.pause();
+ }
+ } else {
+ this.messagesToPush.push(deserialized);
+ }
+ } catch (error) {
+ // Ignore any remaining messages when errors occur.
+ this.bufferedMessages.length = 0;
+ let code = getErrorCode(error);
+ if (code === null || code < Status.OK || code > Status.UNAUTHENTICATED) {
+ code = Status.INTERNAL;
+ }
+
+ readable.emit('error', {
+ details: getErrorMessage(error),
+ code: code,
+ });
+ }
+
+ this.isPushPending = false;
+
+ if (this.bufferedMessages.length > 0) {
+ await this.pushMessage(
+ readable,
+ this.bufferedMessages.shift() as Buffer | null
+ );
+ }
+ }
+
+ getPeer(): string {
+ const socket = this.stream.session?.socket;
+ if (socket?.remoteAddress) {
+ if (socket.remotePort) {
+ return `${socket.remoteAddress}:${socket.remotePort}`;
+ } else {
+ return socket.remoteAddress;
+ }
+ } else {
+ return 'unknown';
+ }
+ }
+
+ getDeadline(): Deadline {
+ return this.deadline;
+ }
+
+ getPath(): string {
+ return this.handler.path;
+ }
+}
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+type UntypedServerCall = Http2ServerCallStream<any, any>;
+
+function handleExpiredDeadline(call: UntypedServerCall) {
+ const err = new Error('Deadline exceeded') as ServerErrorResponse;
+ err.code = Status.DEADLINE_EXCEEDED;
+
+ call.sendError(err);
+ call.cancelled = true;
+ call.emit('cancelled', 'deadline');
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/server-credentials.ts b/frontend-old/node_modules/@grpc/grpc-js/src/server-credentials.ts
new file mode 100644
index 0000000..17ab298
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/server-credentials.ts
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { SecureServerOptions } from 'http2';
+import { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers';
+
+export interface KeyCertPair {
+ private_key: Buffer;
+ cert_chain: Buffer;
+}
+
+export abstract class ServerCredentials {
+ abstract _isSecure(): boolean;
+ abstract _getSettings(): SecureServerOptions | null;
+
+ static createInsecure(): ServerCredentials {
+ return new InsecureServerCredentials();
+ }
+
+ static createSsl(
+ rootCerts: Buffer | null,
+ keyCertPairs: KeyCertPair[],
+ checkClientCertificate = false
+ ): ServerCredentials {
+ if (rootCerts !== null && !Buffer.isBuffer(rootCerts)) {
+ throw new TypeError('rootCerts must be null or a Buffer');
+ }
+
+ if (!Array.isArray(keyCertPairs)) {
+ throw new TypeError('keyCertPairs must be an array');
+ }
+
+ if (typeof checkClientCertificate !== 'boolean') {
+ throw new TypeError('checkClientCertificate must be a boolean');
+ }
+
+ const cert = [];
+ const key = [];
+
+ for (let i = 0; i < keyCertPairs.length; i++) {
+ const pair = keyCertPairs[i];
+
+ if (pair === null || typeof pair !== 'object') {
+ throw new TypeError(`keyCertPair[${i}] must be an object`);
+ }
+
+ if (!Buffer.isBuffer(pair.private_key)) {
+ throw new TypeError(`keyCertPair[${i}].private_key must be a Buffer`);
+ }
+
+ if (!Buffer.isBuffer(pair.cert_chain)) {
+ throw new TypeError(`keyCertPair[${i}].cert_chain must be a Buffer`);
+ }
+
+ cert.push(pair.cert_chain);
+ key.push(pair.private_key);
+ }
+
+ return new SecureServerCredentials({
+ ca: rootCerts || getDefaultRootsData() || undefined,
+ cert,
+ key,
+ requestCert: checkClientCertificate,
+ ciphers: CIPHER_SUITES,
+ });
+ }
+}
+
+class InsecureServerCredentials extends ServerCredentials {
+ _isSecure(): boolean {
+ return false;
+ }
+
+ _getSettings(): null {
+ return null;
+ }
+}
+
+class SecureServerCredentials extends ServerCredentials {
+ private options: SecureServerOptions;
+
+ constructor(options: SecureServerOptions) {
+ super();
+ this.options = options;
+ }
+
+ _isSecure(): boolean {
+ return true;
+ }
+
+ _getSettings(): SecureServerOptions {
+ return this.options;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/server.ts b/frontend-old/node_modules/@grpc/grpc-js/src/server.ts
new file mode 100644
index 0000000..0d8e082
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/server.ts
@@ -0,0 +1,1300 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import * as http2 from 'http2';
+import { AddressInfo } from 'net';
+
+import { ServiceError } from './call';
+import { Status, LogVerbosity } from './constants';
+import { Deserialize, Serialize, ServiceDefinition } from './make-client';
+import { Metadata } from './metadata';
+import {
+ BidiStreamingHandler,
+ ClientStreamingHandler,
+ HandleCall,
+ Handler,
+ HandlerType,
+ Http2ServerCallStream,
+ sendUnaryData,
+ ServerDuplexStream,
+ ServerDuplexStreamImpl,
+ ServerReadableStream,
+ ServerReadableStreamImpl,
+ ServerStreamingHandler,
+ ServerUnaryCall,
+ ServerUnaryCallImpl,
+ ServerWritableStream,
+ ServerWritableStreamImpl,
+ UnaryHandler,
+ ServerErrorResponse,
+ ServerStatusResponse,
+} from './server-call';
+import { ServerCredentials } from './server-credentials';
+import { ChannelOptions } from './channel-options';
+import {
+ createResolver,
+ ResolverListener,
+ mapUriDefaultScheme,
+} from './resolver';
+import * as logging from './logging';
+import {
+ SubchannelAddress,
+ TcpSubchannelAddress,
+ isTcpSubchannelAddress,
+ subchannelAddressToString,
+ stringToSubchannelAddress,
+} from './subchannel-address';
+import { parseUri } from './uri-parser';
+import {
+ ChannelzCallTracker,
+ ChannelzChildrenTracker,
+ ChannelzTrace,
+ registerChannelzServer,
+ registerChannelzSocket,
+ ServerInfo,
+ ServerRef,
+ SocketInfo,
+ SocketRef,
+ TlsInfo,
+ unregisterChannelzRef,
+} from './channelz';
+import { CipherNameAndProtocol, TLSSocket } from 'tls';
+
+const UNLIMITED_CONNECTION_AGE_MS = ~(1 << 31);
+const KEEPALIVE_MAX_TIME_MS = ~(1 << 31);
+const KEEPALIVE_TIMEOUT_MS = 20000;
+
+const { HTTP2_HEADER_PATH } = http2.constants;
+
+const TRACER_NAME = 'server';
+
+interface BindResult {
+ port: number;
+ count: number;
+}
+
+function noop(): void {}
+
+function getUnimplementedStatusResponse(
+ methodName: string
+): Partial<ServiceError> {
+ return {
+ code: Status.UNIMPLEMENTED,
+ details: `The server does not implement the method ${methodName}`,
+ };
+}
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+type UntypedUnaryHandler = UnaryHandler<any, any>;
+type UntypedClientStreamingHandler = ClientStreamingHandler<any, any>;
+type UntypedServerStreamingHandler = ServerStreamingHandler<any, any>;
+type UntypedBidiStreamingHandler = BidiStreamingHandler<any, any>;
+export type UntypedHandleCall = HandleCall<any, any>;
+type UntypedHandler = Handler<any, any>;
+export interface UntypedServiceImplementation {
+ [name: string]: UntypedHandleCall;
+}
+
+function getDefaultHandler(handlerType: HandlerType, methodName: string) {
+ const unimplementedStatusResponse =
+ getUnimplementedStatusResponse(methodName);
+ switch (handlerType) {
+ case 'unary':
+ return (
+ call: ServerUnaryCall<any, any>,
+ callback: sendUnaryData<any>
+ ) => {
+ callback(unimplementedStatusResponse as ServiceError, null);
+ };
+ case 'clientStream':
+ return (
+ call: ServerReadableStream<any, any>,
+ callback: sendUnaryData<any>
+ ) => {
+ callback(unimplementedStatusResponse as ServiceError, null);
+ };
+ case 'serverStream':
+ return (call: ServerWritableStream<any, any>) => {
+ call.emit('error', unimplementedStatusResponse);
+ };
+ case 'bidi':
+ return (call: ServerDuplexStream<any, any>) => {
+ call.emit('error', unimplementedStatusResponse);
+ };
+ default:
+ throw new Error(`Invalid handlerType ${handlerType}`);
+ }
+}
+
+interface ChannelzSessionInfo {
+ ref: SocketRef;
+ streamTracker: ChannelzCallTracker;
+ messagesSent: number;
+ messagesReceived: number;
+ lastMessageSentTimestamp: Date | null;
+ lastMessageReceivedTimestamp: Date | null;
+}
+
+export class Server {
+ private http2ServerList: {
+ server: http2.Http2Server | http2.Http2SecureServer;
+ channelzRef: SocketRef;
+ }[] = [];
+
+ private handlers: Map<string, UntypedHandler> = new Map<
+ string,
+ UntypedHandler
+ >();
+ private sessions = new Map<http2.ServerHttp2Session, ChannelzSessionInfo>();
+ private started = false;
+ private shutdown = false;
+ private options: ChannelOptions;
+ private serverAddressString = 'null';
+
+ // Channelz Info
+ private readonly channelzEnabled: boolean = true;
+ private channelzRef: ServerRef;
+ private channelzTrace = new ChannelzTrace();
+ private callTracker = new ChannelzCallTracker();
+ private listenerChildrenTracker = new ChannelzChildrenTracker();
+ private sessionChildrenTracker = new ChannelzChildrenTracker();
+
+ private readonly maxConnectionAgeMs: number;
+ private readonly maxConnectionAgeGraceMs: number;
+
+ private readonly keepaliveTimeMs: number;
+ private readonly keepaliveTimeoutMs: number;
+
+ constructor(options?: ChannelOptions) {
+ this.options = options ?? {};
+ if (this.options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+ this.channelzRef = registerChannelzServer(
+ () => this.getChannelzInfo(),
+ this.channelzEnabled
+ );
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Server created');
+ }
+ this.maxConnectionAgeMs =
+ this.options['grpc.max_connection_age_ms'] ?? UNLIMITED_CONNECTION_AGE_MS;
+ this.maxConnectionAgeGraceMs =
+ this.options['grpc.max_connection_age_grace_ms'] ??
+ UNLIMITED_CONNECTION_AGE_MS;
+ this.keepaliveTimeMs =
+ this.options['grpc.keepalive_time_ms'] ?? KEEPALIVE_MAX_TIME_MS;
+ this.keepaliveTimeoutMs =
+ this.options['grpc.keepalive_timeout_ms'] ?? KEEPALIVE_TIMEOUT_MS;
+ this.trace('Server constructed');
+ }
+
+ private getChannelzInfo(): ServerInfo {
+ return {
+ trace: this.channelzTrace,
+ callTracker: this.callTracker,
+ listenerChildren: this.listenerChildrenTracker.getChildLists(),
+ sessionChildren: this.sessionChildrenTracker.getChildLists(),
+ };
+ }
+
+ private getChannelzSessionInfoGetter(
+ session: http2.ServerHttp2Session
+ ): () => SocketInfo {
+ return () => {
+ const sessionInfo = this.sessions.get(session)!;
+ const sessionSocket = session.socket;
+ const remoteAddress = sessionSocket.remoteAddress
+ ? stringToSubchannelAddress(
+ sessionSocket.remoteAddress,
+ sessionSocket.remotePort
+ )
+ : null;
+ const localAddress = sessionSocket.localAddress
+ ? stringToSubchannelAddress(
+ sessionSocket.localAddress!,
+ sessionSocket.localPort
+ )
+ : null;
+ let tlsInfo: TlsInfo | null;
+ if (session.encrypted) {
+ const tlsSocket: TLSSocket = sessionSocket as TLSSocket;
+ const cipherInfo: CipherNameAndProtocol & { standardName?: string } =
+ tlsSocket.getCipher();
+ const certificate = tlsSocket.getCertificate();
+ const peerCertificate = tlsSocket.getPeerCertificate();
+ tlsInfo = {
+ cipherSuiteStandardName: cipherInfo.standardName ?? null,
+ cipherSuiteOtherName: cipherInfo.standardName
+ ? null
+ : cipherInfo.name,
+ localCertificate:
+ certificate && 'raw' in certificate ? certificate.raw : null,
+ remoteCertificate:
+ peerCertificate && 'raw' in peerCertificate
+ ? peerCertificate.raw
+ : null,
+ };
+ } else {
+ tlsInfo = null;
+ }
+ const socketInfo: SocketInfo = {
+ remoteAddress: remoteAddress,
+ localAddress: localAddress,
+ security: tlsInfo,
+ remoteName: null,
+ streamsStarted: sessionInfo.streamTracker.callsStarted,
+ streamsSucceeded: sessionInfo.streamTracker.callsSucceeded,
+ streamsFailed: sessionInfo.streamTracker.callsFailed,
+ messagesSent: sessionInfo.messagesSent,
+ messagesReceived: sessionInfo.messagesReceived,
+ keepAlivesSent: 0,
+ lastLocalStreamCreatedTimestamp: null,
+ lastRemoteStreamCreatedTimestamp:
+ sessionInfo.streamTracker.lastCallStartedTimestamp,
+ lastMessageSentTimestamp: sessionInfo.lastMessageSentTimestamp,
+ lastMessageReceivedTimestamp: sessionInfo.lastMessageReceivedTimestamp,
+ localFlowControlWindow: session.state.localWindowSize ?? null,
+ remoteFlowControlWindow: session.state.remoteWindowSize ?? null,
+ };
+ return socketInfo;
+ };
+ }
+
+ private trace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ '(' + this.channelzRef.id + ') ' + text
+ );
+ }
+
+ addProtoService(): never {
+ throw new Error('Not implemented. Use addService() instead');
+ }
+
+ addService(
+ service: ServiceDefinition,
+ implementation: UntypedServiceImplementation
+ ): void {
+ if (
+ service === null ||
+ typeof service !== 'object' ||
+ implementation === null ||
+ typeof implementation !== 'object'
+ ) {
+ throw new Error('addService() requires two objects as arguments');
+ }
+
+ const serviceKeys = Object.keys(service);
+
+ if (serviceKeys.length === 0) {
+ throw new Error('Cannot add an empty service to a server');
+ }
+
+ serviceKeys.forEach(name => {
+ const attrs = service[name];
+ let methodType: HandlerType;
+
+ if (attrs.requestStream) {
+ if (attrs.responseStream) {
+ methodType = 'bidi';
+ } else {
+ methodType = 'clientStream';
+ }
+ } else {
+ if (attrs.responseStream) {
+ methodType = 'serverStream';
+ } else {
+ methodType = 'unary';
+ }
+ }
+
+ let implFn = implementation[name];
+ let impl;
+
+ if (implFn === undefined && typeof attrs.originalName === 'string') {
+ implFn = implementation[attrs.originalName];
+ }
+
+ if (implFn !== undefined) {
+ impl = implFn.bind(implementation);
+ } else {
+ impl = getDefaultHandler(methodType, name);
+ }
+
+ const success = this.register(
+ attrs.path,
+ impl as UntypedHandleCall,
+ attrs.responseSerialize,
+ attrs.requestDeserialize,
+ methodType
+ );
+
+ if (success === false) {
+ throw new Error(`Method handler for ${attrs.path} already provided.`);
+ }
+ });
+ }
+
+ removeService(service: ServiceDefinition): void {
+ if (service === null || typeof service !== 'object') {
+ throw new Error('removeService() requires object as argument');
+ }
+
+ const serviceKeys = Object.keys(service);
+ serviceKeys.forEach(name => {
+ const attrs = service[name];
+ this.unregister(attrs.path);
+ });
+ }
+
+ bind(port: string, creds: ServerCredentials): never {
+ throw new Error('Not implemented. Use bindAsync() instead');
+ }
+
+ bindAsync(
+ port: string,
+ creds: ServerCredentials,
+ callback: (error: Error | null, port: number) => void
+ ): void {
+ if (this.started === true) {
+ throw new Error('server is already started');
+ }
+
+ if (this.shutdown) {
+ throw new Error('bindAsync called after shutdown');
+ }
+
+ if (typeof port !== 'string') {
+ throw new TypeError('port must be a string');
+ }
+
+ if (creds === null || !(creds instanceof ServerCredentials)) {
+ throw new TypeError('creds must be a ServerCredentials object');
+ }
+
+ if (typeof callback !== 'function') {
+ throw new TypeError('callback must be a function');
+ }
+
+ const initialPortUri = parseUri(port);
+ if (initialPortUri === null) {
+ throw new Error(`Could not parse port "${port}"`);
+ }
+ const portUri = mapUriDefaultScheme(initialPortUri);
+ if (portUri === null) {
+ throw new Error(`Could not get a default scheme for port "${port}"`);
+ }
+
+ const serverOptions: http2.ServerOptions = {
+ maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER,
+ };
+ if ('grpc-node.max_session_memory' in this.options) {
+ serverOptions.maxSessionMemory =
+ this.options['grpc-node.max_session_memory'];
+ } else {
+ /* By default, set a very large max session memory limit, to effectively
+ * disable enforcement of the limit. Some testing indicates that Node's
+ * behavior degrades badly when this limit is reached, so we solve that
+ * by disabling the check entirely. */
+ serverOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER;
+ }
+ if ('grpc.max_concurrent_streams' in this.options) {
+ serverOptions.settings = {
+ maxConcurrentStreams: this.options['grpc.max_concurrent_streams'],
+ };
+ }
+
+ const deferredCallback = (error: Error | null, port: number) => {
+ process.nextTick(() => callback(error, port));
+ };
+
+ const setupServer = (): http2.Http2Server | http2.Http2SecureServer => {
+ let http2Server: http2.Http2Server | http2.Http2SecureServer;
+ if (creds._isSecure()) {
+ const secureServerOptions = Object.assign(
+ serverOptions,
+ creds._getSettings()!
+ );
+ secureServerOptions.enableTrace =
+ this.options['grpc-node.tls_enable_trace'] === 1;
+ http2Server = http2.createSecureServer(secureServerOptions);
+ http2Server.on('secureConnection', (socket: TLSSocket) => {
+ /* These errors need to be handled by the user of Http2SecureServer,
+ * according to https://github.com/nodejs/node/issues/35824 */
+ socket.on('error', (e: Error) => {
+ this.trace(
+ 'An incoming TLS connection closed with error: ' + e.message
+ );
+ });
+ });
+ } else {
+ http2Server = http2.createServer(serverOptions);
+ }
+
+ http2Server.setTimeout(0, noop);
+ this._setupHandlers(http2Server);
+ return http2Server;
+ };
+
+ const bindSpecificPort = (
+ addressList: SubchannelAddress[],
+ portNum: number,
+ previousCount: number
+ ): Promise<BindResult> => {
+ if (addressList.length === 0) {
+ return Promise.resolve({ port: portNum, count: previousCount });
+ }
+ return Promise.all(
+ addressList.map(address => {
+ this.trace(
+ 'Attempting to bind ' + subchannelAddressToString(address)
+ );
+ let addr: SubchannelAddress;
+ if (isTcpSubchannelAddress(address)) {
+ addr = {
+ host: (address as TcpSubchannelAddress).host,
+ port: portNum,
+ };
+ } else {
+ addr = address;
+ }
+
+ const http2Server = setupServer();
+ return new Promise<number | Error>((resolve, reject) => {
+ const onError = (err: Error) => {
+ this.trace(
+ 'Failed to bind ' +
+ subchannelAddressToString(address) +
+ ' with error ' +
+ err.message
+ );
+ resolve(err);
+ };
+
+ http2Server.once('error', onError);
+
+ http2Server.listen(addr, () => {
+ if (this.shutdown) {
+ http2Server.close();
+ resolve(new Error('bindAsync failed because server is shutdown'));
+ return;
+ }
+ const boundAddress = http2Server.address()!;
+ let boundSubchannelAddress: SubchannelAddress;
+ if (typeof boundAddress === 'string') {
+ boundSubchannelAddress = {
+ path: boundAddress,
+ };
+ } else {
+ boundSubchannelAddress = {
+ host: boundAddress.address,
+ port: boundAddress.port,
+ };
+ }
+
+ const channelzRef = registerChannelzSocket(
+ subchannelAddressToString(boundSubchannelAddress),
+ () => {
+ return {
+ localAddress: boundSubchannelAddress,
+ remoteAddress: null,
+ security: null,
+ remoteName: null,
+ streamsStarted: 0,
+ streamsSucceeded: 0,
+ streamsFailed: 0,
+ messagesSent: 0,
+ messagesReceived: 0,
+ keepAlivesSent: 0,
+ lastLocalStreamCreatedTimestamp: null,
+ lastRemoteStreamCreatedTimestamp: null,
+ lastMessageSentTimestamp: null,
+ lastMessageReceivedTimestamp: null,
+ localFlowControlWindow: null,
+ remoteFlowControlWindow: null,
+ };
+ },
+ this.channelzEnabled
+ );
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.refChild(channelzRef);
+ }
+ this.http2ServerList.push({
+ server: http2Server,
+ channelzRef: channelzRef,
+ });
+ this.trace(
+ 'Successfully bound ' +
+ subchannelAddressToString(boundSubchannelAddress)
+ );
+ resolve(
+ 'port' in boundSubchannelAddress
+ ? boundSubchannelAddress.port
+ : portNum
+ );
+ http2Server.removeListener('error', onError);
+ });
+ });
+ })
+ ).then(results => {
+ let count = 0;
+ for (const result of results) {
+ if (typeof result === 'number') {
+ count += 1;
+ if (result !== portNum) {
+ throw new Error(
+ 'Invalid state: multiple port numbers added from single address'
+ );
+ }
+ }
+ }
+ return {
+ port: portNum,
+ count: count + previousCount,
+ };
+ });
+ };
+
+ const bindWildcardPort = (
+ addressList: SubchannelAddress[]
+ ): Promise<BindResult> => {
+ if (addressList.length === 0) {
+ return Promise.resolve<BindResult>({ port: 0, count: 0 });
+ }
+ const address = addressList[0];
+ const http2Server = setupServer();
+ return new Promise<BindResult>((resolve, reject) => {
+ const onError = (err: Error) => {
+ this.trace(
+ 'Failed to bind ' +
+ subchannelAddressToString(address) +
+ ' with error ' +
+ err.message
+ );
+ resolve(bindWildcardPort(addressList.slice(1)));
+ };
+
+ http2Server.once('error', onError);
+
+ http2Server.listen(address, () => {
+ if (this.shutdown) {
+ http2Server.close();
+ resolve({port: 0, count: 0});
+ return;
+ }
+ const boundAddress = http2Server.address() as AddressInfo;
+ const boundSubchannelAddress: SubchannelAddress = {
+ host: boundAddress.address,
+ port: boundAddress.port,
+ };
+ const channelzRef = registerChannelzSocket(
+ subchannelAddressToString(boundSubchannelAddress),
+ () => {
+ return {
+ localAddress: boundSubchannelAddress,
+ remoteAddress: null,
+ security: null,
+ remoteName: null,
+ streamsStarted: 0,
+ streamsSucceeded: 0,
+ streamsFailed: 0,
+ messagesSent: 0,
+ messagesReceived: 0,
+ keepAlivesSent: 0,
+ lastLocalStreamCreatedTimestamp: null,
+ lastRemoteStreamCreatedTimestamp: null,
+ lastMessageSentTimestamp: null,
+ lastMessageReceivedTimestamp: null,
+ localFlowControlWindow: null,
+ remoteFlowControlWindow: null,
+ };
+ },
+ this.channelzEnabled
+ );
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.refChild(channelzRef);
+ }
+ this.http2ServerList.push({
+ server: http2Server,
+ channelzRef: channelzRef,
+ });
+ this.trace(
+ 'Successfully bound ' +
+ subchannelAddressToString(boundSubchannelAddress)
+ );
+ resolve(bindSpecificPort(addressList.slice(1), boundAddress.port, 1));
+ http2Server.removeListener('error', onError);
+ });
+ });
+ };
+
+ const resolverListener: ResolverListener = {
+ onSuccessfulResolution: (
+ addressList,
+ serviceConfig,
+ serviceConfigError
+ ) => {
+ // We only want one resolution result. Discard all future results
+ resolverListener.onSuccessfulResolution = () => {};
+ if (this.shutdown) {
+ deferredCallback(
+ new Error(`bindAsync failed because server is shutdown`),
+ 0
+ );
+ }
+ if (addressList.length === 0) {
+ deferredCallback(
+ new Error(`No addresses resolved for port ${port}`),
+ 0
+ );
+ return;
+ }
+ let bindResultPromise: Promise<BindResult>;
+ if (isTcpSubchannelAddress(addressList[0])) {
+ if (addressList[0].port === 0) {
+ bindResultPromise = bindWildcardPort(addressList);
+ } else {
+ bindResultPromise = bindSpecificPort(
+ addressList,
+ addressList[0].port,
+ 0
+ );
+ }
+ } else {
+ // Use an arbitrary non-zero port for non-TCP addresses
+ bindResultPromise = bindSpecificPort(addressList, 1, 0);
+ }
+ bindResultPromise.then(
+ bindResult => {
+ if (bindResult.count === 0) {
+ const errorString = `No address added out of total ${addressList.length} resolved`;
+ logging.log(LogVerbosity.ERROR, errorString);
+ deferredCallback(new Error(errorString), 0);
+ } else {
+ if (bindResult.count < addressList.length) {
+ logging.log(
+ LogVerbosity.INFO,
+ `WARNING Only ${bindResult.count} addresses added out of total ${addressList.length} resolved`
+ );
+ }
+ deferredCallback(null, bindResult.port);
+ }
+ },
+ error => {
+ const errorString = `No address added out of total ${addressList.length} resolved`;
+ logging.log(LogVerbosity.ERROR, errorString);
+ deferredCallback(new Error(errorString), 0);
+ }
+ );
+ },
+ onError: error => {
+ deferredCallback(new Error(error.details), 0);
+ },
+ };
+
+ const resolver = createResolver(portUri, resolverListener, this.options);
+ resolver.updateResolution();
+ }
+
+ forceShutdown(): void {
+ // Close the server if it is still running.
+
+ for (const { server: http2Server, channelzRef: ref } of this
+ .http2ServerList) {
+ if (http2Server.listening) {
+ http2Server.close(() => {
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.unrefChild(ref);
+ unregisterChannelzRef(ref);
+ }
+ });
+ }
+ }
+
+ this.started = false;
+ this.shutdown = true;
+
+ // Always destroy any available sessions. It's possible that one or more
+ // tryShutdown() calls are in progress. Don't wait on them to finish.
+ this.sessions.forEach((channelzInfo, session) => {
+ // Cast NGHTTP2_CANCEL to any because TypeScript doesn't seem to
+ // recognize destroy(code) as a valid signature.
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ session.destroy(http2.constants.NGHTTP2_CANCEL as any);
+ });
+ this.sessions.clear();
+ if (this.channelzEnabled) {
+ unregisterChannelzRef(this.channelzRef);
+ }
+ }
+
+ register<RequestType, ResponseType>(
+ name: string,
+ handler: HandleCall<RequestType, ResponseType>,
+ serialize: Serialize<ResponseType>,
+ deserialize: Deserialize<RequestType>,
+ type: string
+ ): boolean {
+ if (this.handlers.has(name)) {
+ return false;
+ }
+
+ this.handlers.set(name, {
+ func: handler,
+ serialize,
+ deserialize,
+ type,
+ path: name,
+ } as UntypedHandler);
+ return true;
+ }
+
+ unregister(name: string): boolean {
+ return this.handlers.delete(name);
+ }
+
+ start(): void {
+ if (
+ this.http2ServerList.length === 0 ||
+ this.http2ServerList.every(
+ ({ server: http2Server }) => http2Server.listening !== true
+ )
+ ) {
+ throw new Error('server must be bound in order to start');
+ }
+
+ if (this.started === true) {
+ throw new Error('server is already started');
+ }
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Starting');
+ }
+ this.started = true;
+ }
+
+ tryShutdown(callback: (error?: Error) => void): void {
+ const wrappedCallback = (error?: Error) => {
+ if (this.channelzEnabled) {
+ unregisterChannelzRef(this.channelzRef);
+ }
+ callback(error);
+ };
+ let pendingChecks = 0;
+
+ function maybeCallback(): void {
+ pendingChecks--;
+
+ if (pendingChecks === 0) {
+ wrappedCallback();
+ }
+ }
+
+ // Close the server if necessary.
+ this.started = false;
+ this.shutdown = true;
+
+ for (const { server: http2Server, channelzRef: ref } of this
+ .http2ServerList) {
+ if (http2Server.listening) {
+ pendingChecks++;
+ http2Server.close(() => {
+ if (this.channelzEnabled) {
+ this.listenerChildrenTracker.unrefChild(ref);
+ unregisterChannelzRef(ref);
+ }
+ maybeCallback();
+ });
+ }
+ }
+
+ this.sessions.forEach((channelzInfo, session) => {
+ if (!session.closed) {
+ pendingChecks += 1;
+ session.close(maybeCallback);
+ }
+ });
+ if (pendingChecks === 0) {
+ wrappedCallback();
+ }
+ }
+
+ addHttp2Port(): never {
+ throw new Error('Not yet implemented');
+ }
+
+ /**
+ * Get the channelz reference object for this server. The returned value is
+ * garbage if channelz is disabled for this server.
+ * @returns
+ */
+ getChannelzRef() {
+ return this.channelzRef;
+ }
+
+ private _verifyContentType(
+ stream: http2.ServerHttp2Stream,
+ headers: http2.IncomingHttpHeaders
+ ): boolean {
+ const contentType = headers[http2.constants.HTTP2_HEADER_CONTENT_TYPE];
+
+ if (
+ typeof contentType !== 'string' ||
+ !contentType.startsWith('application/grpc')
+ ) {
+ stream.respond(
+ {
+ [http2.constants.HTTP2_HEADER_STATUS]:
+ http2.constants.HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
+ },
+ { endStream: true }
+ );
+ return false;
+ }
+
+ return true;
+ }
+
+ private _retrieveHandler(path: string): Handler<any, any> | null {
+ this.trace(
+ 'Received call to method ' +
+ path +
+ ' at address ' +
+ this.serverAddressString
+ );
+
+ const handler = this.handlers.get(path);
+
+ if (handler === undefined) {
+ this.trace(
+ 'No handler registered for method ' +
+ path +
+ '. Sending UNIMPLEMENTED status.'
+ );
+ return null;
+ }
+
+ return handler;
+ }
+
+ private _respondWithError<T extends Partial<ServiceError>>(
+ err: T,
+ stream: http2.ServerHttp2Stream,
+ channelzSessionInfo: ChannelzSessionInfo | null = null
+ ) {
+ const call = new Http2ServerCallStream(stream, null!, this.options);
+
+ if (err.code === undefined) {
+ err.code = Status.INTERNAL;
+ }
+
+ if (this.channelzEnabled) {
+ this.callTracker.addCallFailed();
+ channelzSessionInfo?.streamTracker.addCallFailed();
+ }
+
+ call.sendError(err);
+ }
+
+ private _channelzHandler(
+ stream: http2.ServerHttp2Stream,
+ headers: http2.IncomingHttpHeaders
+ ) {
+ const channelzSessionInfo = this.sessions.get(
+ stream.session as http2.ServerHttp2Session
+ );
+
+ this.callTracker.addCallStarted();
+ channelzSessionInfo?.streamTracker.addCallStarted();
+
+ if (!this._verifyContentType(stream, headers)) {
+ this.callTracker.addCallFailed();
+ channelzSessionInfo?.streamTracker.addCallFailed();
+ return;
+ }
+
+ const path = headers[HTTP2_HEADER_PATH] as string;
+
+ const handler = this._retrieveHandler(path);
+ if (!handler) {
+ this._respondWithError(
+ getUnimplementedStatusResponse(path),
+ stream,
+ channelzSessionInfo
+ );
+ return;
+ }
+
+ const call = new Http2ServerCallStream(stream, handler, this.options);
+
+ call.once('callEnd', (code: Status) => {
+ if (code === Status.OK) {
+ this.callTracker.addCallSucceeded();
+ } else {
+ this.callTracker.addCallFailed();
+ }
+ });
+
+ if (channelzSessionInfo) {
+ call.once('streamEnd', (success: boolean) => {
+ if (success) {
+ channelzSessionInfo.streamTracker.addCallSucceeded();
+ } else {
+ channelzSessionInfo.streamTracker.addCallFailed();
+ }
+ });
+ call.on('sendMessage', () => {
+ channelzSessionInfo.messagesSent += 1;
+ channelzSessionInfo.lastMessageSentTimestamp = new Date();
+ });
+ call.on('receiveMessage', () => {
+ channelzSessionInfo.messagesReceived += 1;
+ channelzSessionInfo.lastMessageReceivedTimestamp = new Date();
+ });
+ }
+
+ if (!this._runHandlerForCall(call, handler, headers)) {
+ this.callTracker.addCallFailed();
+ channelzSessionInfo?.streamTracker.addCallFailed();
+
+ call.sendError({
+ code: Status.INTERNAL,
+ details: `Unknown handler type: ${handler.type}`,
+ });
+ }
+ }
+
+ private _streamHandler(
+ stream: http2.ServerHttp2Stream,
+ headers: http2.IncomingHttpHeaders
+ ) {
+ if (this._verifyContentType(stream, headers) !== true) {
+ return;
+ }
+
+ const path = headers[HTTP2_HEADER_PATH] as string;
+
+ const handler = this._retrieveHandler(path);
+ if (!handler) {
+ this._respondWithError(
+ getUnimplementedStatusResponse(path),
+ stream,
+ null
+ );
+ return;
+ }
+
+ const call = new Http2ServerCallStream(stream, handler, this.options);
+ if (!this._runHandlerForCall(call, handler, headers)) {
+ call.sendError({
+ code: Status.INTERNAL,
+ details: `Unknown handler type: ${handler.type}`,
+ });
+ }
+ }
+
+ private _runHandlerForCall(
+ call: Http2ServerCallStream<any, any>,
+ handler: Handler<any, any>,
+ headers: http2.IncomingHttpHeaders
+ ): boolean {
+ const metadata = call.receiveMetadata(headers);
+ const encoding =
+ (metadata.get('grpc-encoding')[0] as string | undefined) ?? 'identity';
+ metadata.remove('grpc-encoding');
+
+ const { type } = handler;
+ if (type === 'unary') {
+ handleUnary(call, handler as UntypedUnaryHandler, metadata, encoding);
+ } else if (type === 'clientStream') {
+ handleClientStreaming(
+ call,
+ handler as UntypedClientStreamingHandler,
+ metadata,
+ encoding
+ );
+ } else if (type === 'serverStream') {
+ handleServerStreaming(
+ call,
+ handler as UntypedServerStreamingHandler,
+ metadata,
+ encoding
+ );
+ } else if (type === 'bidi') {
+ handleBidiStreaming(
+ call,
+ handler as UntypedBidiStreamingHandler,
+ metadata,
+ encoding
+ );
+ } else {
+ return false;
+ }
+
+ return true;
+ }
+
+ private _setupHandlers(
+ http2Server: http2.Http2Server | http2.Http2SecureServer
+ ): void {
+ if (http2Server === null) {
+ return;
+ }
+
+ const serverAddress = http2Server.address();
+ let serverAddressString = 'null';
+ if (serverAddress) {
+ if (typeof serverAddress === 'string') {
+ serverAddressString = serverAddress;
+ } else {
+ serverAddressString = serverAddress.address + ':' + serverAddress.port;
+ }
+ }
+ this.serverAddressString = serverAddressString;
+
+ const handler = this.channelzEnabled
+ ? this._channelzHandler
+ : this._streamHandler;
+
+ http2Server.on('stream', handler.bind(this));
+ http2Server.on('session', session => {
+ if (!this.started) {
+ session.destroy();
+ return;
+ }
+
+ const channelzRef = registerChannelzSocket(
+ session.socket.remoteAddress ?? 'unknown',
+ this.getChannelzSessionInfoGetter(session),
+ this.channelzEnabled
+ );
+
+ const channelzSessionInfo: ChannelzSessionInfo = {
+ ref: channelzRef,
+ streamTracker: new ChannelzCallTracker(),
+ messagesSent: 0,
+ messagesReceived: 0,
+ lastMessageSentTimestamp: null,
+ lastMessageReceivedTimestamp: null,
+ };
+
+ this.sessions.set(session, channelzSessionInfo);
+ const clientAddress = session.socket.remoteAddress;
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Connection established by client ' + clientAddress
+ );
+ this.sessionChildrenTracker.refChild(channelzRef);
+ }
+ let connectionAgeTimer: NodeJS.Timeout | null = null;
+ let connectionAgeGraceTimer: NodeJS.Timeout | null = null;
+ let sessionClosedByServer = false;
+ if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) {
+ // Apply a random jitter within a +/-10% range
+ const jitterMagnitude = this.maxConnectionAgeMs / 10;
+ const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude;
+ connectionAgeTimer = setTimeout(() => {
+ sessionClosedByServer = true;
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Connection dropped by max connection age from ' + clientAddress
+ );
+ }
+ try {
+ session.goaway(
+ http2.constants.NGHTTP2_NO_ERROR,
+ ~(1 << 31),
+ Buffer.from('max_age')
+ );
+ } catch (e) {
+ // The goaway can't be sent because the session is already closed
+ session.destroy();
+ return;
+ }
+ session.close();
+ /* Allow a grace period after sending the GOAWAY before forcibly
+ * closing the connection. */
+ if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) {
+ connectionAgeGraceTimer = setTimeout(() => {
+ session.destroy();
+ }, this.maxConnectionAgeGraceMs).unref?.();
+ }
+ }, this.maxConnectionAgeMs + jitter).unref?.();
+ }
+ const keeapliveTimeTimer: NodeJS.Timeout | null = setInterval(() => {
+ const timeoutTImer = setTimeout(() => {
+ sessionClosedByServer = true;
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Connection dropped by keepalive timeout from ' + clientAddress
+ );
+ }
+ session.close();
+ }, this.keepaliveTimeoutMs).unref?.();
+ try {
+ session.ping(
+ (err: Error | null, duration: number, payload: Buffer) => {
+ clearTimeout(timeoutTImer);
+ }
+ );
+ } catch (e) {
+ // The ping can't be sent because the session is already closed
+ session.destroy();
+ }
+ }, this.keepaliveTimeMs).unref?.();
+ session.on('close', () => {
+ if (this.channelzEnabled) {
+ if (!sessionClosedByServer) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Connection dropped by client ' + clientAddress
+ );
+ }
+ this.sessionChildrenTracker.unrefChild(channelzRef);
+ unregisterChannelzRef(channelzRef);
+ }
+ if (connectionAgeTimer) {
+ clearTimeout(connectionAgeTimer);
+ }
+ if (connectionAgeGraceTimer) {
+ clearTimeout(connectionAgeGraceTimer);
+ }
+ if (keeapliveTimeTimer) {
+ clearTimeout(keeapliveTimeTimer);
+ }
+ this.sessions.delete(session);
+ });
+ });
+ }
+}
+
+async function handleUnary<RequestType, ResponseType>(
+ call: Http2ServerCallStream<RequestType, ResponseType>,
+ handler: UnaryHandler<RequestType, ResponseType>,
+ metadata: Metadata,
+ encoding: string
+): Promise<void> {
+ try {
+ const request = await call.receiveUnaryMessage(encoding);
+
+ if (request === undefined || call.cancelled) {
+ return;
+ }
+
+ const emitter = new ServerUnaryCallImpl<RequestType, ResponseType>(
+ call,
+ metadata,
+ request
+ );
+
+ handler.func(
+ emitter,
+ (
+ err: ServerErrorResponse | ServerStatusResponse | null,
+ value?: ResponseType | null,
+ trailer?: Metadata,
+ flags?: number
+ ) => {
+ call.sendUnaryMessage(err, value, trailer, flags);
+ }
+ );
+ } catch (err) {
+ call.sendError(err as ServerErrorResponse);
+ }
+}
+
+function handleClientStreaming<RequestType, ResponseType>(
+ call: Http2ServerCallStream<RequestType, ResponseType>,
+ handler: ClientStreamingHandler<RequestType, ResponseType>,
+ metadata: Metadata,
+ encoding: string
+): void {
+ const stream = new ServerReadableStreamImpl<RequestType, ResponseType>(
+ call,
+ metadata,
+ handler.deserialize,
+ encoding
+ );
+
+ function respond(
+ err: ServerErrorResponse | ServerStatusResponse | null,
+ value?: ResponseType | null,
+ trailer?: Metadata,
+ flags?: number
+ ) {
+ stream.destroy();
+ call.sendUnaryMessage(err, value, trailer, flags);
+ }
+
+ if (call.cancelled) {
+ return;
+ }
+
+ stream.on('error', respond);
+ handler.func(stream, respond);
+}
+
+async function handleServerStreaming<RequestType, ResponseType>(
+ call: Http2ServerCallStream<RequestType, ResponseType>,
+ handler: ServerStreamingHandler<RequestType, ResponseType>,
+ metadata: Metadata,
+ encoding: string
+): Promise<void> {
+ try {
+ const request = await call.receiveUnaryMessage(encoding);
+
+ if (request === undefined || call.cancelled) {
+ return;
+ }
+
+ const stream = new ServerWritableStreamImpl<RequestType, ResponseType>(
+ call,
+ metadata,
+ handler.serialize,
+ request
+ );
+
+ handler.func(stream);
+ } catch (err) {
+ call.sendError(err as ServerErrorResponse);
+ }
+}
+
+function handleBidiStreaming<RequestType, ResponseType>(
+ call: Http2ServerCallStream<RequestType, ResponseType>,
+ handler: BidiStreamingHandler<RequestType, ResponseType>,
+ metadata: Metadata,
+ encoding: string
+): void {
+ const stream = new ServerDuplexStreamImpl<RequestType, ResponseType>(
+ call,
+ metadata,
+ handler.serialize,
+ handler.deserialize,
+ encoding
+ );
+
+ if (call.cancelled) {
+ return;
+ }
+
+ handler.func(stream);
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/service-config.ts b/frontend-old/node_modules/@grpc/grpc-js/src/service-config.ts
new file mode 100644
index 0000000..aece7cb
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/service-config.ts
@@ -0,0 +1,542 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/* This file implements gRFC A2 and the service config spec:
+ * https://github.com/grpc/proposal/blob/master/A2-service-configs-in-dns.md
+ * https://github.com/grpc/grpc/blob/master/doc/service_config.md. Each
+ * function here takes an object with unknown structure and returns its
+ * specific object type if the input has the right structure, and throws an
+ * error otherwise. */
+
+/* The any type is purposely used here. All functions validate their input at
+ * runtime */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+import * as os from 'os';
+import { Status } from './constants';
+import { Duration } from './duration';
+import {
+ LoadBalancingConfig,
+ validateLoadBalancingConfig,
+} from './load-balancer';
+
+export interface MethodConfigName {
+ service?: string;
+ method?: string;
+}
+
+export interface RetryPolicy {
+ maxAttempts: number;
+ initialBackoff: string;
+ maxBackoff: string;
+ backoffMultiplier: number;
+ retryableStatusCodes: (Status | string)[];
+}
+
+export interface HedgingPolicy {
+ maxAttempts: number;
+ hedgingDelay?: string;
+ nonFatalStatusCodes?: (Status | string)[];
+}
+
+export interface MethodConfig {
+ name: MethodConfigName[];
+ waitForReady?: boolean;
+ timeout?: Duration;
+ maxRequestBytes?: number;
+ maxResponseBytes?: number;
+ retryPolicy?: RetryPolicy;
+ hedgingPolicy?: HedgingPolicy;
+}
+
+export interface RetryThrottling {
+ maxTokens: number;
+ tokenRatio: number;
+}
+
+export interface ServiceConfig {
+ loadBalancingPolicy?: string;
+ loadBalancingConfig: LoadBalancingConfig[];
+ methodConfig: MethodConfig[];
+ retryThrottling?: RetryThrottling;
+}
+
+export interface ServiceConfigCanaryConfig {
+ clientLanguage?: string[];
+ percentage?: number;
+ clientHostname?: string[];
+ serviceConfig: ServiceConfig;
+}
+
+/**
+ * Recognizes a number with up to 9 digits after the decimal point, followed by
+ * an "s", representing a number of seconds.
+ */
+const DURATION_REGEX = /^\d+(\.\d{1,9})?s$/;
+
+/**
+ * Client language name used for determining whether this client matches a
+ * `ServiceConfigCanaryConfig`'s `clientLanguage` list.
+ */
+const CLIENT_LANGUAGE_STRING = 'node';
+
+function validateName(obj: any): MethodConfigName {
+ // In this context, and unset field and '' are considered the same
+ if ('service' in obj && obj.service !== '') {
+ if (typeof obj.service !== 'string') {
+ throw new Error(
+ `Invalid method config name: invalid service: expected type string, got ${typeof obj.service}`
+ );
+ }
+ if ('method' in obj && obj.method !== '') {
+ if (typeof obj.method !== 'string') {
+ throw new Error(
+ `Invalid method config name: invalid method: expected type string, got ${typeof obj.service}`
+ );
+ }
+ return {
+ service: obj.service,
+ method: obj.method,
+ };
+ } else {
+ return {
+ service: obj.service,
+ };
+ }
+ } else {
+ if ('method' in obj && obj.method !== undefined) {
+ throw new Error(
+ `Invalid method config name: method set with empty or unset service`
+ );
+ }
+ return {};
+ }
+}
+
+function validateRetryPolicy(obj: any): RetryPolicy {
+ if (
+ !('maxAttempts' in obj) ||
+ !Number.isInteger(obj.maxAttempts) ||
+ obj.maxAttempts < 2
+ ) {
+ throw new Error(
+ 'Invalid method config retry policy: maxAttempts must be an integer at least 2'
+ );
+ }
+ if (
+ !('initialBackoff' in obj) ||
+ typeof obj.initialBackoff !== 'string' ||
+ !DURATION_REGEX.test(obj.initialBackoff)
+ ) {
+ throw new Error(
+ 'Invalid method config retry policy: initialBackoff must be a string consisting of a positive integer followed by s'
+ );
+ }
+ if (
+ !('maxBackoff' in obj) ||
+ typeof obj.maxBackoff !== 'string' ||
+ !DURATION_REGEX.test(obj.maxBackoff)
+ ) {
+ throw new Error(
+ 'Invalid method config retry policy: maxBackoff must be a string consisting of a positive integer followed by s'
+ );
+ }
+ if (
+ !('backoffMultiplier' in obj) ||
+ typeof obj.backoffMultiplier !== 'number' ||
+ obj.backoffMultiplier <= 0
+ ) {
+ throw new Error(
+ 'Invalid method config retry policy: backoffMultiplier must be a number greater than 0'
+ );
+ }
+ if (
+ !('retryableStatusCodes' in obj && Array.isArray(obj.retryableStatusCodes))
+ ) {
+ throw new Error(
+ 'Invalid method config retry policy: retryableStatusCodes is required'
+ );
+ }
+ if (obj.retryableStatusCodes.length === 0) {
+ throw new Error(
+ 'Invalid method config retry policy: retryableStatusCodes must be non-empty'
+ );
+ }
+ for (const value of obj.retryableStatusCodes) {
+ if (typeof value === 'number') {
+ if (!Object.values(Status).includes(value)) {
+ throw new Error(
+ 'Invalid method config retry policy: retryableStatusCodes value not in status code range'
+ );
+ }
+ } else if (typeof value === 'string') {
+ if (!Object.values(Status).includes(value.toUpperCase())) {
+ throw new Error(
+ 'Invalid method config retry policy: retryableStatusCodes value not a status code name'
+ );
+ }
+ } else {
+ throw new Error(
+ 'Invalid method config retry policy: retryableStatusCodes value must be a string or number'
+ );
+ }
+ }
+ return {
+ maxAttempts: obj.maxAttempts,
+ initialBackoff: obj.initialBackoff,
+ maxBackoff: obj.maxBackoff,
+ backoffMultiplier: obj.backoffMultiplier,
+ retryableStatusCodes: obj.retryableStatusCodes,
+ };
+}
+
+function validateHedgingPolicy(obj: any): HedgingPolicy {
+ if (
+ !('maxAttempts' in obj) ||
+ !Number.isInteger(obj.maxAttempts) ||
+ obj.maxAttempts < 2
+ ) {
+ throw new Error(
+ 'Invalid method config hedging policy: maxAttempts must be an integer at least 2'
+ );
+ }
+ if (
+ 'hedgingDelay' in obj &&
+ (typeof obj.hedgingDelay !== 'string' ||
+ !DURATION_REGEX.test(obj.hedgingDelay))
+ ) {
+ throw new Error(
+ 'Invalid method config hedging policy: hedgingDelay must be a string consisting of a positive integer followed by s'
+ );
+ }
+ if ('nonFatalStatusCodes' in obj && Array.isArray(obj.nonFatalStatusCodes)) {
+ for (const value of obj.nonFatalStatusCodes) {
+ if (typeof value === 'number') {
+ if (!Object.values(Status).includes(value)) {
+ throw new Error(
+ 'Invlid method config hedging policy: nonFatalStatusCodes value not in status code range'
+ );
+ }
+ } else if (typeof value === 'string') {
+ if (!Object.values(Status).includes(value.toUpperCase())) {
+ throw new Error(
+ 'Invlid method config hedging policy: nonFatalStatusCodes value not a status code name'
+ );
+ }
+ } else {
+ throw new Error(
+ 'Invlid method config hedging policy: nonFatalStatusCodes value must be a string or number'
+ );
+ }
+ }
+ }
+ const result: HedgingPolicy = {
+ maxAttempts: obj.maxAttempts,
+ };
+ if (obj.hedgingDelay) {
+ result.hedgingDelay = obj.hedgingDelay;
+ }
+ if (obj.nonFatalStatusCodes) {
+ result.nonFatalStatusCodes = obj.nonFatalStatusCodes;
+ }
+ return result;
+}
+
+function validateMethodConfig(obj: any): MethodConfig {
+ const result: MethodConfig = {
+ name: [],
+ };
+ if (!('name' in obj) || !Array.isArray(obj.name)) {
+ throw new Error('Invalid method config: invalid name array');
+ }
+ for (const name of obj.name) {
+ result.name.push(validateName(name));
+ }
+ if ('waitForReady' in obj) {
+ if (typeof obj.waitForReady !== 'boolean') {
+ throw new Error('Invalid method config: invalid waitForReady');
+ }
+ result.waitForReady = obj.waitForReady;
+ }
+ if ('timeout' in obj) {
+ if (typeof obj.timeout === 'object') {
+ if (
+ !('seconds' in obj.timeout) ||
+ !(typeof obj.timeout.seconds === 'number')
+ ) {
+ throw new Error('Invalid method config: invalid timeout.seconds');
+ }
+ if (
+ !('nanos' in obj.timeout) ||
+ !(typeof obj.timeout.nanos === 'number')
+ ) {
+ throw new Error('Invalid method config: invalid timeout.nanos');
+ }
+ result.timeout = obj.timeout;
+ } else if (
+ typeof obj.timeout === 'string' &&
+ DURATION_REGEX.test(obj.timeout)
+ ) {
+ const timeoutParts = obj.timeout
+ .substring(0, obj.timeout.length - 1)
+ .split('.');
+ result.timeout = {
+ seconds: timeoutParts[0] | 0,
+ nanos: (timeoutParts[1] ?? 0) | 0,
+ };
+ } else {
+ throw new Error('Invalid method config: invalid timeout');
+ }
+ }
+ if ('maxRequestBytes' in obj) {
+ if (typeof obj.maxRequestBytes !== 'number') {
+ throw new Error('Invalid method config: invalid maxRequestBytes');
+ }
+ result.maxRequestBytes = obj.maxRequestBytes;
+ }
+ if ('maxResponseBytes' in obj) {
+ if (typeof obj.maxResponseBytes !== 'number') {
+ throw new Error('Invalid method config: invalid maxRequestBytes');
+ }
+ result.maxResponseBytes = obj.maxResponseBytes;
+ }
+ if ('retryPolicy' in obj) {
+ if ('hedgingPolicy' in obj) {
+ throw new Error(
+ 'Invalid method config: retryPolicy and hedgingPolicy cannot both be specified'
+ );
+ } else {
+ result.retryPolicy = validateRetryPolicy(obj.retryPolicy);
+ }
+ } else if ('hedgingPolicy' in obj) {
+ result.hedgingPolicy = validateHedgingPolicy(obj.hedgingPolicy);
+ }
+ return result;
+}
+
+export function validateRetryThrottling(obj: any): RetryThrottling {
+ if (
+ !('maxTokens' in obj) ||
+ typeof obj.maxTokens !== 'number' ||
+ obj.maxTokens <= 0 ||
+ obj.maxTokens > 1000
+ ) {
+ throw new Error(
+ 'Invalid retryThrottling: maxTokens must be a number in (0, 1000]'
+ );
+ }
+ if (
+ !('tokenRatio' in obj) ||
+ typeof obj.tokenRatio !== 'number' ||
+ obj.tokenRatio <= 0
+ ) {
+ throw new Error(
+ 'Invalid retryThrottling: tokenRatio must be a number greater than 0'
+ );
+ }
+ return {
+ maxTokens: +(obj.maxTokens as number).toFixed(3),
+ tokenRatio: +(obj.tokenRatio as number).toFixed(3),
+ };
+}
+
+export function validateServiceConfig(obj: any): ServiceConfig {
+ const result: ServiceConfig = {
+ loadBalancingConfig: [],
+ methodConfig: [],
+ };
+ if ('loadBalancingPolicy' in obj) {
+ if (typeof obj.loadBalancingPolicy === 'string') {
+ result.loadBalancingPolicy = obj.loadBalancingPolicy;
+ } else {
+ throw new Error('Invalid service config: invalid loadBalancingPolicy');
+ }
+ }
+ if ('loadBalancingConfig' in obj) {
+ if (Array.isArray(obj.loadBalancingConfig)) {
+ for (const config of obj.loadBalancingConfig) {
+ result.loadBalancingConfig.push(validateLoadBalancingConfig(config));
+ }
+ } else {
+ throw new Error('Invalid service config: invalid loadBalancingConfig');
+ }
+ }
+ if ('methodConfig' in obj) {
+ if (Array.isArray(obj.methodConfig)) {
+ for (const methodConfig of obj.methodConfig) {
+ result.methodConfig.push(validateMethodConfig(methodConfig));
+ }
+ }
+ }
+ if ('retryThrottling' in obj) {
+ result.retryThrottling = validateRetryThrottling(obj.retryThrottling);
+ }
+ // Validate method name uniqueness
+ const seenMethodNames: MethodConfigName[] = [];
+ for (const methodConfig of result.methodConfig) {
+ for (const name of methodConfig.name) {
+ for (const seenName of seenMethodNames) {
+ if (
+ name.service === seenName.service &&
+ name.method === seenName.method
+ ) {
+ throw new Error(
+ `Invalid service config: duplicate name ${name.service}/${name.method}`
+ );
+ }
+ }
+ seenMethodNames.push(name);
+ }
+ }
+ return result;
+}
+
+function validateCanaryConfig(obj: any): ServiceConfigCanaryConfig {
+ if (!('serviceConfig' in obj)) {
+ throw new Error('Invalid service config choice: missing service config');
+ }
+ const result: ServiceConfigCanaryConfig = {
+ serviceConfig: validateServiceConfig(obj.serviceConfig),
+ };
+ if ('clientLanguage' in obj) {
+ if (Array.isArray(obj.clientLanguage)) {
+ result.clientLanguage = [];
+ for (const lang of obj.clientLanguage) {
+ if (typeof lang === 'string') {
+ result.clientLanguage.push(lang);
+ } else {
+ throw new Error(
+ 'Invalid service config choice: invalid clientLanguage'
+ );
+ }
+ }
+ } else {
+ throw new Error('Invalid service config choice: invalid clientLanguage');
+ }
+ }
+ if ('clientHostname' in obj) {
+ if (Array.isArray(obj.clientHostname)) {
+ result.clientHostname = [];
+ for (const lang of obj.clientHostname) {
+ if (typeof lang === 'string') {
+ result.clientHostname.push(lang);
+ } else {
+ throw new Error(
+ 'Invalid service config choice: invalid clientHostname'
+ );
+ }
+ }
+ } else {
+ throw new Error('Invalid service config choice: invalid clientHostname');
+ }
+ }
+ if ('percentage' in obj) {
+ if (
+ typeof obj.percentage === 'number' &&
+ 0 <= obj.percentage &&
+ obj.percentage <= 100
+ ) {
+ result.percentage = obj.percentage;
+ } else {
+ throw new Error('Invalid service config choice: invalid percentage');
+ }
+ }
+ // Validate that no unexpected fields are present
+ const allowedFields = [
+ 'clientLanguage',
+ 'percentage',
+ 'clientHostname',
+ 'serviceConfig',
+ ];
+ for (const field in obj) {
+ if (!allowedFields.includes(field)) {
+ throw new Error(
+ `Invalid service config choice: unexpected field ${field}`
+ );
+ }
+ }
+ return result;
+}
+
+function validateAndSelectCanaryConfig(
+ obj: any,
+ percentage: number
+): ServiceConfig {
+ if (!Array.isArray(obj)) {
+ throw new Error('Invalid service config list');
+ }
+ for (const config of obj) {
+ const validatedConfig = validateCanaryConfig(config);
+ /* For each field, we check if it is present, then only discard the
+ * config if the field value does not match the current client */
+ if (
+ typeof validatedConfig.percentage === 'number' &&
+ percentage > validatedConfig.percentage
+ ) {
+ continue;
+ }
+ if (Array.isArray(validatedConfig.clientHostname)) {
+ let hostnameMatched = false;
+ for (const hostname of validatedConfig.clientHostname) {
+ if (hostname === os.hostname()) {
+ hostnameMatched = true;
+ }
+ }
+ if (!hostnameMatched) {
+ continue;
+ }
+ }
+ if (Array.isArray(validatedConfig.clientLanguage)) {
+ let languageMatched = false;
+ for (const language of validatedConfig.clientLanguage) {
+ if (language === CLIENT_LANGUAGE_STRING) {
+ languageMatched = true;
+ }
+ }
+ if (!languageMatched) {
+ continue;
+ }
+ }
+ return validatedConfig.serviceConfig;
+ }
+ throw new Error('No matching service config found');
+}
+
+/**
+ * Find the "grpc_config" record among the TXT records, parse its value as JSON, validate its contents,
+ * and select a service config with selection fields that all match this client. Most of these steps
+ * can fail with an error; the caller must handle any errors thrown this way.
+ * @param txtRecord The TXT record array that is output from a successful call to dns.resolveTxt
+ * @param percentage A number chosen from the range [0, 100) that is used to select which config to use
+ * @return The service configuration to use, given the percentage value, or null if the service config
+ * data has a valid format but none of the options match the current client.
+ */
+export function extractAndSelectServiceConfig(
+ txtRecord: string[][],
+ percentage: number
+): ServiceConfig | null {
+ for (const record of txtRecord) {
+ if (record.length > 0 && record[0].startsWith('grpc_config=')) {
+ /* Treat the list of strings in this record as a single string and remove
+ * "grpc_config=" from the beginning. The rest should be a JSON string */
+ const recordString = record.join('').substring('grpc_config='.length);
+ const recordJson: any = JSON.parse(recordString);
+ return validateAndSelectCanaryConfig(recordJson, percentage);
+ }
+ }
+ return null;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/status-builder.ts b/frontend-old/node_modules/@grpc/grpc-js/src/status-builder.ts
new file mode 100644
index 0000000..78e2ea3
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/status-builder.ts
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { StatusObject } from './call-interface';
+import { Status } from './constants';
+import { Metadata } from './metadata';
+
+/**
+ * A builder for gRPC status objects.
+ */
+export class StatusBuilder {
+ private code: Status | null;
+ private details: string | null;
+ private metadata: Metadata | null;
+
+ constructor() {
+ this.code = null;
+ this.details = null;
+ this.metadata = null;
+ }
+
+ /**
+ * Adds a status code to the builder.
+ */
+ withCode(code: Status): this {
+ this.code = code;
+ return this;
+ }
+
+ /**
+ * Adds details to the builder.
+ */
+ withDetails(details: string): this {
+ this.details = details;
+ return this;
+ }
+
+ /**
+ * Adds metadata to the builder.
+ */
+ withMetadata(metadata: Metadata): this {
+ this.metadata = metadata;
+ return this;
+ }
+
+ /**
+ * Builds the status object.
+ */
+ build(): Partial<StatusObject> {
+ const status: Partial<StatusObject> = {};
+
+ if (this.code !== null) {
+ status.code = this.code;
+ }
+
+ if (this.details !== null) {
+ status.details = this.details;
+ }
+
+ if (this.metadata !== null) {
+ status.metadata = this.metadata;
+ }
+
+ return status;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/stream-decoder.ts b/frontend-old/node_modules/@grpc/grpc-js/src/stream-decoder.ts
new file mode 100644
index 0000000..ea669d1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/stream-decoder.ts
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+enum ReadState {
+ NO_DATA,
+ READING_SIZE,
+ READING_MESSAGE,
+}
+
+export class StreamDecoder {
+ private readState: ReadState = ReadState.NO_DATA;
+ private readCompressFlag: Buffer = Buffer.alloc(1);
+ private readPartialSize: Buffer = Buffer.alloc(4);
+ private readSizeRemaining = 4;
+ private readMessageSize = 0;
+ private readPartialMessage: Buffer[] = [];
+ private readMessageRemaining = 0;
+
+ constructor(private maxReadMessageLength: number) {}
+
+ write(data: Buffer): Buffer[] {
+ let readHead = 0;
+ let toRead: number;
+ const result: Buffer[] = [];
+
+ while (readHead < data.length) {
+ switch (this.readState) {
+ case ReadState.NO_DATA:
+ this.readCompressFlag = data.slice(readHead, readHead + 1);
+ readHead += 1;
+ this.readState = ReadState.READING_SIZE;
+ this.readPartialSize.fill(0);
+ this.readSizeRemaining = 4;
+ this.readMessageSize = 0;
+ this.readMessageRemaining = 0;
+ this.readPartialMessage = [];
+ break;
+ case ReadState.READING_SIZE:
+ toRead = Math.min(data.length - readHead, this.readSizeRemaining);
+ data.copy(
+ this.readPartialSize,
+ 4 - this.readSizeRemaining,
+ readHead,
+ readHead + toRead
+ );
+ this.readSizeRemaining -= toRead;
+ readHead += toRead;
+ // readSizeRemaining >=0 here
+ if (this.readSizeRemaining === 0) {
+ this.readMessageSize = this.readPartialSize.readUInt32BE(0);
+ if (this.maxReadMessageLength !== -1 && this.readMessageSize > this.maxReadMessageLength) {
+ throw new Error(`Received message larger than max (${this.readMessageSize} vs ${this.maxReadMessageLength})`);
+ }
+ this.readMessageRemaining = this.readMessageSize;
+ if (this.readMessageRemaining > 0) {
+ this.readState = ReadState.READING_MESSAGE;
+ } else {
+ const message = Buffer.concat(
+ [this.readCompressFlag, this.readPartialSize],
+ 5
+ );
+
+ this.readState = ReadState.NO_DATA;
+ result.push(message);
+ }
+ }
+ break;
+ case ReadState.READING_MESSAGE:
+ toRead = Math.min(data.length - readHead, this.readMessageRemaining);
+ this.readPartialMessage.push(data.slice(readHead, readHead + toRead));
+ this.readMessageRemaining -= toRead;
+ readHead += toRead;
+ // readMessageRemaining >=0 here
+ if (this.readMessageRemaining === 0) {
+ // At this point, we have read a full message
+ const framedMessageBuffers = [
+ this.readCompressFlag,
+ this.readPartialSize,
+ ].concat(this.readPartialMessage);
+ const framedMessage = Buffer.concat(
+ framedMessageBuffers,
+ this.readMessageSize + 5
+ );
+
+ this.readState = ReadState.NO_DATA;
+ result.push(framedMessage);
+ }
+ break;
+ default:
+ throw new Error('Unexpected read state');
+ }
+ }
+
+ return result;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-address.ts b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-address.ts
new file mode 100644
index 0000000..1ab88f4
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-address.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { isIP } from 'net';
+
+export interface TcpSubchannelAddress {
+ port: number;
+ host: string;
+}
+
+export interface IpcSubchannelAddress {
+ path: string;
+}
+/**
+ * This represents a single backend address to connect to. This interface is a
+ * subset of net.SocketConnectOpts, i.e. the options described at
+ * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener.
+ * Those are in turn a subset of the options that can be passed to http2.connect.
+ */
+
+export type SubchannelAddress = TcpSubchannelAddress | IpcSubchannelAddress;
+
+export function isTcpSubchannelAddress(
+ address: SubchannelAddress
+): address is TcpSubchannelAddress {
+ return 'port' in address;
+}
+
+export function subchannelAddressEqual(
+ address1?: SubchannelAddress,
+ address2?: SubchannelAddress
+): boolean {
+ if (!address1 && !address2) {
+ return true;
+ }
+ if (!address1 || !address2) {
+ return false;
+ }
+ if (isTcpSubchannelAddress(address1)) {
+ return (
+ isTcpSubchannelAddress(address2) &&
+ address1.host === address2.host &&
+ address1.port === address2.port
+ );
+ } else {
+ return !isTcpSubchannelAddress(address2) && address1.path === address2.path;
+ }
+}
+
+export function subchannelAddressToString(address: SubchannelAddress): string {
+ if (isTcpSubchannelAddress(address)) {
+ return address.host + ':' + address.port;
+ } else {
+ return address.path;
+ }
+}
+
+const DEFAULT_PORT = 443;
+
+export function stringToSubchannelAddress(
+ addressString: string,
+ port?: number
+): SubchannelAddress {
+ if (isIP(addressString)) {
+ return {
+ host: addressString,
+ port: port ?? DEFAULT_PORT,
+ };
+ } else {
+ return {
+ path: addressString,
+ };
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-call.ts b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-call.ts
new file mode 100644
index 0000000..b9f3191
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-call.ts
@@ -0,0 +1,547 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import * as http2 from 'http2';
+import * as os from 'os';
+
+import { DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH, Status } from './constants';
+import { Metadata } from './metadata';
+import { StreamDecoder } from './stream-decoder';
+import * as logging from './logging';
+import { LogVerbosity } from './constants';
+import {
+ InterceptingListener,
+ MessageContext,
+ StatusObject,
+ WriteCallback,
+} from './call-interface';
+import { CallEventTracker, Transport } from './transport';
+
+const TRACER_NAME = 'subchannel_call';
+
+/**
+ * https://nodejs.org/api/errors.html#errors_class_systemerror
+ */
+interface SystemError extends Error {
+ address?: string;
+ code: string;
+ dest?: string;
+ errno: number;
+ info?: object;
+ message: string;
+ path?: string;
+ port?: number;
+ syscall: string;
+}
+
+/**
+ * Should do approximately the same thing as util.getSystemErrorName but the
+ * TypeScript types don't have that function for some reason so I just made my
+ * own.
+ * @param errno
+ */
+function getSystemErrorName(errno: number): string {
+ for (const [name, num] of Object.entries(os.constants.errno)) {
+ if (num === errno) {
+ return name;
+ }
+ }
+ return 'Unknown system error ' + errno;
+}
+
+export interface SubchannelCall {
+ cancelWithStatus(status: Status, details: string): void;
+ getPeer(): string;
+ sendMessageWithContext(context: MessageContext, message: Buffer): void;
+ startRead(): void;
+ halfClose(): void;
+ getCallNumber(): number;
+}
+
+export interface StatusObjectWithRstCode extends StatusObject {
+ rstCode?: number;
+}
+
+export interface SubchannelCallInterceptingListener
+ extends InterceptingListener {
+ onReceiveStatus(status: StatusObjectWithRstCode): void;
+}
+
+export class Http2SubchannelCall implements SubchannelCall {
+ private decoder: StreamDecoder;
+
+ private isReadFilterPending = false;
+ private isPushPending = false;
+ private canPush = false;
+ /**
+ * Indicates that an 'end' event has come from the http2 stream, so there
+ * will be no more data events.
+ */
+ private readsClosed = false;
+
+ private statusOutput = false;
+
+ private unpushedReadMessages: Buffer[] = [];
+
+ // Status code mapped from :status. To be used if grpc-status is not received
+ private mappedStatusCode: Status = Status.UNKNOWN;
+
+ // This is populated (non-null) if and only if the call has ended
+ private finalStatus: StatusObject | null = null;
+
+ private internalError: SystemError | null = null;
+
+ constructor(
+ private readonly http2Stream: http2.ClientHttp2Stream,
+ private readonly callEventTracker: CallEventTracker,
+ private readonly listener: SubchannelCallInterceptingListener,
+ private readonly transport: Transport,
+ private readonly callId: number
+ ) {
+ const maxReceiveMessageLength = transport.getOptions()['grpc.max_receive_message_length'] ?? DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;
+ this.decoder = new StreamDecoder(maxReceiveMessageLength);
+ http2Stream.on('response', (headers, flags) => {
+ let headersString = '';
+ for (const header of Object.keys(headers)) {
+ headersString += '\t\t' + header + ': ' + headers[header] + '\n';
+ }
+ this.trace('Received server headers:\n' + headersString);
+ switch (headers[':status']) {
+ // TODO(murgatroid99): handle 100 and 101
+ case 400:
+ this.mappedStatusCode = Status.INTERNAL;
+ break;
+ case 401:
+ this.mappedStatusCode = Status.UNAUTHENTICATED;
+ break;
+ case 403:
+ this.mappedStatusCode = Status.PERMISSION_DENIED;
+ break;
+ case 404:
+ this.mappedStatusCode = Status.UNIMPLEMENTED;
+ break;
+ case 429:
+ case 502:
+ case 503:
+ case 504:
+ this.mappedStatusCode = Status.UNAVAILABLE;
+ break;
+ default:
+ this.mappedStatusCode = Status.UNKNOWN;
+ }
+
+ if (flags & http2.constants.NGHTTP2_FLAG_END_STREAM) {
+ this.handleTrailers(headers);
+ } else {
+ let metadata: Metadata;
+ try {
+ metadata = Metadata.fromHttp2Headers(headers);
+ } catch (error) {
+ this.endCall({
+ code: Status.UNKNOWN,
+ details: (error as Error).message,
+ metadata: new Metadata(),
+ });
+ return;
+ }
+ this.listener.onReceiveMetadata(metadata);
+ }
+ });
+ http2Stream.on('trailers', (headers: http2.IncomingHttpHeaders) => {
+ this.handleTrailers(headers);
+ });
+ http2Stream.on('data', (data: Buffer) => {
+ /* If the status has already been output, allow the http2 stream to
+ * drain without processing the data. */
+ if (this.statusOutput) {
+ return;
+ }
+ this.trace('receive HTTP/2 data frame of length ' + data.length);
+ let messages: Buffer[];
+ try {
+ messages = this.decoder.write(data);
+ } catch (e) {
+ this.cancelWithStatus(Status.RESOURCE_EXHAUSTED, (e as Error).message);
+ return;
+ }
+
+ for (const message of messages) {
+ this.trace('parsed message of length ' + message.length);
+ this.callEventTracker!.addMessageReceived();
+ this.tryPush(message);
+ }
+ });
+ http2Stream.on('end', () => {
+ this.readsClosed = true;
+ this.maybeOutputStatus();
+ });
+ http2Stream.on('close', () => {
+ /* Use process.next tick to ensure that this code happens after any
+ * "error" event that may be emitted at about the same time, so that
+ * we can bubble up the error message from that event. */
+ process.nextTick(() => {
+ this.trace('HTTP/2 stream closed with code ' + http2Stream.rstCode);
+ /* If we have a final status with an OK status code, that means that
+ * we have received all of the messages and we have processed the
+ * trailers and the call completed successfully, so it doesn't matter
+ * how the stream ends after that */
+ if (this.finalStatus?.code === Status.OK) {
+ return;
+ }
+ let code: Status;
+ let details = '';
+ switch (http2Stream.rstCode) {
+ case http2.constants.NGHTTP2_NO_ERROR:
+ /* If we get a NO_ERROR code and we already have a status, the
+ * stream completed properly and we just haven't fully processed
+ * it yet */
+ if (this.finalStatus !== null) {
+ return;
+ }
+ code = Status.INTERNAL;
+ details = `Received RST_STREAM with code ${http2Stream.rstCode}`;
+ break;
+ case http2.constants.NGHTTP2_REFUSED_STREAM:
+ code = Status.UNAVAILABLE;
+ details = 'Stream refused by server';
+ break;
+ case http2.constants.NGHTTP2_CANCEL:
+ code = Status.CANCELLED;
+ details = 'Call cancelled';
+ break;
+ case http2.constants.NGHTTP2_ENHANCE_YOUR_CALM:
+ code = Status.RESOURCE_EXHAUSTED;
+ details = 'Bandwidth exhausted or memory limit exceeded';
+ break;
+ case http2.constants.NGHTTP2_INADEQUATE_SECURITY:
+ code = Status.PERMISSION_DENIED;
+ details = 'Protocol not secure enough';
+ break;
+ case http2.constants.NGHTTP2_INTERNAL_ERROR:
+ code = Status.INTERNAL;
+ if (this.internalError === null) {
+ /* This error code was previously handled in the default case, and
+ * there are several instances of it online, so I wanted to
+ * preserve the original error message so that people find existing
+ * information in searches, but also include the more recognizable
+ * "Internal server error" message. */
+ details = `Received RST_STREAM with code ${http2Stream.rstCode} (Internal server error)`;
+ } else {
+ if (
+ this.internalError.code === 'ECONNRESET' ||
+ this.internalError.code === 'ETIMEDOUT'
+ ) {
+ code = Status.UNAVAILABLE;
+ details = this.internalError.message;
+ } else {
+ /* The "Received RST_STREAM with code ..." error is preserved
+ * here for continuity with errors reported online, but the
+ * error message at the end will probably be more relevant in
+ * most cases. */
+ details = `Received RST_STREAM with code ${http2Stream.rstCode} triggered by internal client error: ${this.internalError.message}`;
+ }
+ }
+ break;
+ default:
+ code = Status.INTERNAL;
+ details = `Received RST_STREAM with code ${http2Stream.rstCode}`;
+ }
+ // This is a no-op if trailers were received at all.
+ // This is OK, because status codes emitted here correspond to more
+ // catastrophic issues that prevent us from receiving trailers in the
+ // first place.
+ this.endCall({
+ code,
+ details,
+ metadata: new Metadata(),
+ rstCode: http2Stream.rstCode,
+ });
+ });
+ });
+ http2Stream.on('error', (err: SystemError) => {
+ /* We need an error handler here to stop "Uncaught Error" exceptions
+ * from bubbling up. However, errors here should all correspond to
+ * "close" events, where we will handle the error more granularly */
+ /* Specifically looking for stream errors that were *not* constructed
+ * from a RST_STREAM response here:
+ * https://github.com/nodejs/node/blob/8b8620d580314050175983402dfddf2674e8e22a/lib/internal/http2/core.js#L2267
+ */
+ if (err.code !== 'ERR_HTTP2_STREAM_ERROR') {
+ this.trace(
+ 'Node error event: message=' +
+ err.message +
+ ' code=' +
+ err.code +
+ ' errno=' +
+ getSystemErrorName(err.errno) +
+ ' syscall=' +
+ err.syscall
+ );
+ this.internalError = err;
+ }
+ this.callEventTracker.onStreamEnd(false);
+ });
+ }
+
+ public onDisconnect() {
+ this.endCall({
+ code: Status.UNAVAILABLE,
+ details: 'Connection dropped',
+ metadata: new Metadata(),
+ });
+ }
+
+ private outputStatus() {
+ /* Precondition: this.finalStatus !== null */
+ if (!this.statusOutput) {
+ this.statusOutput = true;
+ this.trace(
+ 'ended with status: code=' +
+ this.finalStatus!.code +
+ ' details="' +
+ this.finalStatus!.details +
+ '"'
+ );
+ this.callEventTracker.onCallEnd(this.finalStatus!);
+ /* We delay the actual action of bubbling up the status to insulate the
+ * cleanup code in this class from any errors that may be thrown in the
+ * upper layers as a result of bubbling up the status. In particular,
+ * if the status is not OK, the "error" event may be emitted
+ * synchronously at the top level, which will result in a thrown error if
+ * the user does not handle that event. */
+ process.nextTick(() => {
+ this.listener.onReceiveStatus(this.finalStatus!);
+ });
+ /* Leave the http2 stream in flowing state to drain incoming messages, to
+ * ensure that the stream closure completes. The call stream already does
+ * not push more messages after the status is output, so the messages go
+ * nowhere either way. */
+ this.http2Stream.resume();
+ }
+ }
+
+ private trace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ '[' + this.callId + '] ' + text
+ );
+ }
+
+ /**
+ * On first call, emits a 'status' event with the given StatusObject.
+ * Subsequent calls are no-ops.
+ * @param status The status of the call.
+ */
+ private endCall(status: StatusObjectWithRstCode): void {
+ /* If the status is OK and a new status comes in (e.g. from a
+ * deserialization failure), that new status takes priority */
+ if (this.finalStatus === null || this.finalStatus.code === Status.OK) {
+ this.finalStatus = status;
+ this.maybeOutputStatus();
+ }
+ this.destroyHttp2Stream();
+ }
+
+ private maybeOutputStatus() {
+ if (this.finalStatus !== null) {
+ /* The combination check of readsClosed and that the two message buffer
+ * arrays are empty checks that there all incoming data has been fully
+ * processed */
+ if (
+ this.finalStatus.code !== Status.OK ||
+ (this.readsClosed &&
+ this.unpushedReadMessages.length === 0 &&
+ !this.isReadFilterPending &&
+ !this.isPushPending)
+ ) {
+ this.outputStatus();
+ }
+ }
+ }
+
+ private push(message: Buffer): void {
+ this.trace(
+ 'pushing to reader message of length ' +
+ (message instanceof Buffer ? message.length : null)
+ );
+ this.canPush = false;
+ this.isPushPending = true;
+ process.nextTick(() => {
+ this.isPushPending = false;
+ /* If we have already output the status any later messages should be
+ * ignored, and can cause out-of-order operation errors higher up in the
+ * stack. Checking as late as possible here to avoid any race conditions.
+ */
+ if (this.statusOutput) {
+ return;
+ }
+ this.listener.onReceiveMessage(message);
+ this.maybeOutputStatus();
+ });
+ }
+
+ private tryPush(messageBytes: Buffer): void {
+ if (this.canPush) {
+ this.http2Stream!.pause();
+ this.push(messageBytes);
+ } else {
+ this.trace(
+ 'unpushedReadMessages.push message of length ' + messageBytes.length
+ );
+ this.unpushedReadMessages.push(messageBytes);
+ }
+ }
+
+ private handleTrailers(headers: http2.IncomingHttpHeaders) {
+ this.callEventTracker.onStreamEnd(true);
+ let headersString = '';
+ for (const header of Object.keys(headers)) {
+ headersString += '\t\t' + header + ': ' + headers[header] + '\n';
+ }
+ this.trace('Received server trailers:\n' + headersString);
+ let metadata: Metadata;
+ try {
+ metadata = Metadata.fromHttp2Headers(headers);
+ } catch (e) {
+ metadata = new Metadata();
+ }
+ const metadataMap = metadata.getMap();
+ let code: Status = this.mappedStatusCode;
+ if (
+ code === Status.UNKNOWN &&
+ typeof metadataMap['grpc-status'] === 'string'
+ ) {
+ const receivedStatus = Number(metadataMap['grpc-status']);
+ if (receivedStatus in Status) {
+ code = receivedStatus;
+ this.trace('received status code ' + receivedStatus + ' from server');
+ }
+ metadata.remove('grpc-status');
+ }
+ let details = '';
+ if (typeof metadataMap['grpc-message'] === 'string') {
+ try {
+ details = decodeURI(metadataMap['grpc-message']);
+ } catch (e) {
+ details = metadataMap['grpc-message'];
+ }
+ metadata.remove('grpc-message');
+ this.trace(
+ 'received status details string "' + details + '" from server'
+ );
+ }
+ const status: StatusObject = { code, details, metadata };
+ // This is a no-op if the call was already ended when handling headers.
+ this.endCall(status);
+ }
+
+ private destroyHttp2Stream() {
+ // The http2 stream could already have been destroyed if cancelWithStatus
+ // is called in response to an internal http2 error.
+ if (!this.http2Stream.destroyed) {
+ /* If the call has ended with an OK status, communicate that when closing
+ * the stream, partly to avoid a situation in which we detect an error
+ * RST_STREAM as a result after we have the status */
+ let code: number;
+ if (this.finalStatus?.code === Status.OK) {
+ code = http2.constants.NGHTTP2_NO_ERROR;
+ } else {
+ code = http2.constants.NGHTTP2_CANCEL;
+ }
+ this.trace('close http2 stream with code ' + code);
+ this.http2Stream.close(code);
+ }
+ }
+
+ cancelWithStatus(status: Status, details: string): void {
+ this.trace(
+ 'cancelWithStatus code: ' + status + ' details: "' + details + '"'
+ );
+ this.endCall({ code: status, details, metadata: new Metadata() });
+ }
+
+ getStatus(): StatusObject | null {
+ return this.finalStatus;
+ }
+
+ getPeer(): string {
+ return this.transport.getPeerName();
+ }
+
+ getCallNumber(): number {
+ return this.callId;
+ }
+
+ startRead() {
+ /* If the stream has ended with an error, we should not emit any more
+ * messages and we should communicate that the stream has ended */
+ if (this.finalStatus !== null && this.finalStatus.code !== Status.OK) {
+ this.readsClosed = true;
+ this.maybeOutputStatus();
+ return;
+ }
+ this.canPush = true;
+ if (this.unpushedReadMessages.length > 0) {
+ const nextMessage: Buffer = this.unpushedReadMessages.shift()!;
+ this.push(nextMessage);
+ return;
+ }
+ /* Only resume reading from the http2Stream if we don't have any pending
+ * messages to emit */
+ this.http2Stream.resume();
+ }
+
+ sendMessageWithContext(context: MessageContext, message: Buffer) {
+ this.trace('write() called with message of length ' + message.length);
+ const cb: WriteCallback = (error?: Error | null) => {
+ /* nextTick here ensures that no stream action can be taken in the call
+ * stack of the write callback, in order to hopefully work around
+ * https://github.com/nodejs/node/issues/49147 */
+ process.nextTick(() => {
+ let code: Status = Status.UNAVAILABLE;
+ if (
+ (error as NodeJS.ErrnoException)?.code ===
+ 'ERR_STREAM_WRITE_AFTER_END'
+ ) {
+ code = Status.INTERNAL;
+ }
+ if (error) {
+ this.cancelWithStatus(code, `Write error: ${error.message}`);
+ }
+ context.callback?.();
+ });
+ };
+ this.trace('sending data chunk of length ' + message.length);
+ this.callEventTracker.addMessageSent();
+ try {
+ this.http2Stream!.write(message, cb);
+ } catch (error) {
+ this.endCall({
+ code: Status.UNAVAILABLE,
+ details: `Write failed with error ${(error as Error).message}`,
+ metadata: new Metadata(),
+ });
+ }
+ }
+
+ halfClose() {
+ this.trace('end() called');
+ this.trace('calling end() on HTTP/2 stream');
+ this.http2Stream.end();
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-interface.ts b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-interface.ts
new file mode 100644
index 0000000..cc19c22
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-interface.ts
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2022 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { SubchannelRef } from './channelz';
+import { ConnectivityState } from './connectivity-state';
+import { Subchannel } from './subchannel';
+
+export type ConnectivityStateListener = (
+ subchannel: SubchannelInterface,
+ previousState: ConnectivityState,
+ newState: ConnectivityState,
+ keepaliveTime: number,
+ errorMessage?: string
+) => void;
+
+/**
+ * This is an interface for load balancing policies to use to interact with
+ * subchannels. This allows load balancing policies to wrap and unwrap
+ * subchannels.
+ *
+ * Any load balancing policy that wraps subchannels must unwrap the subchannel
+ * in the picker, so that other load balancing policies consistently have
+ * access to their own wrapper objects.
+ */
+export interface SubchannelInterface {
+ getConnectivityState(): ConnectivityState;
+ addConnectivityStateListener(listener: ConnectivityStateListener): void;
+ removeConnectivityStateListener(listener: ConnectivityStateListener): void;
+ startConnecting(): void;
+ getAddress(): string;
+ throttleKeepalive(newKeepaliveTime: number): void;
+ ref(): void;
+ unref(): void;
+ getChannelzRef(): SubchannelRef;
+ /**
+ * If this is a wrapper, return the wrapped subchannel, otherwise return this
+ */
+ getRealSubchannel(): Subchannel;
+ /**
+ * Returns true if this and other both proxy the same underlying subchannel.
+ * Can be used instead of directly accessing getRealSubchannel to allow mocks
+ * to avoid implementing getRealSubchannel
+ */
+ realSubchannelEquals(other: SubchannelInterface): boolean;
+}
+
+export abstract class BaseSubchannelWrapper implements SubchannelInterface {
+ constructor(protected child: SubchannelInterface) {}
+
+ getConnectivityState(): ConnectivityState {
+ return this.child.getConnectivityState();
+ }
+ addConnectivityStateListener(listener: ConnectivityStateListener): void {
+ this.child.addConnectivityStateListener(listener);
+ }
+ removeConnectivityStateListener(listener: ConnectivityStateListener): void {
+ this.child.removeConnectivityStateListener(listener);
+ }
+ startConnecting(): void {
+ this.child.startConnecting();
+ }
+ getAddress(): string {
+ return this.child.getAddress();
+ }
+ throttleKeepalive(newKeepaliveTime: number): void {
+ this.child.throttleKeepalive(newKeepaliveTime);
+ }
+ ref(): void {
+ this.child.ref();
+ }
+ unref(): void {
+ this.child.unref();
+ }
+ getChannelzRef(): SubchannelRef {
+ return this.child.getChannelzRef();
+ }
+ getRealSubchannel(): Subchannel {
+ return this.child.getRealSubchannel();
+ }
+ realSubchannelEquals(other: SubchannelInterface): boolean {
+ return this.getRealSubchannel() === other.getRealSubchannel();
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-pool.ts b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-pool.ts
new file mode 100644
index 0000000..a5dec72
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel-pool.ts
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ChannelOptions, channelOptionsEqual } from './channel-options';
+import { Subchannel } from './subchannel';
+import {
+ SubchannelAddress,
+ subchannelAddressEqual,
+} from './subchannel-address';
+import { ChannelCredentials } from './channel-credentials';
+import { GrpcUri, uriToString } from './uri-parser';
+import { Http2SubchannelConnector } from './transport';
+
+// 10 seconds in milliseconds. This value is arbitrary.
+/**
+ * The amount of time in between checks for dropping subchannels that have no
+ * other references
+ */
+const REF_CHECK_INTERVAL = 10_000;
+
+export class SubchannelPool {
+ private pool: {
+ [channelTarget: string]: Array<{
+ subchannelAddress: SubchannelAddress;
+ channelArguments: ChannelOptions;
+ channelCredentials: ChannelCredentials;
+ subchannel: Subchannel;
+ }>;
+ } = Object.create(null);
+
+ /**
+ * A timer of a task performing a periodic subchannel cleanup.
+ */
+ private cleanupTimer: NodeJS.Timeout | null = null;
+
+ /**
+ * A pool of subchannels use for making connections. Subchannels with the
+ * exact same parameters will be reused.
+ */
+ constructor() {}
+
+ /**
+ * Unrefs all unused subchannels and cancels the cleanup task if all
+ * subchannels have been unrefed.
+ */
+ unrefUnusedSubchannels(): void {
+ let allSubchannelsUnrefed = true;
+
+ /* These objects are created with Object.create(null), so they do not
+ * have a prototype, which means that for (... in ...) loops over them
+ * do not need to be filtered */
+ // eslint-disable-disable-next-line:forin
+ for (const channelTarget in this.pool) {
+ const subchannelObjArray = this.pool[channelTarget];
+
+ const refedSubchannels = subchannelObjArray.filter(
+ value => !value.subchannel.unrefIfOneRef()
+ );
+
+ if (refedSubchannels.length > 0) {
+ allSubchannelsUnrefed = false;
+ }
+
+ /* For each subchannel in the pool, try to unref it if it has
+ * exactly one ref (which is the ref from the pool itself). If that
+ * does happen, remove the subchannel from the pool */
+ this.pool[channelTarget] = refedSubchannels;
+ }
+ /* Currently we do not delete keys with empty values. If that results
+ * in significant memory usage we should change it. */
+
+ // Cancel the cleanup task if all subchannels have been unrefed.
+ if (allSubchannelsUnrefed && this.cleanupTimer !== null) {
+ clearInterval(this.cleanupTimer);
+ this.cleanupTimer = null;
+ }
+ }
+
+ /**
+ * Ensures that the cleanup task is spawned.
+ */
+ ensureCleanupTask(): void {
+ if (this.cleanupTimer === null) {
+ this.cleanupTimer = setInterval(() => {
+ this.unrefUnusedSubchannels();
+ }, REF_CHECK_INTERVAL);
+
+ // Unref because this timer should not keep the event loop running.
+ // Call unref only if it exists to address electron/electron#21162
+ this.cleanupTimer.unref?.();
+ }
+ }
+
+ /**
+ * Get a subchannel if one already exists with exactly matching parameters.
+ * Otherwise, create and save a subchannel with those parameters.
+ * @param channelTarget
+ * @param subchannelTarget
+ * @param channelArguments
+ * @param channelCredentials
+ */
+ getOrCreateSubchannel(
+ channelTargetUri: GrpcUri,
+ subchannelTarget: SubchannelAddress,
+ channelArguments: ChannelOptions,
+ channelCredentials: ChannelCredentials
+ ): Subchannel {
+ this.ensureCleanupTask();
+ const channelTarget = uriToString(channelTargetUri);
+ if (channelTarget in this.pool) {
+ const subchannelObjArray = this.pool[channelTarget];
+ for (const subchannelObj of subchannelObjArray) {
+ if (
+ subchannelAddressEqual(
+ subchannelTarget,
+ subchannelObj.subchannelAddress
+ ) &&
+ channelOptionsEqual(
+ channelArguments,
+ subchannelObj.channelArguments
+ ) &&
+ channelCredentials._equals(subchannelObj.channelCredentials)
+ ) {
+ return subchannelObj.subchannel;
+ }
+ }
+ }
+ // If we get here, no matching subchannel was found
+ const subchannel = new Subchannel(
+ channelTargetUri,
+ subchannelTarget,
+ channelArguments,
+ channelCredentials,
+ new Http2SubchannelConnector(channelTargetUri)
+ );
+ if (!(channelTarget in this.pool)) {
+ this.pool[channelTarget] = [];
+ }
+ this.pool[channelTarget].push({
+ subchannelAddress: subchannelTarget,
+ channelArguments,
+ channelCredentials,
+ subchannel,
+ });
+ subchannel.ref();
+ return subchannel;
+ }
+}
+
+const globalSubchannelPool = new SubchannelPool();
+
+/**
+ * Get either the global subchannel pool, or a new subchannel pool.
+ * @param global
+ */
+export function getSubchannelPool(global: boolean): SubchannelPool {
+ if (global) {
+ return globalSubchannelPool;
+ } else {
+ return new SubchannelPool();
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/subchannel.ts b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel.ts
new file mode 100644
index 0000000..eff7509
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/subchannel.ts
@@ -0,0 +1,482 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { ChannelCredentials } from './channel-credentials';
+import { Metadata } from './metadata';
+import { ChannelOptions } from './channel-options';
+import { ConnectivityState } from './connectivity-state';
+import { BackoffTimeout, BackoffOptions } from './backoff-timeout';
+import * as logging from './logging';
+import { LogVerbosity, Status } from './constants';
+import { GrpcUri, uriToString } from './uri-parser';
+import {
+ SubchannelAddress,
+ subchannelAddressToString,
+} from './subchannel-address';
+import {
+ SubchannelRef,
+ ChannelzTrace,
+ ChannelzChildrenTracker,
+ SubchannelInfo,
+ registerChannelzSubchannel,
+ ChannelzCallTracker,
+ unregisterChannelzRef,
+} from './channelz';
+import {
+ ConnectivityStateListener,
+ SubchannelInterface,
+} from './subchannel-interface';
+import { SubchannelCallInterceptingListener } from './subchannel-call';
+import { SubchannelCall } from './subchannel-call';
+import { CallEventTracker, SubchannelConnector, Transport } from './transport';
+
+const TRACER_NAME = 'subchannel';
+
+/* setInterval and setTimeout only accept signed 32 bit integers. JS doesn't
+ * have a constant for the max signed 32 bit integer, so this is a simple way
+ * to calculate it */
+const KEEPALIVE_MAX_TIME_MS = ~(1 << 31);
+
+export class Subchannel {
+ /**
+ * The subchannel's current connectivity state. Invariant: `session` === `null`
+ * if and only if `connectivityState` is IDLE or TRANSIENT_FAILURE.
+ */
+ private connectivityState: ConnectivityState = ConnectivityState.IDLE;
+ /**
+ * The underlying http2 session used to make requests.
+ */
+ private transport: Transport | null = null;
+ /**
+ * Indicates that the subchannel should transition from TRANSIENT_FAILURE to
+ * CONNECTING instead of IDLE when the backoff timeout ends.
+ */
+ private continueConnecting = false;
+ /**
+ * A list of listener functions that will be called whenever the connectivity
+ * state changes. Will be modified by `addConnectivityStateListener` and
+ * `removeConnectivityStateListener`
+ */
+ private stateListeners: Set<ConnectivityStateListener> = new Set();
+
+ private backoffTimeout: BackoffTimeout;
+
+ private keepaliveTime: number;
+ /**
+ * Tracks channels and subchannel pools with references to this subchannel
+ */
+ private refcount = 0;
+
+ /**
+ * A string representation of the subchannel address, for logging/tracing
+ */
+ private subchannelAddressString: string;
+
+ // Channelz info
+ private readonly channelzEnabled: boolean = true;
+ private channelzRef: SubchannelRef;
+ private channelzTrace: ChannelzTrace;
+ private callTracker = new ChannelzCallTracker();
+ private childrenTracker = new ChannelzChildrenTracker();
+
+ // Channelz socket info
+ private streamTracker = new ChannelzCallTracker();
+
+ /**
+ * A class representing a connection to a single backend.
+ * @param channelTarget The target string for the channel as a whole
+ * @param subchannelAddress The address for the backend that this subchannel
+ * will connect to
+ * @param options The channel options, plus any specific subchannel options
+ * for this subchannel
+ * @param credentials The channel credentials used to establish this
+ * connection
+ */
+ constructor(
+ private channelTarget: GrpcUri,
+ private subchannelAddress: SubchannelAddress,
+ private options: ChannelOptions,
+ private credentials: ChannelCredentials,
+ private connector: SubchannelConnector
+ ) {
+ const backoffOptions: BackoffOptions = {
+ initialDelay: options['grpc.initial_reconnect_backoff_ms'],
+ maxDelay: options['grpc.max_reconnect_backoff_ms'],
+ };
+ this.backoffTimeout = new BackoffTimeout(() => {
+ this.handleBackoffTimer();
+ }, backoffOptions);
+ this.backoffTimeout.unref();
+ this.subchannelAddressString = subchannelAddressToString(subchannelAddress);
+
+ this.keepaliveTime = options['grpc.keepalive_time_ms'] ?? -1;
+
+ if (options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+ this.channelzTrace = new ChannelzTrace();
+ this.channelzRef = registerChannelzSubchannel(
+ this.subchannelAddressString,
+ () => this.getChannelzInfo(),
+ this.channelzEnabled
+ );
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Subchannel created');
+ }
+ this.trace(
+ 'Subchannel constructed with options ' +
+ JSON.stringify(options, undefined, 2)
+ );
+ }
+
+ private getChannelzInfo(): SubchannelInfo {
+ return {
+ state: this.connectivityState,
+ trace: this.channelzTrace,
+ callTracker: this.callTracker,
+ children: this.childrenTracker.getChildLists(),
+ target: this.subchannelAddressString,
+ };
+ }
+
+ private trace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text
+ );
+ }
+
+ private refTrace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ 'subchannel_refcount',
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text
+ );
+ }
+
+ private handleBackoffTimer() {
+ if (this.continueConnecting) {
+ this.transitionToState(
+ [ConnectivityState.TRANSIENT_FAILURE],
+ ConnectivityState.CONNECTING
+ );
+ } else {
+ this.transitionToState(
+ [ConnectivityState.TRANSIENT_FAILURE],
+ ConnectivityState.IDLE
+ );
+ }
+ }
+
+ /**
+ * Start a backoff timer with the current nextBackoff timeout
+ */
+ private startBackoff() {
+ this.backoffTimeout.runOnce();
+ }
+
+ private stopBackoff() {
+ this.backoffTimeout.stop();
+ this.backoffTimeout.reset();
+ }
+
+ private startConnectingInternal() {
+ let options = this.options;
+ if (options['grpc.keepalive_time_ms']) {
+ const adjustedKeepaliveTime = Math.min(
+ this.keepaliveTime,
+ KEEPALIVE_MAX_TIME_MS
+ );
+ options = { ...options, 'grpc.keepalive_time_ms': adjustedKeepaliveTime };
+ }
+ this.connector
+ .connect(this.subchannelAddress, this.credentials, options)
+ .then(
+ transport => {
+ if (
+ this.transitionToState(
+ [ConnectivityState.CONNECTING],
+ ConnectivityState.READY
+ )
+ ) {
+ this.transport = transport;
+ if (this.channelzEnabled) {
+ this.childrenTracker.refChild(transport.getChannelzRef());
+ }
+ transport.addDisconnectListener(tooManyPings => {
+ this.transitionToState(
+ [ConnectivityState.READY],
+ ConnectivityState.IDLE
+ );
+ if (tooManyPings && this.keepaliveTime > 0) {
+ this.keepaliveTime *= 2;
+ logging.log(
+ LogVerbosity.ERROR,
+ `Connection to ${uriToString(this.channelTarget)} at ${
+ this.subchannelAddressString
+ } rejected by server because of excess pings. Increasing ping interval to ${
+ this.keepaliveTime
+ } ms`
+ );
+ }
+ });
+ } else {
+ /* If we can't transition from CONNECTING to READY here, we will
+ * not be using this transport, so release its resources. */
+ transport.shutdown();
+ }
+ },
+ error => {
+ this.transitionToState(
+ [ConnectivityState.CONNECTING],
+ ConnectivityState.TRANSIENT_FAILURE,
+ `${error}`
+ );
+ }
+ );
+ }
+
+ /**
+ * Initiate a state transition from any element of oldStates to the new
+ * state. If the current connectivityState is not in oldStates, do nothing.
+ * @param oldStates The set of states to transition from
+ * @param newState The state to transition to
+ * @returns True if the state changed, false otherwise
+ */
+ private transitionToState(
+ oldStates: ConnectivityState[],
+ newState: ConnectivityState,
+ errorMessage?: string
+ ): boolean {
+ if (oldStates.indexOf(this.connectivityState) === -1) {
+ return false;
+ }
+ this.trace(
+ ConnectivityState[this.connectivityState] +
+ ' -> ' +
+ ConnectivityState[newState]
+ );
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace(
+ 'CT_INFO',
+ 'Connectivity state change to ' + ConnectivityState[newState]
+ );
+ }
+ const previousState = this.connectivityState;
+ this.connectivityState = newState;
+ switch (newState) {
+ case ConnectivityState.READY:
+ this.stopBackoff();
+ break;
+ case ConnectivityState.CONNECTING:
+ this.startBackoff();
+ this.startConnectingInternal();
+ this.continueConnecting = false;
+ break;
+ case ConnectivityState.TRANSIENT_FAILURE:
+ if (this.channelzEnabled && this.transport) {
+ this.childrenTracker.unrefChild(this.transport.getChannelzRef());
+ }
+ this.transport?.shutdown();
+ this.transport = null;
+ /* If the backoff timer has already ended by the time we get to the
+ * TRANSIENT_FAILURE state, we want to immediately transition out of
+ * TRANSIENT_FAILURE as though the backoff timer is ending right now */
+ if (!this.backoffTimeout.isRunning()) {
+ process.nextTick(() => {
+ this.handleBackoffTimer();
+ });
+ }
+ break;
+ case ConnectivityState.IDLE:
+ if (this.channelzEnabled && this.transport) {
+ this.childrenTracker.unrefChild(this.transport.getChannelzRef());
+ }
+ this.transport?.shutdown();
+ this.transport = null;
+ break;
+ default:
+ throw new Error(`Invalid state: unknown ConnectivityState ${newState}`);
+ }
+ for (const listener of this.stateListeners) {
+ listener(this, previousState, newState, this.keepaliveTime, errorMessage);
+ }
+ return true;
+ }
+
+ ref() {
+ this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount + 1));
+ this.refcount += 1;
+ }
+
+ unref() {
+ this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount - 1));
+ this.refcount -= 1;
+ if (this.refcount === 0) {
+ if (this.channelzEnabled) {
+ this.channelzTrace.addTrace('CT_INFO', 'Shutting down');
+ }
+ if (this.channelzEnabled) {
+ unregisterChannelzRef(this.channelzRef);
+ }
+ process.nextTick(() => {
+ this.transitionToState(
+ [ConnectivityState.CONNECTING, ConnectivityState.READY],
+ ConnectivityState.IDLE
+ );
+ });
+ }
+ }
+
+ unrefIfOneRef(): boolean {
+ if (this.refcount === 1) {
+ this.unref();
+ return true;
+ }
+ return false;
+ }
+
+ createCall(
+ metadata: Metadata,
+ host: string,
+ method: string,
+ listener: SubchannelCallInterceptingListener
+ ): SubchannelCall {
+ if (!this.transport) {
+ throw new Error('Cannot create call, subchannel not READY');
+ }
+ let statsTracker: Partial<CallEventTracker>;
+ if (this.channelzEnabled) {
+ this.callTracker.addCallStarted();
+ this.streamTracker.addCallStarted();
+ statsTracker = {
+ onCallEnd: status => {
+ if (status.code === Status.OK) {
+ this.callTracker.addCallSucceeded();
+ } else {
+ this.callTracker.addCallFailed();
+ }
+ },
+ };
+ } else {
+ statsTracker = {};
+ }
+ return this.transport.createCall(
+ metadata,
+ host,
+ method,
+ listener,
+ statsTracker
+ );
+ }
+
+ /**
+ * If the subchannel is currently IDLE, start connecting and switch to the
+ * CONNECTING state. If the subchannel is current in TRANSIENT_FAILURE,
+ * the next time it would transition to IDLE, start connecting again instead.
+ * Otherwise, do nothing.
+ */
+ startConnecting() {
+ process.nextTick(() => {
+ /* First, try to transition from IDLE to connecting. If that doesn't happen
+ * because the state is not currently IDLE, check if it is
+ * TRANSIENT_FAILURE, and if so indicate that it should go back to
+ * connecting after the backoff timer ends. Otherwise do nothing */
+ if (
+ !this.transitionToState(
+ [ConnectivityState.IDLE],
+ ConnectivityState.CONNECTING
+ )
+ ) {
+ if (this.connectivityState === ConnectivityState.TRANSIENT_FAILURE) {
+ this.continueConnecting = true;
+ }
+ }
+ });
+ }
+
+ /**
+ * Get the subchannel's current connectivity state.
+ */
+ getConnectivityState() {
+ return this.connectivityState;
+ }
+
+ /**
+ * Add a listener function to be called whenever the subchannel's
+ * connectivity state changes.
+ * @param listener
+ */
+ addConnectivityStateListener(listener: ConnectivityStateListener) {
+ this.stateListeners.add(listener);
+ }
+
+ /**
+ * Remove a listener previously added with `addConnectivityStateListener`
+ * @param listener A reference to a function previously passed to
+ * `addConnectivityStateListener`
+ */
+ removeConnectivityStateListener(listener: ConnectivityStateListener) {
+ this.stateListeners.delete(listener);
+ }
+
+ /**
+ * Reset the backoff timeout, and immediately start connecting if in backoff.
+ */
+ resetBackoff() {
+ process.nextTick(() => {
+ this.backoffTimeout.reset();
+ this.transitionToState(
+ [ConnectivityState.TRANSIENT_FAILURE],
+ ConnectivityState.CONNECTING
+ );
+ });
+ }
+
+ getAddress(): string {
+ return this.subchannelAddressString;
+ }
+
+ getChannelzRef(): SubchannelRef {
+ return this.channelzRef;
+ }
+
+ getRealSubchannel(): this {
+ return this;
+ }
+
+ realSubchannelEquals(other: SubchannelInterface): boolean {
+ return other.getRealSubchannel() === this;
+ }
+
+ throttleKeepalive(newKeepaliveTime: number) {
+ if (newKeepaliveTime > this.keepaliveTime) {
+ this.keepaliveTime = newKeepaliveTime;
+ }
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/tls-helpers.ts b/frontend-old/node_modules/@grpc/grpc-js/src/tls-helpers.ts
new file mode 100644
index 0000000..3f7a62e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/tls-helpers.ts
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import * as fs from 'fs';
+
+export const CIPHER_SUITES: string | undefined =
+ process.env.GRPC_SSL_CIPHER_SUITES;
+
+const DEFAULT_ROOTS_FILE_PATH = process.env.GRPC_DEFAULT_SSL_ROOTS_FILE_PATH;
+
+let defaultRootsData: Buffer | null = null;
+
+export function getDefaultRootsData(): Buffer | null {
+ if (DEFAULT_ROOTS_FILE_PATH) {
+ if (defaultRootsData === null) {
+ defaultRootsData = fs.readFileSync(DEFAULT_ROOTS_FILE_PATH);
+ }
+ return defaultRootsData;
+ }
+ return null;
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/transport.ts b/frontend-old/node_modules/@grpc/grpc-js/src/transport.ts
new file mode 100644
index 0000000..fe9a813
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/transport.ts
@@ -0,0 +1,829 @@
+/*
+ * Copyright 2023 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import * as http2 from 'http2';
+import {
+ checkServerIdentity,
+ CipherNameAndProtocol,
+ ConnectionOptions,
+ PeerCertificate,
+ TLSSocket,
+} from 'tls';
+import { StatusObject } from './call-interface';
+import { ChannelCredentials } from './channel-credentials';
+import { ChannelOptions } from './channel-options';
+import {
+ ChannelzCallTracker,
+ registerChannelzSocket,
+ SocketInfo,
+ SocketRef,
+ TlsInfo,
+ unregisterChannelzRef,
+} from './channelz';
+import { LogVerbosity } from './constants';
+import { getProxiedConnection, ProxyConnectionResult } from './http_proxy';
+import * as logging from './logging';
+import { getDefaultAuthority } from './resolver';
+import {
+ stringToSubchannelAddress,
+ SubchannelAddress,
+ subchannelAddressToString,
+} from './subchannel-address';
+import { GrpcUri, parseUri, splitHostPort, uriToString } from './uri-parser';
+import * as net from 'net';
+import {
+ Http2SubchannelCall,
+ SubchannelCall,
+ SubchannelCallInterceptingListener,
+} from './subchannel-call';
+import { Metadata } from './metadata';
+import { getNextCallNumber } from './call-number';
+
+const TRACER_NAME = 'transport';
+const FLOW_CONTROL_TRACER_NAME = 'transport_flowctrl';
+
+const clientVersion = require('../../package.json').version;
+
+const {
+ HTTP2_HEADER_AUTHORITY,
+ HTTP2_HEADER_CONTENT_TYPE,
+ HTTP2_HEADER_METHOD,
+ HTTP2_HEADER_PATH,
+ HTTP2_HEADER_TE,
+ HTTP2_HEADER_USER_AGENT,
+} = http2.constants;
+
+const KEEPALIVE_TIMEOUT_MS = 20000;
+
+export interface CallEventTracker {
+ addMessageSent(): void;
+ addMessageReceived(): void;
+ onCallEnd(status: StatusObject): void;
+ onStreamEnd(success: boolean): void;
+}
+
+export interface TransportDisconnectListener {
+ (tooManyPings: boolean): void;
+}
+
+export interface Transport {
+ getChannelzRef(): SocketRef;
+ getPeerName(): string;
+ getOptions(): ChannelOptions;
+ createCall(
+ metadata: Metadata,
+ host: string,
+ method: string,
+ listener: SubchannelCallInterceptingListener,
+ subchannelCallStatsTracker: Partial<CallEventTracker>
+ ): SubchannelCall;
+ addDisconnectListener(listener: TransportDisconnectListener): void;
+ shutdown(): void;
+}
+
+const tooManyPingsData: Buffer = Buffer.from('too_many_pings', 'ascii');
+
+class Http2Transport implements Transport {
+ /**
+ * The amount of time in between sending pings
+ */
+ private keepaliveTimeMs = -1;
+ /**
+ * The amount of time to wait for an acknowledgement after sending a ping
+ */
+ private keepaliveTimeoutMs: number = KEEPALIVE_TIMEOUT_MS;
+ /**
+ * Timer reference for timeout that indicates when to send the next ping
+ */
+ private keepaliveTimerId: NodeJS.Timeout | null = null;
+ /**
+ * Indicates that the keepalive timer ran out while there were no active
+ * calls, and a ping should be sent the next time a call starts.
+ */
+ private pendingSendKeepalivePing = false;
+ /**
+ * Timer reference tracking when the most recent ping will be considered lost
+ */
+ private keepaliveTimeoutId: NodeJS.Timeout | null = null;
+ /**
+ * Indicates whether keepalive pings should be sent without any active calls
+ */
+ private keepaliveWithoutCalls = false;
+
+ private userAgent: string;
+
+ private activeCalls: Set<Http2SubchannelCall> = new Set();
+
+ private subchannelAddressString: string;
+
+ private disconnectListeners: TransportDisconnectListener[] = [];
+
+ private disconnectHandled = false;
+
+ // Channelz info
+ private channelzRef: SocketRef;
+ private readonly channelzEnabled: boolean = true;
+ private streamTracker = new ChannelzCallTracker();
+ private keepalivesSent = 0;
+ private messagesSent = 0;
+ private messagesReceived = 0;
+ private lastMessageSentTimestamp: Date | null = null;
+ private lastMessageReceivedTimestamp: Date | null = null;
+
+ constructor(
+ private session: http2.ClientHttp2Session,
+ subchannelAddress: SubchannelAddress,
+ private options: ChannelOptions,
+ /**
+ * Name of the remote server, if it is not the same as the subchannel
+ * address, i.e. if connecting through an HTTP CONNECT proxy.
+ */
+ private remoteName: string | null
+ ) {
+ /* Populate subchannelAddressString and channelzRef before doing anything
+ * else, because they are used in the trace methods. */
+ this.subchannelAddressString = subchannelAddressToString(subchannelAddress);
+
+ if (options['grpc.enable_channelz'] === 0) {
+ this.channelzEnabled = false;
+ }
+ this.channelzRef = registerChannelzSocket(
+ this.subchannelAddressString,
+ () => this.getChannelzInfo(),
+ this.channelzEnabled
+ );
+ // Build user-agent string.
+ this.userAgent = [
+ options['grpc.primary_user_agent'],
+ `grpc-node-js/${clientVersion}`,
+ options['grpc.secondary_user_agent'],
+ ]
+ .filter(e => e)
+ .join(' '); // remove falsey values first
+
+ if ('grpc.keepalive_time_ms' in options) {
+ this.keepaliveTimeMs = options['grpc.keepalive_time_ms']!;
+ }
+ if ('grpc.keepalive_timeout_ms' in options) {
+ this.keepaliveTimeoutMs = options['grpc.keepalive_timeout_ms']!;
+ }
+ if ('grpc.keepalive_permit_without_calls' in options) {
+ this.keepaliveWithoutCalls =
+ options['grpc.keepalive_permit_without_calls'] === 1;
+ } else {
+ this.keepaliveWithoutCalls = false;
+ }
+
+ session.once('close', () => {
+ this.trace('session closed');
+ this.stopKeepalivePings();
+ this.handleDisconnect();
+ });
+ session.once(
+ 'goaway',
+ (errorCode: number, lastStreamID: number, opaqueData?: Buffer) => {
+ let tooManyPings = false;
+ /* See the last paragraph of
+ * https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md#basic-keepalive */
+ if (
+ errorCode === http2.constants.NGHTTP2_ENHANCE_YOUR_CALM &&
+ opaqueData &&
+ opaqueData.equals(tooManyPingsData)
+ ) {
+ tooManyPings = true;
+ }
+ this.trace('connection closed by GOAWAY with code ' + errorCode + ' and data ' + opaqueData?.toString());
+ this.reportDisconnectToOwner(tooManyPings);
+ }
+ );
+ session.once('error', error => {
+ /* Do nothing here. Any error should also trigger a close event, which is
+ * where we want to handle that. */
+ this.trace('connection closed with error ' + (error as Error).message);
+ });
+ if (logging.isTracerEnabled(TRACER_NAME)) {
+ session.on('remoteSettings', (settings: http2.Settings) => {
+ this.trace(
+ 'new settings received' +
+ (this.session !== session ? ' on the old connection' : '') +
+ ': ' +
+ JSON.stringify(settings)
+ );
+ });
+ session.on('localSettings', (settings: http2.Settings) => {
+ this.trace(
+ 'local settings acknowledged by remote' +
+ (this.session !== session ? ' on the old connection' : '') +
+ ': ' +
+ JSON.stringify(settings)
+ );
+ });
+ }
+ /* Start the keepalive timer last, because this can trigger trace logs,
+ * which should only happen after everything else is set up. */
+ if (this.keepaliveWithoutCalls) {
+ this.maybeStartKeepalivePingTimer();
+ }
+ }
+
+ private getChannelzInfo(): SocketInfo {
+ const sessionSocket = this.session.socket;
+ const remoteAddress = sessionSocket.remoteAddress
+ ? stringToSubchannelAddress(
+ sessionSocket.remoteAddress,
+ sessionSocket.remotePort
+ )
+ : null;
+ const localAddress = sessionSocket.localAddress
+ ? stringToSubchannelAddress(
+ sessionSocket.localAddress,
+ sessionSocket.localPort
+ )
+ : null;
+ let tlsInfo: TlsInfo | null;
+ if (this.session.encrypted) {
+ const tlsSocket: TLSSocket = sessionSocket as TLSSocket;
+ const cipherInfo: CipherNameAndProtocol & { standardName?: string } =
+ tlsSocket.getCipher();
+ const certificate = tlsSocket.getCertificate();
+ const peerCertificate = tlsSocket.getPeerCertificate();
+ tlsInfo = {
+ cipherSuiteStandardName: cipherInfo.standardName ?? null,
+ cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name,
+ localCertificate:
+ certificate && 'raw' in certificate ? certificate.raw : null,
+ remoteCertificate:
+ peerCertificate && 'raw' in peerCertificate
+ ? peerCertificate.raw
+ : null,
+ };
+ } else {
+ tlsInfo = null;
+ }
+ const socketInfo: SocketInfo = {
+ remoteAddress: remoteAddress,
+ localAddress: localAddress,
+ security: tlsInfo,
+ remoteName: this.remoteName,
+ streamsStarted: this.streamTracker.callsStarted,
+ streamsSucceeded: this.streamTracker.callsSucceeded,
+ streamsFailed: this.streamTracker.callsFailed,
+ messagesSent: this.messagesSent,
+ messagesReceived: this.messagesReceived,
+ keepAlivesSent: this.keepalivesSent,
+ lastLocalStreamCreatedTimestamp:
+ this.streamTracker.lastCallStartedTimestamp,
+ lastRemoteStreamCreatedTimestamp: null,
+ lastMessageSentTimestamp: this.lastMessageSentTimestamp,
+ lastMessageReceivedTimestamp: this.lastMessageReceivedTimestamp,
+ localFlowControlWindow: this.session.state.localWindowSize ?? null,
+ remoteFlowControlWindow: this.session.state.remoteWindowSize ?? null,
+ };
+ return socketInfo;
+ }
+
+ private trace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text
+ );
+ }
+
+ private keepaliveTrace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ 'keepalive',
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text
+ );
+ }
+
+ private flowControlTrace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ FLOW_CONTROL_TRACER_NAME,
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text
+ );
+ }
+
+ private internalsTrace(text: string): void {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ 'transport_internals',
+ '(' +
+ this.channelzRef.id +
+ ') ' +
+ this.subchannelAddressString +
+ ' ' +
+ text
+ );
+ }
+
+ /**
+ * Indicate to the owner of this object that this transport should no longer
+ * be used. That happens if the connection drops, or if the server sends a
+ * GOAWAY.
+ * @param tooManyPings If true, this was triggered by a GOAWAY with data
+ * indicating that the session was closed becaues the client sent too many
+ * pings.
+ * @returns
+ */
+ private reportDisconnectToOwner(tooManyPings: boolean) {
+ if (this.disconnectHandled) {
+ return;
+ }
+ this.disconnectHandled = true;
+ this.disconnectListeners.forEach(listener => listener(tooManyPings));
+ }
+
+ /**
+ * Handle connection drops, but not GOAWAYs.
+ */
+ private handleDisconnect() {
+ this.reportDisconnectToOwner(false);
+ /* Give calls an event loop cycle to finish naturally before reporting the
+ * disconnnection to them. */
+ setImmediate(() => {
+ for (const call of this.activeCalls) {
+ call.onDisconnect();
+ }
+ });
+ }
+
+ addDisconnectListener(listener: TransportDisconnectListener): void {
+ this.disconnectListeners.push(listener);
+ }
+
+ private clearKeepaliveTimer() {
+ if (!this.keepaliveTimerId) {
+ return;
+ }
+ clearTimeout(this.keepaliveTimerId);
+ this.keepaliveTimerId = null;
+ }
+
+ private clearKeepaliveTimeout() {
+ if (!this.keepaliveTimeoutId) {
+ return;
+ }
+ clearTimeout(this.keepaliveTimeoutId);
+ this.keepaliveTimeoutId = null;
+ }
+
+ private canSendPing() {
+ return (
+ this.keepaliveTimeMs > 0 &&
+ (this.keepaliveWithoutCalls || this.activeCalls.size > 0)
+ );
+ }
+
+ private maybeSendPing() {
+ this.clearKeepaliveTimer();
+ if (!this.canSendPing()) {
+ this.pendingSendKeepalivePing = true;
+ return;
+ }
+ if (this.channelzEnabled) {
+ this.keepalivesSent += 1;
+ }
+ this.keepaliveTrace(
+ 'Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms'
+ );
+ if (!this.keepaliveTimeoutId) {
+ this.keepaliveTimeoutId = setTimeout(() => {
+ this.keepaliveTrace('Ping timeout passed without response');
+ this.handleDisconnect();
+ }, this.keepaliveTimeoutMs);
+ this.keepaliveTimeoutId.unref?.();
+ }
+ try {
+ this.session!.ping(
+ (err: Error | null, duration: number, payload: Buffer) => {
+ if (err) {
+ this.keepaliveTrace('Ping failed with error ' + err.message);
+ this.handleDisconnect();
+ }
+ this.keepaliveTrace('Received ping response');
+ this.clearKeepaliveTimeout();
+ this.maybeStartKeepalivePingTimer();
+ }
+ );
+ } catch (e) {
+ /* If we fail to send a ping, the connection is no longer functional, so
+ * we should discard it. */
+ this.handleDisconnect();
+ }
+ }
+
+ /**
+ * Starts the keepalive ping timer if appropriate. If the timer already ran
+ * out while there were no active requests, instead send a ping immediately.
+ * If the ping timer is already running or a ping is currently in flight,
+ * instead do nothing and wait for them to resolve.
+ */
+ private maybeStartKeepalivePingTimer() {
+ if (!this.canSendPing()) {
+ return;
+ }
+ if (this.pendingSendKeepalivePing) {
+ this.pendingSendKeepalivePing = false;
+ this.maybeSendPing();
+ } else if (!this.keepaliveTimerId && !this.keepaliveTimeoutId) {
+ this.keepaliveTrace(
+ 'Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms'
+ );
+ this.keepaliveTimerId = setTimeout(() => {
+ this.maybeSendPing();
+ }, this.keepaliveTimeMs).unref?.();
+ }
+ /* Otherwise, there is already either a keepalive timer or a ping pending,
+ * wait for those to resolve. */
+ }
+
+ private stopKeepalivePings() {
+ if (this.keepaliveTimerId) {
+ clearTimeout(this.keepaliveTimerId);
+ this.keepaliveTimerId = null;
+ }
+ this.clearKeepaliveTimeout();
+ }
+
+ private removeActiveCall(call: Http2SubchannelCall) {
+ this.activeCalls.delete(call);
+ if (this.activeCalls.size === 0) {
+ this.session.unref();
+ }
+ }
+
+ private addActiveCall(call: Http2SubchannelCall) {
+ this.activeCalls.add(call);
+ if (this.activeCalls.size === 1) {
+ this.session.ref();
+ if (!this.keepaliveWithoutCalls) {
+ this.maybeStartKeepalivePingTimer();
+ }
+ }
+ }
+
+ createCall(
+ metadata: Metadata,
+ host: string,
+ method: string,
+ listener: SubchannelCallInterceptingListener,
+ subchannelCallStatsTracker: Partial<CallEventTracker>
+ ): Http2SubchannelCall {
+ const headers = metadata.toHttp2Headers();
+ headers[HTTP2_HEADER_AUTHORITY] = host;
+ headers[HTTP2_HEADER_USER_AGENT] = this.userAgent;
+ headers[HTTP2_HEADER_CONTENT_TYPE] = 'application/grpc';
+ headers[HTTP2_HEADER_METHOD] = 'POST';
+ headers[HTTP2_HEADER_PATH] = method;
+ headers[HTTP2_HEADER_TE] = 'trailers';
+ let http2Stream: http2.ClientHttp2Stream;
+ /* In theory, if an error is thrown by session.request because session has
+ * become unusable (e.g. because it has received a goaway), this subchannel
+ * should soon see the corresponding close or goaway event anyway and leave
+ * READY. But we have seen reports that this does not happen
+ * (https://github.com/googleapis/nodejs-firestore/issues/1023#issuecomment-653204096)
+ * so for defense in depth, we just discard the session when we see an
+ * error here.
+ */
+ try {
+ http2Stream = this.session!.request(headers);
+ } catch (e) {
+ this.handleDisconnect();
+ throw e;
+ }
+ this.flowControlTrace(
+ 'local window size: ' +
+ this.session.state.localWindowSize +
+ ' remote window size: ' +
+ this.session.state.remoteWindowSize
+ );
+ this.internalsTrace(
+ 'session.closed=' +
+ this.session.closed +
+ ' session.destroyed=' +
+ this.session.destroyed +
+ ' session.socket.destroyed=' +
+ this.session.socket.destroyed
+ );
+ let eventTracker: CallEventTracker;
+ // eslint-disable-next-line prefer-const
+ let call: Http2SubchannelCall;
+ if (this.channelzEnabled) {
+ this.streamTracker.addCallStarted();
+ eventTracker = {
+ addMessageSent: () => {
+ this.messagesSent += 1;
+ this.lastMessageSentTimestamp = new Date();
+ subchannelCallStatsTracker.addMessageSent?.();
+ },
+ addMessageReceived: () => {
+ this.messagesReceived += 1;
+ this.lastMessageReceivedTimestamp = new Date();
+ subchannelCallStatsTracker.addMessageReceived?.();
+ },
+ onCallEnd: status => {
+ subchannelCallStatsTracker.onCallEnd?.(status);
+ this.removeActiveCall(call);
+ },
+ onStreamEnd: success => {
+ if (success) {
+ this.streamTracker.addCallSucceeded();
+ } else {
+ this.streamTracker.addCallFailed();
+ }
+ subchannelCallStatsTracker.onStreamEnd?.(success);
+ },
+ };
+ } else {
+ eventTracker = {
+ addMessageSent: () => {
+ subchannelCallStatsTracker.addMessageSent?.();
+ },
+ addMessageReceived: () => {
+ subchannelCallStatsTracker.addMessageReceived?.();
+ },
+ onCallEnd: status => {
+ subchannelCallStatsTracker.onCallEnd?.(status);
+ this.removeActiveCall(call);
+ },
+ onStreamEnd: success => {
+ subchannelCallStatsTracker.onStreamEnd?.(success);
+ },
+ };
+ }
+ call = new Http2SubchannelCall(
+ http2Stream,
+ eventTracker,
+ listener,
+ this,
+ getNextCallNumber()
+ );
+ this.addActiveCall(call);
+ return call;
+ }
+
+ getChannelzRef(): SocketRef {
+ return this.channelzRef;
+ }
+
+ getPeerName() {
+ return this.subchannelAddressString;
+ }
+
+ getOptions() {
+ return this.options;
+ }
+
+ shutdown() {
+ this.session.close();
+ unregisterChannelzRef(this.channelzRef);
+ }
+}
+
+export interface SubchannelConnector {
+ connect(
+ address: SubchannelAddress,
+ credentials: ChannelCredentials,
+ options: ChannelOptions
+ ): Promise<Transport>;
+ shutdown(): void;
+}
+
+export class Http2SubchannelConnector implements SubchannelConnector {
+ private session: http2.ClientHttp2Session | null = null;
+ private isShutdown = false;
+ constructor(private channelTarget: GrpcUri) {}
+ private trace(text: string) {
+ logging.trace(
+ LogVerbosity.DEBUG,
+ TRACER_NAME,
+ uriToString(this.channelTarget) + ' ' + text
+ );
+ }
+ private createSession(
+ address: SubchannelAddress,
+ credentials: ChannelCredentials,
+ options: ChannelOptions,
+ proxyConnectionResult: ProxyConnectionResult
+ ): Promise<Http2Transport> {
+ if (this.isShutdown) {
+ return Promise.reject();
+ }
+ return new Promise<Http2Transport>((resolve, reject) => {
+ let remoteName: string | null;
+ if (proxyConnectionResult.realTarget) {
+ remoteName = uriToString(proxyConnectionResult.realTarget);
+ this.trace(
+ 'creating HTTP/2 session through proxy to ' +
+ uriToString(proxyConnectionResult.realTarget)
+ );
+ } else {
+ remoteName = null;
+ this.trace(
+ 'creating HTTP/2 session to ' + subchannelAddressToString(address)
+ );
+ }
+ const targetAuthority = getDefaultAuthority(
+ proxyConnectionResult.realTarget ?? this.channelTarget
+ );
+ let connectionOptions: http2.SecureClientSessionOptions =
+ credentials._getConnectionOptions() || {};
+ connectionOptions.maxSendHeaderBlockLength = Number.MAX_SAFE_INTEGER;
+ if ('grpc-node.max_session_memory' in options) {
+ connectionOptions.maxSessionMemory =
+ options['grpc-node.max_session_memory'];
+ } else {
+ /* By default, set a very large max session memory limit, to effectively
+ * disable enforcement of the limit. Some testing indicates that Node's
+ * behavior degrades badly when this limit is reached, so we solve that
+ * by disabling the check entirely. */
+ connectionOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER;
+ }
+ let addressScheme = 'http://';
+ if ('secureContext' in connectionOptions) {
+ addressScheme = 'https://';
+ // If provided, the value of grpc.ssl_target_name_override should be used
+ // to override the target hostname when checking server identity.
+ // This option is used for testing only.
+ if (options['grpc.ssl_target_name_override']) {
+ const sslTargetNameOverride =
+ options['grpc.ssl_target_name_override']!;
+ connectionOptions.checkServerIdentity = (
+ host: string,
+ cert: PeerCertificate
+ ): Error | undefined => {
+ return checkServerIdentity(sslTargetNameOverride, cert);
+ };
+ connectionOptions.servername = sslTargetNameOverride;
+ } else {
+ const authorityHostname =
+ splitHostPort(targetAuthority)?.host ?? 'localhost';
+ // We want to always set servername to support SNI
+ connectionOptions.servername = authorityHostname;
+ }
+ if (proxyConnectionResult.socket) {
+ /* This is part of the workaround for
+ * https://github.com/nodejs/node/issues/32922. Without that bug,
+ * proxyConnectionResult.socket would always be a plaintext socket and
+ * this would say
+ * connectionOptions.socket = proxyConnectionResult.socket; */
+ connectionOptions.createConnection = (authority, option) => {
+ return proxyConnectionResult.socket!;
+ };
+ }
+ } else {
+ /* In all but the most recent versions of Node, http2.connect does not use
+ * the options when establishing plaintext connections, so we need to
+ * establish that connection explicitly. */
+ connectionOptions.createConnection = (authority, option) => {
+ if (proxyConnectionResult.socket) {
+ return proxyConnectionResult.socket;
+ } else {
+ /* net.NetConnectOpts is declared in a way that is more restrictive
+ * than what net.connect will actually accept, so we use the type
+ * assertion to work around that. */
+ return net.connect(address);
+ }
+ };
+ }
+
+ connectionOptions = {
+ ...connectionOptions,
+ ...address,
+ enableTrace: options['grpc-node.tls_enable_trace'] === 1,
+ };
+
+ /* http2.connect uses the options here:
+ * https://github.com/nodejs/node/blob/70c32a6d190e2b5d7b9ff9d5b6a459d14e8b7d59/lib/internal/http2/core.js#L3028-L3036
+ * The spread operator overides earlier values with later ones, so any port
+ * or host values in the options will be used rather than any values extracted
+ * from the first argument. In addition, the path overrides the host and port,
+ * as documented for plaintext connections here:
+ * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener
+ * and for TLS connections here:
+ * https://nodejs.org/api/tls.html#tls_tls_connect_options_callback. In
+ * earlier versions of Node, http2.connect passes these options to
+ * tls.connect but not net.connect, so in the insecure case we still need
+ * to set the createConnection option above to create the connection
+ * explicitly. We cannot do that in the TLS case because http2.connect
+ * passes necessary additional options to tls.connect.
+ * The first argument just needs to be parseable as a URL and the scheme
+ * determines whether the connection will be established over TLS or not.
+ */
+ const session = http2.connect(
+ addressScheme + targetAuthority,
+ connectionOptions
+ );
+ this.session = session;
+ let errorMessage = 'Failed to connect';
+ session.unref();
+ session.once('connect', () => {
+ session.removeAllListeners();
+ resolve(new Http2Transport(session, address, options, remoteName));
+ this.session = null;
+ });
+ session.once('close', () => {
+ this.session = null;
+ // Leave time for error event to happen before rejecting
+ setImmediate(() => {
+ reject(`${errorMessage} (${new Date().toISOString()})`);
+ });
+ });
+ session.once('error', error => {
+ errorMessage = (error as Error).message;
+ this.trace('connection failed with error ' + errorMessage);
+ });
+ });
+ }
+ connect(
+ address: SubchannelAddress,
+ credentials: ChannelCredentials,
+ options: ChannelOptions
+ ): Promise<Http2Transport> {
+ if (this.isShutdown) {
+ return Promise.reject();
+ }
+ /* Pass connection options through to the proxy so that it's able to
+ * upgrade it's connection to support tls if needed.
+ * This is a workaround for https://github.com/nodejs/node/issues/32922
+ * See https://github.com/grpc/grpc-node/pull/1369 for more info. */
+ const connectionOptions: ConnectionOptions =
+ credentials._getConnectionOptions() || {};
+
+ if ('secureContext' in connectionOptions) {
+ connectionOptions.ALPNProtocols = ['h2'];
+ // If provided, the value of grpc.ssl_target_name_override should be used
+ // to override the target hostname when checking server identity.
+ // This option is used for testing only.
+ if (options['grpc.ssl_target_name_override']) {
+ const sslTargetNameOverride = options['grpc.ssl_target_name_override']!;
+ connectionOptions.checkServerIdentity = (
+ host: string,
+ cert: PeerCertificate
+ ): Error | undefined => {
+ return checkServerIdentity(sslTargetNameOverride, cert);
+ };
+ connectionOptions.servername = sslTargetNameOverride;
+ } else {
+ if ('grpc.http_connect_target' in options) {
+ /* This is more or less how servername will be set in createSession
+ * if a connection is successfully established through the proxy.
+ * If the proxy is not used, these connectionOptions are discarded
+ * anyway */
+ const targetPath = getDefaultAuthority(
+ parseUri(options['grpc.http_connect_target'] as string) ?? {
+ path: 'localhost',
+ }
+ );
+ const hostPort = splitHostPort(targetPath);
+ connectionOptions.servername = hostPort?.host ?? targetPath;
+ }
+ }
+ if (options['grpc-node.tls_enable_trace']) {
+ connectionOptions.enableTrace = true;
+ }
+ }
+
+ return getProxiedConnection(address, options, connectionOptions).then(
+ result => this.createSession(address, credentials, options, result)
+ );
+ }
+
+ shutdown(): void {
+ this.isShutdown = true;
+ this.session?.close();
+ this.session = null;
+ }
+}
diff --git a/frontend-old/node_modules/@grpc/grpc-js/src/uri-parser.ts b/frontend-old/node_modules/@grpc/grpc-js/src/uri-parser.ts
new file mode 100644
index 0000000..20c3d53
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/grpc-js/src/uri-parser.ts
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2020 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+export interface GrpcUri {
+ scheme?: string;
+ authority?: string;
+ path: string;
+}
+
+/*
+ * The groups correspond to URI parts as follows:
+ * 1. scheme
+ * 2. authority
+ * 3. path
+ */
+const URI_REGEX = /^(?:([A-Za-z0-9+.-]+):)?(?:\/\/([^/]*)\/)?(.+)$/;
+
+export function parseUri(uriString: string): GrpcUri | null {
+ const parsedUri = URI_REGEX.exec(uriString);
+ if (parsedUri === null) {
+ return null;
+ }
+ return {
+ scheme: parsedUri[1],
+ authority: parsedUri[2],
+ path: parsedUri[3],
+ };
+}
+
+export interface HostPort {
+ host: string;
+ port?: number;
+}
+
+const NUMBER_REGEX = /^\d+$/;
+
+export function splitHostPort(path: string): HostPort | null {
+ if (path.startsWith('[')) {
+ const hostEnd = path.indexOf(']');
+ if (hostEnd === -1) {
+ return null;
+ }
+ const host = path.substring(1, hostEnd);
+ /* Only an IPv6 address should be in bracketed notation, and an IPv6
+ * address should have at least one colon */
+ if (host.indexOf(':') === -1) {
+ return null;
+ }
+ if (path.length > hostEnd + 1) {
+ if (path[hostEnd + 1] === ':') {
+ const portString = path.substring(hostEnd + 2);
+ if (NUMBER_REGEX.test(portString)) {
+ return {
+ host: host,
+ port: +portString,
+ };
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ } else {
+ return {
+ host,
+ };
+ }
+ } else {
+ const splitPath = path.split(':');
+ /* Exactly one colon means that this is host:port. Zero colons means that
+ * there is no port. And multiple colons means that this is a bare IPv6
+ * address with no port */
+ if (splitPath.length === 2) {
+ if (NUMBER_REGEX.test(splitPath[1])) {
+ return {
+ host: splitPath[0],
+ port: +splitPath[1],
+ };
+ } else {
+ return null;
+ }
+ } else {
+ return {
+ host: path,
+ };
+ }
+ }
+}
+
+export function uriToString(uri: GrpcUri): string {
+ let result = '';
+ if (uri.scheme !== undefined) {
+ result += uri.scheme + ':';
+ }
+ if (uri.authority !== undefined) {
+ result += '//' + uri.authority + '/';
+ }
+ result += uri.path;
+ return result;
+}
diff --git a/frontend-old/node_modules/@grpc/proto-loader/LICENSE b/frontend-old/node_modules/@grpc/proto-loader/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/frontend-old/node_modules/@grpc/proto-loader/README.md b/frontend-old/node_modules/@grpc/proto-loader/README.md
new file mode 100644
index 0000000..935c100
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/README.md
@@ -0,0 +1,140 @@
+# gRPC Protobuf Loader
+
+A utility package for loading `.proto` files for use with gRPC, using the latest Protobuf.js package.
+Please refer to [protobuf.js' documentation](https://github.com/dcodeIO/protobuf.js/blob/master/README.md)
+to understands its features and limitations.
+
+## Installation
+
+```sh
+npm install @grpc/proto-loader
+```
+
+## Usage
+
+```js
+const protoLoader = require('@grpc/proto-loader');
+const grpcLibrary = require('grpc');
+// OR
+const grpcLibrary = require('@grpc/grpc-js');
+
+protoLoader.load(protoFileName, options).then(packageDefinition => {
+ const packageObject = grpcLibrary.loadPackageDefinition(packageDefinition);
+});
+// OR
+const packageDefinition = protoLoader.loadSync(protoFileName, options);
+const packageObject = grpcLibrary.loadPackageDefinition(packageDefinition);
+```
+
+The options parameter is an object that can have the following optional properties:
+
+| Field name | Valid values | Description
+|------------|--------------|------------
+| `keepCase` | `true` or `false` | Preserve field names. The default is to change them to camel case.
+| `longs` | `String` or `Number` | The type to use to represent `long` values. Defaults to a `Long` object type.
+| `enums` | `String` | The type to use to represent `enum` values. Defaults to the numeric value.
+| `bytes` | `Array` or `String` | The type to use to represent `bytes` values. Defaults to `Buffer`.
+| `defaults` | `true` or `false` | Set default values on output objects. Defaults to `false`.
+| `arrays` | `true` or `false` | Set empty arrays for missing array values even if `defaults` is `false` Defaults to `false`.
+| `objects` | `true` or `false` | Set empty objects for missing object values even if `defaults` is `false` Defaults to `false`.
+| `oneofs` | `true` or `false` | Set virtual oneof properties to the present field's name. Defaults to `false`.
+| `json` | `true` or `false` | Represent `Infinity` and `NaN` as strings in `float` fields, and automatically decode `google.protobuf.Any` values. Defaults to `false`
+| `includeDirs` | An array of strings | A list of search paths for imported `.proto` files.
+
+The following options object closely approximates the existing behavior of `grpc.load`:
+
+```js
+const options = {
+ keepCase: true,
+ longs: String,
+ enums: String,
+ defaults: true,
+ oneofs: true
+}
+```
+
+## Generating TypeScript types
+
+The `proto-loader-gen-types` script distributed with this package can be used to generate TypeScript type information for the objects loaded at runtime. More information about how to use it can be found in [the *@grpc/proto-loader TypeScript Type Generator CLI Tool* proposal document](https://github.com/grpc/proposal/blob/master/L70-node-proto-loader-type-generator.md). The arguments mostly match the `load` function's options; the full usage information is as follows:
+
+```console
+proto-loader-gen-types.js [options] filenames...
+
+Options:
+ --help Show help [boolean]
+ --version Show version number [boolean]
+ --keepCase Preserve the case of field names
+ [boolean] [default: false]
+ --longs The type that should be used to output 64 bit
+ integer values. Can be String, Number
+ [string] [default: "Long"]
+ --enums The type that should be used to output enum fields.
+ Can be String [string] [default: "number"]
+ --bytes The type that should be used to output bytes
+ fields. Can be String, Array
+ [string] [default: "Buffer"]
+ --defaults Output default values for omitted fields
+ [boolean] [default: false]
+ --arrays Output default values for omitted repeated fields
+ even if --defaults is not set
+ [boolean] [default: false]
+ --objects Output default values for omitted message fields
+ even if --defaults is not set
+ [boolean] [default: false]
+ --oneofs Output virtual oneof fields set to the present
+ field's name [boolean] [default: false]
+ --json Represent Infinity and NaN as strings in float
+ fields. Also decode google.protobuf.Any
+ automatically [boolean] [default: false]
+ --includeComments Generate doc comments from comments in the original
+ files [boolean] [default: false]
+ -I, --includeDirs Directories to search for included files [array]
+ -O, --outDir Directory in which to output files
+ [string] [required]
+ --grpcLib The gRPC implementation library that these types
+ will be used with. If not provided, some types will
+ not be generated [string]
+ --inputTemplate Template for mapping input or "permissive" type
+ names [string] [default: "%s"]
+ --outputTemplate Template for mapping output or "restricted" type
+ names [string] [default: "%s__Output"]
+ --inputBranded Output property for branded type for "permissive"
+ types with fullName of the Message as its value
+ [boolean] [default: false]
+ --outputBranded Output property for branded type for "restricted"
+ types with fullName of the Message as its value
+ [boolean] [default: false]
+ --targetFileExtension File extension for generated files.
+ [string] [default: ".ts"]
+ --importFileExtension File extension for import specifiers in generated
+ code. [string] [default: ""]
+```
+
+### Example Usage
+
+Generate the types:
+
+```sh
+$(npm bin)/proto-loader-gen-types --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.proto
+```
+
+Consume the types:
+
+```ts
+import * as grpc from '@grpc/grpc-js';
+import * as protoLoader from '@grpc/proto-loader';
+import type { ProtoGrpcType } from './proto/example.ts';
+import type { ExampleHandlers } from './proto/example_package/Example.ts';
+
+const exampleServer: ExampleHandlers = {
+ // server handlers implementation...
+};
+
+const packageDefinition = protoLoader.loadSync('./proto/example.proto');
+const proto = (grpc.loadPackageDefinition(
+ packageDefinition
+) as unknown) as ProtoGrpcType;
+
+const server = new grpc.Server();
+server.addService(proto.example_package.Example.service, exampleServer);
+```
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js b/frontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js
new file mode 100755
index 0000000..1df55f7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js
@@ -0,0 +1,913 @@
+#!/usr/bin/env node
+"use strict";
+/**
+ * @license
+ * Copyright 2020 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+const path = require("path");
+const Protobuf = require("protobufjs");
+const yargs = require("yargs");
+const camelCase = require("lodash.camelcase");
+const util_1 = require("../src/util");
+const templateStr = "%s";
+const useNameFmter = ({ outputTemplate, inputTemplate }) => {
+ if (outputTemplate === inputTemplate) {
+ throw new Error('inputTemplate and outputTemplate must differ');
+ }
+ return {
+ outputName: (n) => outputTemplate.replace(templateStr, n),
+ inputName: (n) => inputTemplate.replace(templateStr, n)
+ };
+};
+class TextFormatter {
+ constructor() {
+ this.indentText = ' ';
+ this.indentValue = 0;
+ this.textParts = [];
+ }
+ indent() {
+ this.indentValue += 1;
+ }
+ unindent() {
+ this.indentValue -= 1;
+ }
+ writeLine(line) {
+ for (let i = 0; i < this.indentValue; i += 1) {
+ this.textParts.push(this.indentText);
+ }
+ this.textParts.push(line);
+ this.textParts.push('\n');
+ }
+ getFullText() {
+ return this.textParts.join('');
+ }
+}
+// GENERATOR UTILITY FUNCTIONS
+function compareName(x, y) {
+ if (x.name < y.name) {
+ return -1;
+ }
+ else if (x.name > y.name) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+}
+function isNamespaceBase(obj) {
+ return Array.isArray(obj.nestedArray);
+}
+function stripLeadingPeriod(name) {
+ return name.startsWith('.') ? name.substring(1) : name;
+}
+function getImportPath(to) {
+ /* If the thing we are importing is defined in a message, it is generated in
+ * the same file as that message. */
+ if (to.parent instanceof Protobuf.Type) {
+ return getImportPath(to.parent);
+ }
+ return stripLeadingPeriod(to.fullName).replace(/\./g, '/');
+}
+function getPath(to, options) {
+ return stripLeadingPeriod(to.fullName).replace(/\./g, '/') + options.targetFileExtension;
+}
+function getPathToRoot(from) {
+ const depth = stripLeadingPeriod(from.fullName).split('.').length - 1;
+ if (depth === 0) {
+ return './';
+ }
+ let path = '';
+ for (let i = 0; i < depth; i++) {
+ path += '../';
+ }
+ return path;
+}
+function getRelativeImportPath(from, to) {
+ return getPathToRoot(from) + getImportPath(to);
+}
+function getTypeInterfaceName(type) {
+ return type.fullName.replace(/\./g, '_');
+}
+function getImportLine(dependency, from, options) {
+ const filePath = from === undefined ? './' + getImportPath(dependency) : getRelativeImportPath(from, dependency);
+ const { outputName, inputName } = useNameFmter(options);
+ const typeInterfaceName = getTypeInterfaceName(dependency);
+ let importedTypes;
+ /* If the dependency is defined within a message, it will be generated in that
+ * message's file and exported using its typeInterfaceName. */
+ if (dependency.parent instanceof Protobuf.Type) {
+ if (dependency instanceof Protobuf.Type || dependency instanceof Protobuf.Enum) {
+ importedTypes = `${inputName(typeInterfaceName)}, ${outputName(typeInterfaceName)}`;
+ }
+ else if (dependency instanceof Protobuf.Service) {
+ importedTypes = `${typeInterfaceName}Client, ${typeInterfaceName}Definition`;
+ }
+ else {
+ throw new Error('Invalid object passed to getImportLine');
+ }
+ }
+ else {
+ if (dependency instanceof Protobuf.Type || dependency instanceof Protobuf.Enum) {
+ importedTypes = `${inputName(dependency.name)} as ${inputName(typeInterfaceName)}, ${outputName(dependency.name)} as ${outputName(typeInterfaceName)}`;
+ }
+ else if (dependency instanceof Protobuf.Service) {
+ importedTypes = `${dependency.name}Client as ${typeInterfaceName}Client, ${dependency.name}Definition as ${typeInterfaceName}Definition`;
+ }
+ else {
+ throw new Error('Invalid object passed to getImportLine');
+ }
+ }
+ return `import type { ${importedTypes} } from '${filePath}${options.importFileExtension}';`;
+}
+function getChildMessagesAndEnums(namespace) {
+ const messageList = [];
+ for (const nested of namespace.nestedArray) {
+ if (nested instanceof Protobuf.Type || nested instanceof Protobuf.Enum) {
+ messageList.push(nested);
+ }
+ if (isNamespaceBase(nested)) {
+ messageList.push(...getChildMessagesAndEnums(nested));
+ }
+ }
+ return messageList;
+}
+function formatComment(formatter, comment, options) {
+ if (!comment && !(options === null || options === void 0 ? void 0 : options.deprecated)) {
+ return;
+ }
+ formatter.writeLine('/**');
+ if (comment) {
+ for (const line of comment.split('\n')) {
+ formatter.writeLine(` * ${line.replace(/\*\//g, '* /')}`);
+ }
+ }
+ if (options === null || options === void 0 ? void 0 : options.deprecated) {
+ formatter.writeLine(' * @deprecated');
+ }
+ formatter.writeLine(' */');
+}
+const typeBrandHint = `This field is a type brand and is not populated at runtime. Instances of this type should be created using type assertions.
+https://github.com/grpc/grpc-node/pull/2281`;
+function formatTypeBrand(formatter, messageType) {
+ formatComment(formatter, typeBrandHint);
+ formatter.writeLine(`__type: '${messageType.fullName}'`);
+}
+// GENERATOR FUNCTIONS
+function getTypeNamePermissive(fieldType, resolvedType, repeated, map, options) {
+ const { inputName } = useNameFmter(options);
+ switch (fieldType) {
+ case 'double':
+ case 'float':
+ return 'number | string';
+ case 'int32':
+ case 'uint32':
+ case 'sint32':
+ case 'fixed32':
+ case 'sfixed32':
+ return 'number';
+ case 'int64':
+ case 'uint64':
+ case 'sint64':
+ case 'fixed64':
+ case 'sfixed64':
+ return 'number | string | Long';
+ case 'bool':
+ return 'boolean';
+ case 'string':
+ return 'string';
+ case 'bytes':
+ return 'Buffer | Uint8Array | string';
+ default:
+ if (resolvedType === null) {
+ throw new Error('Found field with no usable type');
+ }
+ const typeInterfaceName = getTypeInterfaceName(resolvedType);
+ if (resolvedType instanceof Protobuf.Type) {
+ if (repeated || map) {
+ return inputName(typeInterfaceName);
+ }
+ else {
+ return `${inputName(typeInterfaceName)} | null`;
+ }
+ }
+ else {
+ // Enum
+ return inputName(typeInterfaceName);
+ }
+ }
+}
+function getFieldTypePermissive(field, options) {
+ const valueType = getTypeNamePermissive(field.type, field.resolvedType, field.repeated, field.map, options);
+ if (field instanceof Protobuf.MapField) {
+ const keyType = field.keyType === 'string' ? 'string' : 'number';
+ return `{[key: ${keyType}]: ${valueType}}`;
+ }
+ else {
+ return valueType;
+ }
+}
+function generatePermissiveMessageInterface(formatter, messageType, options, nameOverride) {
+ const { inputName } = useNameFmter(options);
+ if (options.includeComments) {
+ formatComment(formatter, messageType.comment, messageType.options);
+ }
+ if (messageType.fullName === '.google.protobuf.Any') {
+ /* This describes the behavior of the Protobuf.js Any wrapper fromObject
+ * replacement function */
+ formatter.writeLine(`export type ${inputName('Any')} = AnyExtension | {`);
+ formatter.writeLine(' type_url: string;');
+ formatter.writeLine(' value: Buffer | Uint8Array | string;');
+ formatter.writeLine('}');
+ return;
+ }
+ formatter.writeLine(`export interface ${inputName(nameOverride !== null && nameOverride !== void 0 ? nameOverride : messageType.name)} {`);
+ formatter.indent();
+ for (const field of messageType.fieldsArray) {
+ const repeatedString = field.repeated ? '[]' : '';
+ const type = getFieldTypePermissive(field, options);
+ if (options.includeComments) {
+ formatComment(formatter, field.comment, field.options);
+ }
+ formatter.writeLine(`'${field.name}'?: (${type})${repeatedString};`);
+ }
+ for (const oneof of messageType.oneofsArray) {
+ const typeString = oneof.fieldsArray.map(field => `"${field.name}"`).join('|');
+ if (options.includeComments) {
+ formatComment(formatter, oneof.comment, oneof.options);
+ }
+ formatter.writeLine(`'${oneof.name}'?: ${typeString};`);
+ }
+ if (options.inputBranded) {
+ formatTypeBrand(formatter, messageType);
+ }
+ formatter.unindent();
+ formatter.writeLine('}');
+}
+function getTypeNameRestricted(fieldType, resolvedType, repeated, map, options) {
+ const { outputName } = useNameFmter(options);
+ switch (fieldType) {
+ case 'double':
+ case 'float':
+ if (options.json) {
+ return 'number | string';
+ }
+ else {
+ return 'number';
+ }
+ case 'int32':
+ case 'uint32':
+ case 'sint32':
+ case 'fixed32':
+ case 'sfixed32':
+ return 'number';
+ case 'int64':
+ case 'uint64':
+ case 'sint64':
+ case 'fixed64':
+ case 'sfixed64':
+ if (options.longs === Number) {
+ return 'number';
+ }
+ else if (options.longs === String) {
+ return 'string';
+ }
+ else {
+ return 'Long';
+ }
+ case 'bool':
+ return 'boolean';
+ case 'string':
+ return 'string';
+ case 'bytes':
+ if (options.bytes === Array) {
+ return 'Uint8Array';
+ }
+ else if (options.bytes === String) {
+ return 'string';
+ }
+ else {
+ return 'Buffer';
+ }
+ default:
+ if (resolvedType === null) {
+ throw new Error('Found field with no usable type');
+ }
+ const typeInterfaceName = getTypeInterfaceName(resolvedType);
+ if (resolvedType instanceof Protobuf.Type) {
+ /* null is only used to represent absent message values if the defaults
+ * option is set, and only for non-repeated, non-map fields. */
+ if (options.defaults && !repeated && !map) {
+ return `${outputName(typeInterfaceName)} | null`;
+ }
+ else {
+ return `${outputName(typeInterfaceName)}`;
+ }
+ }
+ else {
+ // Enum
+ return outputName(typeInterfaceName);
+ }
+ }
+}
+function getFieldTypeRestricted(field, options) {
+ const valueType = getTypeNameRestricted(field.type, field.resolvedType, field.repeated, field.map, options);
+ if (field instanceof Protobuf.MapField) {
+ const keyType = field.keyType === 'string' ? 'string' : 'number';
+ return `{[key: ${keyType}]: ${valueType}}`;
+ }
+ else {
+ return valueType;
+ }
+}
+function generateRestrictedMessageInterface(formatter, messageType, options, nameOverride) {
+ var _a, _b, _c;
+ const { outputName } = useNameFmter(options);
+ if (options.includeComments) {
+ formatComment(formatter, messageType.comment, messageType.options);
+ }
+ if (messageType.fullName === '.google.protobuf.Any' && options.json) {
+ /* This describes the behavior of the Protobuf.js Any wrapper toObject
+ * replacement function */
+ let optionalString = options.defaults ? '' : '?';
+ formatter.writeLine(`export type ${outputName('Any')} = AnyExtension | {`);
+ formatter.writeLine(` type_url${optionalString}: string;`);
+ formatter.writeLine(` value${optionalString}: ${getTypeNameRestricted('bytes', null, false, false, options)};`);
+ formatter.writeLine('}');
+ return;
+ }
+ formatter.writeLine(`export interface ${outputName(nameOverride !== null && nameOverride !== void 0 ? nameOverride : messageType.name)} {`);
+ formatter.indent();
+ for (const field of messageType.fieldsArray) {
+ let fieldGuaranteed;
+ if (field.partOf) {
+ // The field is not guaranteed populated if it is part of a oneof
+ fieldGuaranteed = false;
+ }
+ else if (field.repeated) {
+ fieldGuaranteed = (_a = (options.defaults || options.arrays)) !== null && _a !== void 0 ? _a : false;
+ }
+ else if (field.map) {
+ fieldGuaranteed = (_b = (options.defaults || options.objects)) !== null && _b !== void 0 ? _b : false;
+ }
+ else {
+ fieldGuaranteed = (_c = options.defaults) !== null && _c !== void 0 ? _c : false;
+ }
+ const optionalString = fieldGuaranteed ? '' : '?';
+ const repeatedString = field.repeated ? '[]' : '';
+ const type = getFieldTypeRestricted(field, options);
+ if (options.includeComments) {
+ formatComment(formatter, field.comment, field.options);
+ }
+ formatter.writeLine(`'${field.name}'${optionalString}: (${type})${repeatedString};`);
+ }
+ if (options.oneofs) {
+ for (const oneof of messageType.oneofsArray) {
+ const typeString = oneof.fieldsArray.map(field => `"${field.name}"`).join('|');
+ if (options.includeComments) {
+ formatComment(formatter, oneof.comment, oneof.options);
+ }
+ formatter.writeLine(`'${oneof.name}'?: ${typeString};`);
+ }
+ }
+ if (options.outputBranded) {
+ formatTypeBrand(formatter, messageType);
+ }
+ formatter.unindent();
+ formatter.writeLine('}');
+}
+function generateMessageInterfaces(formatter, messageType, options) {
+ var _a, _b;
+ let usesLong = false;
+ let seenDeps = new Set();
+ const childTypes = getChildMessagesAndEnums(messageType);
+ formatter.writeLine(`// Original file: ${(_b = ((_a = messageType.filename) !== null && _a !== void 0 ? _a : 'null')) === null || _b === void 0 ? void 0 : _b.replace(/\\/g, '/')}`);
+ formatter.writeLine('');
+ const isLongField = (field) => ['int64', 'uint64', 'sint64', 'fixed64', 'sfixed64'].includes(field.type);
+ messageType.fieldsArray.sort((fieldA, fieldB) => fieldA.id - fieldB.id);
+ for (const field of messageType.fieldsArray) {
+ if (field.resolvedType && childTypes.indexOf(field.resolvedType) < 0) {
+ const dependency = field.resolvedType;
+ if (seenDeps.has(dependency.fullName)) {
+ continue;
+ }
+ seenDeps.add(dependency.fullName);
+ formatter.writeLine(getImportLine(dependency, messageType, options));
+ }
+ if (isLongField(field)) {
+ usesLong = true;
+ }
+ }
+ for (const childType of childTypes) {
+ if (childType instanceof Protobuf.Type) {
+ for (const field of childType.fieldsArray) {
+ if (field.resolvedType && childTypes.indexOf(field.resolvedType) < 0) {
+ const dependency = field.resolvedType;
+ if (seenDeps.has(dependency.fullName)) {
+ continue;
+ }
+ seenDeps.add(dependency.fullName);
+ formatter.writeLine(getImportLine(dependency, messageType, options));
+ }
+ if (isLongField(field)) {
+ usesLong = true;
+ }
+ }
+ }
+ }
+ if (usesLong) {
+ formatter.writeLine("import type { Long } from '@grpc/proto-loader';");
+ }
+ if (messageType.fullName === '.google.protobuf.Any') {
+ formatter.writeLine("import type { AnyExtension } from '@grpc/proto-loader';");
+ }
+ formatter.writeLine('');
+ for (const childType of childTypes.sort(compareName)) {
+ const nameOverride = getTypeInterfaceName(childType);
+ if (childType instanceof Protobuf.Type) {
+ generatePermissiveMessageInterface(formatter, childType, options, nameOverride);
+ formatter.writeLine('');
+ generateRestrictedMessageInterface(formatter, childType, options, nameOverride);
+ }
+ else {
+ generateEnumInterface(formatter, childType, options, nameOverride);
+ }
+ formatter.writeLine('');
+ }
+ generatePermissiveMessageInterface(formatter, messageType, options);
+ formatter.writeLine('');
+ generateRestrictedMessageInterface(formatter, messageType, options);
+}
+function generateEnumInterface(formatter, enumType, options, nameOverride) {
+ var _a, _b, _c;
+ const { inputName, outputName } = useNameFmter(options);
+ const name = nameOverride !== null && nameOverride !== void 0 ? nameOverride : enumType.name;
+ formatter.writeLine(`// Original file: ${(_b = ((_a = enumType.filename) !== null && _a !== void 0 ? _a : 'null')) === null || _b === void 0 ? void 0 : _b.replace(/\\/g, '/')}`);
+ formatter.writeLine('');
+ if (options.includeComments) {
+ formatComment(formatter, enumType.comment, enumType.options);
+ }
+ formatter.writeLine(`export const ${name} = {`);
+ formatter.indent();
+ for (const key of Object.keys(enumType.values)) {
+ if (options.includeComments) {
+ formatComment(formatter, enumType.comments[key], ((_c = enumType.valuesOptions) !== null && _c !== void 0 ? _c : {})[key]);
+ }
+ formatter.writeLine(`${key}: ${options.enums == String ? `'${key}'` : enumType.values[key]},`);
+ }
+ formatter.unindent();
+ formatter.writeLine('} as const;');
+ // Permissive Type
+ formatter.writeLine('');
+ if (options.includeComments) {
+ formatComment(formatter, enumType.comment, enumType.options);
+ }
+ formatter.writeLine(`export type ${inputName(name)} =`);
+ formatter.indent();
+ for (const key of Object.keys(enumType.values)) {
+ if (options.includeComments) {
+ formatComment(formatter, enumType.comments[key]);
+ }
+ formatter.writeLine(`| '${key}'`);
+ formatter.writeLine(`| ${enumType.values[key]}`);
+ }
+ formatter.unindent();
+ // Restrictive Type
+ formatter.writeLine('');
+ if (options.includeComments) {
+ formatComment(formatter, enumType.comment, enumType.options);
+ }
+ formatter.writeLine(`export type ${outputName(name)} = typeof ${name}[keyof typeof ${name}]`);
+}
+/**
+ * This is a list of methods that are exist in the generic Client class in the
+ * gRPC libraries. TypeScript has a problem with methods in subclasses with the
+ * same names as methods in the superclass, but with mismatched APIs. So, we
+ * avoid generating methods with these names in the service client interfaces.
+ * We always generate two service client methods per service method: one camel
+ * cased, and one with the original casing. So we will still generate one
+ * service client method for any conflicting name.
+ *
+ * Technically, at runtime conflicting name in the service client method
+ * actually shadows the original method, but TypeScript does not have a good
+ * way to represent that. So this change is not 100% accurate, but it gets the
+ * generated code to compile.
+ *
+ * This is just a list of the methods in the Client class definitions in
+ * grpc@1.24.11 and @grpc/grpc-js@1.4.0.
+ */
+const CLIENT_RESERVED_METHOD_NAMES = new Set([
+ 'close',
+ 'getChannel',
+ 'waitForReady',
+ 'makeUnaryRequest',
+ 'makeClientStreamRequest',
+ 'makeServerStreamRequest',
+ 'makeBidiStreamRequest',
+ 'resolveCallInterceptors',
+ /* These methods are private, but TypeScript is not happy with overriding even
+ * private methods with mismatched APIs. */
+ 'checkOptionalUnaryResponseArguments',
+ 'checkMetadataAndOptions'
+]);
+function generateServiceClientInterface(formatter, serviceType, options) {
+ const { outputName, inputName } = useNameFmter(options);
+ if (options.includeComments) {
+ formatComment(formatter, serviceType.comment, serviceType.options);
+ }
+ formatter.writeLine(`export interface ${serviceType.name}Client extends grpc.Client {`);
+ formatter.indent();
+ for (const methodName of Object.keys(serviceType.methods).sort()) {
+ const method = serviceType.methods[methodName];
+ for (const name of new Set([methodName, camelCase(methodName)])) {
+ if (CLIENT_RESERVED_METHOD_NAMES.has(name)) {
+ continue;
+ }
+ if (options.includeComments) {
+ formatComment(formatter, method.comment, method.options);
+ }
+ const requestType = inputName(getTypeInterfaceName(method.resolvedRequestType));
+ const responseType = outputName(getTypeInterfaceName(method.resolvedResponseType));
+ const callbackType = `grpc.requestCallback<${responseType}>`;
+ if (method.requestStream) {
+ if (method.responseStream) {
+ // Bidi streaming
+ const callType = `grpc.ClientDuplexStream<${requestType}, ${responseType}>`;
+ formatter.writeLine(`${name}(metadata: grpc.Metadata, options?: grpc.CallOptions): ${callType};`);
+ formatter.writeLine(`${name}(options?: grpc.CallOptions): ${callType};`);
+ }
+ else {
+ // Client streaming
+ const callType = `grpc.ClientWritableStream<${requestType}>`;
+ formatter.writeLine(`${name}(metadata: grpc.Metadata, options: grpc.CallOptions, callback: ${callbackType}): ${callType};`);
+ formatter.writeLine(`${name}(metadata: grpc.Metadata, callback: ${callbackType}): ${callType};`);
+ formatter.writeLine(`${name}(options: grpc.CallOptions, callback: ${callbackType}): ${callType};`);
+ formatter.writeLine(`${name}(callback: ${callbackType}): ${callType};`);
+ }
+ }
+ else {
+ if (method.responseStream) {
+ // Server streaming
+ const callType = `grpc.ClientReadableStream<${responseType}>`;
+ formatter.writeLine(`${name}(argument: ${requestType}, metadata: grpc.Metadata, options?: grpc.CallOptions): ${callType};`);
+ formatter.writeLine(`${name}(argument: ${requestType}, options?: grpc.CallOptions): ${callType};`);
+ }
+ else {
+ // Unary
+ const callType = 'grpc.ClientUnaryCall';
+ formatter.writeLine(`${name}(argument: ${requestType}, metadata: grpc.Metadata, options: grpc.CallOptions, callback: ${callbackType}): ${callType};`);
+ formatter.writeLine(`${name}(argument: ${requestType}, metadata: grpc.Metadata, callback: ${callbackType}): ${callType};`);
+ formatter.writeLine(`${name}(argument: ${requestType}, options: grpc.CallOptions, callback: ${callbackType}): ${callType};`);
+ formatter.writeLine(`${name}(argument: ${requestType}, callback: ${callbackType}): ${callType};`);
+ }
+ }
+ }
+ formatter.writeLine('');
+ }
+ formatter.unindent();
+ formatter.writeLine('}');
+}
+function generateServiceHandlerInterface(formatter, serviceType, options) {
+ const { inputName, outputName } = useNameFmter(options);
+ if (options.includeComments) {
+ formatComment(formatter, serviceType.comment, serviceType.options);
+ }
+ formatter.writeLine(`export interface ${serviceType.name}Handlers extends grpc.UntypedServiceImplementation {`);
+ formatter.indent();
+ for (const methodName of Object.keys(serviceType.methods).sort()) {
+ const method = serviceType.methods[methodName];
+ if (options.includeComments) {
+ formatComment(formatter, method.comment, serviceType.options);
+ }
+ const requestType = outputName(getTypeInterfaceName(method.resolvedRequestType));
+ const responseType = inputName(getTypeInterfaceName(method.resolvedResponseType));
+ if (method.requestStream) {
+ if (method.responseStream) {
+ // Bidi streaming
+ formatter.writeLine(`${methodName}: grpc.handleBidiStreamingCall<${requestType}, ${responseType}>;`);
+ }
+ else {
+ // Client streaming
+ formatter.writeLine(`${methodName}: grpc.handleClientStreamingCall<${requestType}, ${responseType}>;`);
+ }
+ }
+ else {
+ if (method.responseStream) {
+ // Server streaming
+ formatter.writeLine(`${methodName}: grpc.handleServerStreamingCall<${requestType}, ${responseType}>;`);
+ }
+ else {
+ // Unary
+ formatter.writeLine(`${methodName}: grpc.handleUnaryCall<${requestType}, ${responseType}>;`);
+ }
+ }
+ formatter.writeLine('');
+ }
+ formatter.unindent();
+ formatter.writeLine('}');
+}
+function generateServiceDefinitionInterface(formatter, serviceType, options) {
+ const { inputName, outputName } = useNameFmter(options);
+ if (options.grpcLib) {
+ formatter.writeLine(`export interface ${serviceType.name}Definition extends grpc.ServiceDefinition {`);
+ }
+ else {
+ formatter.writeLine(`export interface ${serviceType.name}Definition {`);
+ }
+ formatter.indent();
+ for (const methodName of Object.keys(serviceType.methods).sort()) {
+ const method = serviceType.methods[methodName];
+ const requestType = getTypeInterfaceName(method.resolvedRequestType);
+ const responseType = getTypeInterfaceName(method.resolvedResponseType);
+ formatter.writeLine(`${methodName}: MethodDefinition<${inputName(requestType)}, ${inputName(responseType)}, ${outputName(requestType)}, ${outputName(responseType)}>`);
+ }
+ formatter.unindent();
+ formatter.writeLine('}');
+}
+function generateServiceInterfaces(formatter, serviceType, options) {
+ var _a, _b;
+ formatter.writeLine(`// Original file: ${(_b = ((_a = serviceType.filename) !== null && _a !== void 0 ? _a : 'null')) === null || _b === void 0 ? void 0 : _b.replace(/\\/g, '/')}`);
+ formatter.writeLine('');
+ if (options.grpcLib) {
+ const grpcImportPath = options.grpcLib.startsWith('.') ? getPathToRoot(serviceType) + options.grpcLib : options.grpcLib;
+ formatter.writeLine(`import type * as grpc from '${grpcImportPath}'`);
+ }
+ formatter.writeLine(`import type { MethodDefinition } from '@grpc/proto-loader'`);
+ const dependencies = new Set();
+ for (const method of serviceType.methodsArray) {
+ dependencies.add(method.resolvedRequestType);
+ dependencies.add(method.resolvedResponseType);
+ }
+ for (const dep of Array.from(dependencies.values()).sort(compareName)) {
+ formatter.writeLine(getImportLine(dep, serviceType, options));
+ }
+ formatter.writeLine('');
+ if (options.grpcLib) {
+ generateServiceClientInterface(formatter, serviceType, options);
+ formatter.writeLine('');
+ generateServiceHandlerInterface(formatter, serviceType, options);
+ formatter.writeLine('');
+ }
+ generateServiceDefinitionInterface(formatter, serviceType, options);
+}
+function containsDefinition(definitionType, namespace) {
+ for (const nested of namespace.nestedArray.sort(compareName)) {
+ if (nested instanceof definitionType) {
+ return true;
+ }
+ else if (isNamespaceBase(nested) && !(nested instanceof Protobuf.Type) && !(nested instanceof Protobuf.Enum) && containsDefinition(definitionType, nested)) {
+ return true;
+ }
+ }
+ return false;
+}
+function generateDefinitionImports(formatter, namespace, options) {
+ const imports = [];
+ if (containsDefinition(Protobuf.Enum, namespace)) {
+ imports.push('EnumTypeDefinition');
+ }
+ if (containsDefinition(Protobuf.Type, namespace)) {
+ imports.push('MessageTypeDefinition');
+ }
+ if (imports.length) {
+ formatter.writeLine(`import type { ${imports.join(', ')} } from '@grpc/proto-loader';`);
+ }
+}
+function generateServiceImports(formatter, namespace, options) {
+ for (const nested of namespace.nestedArray.sort(compareName)) {
+ if (nested instanceof Protobuf.Service) {
+ formatter.writeLine(getImportLine(nested, undefined, options));
+ }
+ else if (isNamespaceBase(nested) && !(nested instanceof Protobuf.Type) && !(nested instanceof Protobuf.Enum)) {
+ generateServiceImports(formatter, nested, options);
+ }
+ }
+}
+function generateSingleLoadedDefinitionType(formatter, nested, options) {
+ if (nested instanceof Protobuf.Service) {
+ if (options.includeComments) {
+ formatComment(formatter, nested.comment, nested.options);
+ }
+ const typeInterfaceName = getTypeInterfaceName(nested);
+ formatter.writeLine(`${nested.name}: SubtypeConstructor<typeof grpc.Client, ${typeInterfaceName}Client> & { service: ${typeInterfaceName}Definition }`);
+ }
+ else if (nested instanceof Protobuf.Enum) {
+ formatter.writeLine(`${nested.name}: EnumTypeDefinition`);
+ }
+ else if (nested instanceof Protobuf.Type) {
+ formatter.writeLine(`${nested.name}: MessageTypeDefinition`);
+ }
+ else if (isNamespaceBase(nested)) {
+ generateLoadedDefinitionTypes(formatter, nested, options);
+ }
+}
+function generateLoadedDefinitionTypes(formatter, namespace, options) {
+ formatter.writeLine(`${namespace.name}: {`);
+ formatter.indent();
+ for (const nested of namespace.nestedArray.sort(compareName)) {
+ generateSingleLoadedDefinitionType(formatter, nested, options);
+ }
+ formatter.unindent();
+ formatter.writeLine('}');
+}
+function generateRootFile(formatter, root, options) {
+ if (!options.grpcLib) {
+ return;
+ }
+ formatter.writeLine(`import type * as grpc from '${options.grpcLib}';`);
+ generateDefinitionImports(formatter, root, options);
+ formatter.writeLine('');
+ generateServiceImports(formatter, root, options);
+ formatter.writeLine('');
+ formatter.writeLine('type SubtypeConstructor<Constructor extends new (...args: any) => any, Subtype> = {');
+ formatter.writeLine(' new(...args: ConstructorParameters<Constructor>): Subtype;');
+ formatter.writeLine('};');
+ formatter.writeLine('');
+ formatter.writeLine('export interface ProtoGrpcType {');
+ formatter.indent();
+ for (const nested of root.nestedArray) {
+ generateSingleLoadedDefinitionType(formatter, nested, options);
+ }
+ formatter.unindent();
+ formatter.writeLine('}');
+ formatter.writeLine('');
+}
+async function writeFile(filename, contents) {
+ await fs.promises.mkdir(path.dirname(filename), { recursive: true });
+ return fs.promises.writeFile(filename, contents);
+}
+function generateFilesForNamespace(namespace, options) {
+ const filePromises = [];
+ for (const nested of namespace.nestedArray) {
+ const fileFormatter = new TextFormatter();
+ if (nested instanceof Protobuf.Type) {
+ generateMessageInterfaces(fileFormatter, nested, options);
+ if (options.verbose) {
+ console.log(`Writing ${options.outDir}/${getPath(nested, options)} from file ${nested.filename}`);
+ }
+ filePromises.push(writeFile(`${options.outDir}/${getPath(nested, options)}`, fileFormatter.getFullText()));
+ }
+ else if (nested instanceof Protobuf.Enum) {
+ generateEnumInterface(fileFormatter, nested, options);
+ if (options.verbose) {
+ console.log(`Writing ${options.outDir}/${getPath(nested, options)} from file ${nested.filename}`);
+ }
+ filePromises.push(writeFile(`${options.outDir}/${getPath(nested, options)}`, fileFormatter.getFullText()));
+ }
+ else if (nested instanceof Protobuf.Service) {
+ generateServiceInterfaces(fileFormatter, nested, options);
+ if (options.verbose) {
+ console.log(`Writing ${options.outDir}/${getPath(nested, options)} from file ${nested.filename}`);
+ }
+ filePromises.push(writeFile(`${options.outDir}/${getPath(nested, options)}`, fileFormatter.getFullText()));
+ }
+ else if (isNamespaceBase(nested)) {
+ filePromises.push(...generateFilesForNamespace(nested, options));
+ }
+ }
+ return filePromises;
+}
+function writeFilesForRoot(root, masterFileName, options) {
+ const filePromises = [];
+ const masterFileFormatter = new TextFormatter();
+ if (options.grpcLib) {
+ generateRootFile(masterFileFormatter, root, options);
+ if (options.verbose) {
+ console.log(`Writing ${options.outDir}/${masterFileName}`);
+ }
+ filePromises.push(writeFile(`${options.outDir}/${masterFileName}`, masterFileFormatter.getFullText()));
+ }
+ filePromises.push(...generateFilesForNamespace(root, options));
+ return filePromises;
+}
+async function writeAllFiles(protoFiles, options) {
+ await fs.promises.mkdir(options.outDir, { recursive: true });
+ const basenameMap = new Map();
+ for (const filename of protoFiles) {
+ const basename = path.basename(filename).replace(/\.proto$/, options.targetFileExtension);
+ if (basenameMap.has(basename)) {
+ basenameMap.get(basename).push(filename);
+ }
+ else {
+ basenameMap.set(basename, [filename]);
+ }
+ }
+ for (const [basename, filenames] of basenameMap.entries()) {
+ const loadedRoot = await (0, util_1.loadProtosWithOptions)(filenames, options);
+ writeFilesForRoot(loadedRoot, basename, options);
+ }
+}
+async function runScript() {
+ const boolDefaultFalseOption = {
+ boolean: true,
+ default: false,
+ };
+ const argv = await yargs
+ .parserConfiguration({
+ 'parse-positional-numbers': false
+ })
+ .option('keepCase', boolDefaultFalseOption)
+ .option('longs', { string: true, default: 'Long' })
+ .option('enums', { string: true, default: 'number' })
+ .option('bytes', { string: true, default: 'Buffer' })
+ .option('defaults', boolDefaultFalseOption)
+ .option('arrays', boolDefaultFalseOption)
+ .option('objects', boolDefaultFalseOption)
+ .option('oneofs', boolDefaultFalseOption)
+ .option('json', boolDefaultFalseOption)
+ .boolean('verbose')
+ .option('includeComments', boolDefaultFalseOption)
+ .option('includeDirs', {
+ normalize: true,
+ array: true,
+ alias: 'I'
+ })
+ .option('outDir', {
+ alias: 'O',
+ normalize: true,
+ })
+ .option('grpcLib', { string: true })
+ .option('inputTemplate', { string: true, default: `${templateStr}` })
+ .option('outputTemplate', { string: true, default: `${templateStr}__Output` })
+ .option('inputBranded', boolDefaultFalseOption)
+ .option('outputBranded', boolDefaultFalseOption)
+ .option('targetFileExtension', { string: true, default: '.ts' })
+ .option('importFileExtension', { string: true, default: '' })
+ .coerce('longs', value => {
+ switch (value) {
+ case 'String': return String;
+ case 'Number': return Number;
+ default: return undefined;
+ }
+ }).coerce('enums', value => {
+ if (value === 'String') {
+ return String;
+ }
+ else {
+ return undefined;
+ }
+ }).coerce('bytes', value => {
+ switch (value) {
+ case 'Array': return Array;
+ case 'String': return String;
+ default: return undefined;
+ }
+ })
+ .alias({
+ verbose: 'v'
+ }).describe({
+ keepCase: 'Preserve the case of field names',
+ longs: 'The type that should be used to output 64 bit integer values. Can be String, Number',
+ enums: 'The type that should be used to output enum fields. Can be String',
+ bytes: 'The type that should be used to output bytes fields. Can be String, Array',
+ defaults: 'Output default values for omitted fields',
+ arrays: 'Output default values for omitted repeated fields even if --defaults is not set',
+ objects: 'Output default values for omitted message fields even if --defaults is not set',
+ oneofs: 'Output virtual oneof fields set to the present field\'s name',
+ json: 'Represent Infinity and NaN as strings in float fields. Also decode google.protobuf.Any automatically',
+ includeComments: 'Generate doc comments from comments in the original files',
+ includeDirs: 'Directories to search for included files',
+ outDir: 'Directory in which to output files',
+ grpcLib: 'The gRPC implementation library that these types will be used with. If not provided, some types will not be generated',
+ inputTemplate: 'Template for mapping input or "permissive" type names',
+ outputTemplate: 'Template for mapping output or "restricted" type names',
+ inputBranded: 'Output property for branded type for "permissive" types with fullName of the Message as its value',
+ outputBranded: 'Output property for branded type for "restricted" types with fullName of the Message as its value',
+ targetFileExtension: 'File extension for generated files.',
+ importFileExtension: 'File extension for import specifiers in generated code.'
+ }).demandOption(['outDir'])
+ .demand(1)
+ .usage('$0 [options] filenames...')
+ .epilogue('WARNING: This tool is in alpha. The CLI and generated code are subject to change')
+ .argv;
+ if (argv.verbose) {
+ console.log('Parsed arguments:', argv);
+ }
+ (0, util_1.addCommonProtos)();
+ writeAllFiles(argv._, Object.assign(Object.assign({}, argv), { alternateCommentMode: true })).then(() => {
+ if (argv.verbose) {
+ console.log('Success');
+ }
+ }, (error) => {
+ console.error(error);
+ process.exit(1);
+ });
+}
+if (require.main === module) {
+ runScript();
+}
+//# sourceMappingURL=proto-loader-gen-types.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js.map b/frontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js.map
new file mode 100644
index 0000000..229cd48
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"proto-loader-gen-types.js","sourceRoot":"","sources":["../../bin/proto-loader-gen-types.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/src/index.d.ts b/frontend-old/node_modules/@grpc/proto-loader/build/src/index.d.ts
new file mode 100644
index 0000000..ff575c0
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/src/index.d.ts
@@ -0,0 +1,160 @@
+/**
+ * @license
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+/// <reference types="node" />
+import * as Protobuf from 'protobufjs';
+import * as descriptor from 'protobufjs/ext/descriptor';
+import { Options } from './util';
+import Long = require('long');
+export { Options, Long };
+/**
+ * This type exists for use with code generated by the proto-loader-gen-types
+ * tool. This type should be used with another interface, e.g.
+ * MessageType & AnyExtension for an object that is converted to or from a
+ * google.protobuf.Any message.
+ * For example, when processing an Any message:
+ *
+ * ```ts
+ * if (isAnyExtension(message)) {
+ * switch (message['@type']) {
+ * case TYPE1_URL:
+ * handleType1(message as AnyExtension & Type1);
+ * break;
+ * case TYPE2_URL:
+ * handleType2(message as AnyExtension & Type2);
+ * break;
+ * // ...
+ * }
+ * }
+ * ```
+ */
+export interface AnyExtension {
+ /**
+ * The fully qualified name of the message type that this object represents,
+ * possibly including a URL prefix.
+ */
+ '@type': string;
+}
+export declare function isAnyExtension(obj: object): obj is AnyExtension;
+declare module 'protobufjs' {
+ interface Type {
+ toDescriptor(protoVersion: string): Protobuf.Message<descriptor.IDescriptorProto> & descriptor.IDescriptorProto;
+ }
+ interface RootConstructor {
+ new (options?: Options): Root;
+ fromDescriptor(descriptorSet: descriptor.IFileDescriptorSet | Protobuf.Reader | Uint8Array): Root;
+ fromJSON(json: Protobuf.INamespace, root?: Root): Root;
+ }
+ interface Root {
+ toDescriptor(protoVersion: string): Protobuf.Message<descriptor.IFileDescriptorSet> & descriptor.IFileDescriptorSet;
+ }
+ interface Enum {
+ toDescriptor(protoVersion: string): Protobuf.Message<descriptor.IEnumDescriptorProto> & descriptor.IEnumDescriptorProto;
+ }
+}
+export interface Serialize<T> {
+ (value: T): Buffer;
+}
+export interface Deserialize<T> {
+ (bytes: Buffer): T;
+}
+export interface ProtobufTypeDefinition {
+ format: string;
+ type: object;
+ fileDescriptorProtos: Buffer[];
+}
+export interface MessageTypeDefinition extends ProtobufTypeDefinition {
+ format: 'Protocol Buffer 3 DescriptorProto';
+}
+export interface EnumTypeDefinition extends ProtobufTypeDefinition {
+ format: 'Protocol Buffer 3 EnumDescriptorProto';
+}
+export declare enum IdempotencyLevel {
+ IDEMPOTENCY_UNKNOWN = "IDEMPOTENCY_UNKNOWN",
+ NO_SIDE_EFFECTS = "NO_SIDE_EFFECTS",
+ IDEMPOTENT = "IDEMPOTENT"
+}
+export interface NamePart {
+ name_part: string;
+ is_extension: boolean;
+}
+export interface UninterpretedOption {
+ name?: NamePart[];
+ identifier_value?: string;
+ positive_int_value?: number;
+ negative_int_value?: number;
+ double_value?: number;
+ string_value?: string;
+ aggregate_value?: string;
+}
+export interface MethodOptions {
+ deprecated: boolean;
+ idempotency_level: IdempotencyLevel;
+ uninterpreted_option: UninterpretedOption[];
+ [k: string]: unknown;
+}
+export interface MethodDefinition<RequestType, ResponseType, OutputRequestType = RequestType, OutputResponseType = ResponseType> {
+ path: string;
+ requestStream: boolean;
+ responseStream: boolean;
+ requestSerialize: Serialize<RequestType>;
+ responseSerialize: Serialize<ResponseType>;
+ requestDeserialize: Deserialize<OutputRequestType>;
+ responseDeserialize: Deserialize<OutputResponseType>;
+ originalName?: string;
+ requestType: MessageTypeDefinition;
+ responseType: MessageTypeDefinition;
+ options: MethodOptions;
+}
+export interface ServiceDefinition {
+ [index: string]: MethodDefinition<object, object>;
+}
+export declare type AnyDefinition = ServiceDefinition | MessageTypeDefinition | EnumTypeDefinition;
+export interface PackageDefinition {
+ [index: string]: AnyDefinition;
+}
+/**
+ * Load a .proto file with the specified options.
+ * @param filename One or multiple file paths to load. Can be an absolute path
+ * or relative to an include path.
+ * @param options.keepCase Preserve field names. The default is to change them
+ * to camel case.
+ * @param options.longs The type that should be used to represent `long` values.
+ * Valid options are `Number` and `String`. Defaults to a `Long` object type
+ * from a library.
+ * @param options.enums The type that should be used to represent `enum` values.
+ * The only valid option is `String`. Defaults to the numeric value.
+ * @param options.bytes The type that should be used to represent `bytes`
+ * values. Valid options are `Array` and `String`. The default is to use
+ * `Buffer`.
+ * @param options.defaults Set default values on output objects. Defaults to
+ * `false`.
+ * @param options.arrays Set empty arrays for missing array values even if
+ * `defaults` is `false`. Defaults to `false`.
+ * @param options.objects Set empty objects for missing object values even if
+ * `defaults` is `false`. Defaults to `false`.
+ * @param options.oneofs Set virtual oneof properties to the present field's
+ * name
+ * @param options.json Represent Infinity and NaN as strings in float fields,
+ * and automatically decode google.protobuf.Any values.
+ * @param options.includeDirs Paths to search for imported `.proto` files.
+ */
+export declare function load(filename: string | string[], options?: Options): Promise<PackageDefinition>;
+export declare function loadSync(filename: string | string[], options?: Options): PackageDefinition;
+export declare function fromJSON(json: Protobuf.INamespace, options?: Options): PackageDefinition;
+export declare function loadFileDescriptorSetFromBuffer(descriptorSet: Buffer, options?: Options): PackageDefinition;
+export declare function loadFileDescriptorSetFromObject(descriptorSet: Parameters<typeof descriptor.FileDescriptorSet.fromObject>[0], options?: Options): PackageDefinition;
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/src/index.js b/frontend-old/node_modules/@grpc/proto-loader/build/src/index.js
new file mode 100644
index 0000000..1d86395
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/src/index.js
@@ -0,0 +1,244 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.loadFileDescriptorSetFromObject = exports.loadFileDescriptorSetFromBuffer = exports.fromJSON = exports.loadSync = exports.load = exports.IdempotencyLevel = exports.isAnyExtension = exports.Long = void 0;
+const camelCase = require("lodash.camelcase");
+const Protobuf = require("protobufjs");
+const descriptor = require("protobufjs/ext/descriptor");
+const util_1 = require("./util");
+const Long = require("long");
+exports.Long = Long;
+function isAnyExtension(obj) {
+ return ('@type' in obj) && (typeof obj['@type'] === 'string');
+}
+exports.isAnyExtension = isAnyExtension;
+var IdempotencyLevel;
+(function (IdempotencyLevel) {
+ IdempotencyLevel["IDEMPOTENCY_UNKNOWN"] = "IDEMPOTENCY_UNKNOWN";
+ IdempotencyLevel["NO_SIDE_EFFECTS"] = "NO_SIDE_EFFECTS";
+ IdempotencyLevel["IDEMPOTENT"] = "IDEMPOTENT";
+})(IdempotencyLevel = exports.IdempotencyLevel || (exports.IdempotencyLevel = {}));
+const descriptorOptions = {
+ longs: String,
+ enums: String,
+ bytes: String,
+ defaults: true,
+ oneofs: true,
+ json: true,
+};
+function joinName(baseName, name) {
+ if (baseName === '') {
+ return name;
+ }
+ else {
+ return baseName + '.' + name;
+ }
+}
+function isHandledReflectionObject(obj) {
+ return (obj instanceof Protobuf.Service ||
+ obj instanceof Protobuf.Type ||
+ obj instanceof Protobuf.Enum);
+}
+function isNamespaceBase(obj) {
+ return obj instanceof Protobuf.Namespace || obj instanceof Protobuf.Root;
+}
+function getAllHandledReflectionObjects(obj, parentName) {
+ const objName = joinName(parentName, obj.name);
+ if (isHandledReflectionObject(obj)) {
+ return [[objName, obj]];
+ }
+ else {
+ if (isNamespaceBase(obj) && typeof obj.nested !== 'undefined') {
+ return Object.keys(obj.nested)
+ .map(name => {
+ return getAllHandledReflectionObjects(obj.nested[name], objName);
+ })
+ .reduce((accumulator, currentValue) => accumulator.concat(currentValue), []);
+ }
+ }
+ return [];
+}
+function createDeserializer(cls, options) {
+ return function deserialize(argBuf) {
+ return cls.toObject(cls.decode(argBuf), options);
+ };
+}
+function createSerializer(cls) {
+ return function serialize(arg) {
+ if (Array.isArray(arg)) {
+ throw new Error(`Failed to serialize message: expected object with ${cls.name} structure, got array instead`);
+ }
+ const message = cls.fromObject(arg);
+ return cls.encode(message).finish();
+ };
+}
+function mapMethodOptions(options) {
+ return (options || []).reduce((obj, item) => {
+ for (const [key, value] of Object.entries(item)) {
+ switch (key) {
+ case 'uninterpreted_option':
+ obj.uninterpreted_option.push(item.uninterpreted_option);
+ break;
+ default:
+ obj[key] = value;
+ }
+ }
+ return obj;
+ }, {
+ deprecated: false,
+ idempotency_level: IdempotencyLevel.IDEMPOTENCY_UNKNOWN,
+ uninterpreted_option: [],
+ });
+}
+function createMethodDefinition(method, serviceName, options, fileDescriptors) {
+ /* This is only ever called after the corresponding root.resolveAll(), so we
+ * can assume that the resolved request and response types are non-null */
+ const requestType = method.resolvedRequestType;
+ const responseType = method.resolvedResponseType;
+ return {
+ path: '/' + serviceName + '/' + method.name,
+ requestStream: !!method.requestStream,
+ responseStream: !!method.responseStream,
+ requestSerialize: createSerializer(requestType),
+ requestDeserialize: createDeserializer(requestType, options),
+ responseSerialize: createSerializer(responseType),
+ responseDeserialize: createDeserializer(responseType, options),
+ // TODO(murgatroid99): Find a better way to handle this
+ originalName: camelCase(method.name),
+ requestType: createMessageDefinition(requestType, fileDescriptors),
+ responseType: createMessageDefinition(responseType, fileDescriptors),
+ options: mapMethodOptions(method.parsedOptions),
+ };
+}
+function createServiceDefinition(service, name, options, fileDescriptors) {
+ const def = {};
+ for (const method of service.methodsArray) {
+ def[method.name] = createMethodDefinition(method, name, options, fileDescriptors);
+ }
+ return def;
+}
+function createMessageDefinition(message, fileDescriptors) {
+ const messageDescriptor = message.toDescriptor('proto3');
+ return {
+ format: 'Protocol Buffer 3 DescriptorProto',
+ type: messageDescriptor.$type.toObject(messageDescriptor, descriptorOptions),
+ fileDescriptorProtos: fileDescriptors,
+ };
+}
+function createEnumDefinition(enumType, fileDescriptors) {
+ const enumDescriptor = enumType.toDescriptor('proto3');
+ return {
+ format: 'Protocol Buffer 3 EnumDescriptorProto',
+ type: enumDescriptor.$type.toObject(enumDescriptor, descriptorOptions),
+ fileDescriptorProtos: fileDescriptors,
+ };
+}
+/**
+ * function createDefinition(obj: Protobuf.Service, name: string, options:
+ * Options): ServiceDefinition; function createDefinition(obj: Protobuf.Type,
+ * name: string, options: Options): MessageTypeDefinition; function
+ * createDefinition(obj: Protobuf.Enum, name: string, options: Options):
+ * EnumTypeDefinition;
+ */
+function createDefinition(obj, name, options, fileDescriptors) {
+ if (obj instanceof Protobuf.Service) {
+ return createServiceDefinition(obj, name, options, fileDescriptors);
+ }
+ else if (obj instanceof Protobuf.Type) {
+ return createMessageDefinition(obj, fileDescriptors);
+ }
+ else if (obj instanceof Protobuf.Enum) {
+ return createEnumDefinition(obj, fileDescriptors);
+ }
+ else {
+ throw new Error('Type mismatch in reflection object handling');
+ }
+}
+function createPackageDefinition(root, options) {
+ const def = {};
+ root.resolveAll();
+ const descriptorList = root.toDescriptor('proto3').file;
+ const bufferList = descriptorList.map(value => Buffer.from(descriptor.FileDescriptorProto.encode(value).finish()));
+ for (const [name, obj] of getAllHandledReflectionObjects(root, '')) {
+ def[name] = createDefinition(obj, name, options, bufferList);
+ }
+ return def;
+}
+function createPackageDefinitionFromDescriptorSet(decodedDescriptorSet, options) {
+ options = options || {};
+ const root = Protobuf.Root.fromDescriptor(decodedDescriptorSet);
+ root.resolveAll();
+ return createPackageDefinition(root, options);
+}
+/**
+ * Load a .proto file with the specified options.
+ * @param filename One or multiple file paths to load. Can be an absolute path
+ * or relative to an include path.
+ * @param options.keepCase Preserve field names. The default is to change them
+ * to camel case.
+ * @param options.longs The type that should be used to represent `long` values.
+ * Valid options are `Number` and `String`. Defaults to a `Long` object type
+ * from a library.
+ * @param options.enums The type that should be used to represent `enum` values.
+ * The only valid option is `String`. Defaults to the numeric value.
+ * @param options.bytes The type that should be used to represent `bytes`
+ * values. Valid options are `Array` and `String`. The default is to use
+ * `Buffer`.
+ * @param options.defaults Set default values on output objects. Defaults to
+ * `false`.
+ * @param options.arrays Set empty arrays for missing array values even if
+ * `defaults` is `false`. Defaults to `false`.
+ * @param options.objects Set empty objects for missing object values even if
+ * `defaults` is `false`. Defaults to `false`.
+ * @param options.oneofs Set virtual oneof properties to the present field's
+ * name
+ * @param options.json Represent Infinity and NaN as strings in float fields,
+ * and automatically decode google.protobuf.Any values.
+ * @param options.includeDirs Paths to search for imported `.proto` files.
+ */
+function load(filename, options) {
+ return (0, util_1.loadProtosWithOptions)(filename, options).then(loadedRoot => {
+ return createPackageDefinition(loadedRoot, options);
+ });
+}
+exports.load = load;
+function loadSync(filename, options) {
+ const loadedRoot = (0, util_1.loadProtosWithOptionsSync)(filename, options);
+ return createPackageDefinition(loadedRoot, options);
+}
+exports.loadSync = loadSync;
+function fromJSON(json, options) {
+ options = options || {};
+ const loadedRoot = Protobuf.Root.fromJSON(json);
+ loadedRoot.resolveAll();
+ return createPackageDefinition(loadedRoot, options);
+}
+exports.fromJSON = fromJSON;
+function loadFileDescriptorSetFromBuffer(descriptorSet, options) {
+ const decodedDescriptorSet = descriptor.FileDescriptorSet.decode(descriptorSet);
+ return createPackageDefinitionFromDescriptorSet(decodedDescriptorSet, options);
+}
+exports.loadFileDescriptorSetFromBuffer = loadFileDescriptorSetFromBuffer;
+function loadFileDescriptorSetFromObject(descriptorSet, options) {
+ const decodedDescriptorSet = descriptor.FileDescriptorSet.fromObject(descriptorSet);
+ return createPackageDefinitionFromDescriptorSet(decodedDescriptorSet, options);
+}
+exports.loadFileDescriptorSetFromObject = loadFileDescriptorSetFromObject;
+(0, util_1.addCommonProtos)();
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/src/index.js.map b/frontend-old/node_modules/@grpc/proto-loader/build/src/index.js.map
new file mode 100644
index 0000000..8ba05f1
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAEH,8CAA+C;AAC/C,uCAAuC;AACvC,wDAAwD;AAExD,iCAAoG;AAEpG,6BAA8B;AAEZ,oBAAI;AA+BtB,SAAgB,cAAc,CAAC,GAAW;IACxC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,OAAQ,GAAoB,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAClF,CAAC;AAFD,wCAEC;AA0DD,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,+DAA2C,CAAA;IAC3C,uDAAmC,CAAA;IACnC,6CAAyB,CAAA;AAC3B,CAAC,EAJW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAI3B;AAsDD,MAAM,iBAAiB,GAAgC;IACrD,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,SAAS,QAAQ,CAAC,QAAgB,EAAE,IAAY;IAC9C,IAAI,QAAQ,KAAK,EAAE,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;SAAM;QACL,OAAO,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC;KAC9B;AACH,CAAC;AAID,SAAS,yBAAyB,CAChC,GAA8B;IAE9B,OAAO,CACL,GAAG,YAAY,QAAQ,CAAC,OAAO;QAC/B,GAAG,YAAY,QAAQ,CAAC,IAAI;QAC5B,GAAG,YAAY,QAAQ,CAAC,IAAI,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,GAA8B;IAE9B,OAAO,GAAG,YAAY,QAAQ,CAAC,SAAS,IAAI,GAAG,YAAY,QAAQ,CAAC,IAAI,CAAC;AAC3E,CAAC;AAED,SAAS,8BAA8B,CACrC,GAA8B,EAC9B,UAAkB;IAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,yBAAyB,CAAC,GAAG,CAAC,EAAE;QAClC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;KACzB;SAAM;QACL,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE;YAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAO,CAAC;iBAC5B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACV,OAAO,8BAA8B,CAAC,GAAG,CAAC,MAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC,CAAC;iBACD,MAAM,CACL,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAC/D,EAAE,CACH,CAAC;SACL;KACF;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAkB,EAClB,OAAgB;IAEhB,OAAO,SAAS,WAAW,CAAC,MAAc;QACxC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,OAAO,SAAS,SAAS,CAAC,GAAW;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,qDAAqD,GAAG,CAAC,IAAI,+BAA+B,CAAC,CAAC;SAC/G;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAY,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA6C;IACrE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAE,IAA4B,EAAE,EAAE;QACjF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/C,QAAQ,GAAG,EAAE;gBACX,KAAK,sBAAsB;oBACzB,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAA2C,CAAC,CAAC;oBAChF,MAAM;gBACR;oBACE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;aACnB;SACF;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,EACC;QACE,UAAU,EAAE,KAAK;QACjB,iBAAiB,EAAE,gBAAgB,CAAC,mBAAmB;QACvD,oBAAoB,EAAE,EAAE;KACzB,CACe,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAuB,EACvB,WAAmB,EACnB,OAAgB,EAChB,eAAyB;IAEzB;8EAC0E;IAC1E,MAAM,WAAW,GAAkB,MAAM,CAAC,mBAAoB,CAAC;IAC/D,MAAM,YAAY,GAAkB,MAAM,CAAC,oBAAqB,CAAC;IACjE,OAAO;QACL,IAAI,EAAE,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI;QAC3C,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa;QACrC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;QACvC,gBAAgB,EAAE,gBAAgB,CAAC,WAAW,CAAC;QAC/C,kBAAkB,EAAE,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC;QAC5D,iBAAiB,EAAE,gBAAgB,CAAC,YAAY,CAAC;QACjD,mBAAmB,EAAE,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC;QAC9D,uDAAuD;QACvD,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,WAAW,EAAE,uBAAuB,CAAC,WAAW,EAAE,eAAe,CAAC;QAClE,YAAY,EAAE,uBAAuB,CAAC,YAAY,EAAE,eAAe,CAAC;QACpE,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAyB,EACzB,IAAY,EACZ,OAAgB,EAChB,eAAyB;IAEzB,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE;QACzC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,sBAAsB,CACvC,MAAM,EACN,IAAI,EACJ,OAAO,EACP,eAAe,CAChB,CAAC;KACH;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAsB,EACtB,eAAyB;IAEzB,MAAM,iBAAiB,GAEnB,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO;QACL,MAAM,EAAE,mCAAmC;QAC3C,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CACpC,iBAAiB,EACjB,iBAAiB,CAClB;QACD,oBAAoB,EAAE,eAAe;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAuB,EACvB,eAAyB;IAEzB,MAAM,cAAc,GAEhB,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,MAAM,EAAE,uCAAuC;QAC/C,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC;QACtE,oBAAoB,EAAE,eAAe;KACtC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CACvB,GAA4B,EAC5B,IAAY,EACZ,OAAgB,EAChB,eAAyB;IAEzB,IAAI,GAAG,YAAY,QAAQ,CAAC,OAAO,EAAE;QACnC,OAAO,uBAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;KACrE;SAAM,IAAI,GAAG,YAAY,QAAQ,CAAC,IAAI,EAAE;QACvC,OAAO,uBAAuB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;KACtD;SAAM,IAAI,GAAG,YAAY,QAAQ,CAAC,IAAI,EAAE;QACvC,OAAO,oBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;KACnD;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;KAChE;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAmB,EACnB,OAAgB;IAEhB,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,IAAI,CAAC,UAAU,EAAE,CAAC;IAClB,MAAM,cAAc,GAAsC,IAAI,CAAC,YAAY,CACzE,QAAQ,CACT,CAAC,IAAI,CAAC;IACP,MAAM,UAAU,GAAa,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACtD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CACnE,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;QAClE,GAAG,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;KAC9D;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,wCAAwC,CAC/C,oBAA0C,EAC1C,OAAiB;IAEjB,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,MAAM,IAAI,GAAI,QAAQ,CAAC,IAAiC,CAAC,cAAc,CACrE,oBAAoB,CACrB,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,CAAC;IAClB,OAAO,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,IAAI,CAClB,QAA2B,EAC3B,OAAiB;IAEjB,OAAO,IAAA,4BAAqB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAChE,OAAO,uBAAuB,CAAC,UAAU,EAAE,OAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAPD,oBAOC;AAED,SAAgB,QAAQ,CACtB,QAA2B,EAC3B,OAAiB;IAEjB,MAAM,UAAU,GAAG,IAAA,gCAAyB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,uBAAuB,CAAC,UAAU,EAAE,OAAQ,CAAC,CAAC;AACvD,CAAC;AAND,4BAMC;AAED,SAAgB,QAAQ,CACtB,IAAyB,EACzB,OAAiB;IAEjB,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,CAAC,UAAU,EAAE,CAAC;IACxB,OAAO,uBAAuB,CAAC,UAAU,EAAE,OAAQ,CAAC,CAAC;AACvD,CAAC;AARD,4BAQC;AAED,SAAgB,+BAA+B,CAC7C,aAAqB,EACrB,OAAiB;IAEjB,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAC9D,aAAa,CACU,CAAC;IAE1B,OAAO,wCAAwC,CAC7C,oBAAoB,EACpB,OAAO,CACR,CAAC;AACJ,CAAC;AAZD,0EAYC;AAED,SAAgB,+BAA+B,CAC7C,aAA4E,EAC5E,OAAiB;IAEjB,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAClE,aAAa,CACU,CAAC;IAE1B,OAAO,wCAAwC,CAC7C,oBAAoB,EACpB,OAAO,CACR,CAAC;AACJ,CAAC;AAZD,0EAYC;AAED,IAAA,sBAAe,GAAE,CAAC"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/src/util.d.ts b/frontend-old/node_modules/@grpc/proto-loader/build/src/util.d.ts
new file mode 100644
index 0000000..d0b13d9
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/src/util.d.ts
@@ -0,0 +1,27 @@
+/**
+ * @license
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+import * as Protobuf from 'protobufjs';
+export declare type Options = Protobuf.IParseOptions & Protobuf.IConversionOptions & {
+ includeDirs?: string[];
+};
+export declare function loadProtosWithOptions(filename: string | string[], options?: Options): Promise<Protobuf.Root>;
+export declare function loadProtosWithOptionsSync(filename: string | string[], options?: Options): Protobuf.Root;
+/**
+ * Load Google's well-known proto files that aren't exposed by Protobuf.js.
+ */
+export declare function addCommonProtos(): void;
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/src/util.js b/frontend-old/node_modules/@grpc/proto-loader/build/src/util.js
new file mode 100644
index 0000000..7ade36b
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/src/util.js
@@ -0,0 +1,89 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.addCommonProtos = exports.loadProtosWithOptionsSync = exports.loadProtosWithOptions = void 0;
+const fs = require("fs");
+const path = require("path");
+const Protobuf = require("protobufjs");
+function addIncludePathResolver(root, includePaths) {
+ const originalResolvePath = root.resolvePath;
+ root.resolvePath = (origin, target) => {
+ if (path.isAbsolute(target)) {
+ return target;
+ }
+ for (const directory of includePaths) {
+ const fullPath = path.join(directory, target);
+ try {
+ fs.accessSync(fullPath, fs.constants.R_OK);
+ return fullPath;
+ }
+ catch (err) {
+ continue;
+ }
+ }
+ process.emitWarning(`${target} not found in any of the include paths ${includePaths}`);
+ return originalResolvePath(origin, target);
+ };
+}
+async function loadProtosWithOptions(filename, options) {
+ const root = new Protobuf.Root();
+ options = options || {};
+ if (!!options.includeDirs) {
+ if (!Array.isArray(options.includeDirs)) {
+ return Promise.reject(new Error('The includeDirs option must be an array'));
+ }
+ addIncludePathResolver(root, options.includeDirs);
+ }
+ const loadedRoot = await root.load(filename, options);
+ loadedRoot.resolveAll();
+ return loadedRoot;
+}
+exports.loadProtosWithOptions = loadProtosWithOptions;
+function loadProtosWithOptionsSync(filename, options) {
+ const root = new Protobuf.Root();
+ options = options || {};
+ if (!!options.includeDirs) {
+ if (!Array.isArray(options.includeDirs)) {
+ throw new Error('The includeDirs option must be an array');
+ }
+ addIncludePathResolver(root, options.includeDirs);
+ }
+ const loadedRoot = root.loadSync(filename, options);
+ loadedRoot.resolveAll();
+ return loadedRoot;
+}
+exports.loadProtosWithOptionsSync = loadProtosWithOptionsSync;
+/**
+ * Load Google's well-known proto files that aren't exposed by Protobuf.js.
+ */
+function addCommonProtos() {
+ // Protobuf.js exposes: any, duration, empty, field_mask, struct, timestamp,
+ // and wrappers. compiler/plugin is excluded in Protobuf.js and here.
+ // Using constant strings for compatibility with tools like Webpack
+ const apiDescriptor = require('protobufjs/google/protobuf/api.json');
+ const descriptorDescriptor = require('protobufjs/google/protobuf/descriptor.json');
+ const sourceContextDescriptor = require('protobufjs/google/protobuf/source_context.json');
+ const typeDescriptor = require('protobufjs/google/protobuf/type.json');
+ Protobuf.common('api', apiDescriptor.nested.google.nested.protobuf.nested);
+ Protobuf.common('descriptor', descriptorDescriptor.nested.google.nested.protobuf.nested);
+ Protobuf.common('source_context', sourceContextDescriptor.nested.google.nested.protobuf.nested);
+ Protobuf.common('type', typeDescriptor.nested.google.nested.protobuf.nested);
+}
+exports.addCommonProtos = addCommonProtos;
+//# sourceMappingURL=util.js.map \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/proto-loader/build/src/util.js.map b/frontend-old/node_modules/@grpc/proto-loader/build/src/util.js.map
new file mode 100644
index 0000000..bb517f7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/build/src/util.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/frontend-old/node_modules/@grpc/proto-loader/package.json b/frontend-old/node_modules/@grpc/proto-loader/package.json
new file mode 100644
index 0000000..d9da2f7
--- /dev/null
+++ b/frontend-old/node_modules/@grpc/proto-loader/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "@grpc/proto-loader",
+ "version": "0.7.15",
+ "author": "Google Inc.",
+ "contributors": [
+ {
+ "name": "Michael Lumish",
+ "email": "mlumish@google.com"
+ }
+ ],
+ "description": "gRPC utility library for loading .proto files",
+ "homepage": "https://grpc.io/",
+ "main": "build/src/index.js",
+ "typings": "build/src/index.d.ts",
+ "scripts": {
+ "build": "npm run compile",
+ "clean": "rimraf ./build",
+ "compile": "tsc -p .",
+ "format": "clang-format -i -style=\"{Language: JavaScript, BasedOnStyle: Google, ColumnLimit: 80}\" src/*.ts test/*.ts",
+ "lint": "tslint -c node_modules/google-ts-style/tslint.json -p . -t codeFrame --type-check",
+ "prepare": "npm run compile",
+ "test": "gulp test",
+ "check": "gts check",
+ "fix": "gts fix",
+ "pretest": "npm run compile",
+ "posttest": "npm run check",
+ "generate-golden": "node ./build/bin/proto-loader-gen-types.js --keepCase --longs=String --enums=String --defaults --oneofs --json --includeComments --inputTemplate=I%s --outputTemplate=O%s -I deps/gapic-showcase/schema/ deps/googleapis/ -O ./golden-generated --grpcLib @grpc/grpc-js google/showcase/v1beta1/echo.proto",
+ "validate-golden": "rm -rf ./golden-generated-old && mv ./golden-generated/ ./golden-generated-old && npm run generate-golden && diff -rb ./golden-generated ./golden-generated-old"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/grpc/grpc-node.git"
+ },
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/grpc/grpc-node/issues"
+ },
+ "files": [
+ "LICENSE",
+ "build/src/*.d.ts",
+ "build/src/*.{js,js.map}",
+ "build/bin/*.{js,js.map}"
+ ],
+ "bin": {
+ "proto-loader-gen-types": "./build/bin/proto-loader-gen-types.js"
+ },
+ "dependencies": {
+ "lodash.camelcase": "^4.3.0",
+ "long": "^5.0.0",
+ "protobufjs": "^7.2.5",
+ "yargs": "^17.7.2"
+ },
+ "devDependencies": {
+ "@types/lodash.camelcase": "^4.3.4",
+ "@types/mkdirp": "^1.0.1",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.26",
+ "@types/yargs": "^17.0.24",
+ "clang-format": "^1.2.2",
+ "google-proto-files": "^3.0.2",
+ "gts": "^3.1.0",
+ "rimraf": "^3.0.2",
+ "ts-node": "^10.9.2",
+ "typescript": "~4.7.4"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+}