From ccd4e9ffae5ecbed60a9ffdd5f564d8a7810c73c Mon Sep 17 00:00:00 2001
From: apoorvgupta03 <apoorv.gupta@postman.com>
Date: Tue, 22 Apr 2025 14:11:31 +0530
Subject: [PATCH] add support to reflect using v1 protocol

---
 .eslintignore                                 |    6 +-
 package.json                                  |    7 +-
 src/client.ts                                 |  377 ++-
 src/generated/v1/reflection_grpc_pb.d.ts      |   79 +
 src/generated/v1/reflection_grpc_pb.js        |   78 +
 src/generated/v1/reflection_pb.d.ts           |  376 +++
 src/generated/v1/reflection_pb.js             | 2274 +++++++++++++++++
 src/generated/v1alpha/reflection_grpc_pb.d.ts |   79 +
 .../v1alpha}/reflection_grpc_pb.js            |   42 +-
 src/generated/v1alpha/reflection_pb.d.ts      |  376 +++
 src/{ => generated/v1alpha}/reflection_pb.js  | 1964 ++++++++------
 src/reflection_grpc_pb.d.ts                   |   40 -
 src/reflection_pb.d.ts                        |  299 ---
 static/grpc/reflection/v1/reflection.proto    |  146 ++
 test/client.test.ts                           |  697 ++++-
 test/descriptor.test.ts                       |  195 +-
 16 files changed, 5649 insertions(+), 1386 deletions(-)
 create mode 100644 src/generated/v1/reflection_grpc_pb.d.ts
 create mode 100644 src/generated/v1/reflection_grpc_pb.js
 create mode 100644 src/generated/v1/reflection_pb.d.ts
 create mode 100644 src/generated/v1/reflection_pb.js
 create mode 100644 src/generated/v1alpha/reflection_grpc_pb.d.ts
 rename src/{ => generated/v1alpha}/reflection_grpc_pb.js (76%)
 create mode 100644 src/generated/v1alpha/reflection_pb.d.ts
 rename src/{ => generated/v1alpha}/reflection_pb.js (55%)
 delete mode 100644 src/reflection_grpc_pb.d.ts
 delete mode 100644 src/reflection_pb.d.ts
 create mode 100644 static/grpc/reflection/v1/reflection.proto

diff --git a/.eslintignore b/.eslintignore
index ab16bd6..1a02ccd 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,2 +1,4 @@
-build/src/reflection_*
-src/reflection_*
+build/src/generated/v1/reflection_*
+build/src/generated/v1alpha/reflection_*
+src/generated/v1/reflection_*
+src/generated/v1alpha/reflection_*
diff --git a/package.json b/package.json
index 56338aa..00e7d4c 100644
--- a/package.json
+++ b/package.json
@@ -44,8 +44,11 @@
     "prepare": "yarn run compile",
     "pretest": "yarn run compile && yarn run fix",
     "posttest": "yarn run check",
-    "protoc": "grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./src --grpc_out=grpc_js:./src --ts_out=grpc_js:./src --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts -I ./static/grpc/reflection/v1alpha reflection.proto",
-    "build": "yarn run compile && yarn run fix && yarn run check"
+    "protoc:v1alpha": "mkdir -p ./src/generated/v1alpha && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./src/generated/v1alpha --grpc_out=grpc_js:./src/generated/v1alpha --ts_out=grpc_js:./src/generated/v1alpha --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts -I ./static/grpc/reflection/v1alpha reflection.proto",
+    "protoc:v1": "mkdir -p ./src/generated/v1 && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./src/generated/v1 --grpc_out=grpc_js:./src/generated/v1 --ts_out=grpc_js:./src/generated/v1 --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts -I ./static/grpc/reflection/v1 reflection.proto",
+    "protoc": "yarn protoc:v1alpha && yarn protoc:v1",
+    "build": "yarn run compile && yarn run fix && yarn run check",
+    "prettier": "prettier --write src"
   },
   "files": [
     "build",
diff --git a/src/client.ts b/src/client.ts
index 5ea529c..247d4a5 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -1,10 +1,10 @@
-import {ChannelCredentials, Metadata, ServiceError} from '@postman/grpc-js';
-import {getDescriptorRootFromDescriptorSet} from './descriptor';
-import * as services from './reflection_grpc_pb';
 import {
-  ServerReflectionRequest,
-  ServerReflectionResponse,
-} from './reflection_pb';
+  ChannelCredentials,
+  Metadata,
+  ServiceError,
+  status as GrpcStatus,
+  ClientDuplexStream,
+} from '@postman/grpc-js';
 import {Root} from '@postman/protobufjs';
 import {
   FileDescriptorSet,
@@ -13,13 +13,47 @@ import {
 } from '@postman/protobufjs/ext/descriptor';
 import set from 'lodash.set';
 
+import {getDescriptorRootFromDescriptorSet} from './descriptor';
+import * as services_v1alpha from './generated/v1alpha/reflection_grpc_pb';
+import {
+  ServerReflectionRequest as ServerReflectionRequest_v1alpha,
+  ServerReflectionResponse as ServerReflectionResponse_v1alpha,
+} from './generated/v1alpha/reflection_pb';
+import * as services_v1 from './generated/v1/reflection_grpc_pb';
+import {
+  ServerReflectionRequest as ServerReflectionRequest_v1,
+  ServerReflectionResponse as ServerReflectionResponse_v1,
+} from './generated/v1/reflection_pb';
+
+type ReflectionClient =
+  | services_v1.ServerReflectionClient
+  | services_v1alpha.ServerReflectionClient;
+type ReflectionRequest =
+  | ServerReflectionRequest_v1
+  | ServerReflectionRequest_v1alpha;
+type ReflectionResponse =
+  | ServerReflectionResponse_v1
+  | ServerReflectionResponse_v1alpha;
+type ReflectionVersion = 'v1' | 'v1alpha';
+
+type ServerReflectionRequestClass =
+  | typeof ServerReflectionRequest_v1
+  | typeof ServerReflectionRequest_v1alpha;
+
 export class Client {
+  private url: string;
+  private credentials: ChannelCredentials;
+  private clientOptions?: object;
   metadata: Metadata;
-  grpcClient: services.IServerReflectionClient;
   private fileDescriptorCache: Map<string, IFileDescriptorProto> = new Map();
   private reflectionOptions?: {
     useExperimentalMapFieldDecoding?: boolean;
   };
+
+  private serviceListCache: string[] | null = null;
+  private detectedVersion: ReflectionVersion | null = null;
+  private activeGrpcClient: ReflectionClient | null = null;
+
   constructor(
     url: string,
     credentials: ChannelCredentials,
@@ -27,48 +61,207 @@ export class Client {
     metadata?: Metadata,
     reflectionOptions?: Client['reflectionOptions']
   ) {
+    this.url = url;
+    this.credentials = credentials;
+    this.clientOptions = options;
     this.fileDescriptorCache = new Map();
     this.metadata = metadata || new Metadata();
-    this.grpcClient = new services.ServerReflectionClient(
-      url,
-      credentials,
-      options
-    );
     this.reflectionOptions = reflectionOptions;
   }
 
-  listServices(): Promise<string[]> {
+  /**
+   * Activates the gRPC reflection client by detecting the supported reflection protocol version.
+   *
+   * This method attempts to establish a connection with the gRPC server and determine whether
+   * the server supports the v1 or v1alpha reflection protocol. It performs a lightweight request
+   * to verify protocol support
+   *
+   * @returns {Promise<ReflectionVersion>} A promise that resolves to the detected reflection protocol version ('v1' or 'v1alpha').
+   */
+  private async activateClient(): Promise<ReflectionVersion> {
+    if (this.detectedVersion && this.activeGrpcClient)
+      return this.detectedVersion;
+
+    this.activeGrpcClient = null;
+    this.detectedVersion = null;
+    this.serviceListCache = null;
+
+    try {
+      const clientV1 = new services_v1.ServerReflectionClient(
+        this.url,
+        this.credentials,
+        this.clientOptions
+      );
+      try {
+        await this.checkProtocolSupport(clientV1, ServerReflectionRequest_v1);
+        this.activeGrpcClient = clientV1;
+        this.detectedVersion = 'v1';
+        return 'v1';
+      } catch (error) {
+        // if UNIMPLEMENTED error, fallback to v1alpha else throw error
+        if ((error as ServiceError).code !== GrpcStatus.UNIMPLEMENTED)
+          throw error;
+      }
+      const clientV1alpha = new services_v1alpha.ServerReflectionClient(
+        this.url,
+        this.credentials,
+        this.clientOptions
+      );
+      await this.checkProtocolSupport(
+        clientV1alpha,
+        ServerReflectionRequest_v1alpha
+      );
+      this.activeGrpcClient = clientV1alpha;
+      this.detectedVersion = 'v1alpha';
+      return 'v1alpha';
+    } catch (error) {
+      this.activeGrpcClient = null;
+      this.detectedVersion = null;
+      this.serviceListCache = null;
+      throw error;
+    }
+  }
+
+  /**
+    calls listServices method with a given client
+    and caches its response
+  */
+  private checkProtocolSupport(
+    client: ReflectionClient,
+    ReqClass: ServerReflectionRequestClass
+  ): Promise<void> {
+    return new Promise((resolve, reject) => {
+      const request = new ReqClass();
+      request.setListServices('*');
+      let grpcCall: ClientDuplexStream<
+        ReflectionRequest,
+        ReflectionResponse
+      > | null = null;
+      const completeCall = (error?: Error) => {
+        if (error) reject(error);
+        else resolve();
+      };
+      try {
+        grpcCall = client.serverReflectionInfo(this.metadata);
+
+        grpcCall.on('data', (res: ReflectionResponse) => {
+          // attempt to cache service list if received during probe
+          if (res.hasListServicesResponse()) {
+            const listResponse = res.getListServicesResponse();
+            const currentServices =
+              listResponse?.getServiceList().map(svc => svc.getName()) || [];
+            this.serviceListCache = currentServices;
+          }
+        });
+
+        grpcCall.on('error', e => completeCall(e));
+        grpcCall.on('end', () => completeCall());
+        grpcCall.write(request);
+        grpcCall.end();
+      } catch (error) {
+        completeCall(error as Error);
+      }
+    });
+  }
+
+  /**
+   * Executes a gRPC reflection request and handles the response.
+   *
+   * @param {ReflectionRequest | ReflectionRequest[]} request - The request object(s) to send.
+   * @param {(response: ReflectionResponse) => void} dataCallback - Callback function to handle each response.
+   * @param {TResultAccumulator} resultAccumulator - An accumulator for the results.
+   * @returns {Promise<TResultAccumulator>} A promise that resolves with the accumulated results.
+   */
+  private async exec<TResultAccumulator>(
+    request: ReflectionRequest | ReflectionRequest[],
+    dataCallback: (response: ReflectionResponse) => void,
+    resultAccumulator: TResultAccumulator
+  ): Promise<TResultAccumulator> {
+    await this.activateClient();
+    const client = this.activeGrpcClient!;
     return new Promise((resolve, reject) => {
-      function dataCallback(response: ServerReflectionResponse) {
+      let grpcCall: ClientDuplexStream<
+        ReflectionRequest,
+        ReflectionResponse
+      > | null = null;
+      const completeCall = (error?: Error) => {
+        if (error) reject(error);
+        else resolve(resultAccumulator);
+      };
+      try {
+        grpcCall = client.serverReflectionInfo(this.metadata);
+
+        grpcCall.on('data', response => {
+          try {
+            dataCallback(response);
+          } catch (err) {
+            completeCall(err as Error);
+          }
+        });
+        grpcCall.on('error', (e: ServiceError) => completeCall(e));
+        grpcCall.on('end', () => completeCall());
+
+        // write multiple requests to the stream if needed
+        if (Array.isArray(request)) {
+          for (const req of request) {
+            grpcCall.write(req);
+          }
+        } else {
+          grpcCall.write(request);
+        }
+        grpcCall.end();
+      } catch (err) {
+        completeCall(err as Error);
+      }
+    });
+  }
+
+  async listServices(): Promise<string[]> {
+    // check cache generated during probe request
+
+    await this.activateClient();
+    if (this.serviceListCache !== null) {
+      return Promise.resolve(this.serviceListCache);
+    }
+
+    const version = this.detectedVersion;
+    const ReqClass =
+      version === 'v1'
+        ? ServerReflectionRequest_v1
+        : ServerReflectionRequest_v1alpha;
+    const request = new ReqClass();
+    request.setListServices('*');
+
+    const services: string[] = [];
+
+    return this.exec<string[]>(
+      request,
+      (response: ReflectionResponse) => {
         if (response.hasListServicesResponse()) {
-          const services = response
+          const serviceList = response
             .getListServicesResponse()
             ?.getServiceList()
             .map(svc => {
               return svc.getName();
             });
-          resolve(services || []);
+
+          if (serviceList) {
+            services.push(...serviceList);
+          }
+        } else if (response.hasErrorResponse()) {
+          const err = response.getErrorResponse();
+          throw new Error(
+            `Error: ${err?.getErrorCode()}: ${err?.getErrorMessage()}`
+          );
         } else {
-          reject(Error());
+          throw new Error();
         }
-      }
-
-      function errorCallback(e: ServiceError) {
-        reject(e);
-      }
-
-      const request = new ServerReflectionRequest();
-      request.setListServices('*');
-
-      const grpcCall = this.grpcClient.serverReflectionInfo(this.metadata);
-      grpcCall.on('data', dataCallback);
-      grpcCall.on('error', errorCallback);
-      grpcCall.write(request);
-      grpcCall.end();
-    });
+      },
+      services
+    );
   }
 
-  fileContainingSymbol(symbol: string): Promise<Root> {
+  async fileContainingSymbol(symbol: string): Promise<Root> {
     return new Promise((resolve, reject) => {
       this.getFileContainingSymbol(symbol)
         .then(val => resolve(this.resolveFileDescriptorSet(val)))
@@ -76,7 +269,7 @@ export class Client {
     });
   }
 
-  fileByFilename(filename: string): Promise<Root> {
+  async fileByFilename(filename: string): Promise<Root> {
     return new Promise((resolve, reject) => {
       this.getFilesByFilenames([filename])
         .then(val => resolve(this.resolveFileDescriptorSet(val)))
@@ -90,8 +283,10 @@ export class Client {
     const fileDescriptorMap = await this.resolveDescriptorRecursive(
       fileDescriptorProtos
     );
+
     const fileDescriptorSet = FileDescriptorSet.create();
     set(fileDescriptorSet, 'file', Array.from(fileDescriptorMap.values()));
+
     return getDescriptorRootFromDescriptorSet(
       fileDescriptorSet,
       this.reflectionOptions?.useExperimentalMapFieldDecoding
@@ -128,56 +323,65 @@ export class Client {
     return fileDescriptorMap;
   }
 
-  private getFileContainingSymbol(
+  private async getFileContainingSymbol(
     symbol: string
   ): Promise<Array<IFileDescriptorProto> | undefined> {
     const fileDescriptorCache = this.fileDescriptorCache;
-    return new Promise((resolve, reject) => {
-      function dataCallback(response: ServerReflectionResponse) {
+    const version = await this.activateClient();
+    const ReqClass =
+      version === 'v1'
+        ? ServerReflectionRequest_v1
+        : ServerReflectionRequest_v1alpha;
+    const request = new ReqClass();
+    request.setFileContainingSymbol(symbol);
+
+    const fileDescriptorProtos: Array<IFileDescriptorProto> = [];
+
+    return this.exec<Array<IFileDescriptorProto>>(
+      request,
+      (response: ReflectionResponse) => {
         if (response.hasFileDescriptorResponse()) {
           const fileDescriptorProtoBytes = (response
             .getFileDescriptorResponse()
             ?.getFileDescriptorProtoList() || []) as Array<Uint8Array>;
 
-          resolve(
-            fileDescriptorProtoBytes.map(descriptorByte => {
-              const fileDescriptorProto = FileDescriptorProto.decode(
-                descriptorByte
-              ) as IFileDescriptorProto;
+          fileDescriptorProtoBytes.forEach(descriptorByte => {
+            const fileDescriptorProto = FileDescriptorProto.decode(
+              descriptorByte
+            ) as IFileDescriptorProto;
 
-              fileDescriptorCache.set(
-                fileDescriptorProto.name as string,
-                fileDescriptorProto
-              );
+            fileDescriptorCache.set(
+              fileDescriptorProto.name as string,
+              fileDescriptorProto
+            );
 
-              return fileDescriptorProto;
-            })
+            fileDescriptorProtos.push(fileDescriptorProto);
+          });
+        } else if (response.hasErrorResponse()) {
+          const err = response.getErrorResponse();
+          throw new Error(
+            `Error: ${err?.getErrorCode()}: ${err?.getErrorMessage()}`
           );
         } else {
-          reject(Error());
+          throw new Error();
         }
-      }
-
-      function errorCallback(e: ServiceError) {
-        reject(e);
-      }
-
-      const request = new ServerReflectionRequest();
-      request.setFileContainingSymbol(symbol);
-
-      const grpcCall = this.grpcClient.serverReflectionInfo(this.metadata);
-      grpcCall.on('data', dataCallback);
-      grpcCall.on('error', errorCallback);
-      grpcCall.write(request);
-      grpcCall.end();
-    });
+      },
+      fileDescriptorProtos
+    );
   }
 
-  private getFilesByFilenames(
+  private async getFilesByFilenames(
     symbols: string[]
-  ): Promise<Array<IFileDescriptorProto> | undefined> {
+  ): Promise<Array<IFileDescriptorProto>> {
+    const version = await this.activateClient();
+    const ReqClass =
+      version === 'v1'
+        ? ServerReflectionRequest_v1
+        : ServerReflectionRequest_v1alpha;
+
     const result: Array<IFileDescriptorProto> = [];
     const fileDescriptorCache = this.fileDescriptorCache;
+
     const symbolsToFetch = symbols.filter(symbol => {
       const cached = fileDescriptorCache.get(symbol);
       if (cached) {
@@ -191,8 +395,15 @@ export class Client {
       return Promise.resolve(result);
     }
 
-    return new Promise((resolve, reject) => {
-      function dataCallback(response: ServerReflectionResponse) {
+    const requests = symbolsToFetch.map(symbol => {
+      const request = new ReqClass();
+      request.setFileByFilename(symbol);
+      return request;
+    });
+
+    return this.exec<Array<IFileDescriptorProto>>(
+      requests,
+      (response: ReflectionResponse) => {
         if (response.hasFileDescriptorResponse()) {
           response
             .getFileDescriptorResponse()
@@ -211,28 +422,16 @@ export class Client {
                 result.push(fileDescriptorProto);
               }
             });
+        } else if (response.hasErrorResponse()) {
+          const err = response.getErrorResponse();
+          throw new Error(
+            `Error: ${err?.getErrorCode()}: ${err?.getErrorMessage()}`
+          );
         } else {
-          reject(Error());
+          throw new Error();
         }
-      }
-
-      function errorCallback(e: ServiceError) {
-        reject(e);
-      }
-
-      const grpcCall = this.grpcClient.serverReflectionInfo(this.metadata);
-      grpcCall.on('data', dataCallback);
-      grpcCall.on('error', errorCallback);
-      grpcCall.on('end', () => {
-        resolve(result);
-      });
-
-      symbolsToFetch.forEach(symbol => {
-        const request = new ServerReflectionRequest();
-        grpcCall.write(request.setFileByFilename(symbol));
-      });
-
-      grpcCall.end();
-    });
+      },
+      result
+    );
   }
 }
diff --git a/src/generated/v1/reflection_grpc_pb.d.ts b/src/generated/v1/reflection_grpc_pb.d.ts
new file mode 100644
index 0000000..71a116a
--- /dev/null
+++ b/src/generated/v1/reflection_grpc_pb.d.ts
@@ -0,0 +1,79 @@
+// package: grpc.reflection.v1
+// file: reflection.proto
+
+/* tslint:disable */
+/* eslint-disable */
+
+import * as grpc from '@postman/grpc-js';
+import * as reflection_pb from './reflection_pb';
+
+interface IServerReflectionService
+  extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  serverReflectionInfo: IServerReflectionService_IServerReflectionInfo;
+}
+
+interface IServerReflectionService_IServerReflectionInfo
+  extends grpc.MethodDefinition<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  > {
+  path: '/grpc.reflection.v1.ServerReflection/ServerReflectionInfo';
+  requestStream: true;
+  responseStream: true;
+  requestSerialize: grpc.serialize<reflection_pb.ServerReflectionRequest>;
+  requestDeserialize: grpc.deserialize<reflection_pb.ServerReflectionRequest>;
+  responseSerialize: grpc.serialize<reflection_pb.ServerReflectionResponse>;
+  responseDeserialize: grpc.deserialize<reflection_pb.ServerReflectionResponse>;
+}
+
+export const ServerReflectionService: IServerReflectionService;
+
+export interface IServerReflectionServer {
+  serverReflectionInfo: grpc.handleBidiStreamingCall<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+}
+
+export interface IServerReflectionClient {
+  serverReflectionInfo(): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+  serverReflectionInfo(
+    options: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+  serverReflectionInfo(
+    metadata: grpc.Metadata,
+    options?: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+}
+
+export class ServerReflectionClient
+  extends grpc.Client
+  implements IServerReflectionClient {
+  constructor(
+    address: string,
+    credentials: grpc.ChannelCredentials,
+    options?: Partial<grpc.ClientOptions>
+  );
+  public serverReflectionInfo(
+    options?: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+  public serverReflectionInfo(
+    metadata?: grpc.Metadata,
+    options?: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+}
diff --git a/src/generated/v1/reflection_grpc_pb.js b/src/generated/v1/reflection_grpc_pb.js
new file mode 100644
index 0000000..d66c79b
--- /dev/null
+++ b/src/generated/v1/reflection_grpc_pb.js
@@ -0,0 +1,78 @@
+// GENERATED CODE -- DO NOT EDIT!
+
+// Original file comments:
+// Copyright 2016 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.
+//
+// Service exported by server reflection.  A more complete description of how
+// server reflection works can be found at
+// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md
+//
+// The canonical version of this proto can be found at
+// https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto
+//
+'use strict';
+const grpc = require('@postman/grpc-js');
+const reflection_pb = require('./reflection_pb.js');
+
+function serialize_grpc_reflection_v1_ServerReflectionRequest(arg) {
+  if (!(arg instanceof reflection_pb.ServerReflectionRequest)) {
+    throw new Error(
+      'Expected argument of type grpc.reflection.v1.ServerReflectionRequest'
+    );
+  }
+  return Buffer.from(arg.serializeBinary());
+}
+
+function deserialize_grpc_reflection_v1_ServerReflectionRequest(buffer_arg) {
+  return reflection_pb.ServerReflectionRequest.deserializeBinary(
+    new Uint8Array(buffer_arg)
+  );
+}
+
+function serialize_grpc_reflection_v1_ServerReflectionResponse(arg) {
+  if (!(arg instanceof reflection_pb.ServerReflectionResponse)) {
+    throw new Error(
+      'Expected argument of type grpc.reflection.v1.ServerReflectionResponse'
+    );
+  }
+  return Buffer.from(arg.serializeBinary());
+}
+
+function deserialize_grpc_reflection_v1_ServerReflectionResponse(buffer_arg) {
+  return reflection_pb.ServerReflectionResponse.deserializeBinary(
+    new Uint8Array(buffer_arg)
+  );
+}
+
+const ServerReflectionService = (exports.ServerReflectionService = {
+  // The reflection service is structured as a bidirectional stream, ensuring
+  // all related requests go to a single server.
+  serverReflectionInfo: {
+    path: '/grpc.reflection.v1.ServerReflection/ServerReflectionInfo',
+    requestStream: true,
+    responseStream: true,
+    requestType: reflection_pb.ServerReflectionRequest,
+    responseType: reflection_pb.ServerReflectionResponse,
+    requestSerialize: serialize_grpc_reflection_v1_ServerReflectionRequest,
+    requestDeserialize: deserialize_grpc_reflection_v1_ServerReflectionRequest,
+    responseSerialize: serialize_grpc_reflection_v1_ServerReflectionResponse,
+    responseDeserialize: deserialize_grpc_reflection_v1_ServerReflectionResponse,
+  },
+});
+
+exports.ServerReflectionClient = grpc.makeGenericClientConstructor(
+  ServerReflectionService,
+  'ServerReflection'
+);
diff --git a/src/generated/v1/reflection_pb.d.ts b/src/generated/v1/reflection_pb.d.ts
new file mode 100644
index 0000000..bfca4da
--- /dev/null
+++ b/src/generated/v1/reflection_pb.d.ts
@@ -0,0 +1,376 @@
+// package: grpc.reflection.v1
+// file: reflection.proto
+
+/* tslint:disable */
+/* eslint-disable */
+
+import * as jspb from 'google-protobuf';
+
+export class ServerReflectionRequest extends jspb.Message {
+  getHost(): string;
+  setHost(value: string): ServerReflectionRequest;
+
+  hasFileByFilename(): boolean;
+  clearFileByFilename(): void;
+  getFileByFilename(): string;
+  setFileByFilename(value: string): ServerReflectionRequest;
+
+  hasFileContainingSymbol(): boolean;
+  clearFileContainingSymbol(): void;
+  getFileContainingSymbol(): string;
+  setFileContainingSymbol(value: string): ServerReflectionRequest;
+
+  hasFileContainingExtension(): boolean;
+  clearFileContainingExtension(): void;
+  getFileContainingExtension(): ExtensionRequest | undefined;
+  setFileContainingExtension(value?: ExtensionRequest): ServerReflectionRequest;
+
+  hasAllExtensionNumbersOfType(): boolean;
+  clearAllExtensionNumbersOfType(): void;
+  getAllExtensionNumbersOfType(): string;
+  setAllExtensionNumbersOfType(value: string): ServerReflectionRequest;
+
+  hasListServices(): boolean;
+  clearListServices(): void;
+  getListServices(): string;
+  setListServices(value: string): ServerReflectionRequest;
+
+  getMessageRequestCase(): ServerReflectionRequest.MessageRequestCase;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServerReflectionRequest.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ServerReflectionRequest
+  ): ServerReflectionRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ServerReflectionRequest,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ServerReflectionRequest;
+  static deserializeBinaryFromReader(
+    message: ServerReflectionRequest,
+    reader: jspb.BinaryReader
+  ): ServerReflectionRequest;
+}
+
+export namespace ServerReflectionRequest {
+  export type AsObject = {
+    host: string;
+    fileByFilename: string;
+    fileContainingSymbol: string;
+    fileContainingExtension?: ExtensionRequest.AsObject;
+    allExtensionNumbersOfType: string;
+    listServices: string;
+  };
+
+  export enum MessageRequestCase {
+    MESSAGE_REQUEST_NOT_SET = 0,
+
+    FILE_BY_FILENAME = 3,
+
+    FILE_CONTAINING_SYMBOL = 4,
+
+    FILE_CONTAINING_EXTENSION = 5,
+
+    ALL_EXTENSION_NUMBERS_OF_TYPE = 6,
+
+    LIST_SERVICES = 7,
+  }
+}
+
+export class ExtensionRequest extends jspb.Message {
+  getContainingType(): string;
+  setContainingType(value: string): ExtensionRequest;
+
+  getExtensionNumber(): number;
+  setExtensionNumber(value: number): ExtensionRequest;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ExtensionRequest.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ExtensionRequest
+  ): ExtensionRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ExtensionRequest,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ExtensionRequest;
+  static deserializeBinaryFromReader(
+    message: ExtensionRequest,
+    reader: jspb.BinaryReader
+  ): ExtensionRequest;
+}
+
+export namespace ExtensionRequest {
+  export type AsObject = {
+    containingType: string;
+    extensionNumber: number;
+  };
+}
+
+export class ServerReflectionResponse extends jspb.Message {
+  getValidHost(): string;
+  setValidHost(value: string): ServerReflectionResponse;
+
+  hasOriginalRequest(): boolean;
+  clearOriginalRequest(): void;
+  getOriginalRequest(): ServerReflectionRequest | undefined;
+  setOriginalRequest(value?: ServerReflectionRequest): ServerReflectionResponse;
+
+  hasFileDescriptorResponse(): boolean;
+  clearFileDescriptorResponse(): void;
+  getFileDescriptorResponse(): FileDescriptorResponse | undefined;
+  setFileDescriptorResponse(
+    value?: FileDescriptorResponse
+  ): ServerReflectionResponse;
+
+  hasAllExtensionNumbersResponse(): boolean;
+  clearAllExtensionNumbersResponse(): void;
+  getAllExtensionNumbersResponse(): ExtensionNumberResponse | undefined;
+  setAllExtensionNumbersResponse(
+    value?: ExtensionNumberResponse
+  ): ServerReflectionResponse;
+
+  hasListServicesResponse(): boolean;
+  clearListServicesResponse(): void;
+  getListServicesResponse(): ListServiceResponse | undefined;
+  setListServicesResponse(
+    value?: ListServiceResponse
+  ): ServerReflectionResponse;
+
+  hasErrorResponse(): boolean;
+  clearErrorResponse(): void;
+  getErrorResponse(): ErrorResponse | undefined;
+  setErrorResponse(value?: ErrorResponse): ServerReflectionResponse;
+
+  getMessageResponseCase(): ServerReflectionResponse.MessageResponseCase;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServerReflectionResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ServerReflectionResponse
+  ): ServerReflectionResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ServerReflectionResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ServerReflectionResponse;
+  static deserializeBinaryFromReader(
+    message: ServerReflectionResponse,
+    reader: jspb.BinaryReader
+  ): ServerReflectionResponse;
+}
+
+export namespace ServerReflectionResponse {
+  export type AsObject = {
+    validHost: string;
+    originalRequest?: ServerReflectionRequest.AsObject;
+    fileDescriptorResponse?: FileDescriptorResponse.AsObject;
+    allExtensionNumbersResponse?: ExtensionNumberResponse.AsObject;
+    listServicesResponse?: ListServiceResponse.AsObject;
+    errorResponse?: ErrorResponse.AsObject;
+  };
+
+  export enum MessageResponseCase {
+    MESSAGE_RESPONSE_NOT_SET = 0,
+
+    FILE_DESCRIPTOR_RESPONSE = 4,
+
+    ALL_EXTENSION_NUMBERS_RESPONSE = 5,
+
+    LIST_SERVICES_RESPONSE = 6,
+
+    ERROR_RESPONSE = 7,
+  }
+}
+
+export class FileDescriptorResponse extends jspb.Message {
+  clearFileDescriptorProtoList(): void;
+  getFileDescriptorProtoList(): Array<Uint8Array | string>;
+  getFileDescriptorProtoList_asU8(): Array<Uint8Array>;
+  getFileDescriptorProtoList_asB64(): Array<string>;
+  setFileDescriptorProtoList(
+    value: Array<Uint8Array | string>
+  ): FileDescriptorResponse;
+  addFileDescriptorProto(
+    value: Uint8Array | string,
+    index?: number
+  ): Uint8Array | string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FileDescriptorResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: FileDescriptorResponse
+  ): FileDescriptorResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: FileDescriptorResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): FileDescriptorResponse;
+  static deserializeBinaryFromReader(
+    message: FileDescriptorResponse,
+    reader: jspb.BinaryReader
+  ): FileDescriptorResponse;
+}
+
+export namespace FileDescriptorResponse {
+  export type AsObject = {
+    fileDescriptorProtoList: Array<Uint8Array | string>;
+  };
+}
+
+export class ExtensionNumberResponse extends jspb.Message {
+  getBaseTypeName(): string;
+  setBaseTypeName(value: string): ExtensionNumberResponse;
+
+  clearExtensionNumberList(): void;
+  getExtensionNumberList(): Array<number>;
+  setExtensionNumberList(value: Array<number>): ExtensionNumberResponse;
+  addExtensionNumber(value: number, index?: number): number;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ExtensionNumberResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ExtensionNumberResponse
+  ): ExtensionNumberResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ExtensionNumberResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ExtensionNumberResponse;
+  static deserializeBinaryFromReader(
+    message: ExtensionNumberResponse,
+    reader: jspb.BinaryReader
+  ): ExtensionNumberResponse;
+}
+
+export namespace ExtensionNumberResponse {
+  export type AsObject = {
+    baseTypeName: string;
+    extensionNumberList: Array<number>;
+  };
+}
+
+export class ListServiceResponse extends jspb.Message {
+  clearServiceList(): void;
+  getServiceList(): Array<ServiceResponse>;
+  setServiceList(value: Array<ServiceResponse>): ListServiceResponse;
+  addService(value?: ServiceResponse, index?: number): ServiceResponse;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListServiceResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ListServiceResponse
+  ): ListServiceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ListServiceResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ListServiceResponse;
+  static deserializeBinaryFromReader(
+    message: ListServiceResponse,
+    reader: jspb.BinaryReader
+  ): ListServiceResponse;
+}
+
+export namespace ListServiceResponse {
+  export type AsObject = {
+    serviceList: Array<ServiceResponse.AsObject>;
+  };
+}
+
+export class ServiceResponse extends jspb.Message {
+  getName(): string;
+  setName(value: string): ServiceResponse;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServiceResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ServiceResponse
+  ): ServiceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ServiceResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ServiceResponse;
+  static deserializeBinaryFromReader(
+    message: ServiceResponse,
+    reader: jspb.BinaryReader
+  ): ServiceResponse;
+}
+
+export namespace ServiceResponse {
+  export type AsObject = {
+    name: string;
+  };
+}
+
+export class ErrorResponse extends jspb.Message {
+  getErrorCode(): number;
+  setErrorCode(value: number): ErrorResponse;
+
+  getErrorMessage(): string;
+  setErrorMessage(value: string): ErrorResponse;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ErrorResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ErrorResponse
+  ): ErrorResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ErrorResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ErrorResponse;
+  static deserializeBinaryFromReader(
+    message: ErrorResponse,
+    reader: jspb.BinaryReader
+  ): ErrorResponse;
+}
+
+export namespace ErrorResponse {
+  export type AsObject = {
+    errorCode: number;
+    errorMessage: string;
+  };
+}
diff --git a/src/generated/v1/reflection_pb.js b/src/generated/v1/reflection_pb.js
new file mode 100644
index 0000000..1173265
--- /dev/null
+++ b/src/generated/v1/reflection_pb.js
@@ -0,0 +1,2274 @@
+// source: reflection.proto
+/**
+ * @fileoverview
+ * @enhanceable
+ * @suppress {missingRequire} reports error on implicit type usages.
+ * @suppress {messageConventions} JS Compiler reports an error if a variable or
+ *     field starts with 'MSG_' and isn't a translatable message.
+ * @public
+ */
+// GENERATED CODE -- DO NOT EDIT!
+/* eslint-disable */
+// @ts-nocheck
+
+var jspb = require('google-protobuf');
+var goog = jspb;
+var global = function () {
+  if (this) {
+    return this;
+  }
+  if (typeof window !== 'undefined') {
+    return window;
+  }
+  if (typeof global !== 'undefined') {
+    return global;
+  }
+  if (typeof self !== 'undefined') {
+    return self;
+  }
+  return Function('return this')();
+}.call(null);
+
+goog.exportSymbol('proto.grpc.reflection.v1.ErrorResponse', null, global);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1.ExtensionNumberResponse',
+  null,
+  global
+);
+goog.exportSymbol('proto.grpc.reflection.v1.ExtensionRequest', null, global);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1.FileDescriptorResponse',
+  null,
+  global
+);
+goog.exportSymbol('proto.grpc.reflection.v1.ListServiceResponse', null, global);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1.ServerReflectionRequest',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1.ServerReflectionRequest.MessageRequestCase',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1.ServerReflectionResponse',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1.ServerReflectionResponse.MessageResponseCase',
+  null,
+  global
+);
+goog.exportSymbol('proto.grpc.reflection.v1.ServiceResponse', null, global);
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    null,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_
+  );
+};
+goog.inherits(proto.grpc.reflection.v1.ServerReflectionRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.ServerReflectionRequest.displayName =
+    'proto.grpc.reflection.v1.ServerReflectionRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.ExtensionRequest = function (opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.grpc.reflection.v1.ExtensionRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.ExtensionRequest.displayName =
+    'proto.grpc.reflection.v1.ExtensionRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    null,
+    proto.grpc.reflection.v1.ServerReflectionResponse.oneofGroups_
+  );
+};
+goog.inherits(proto.grpc.reflection.v1.ServerReflectionResponse, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.ServerReflectionResponse.displayName =
+    'proto.grpc.reflection.v1.ServerReflectionResponse';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    proto.grpc.reflection.v1.FileDescriptorResponse.repeatedFields_,
+    null
+  );
+};
+goog.inherits(proto.grpc.reflection.v1.FileDescriptorResponse, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.FileDescriptorResponse.displayName =
+    'proto.grpc.reflection.v1.FileDescriptorResponse';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    proto.grpc.reflection.v1.ExtensionNumberResponse.repeatedFields_,
+    null
+  );
+};
+goog.inherits(proto.grpc.reflection.v1.ExtensionNumberResponse, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.ExtensionNumberResponse.displayName =
+    'proto.grpc.reflection.v1.ExtensionNumberResponse';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.ListServiceResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    proto.grpc.reflection.v1.ListServiceResponse.repeatedFields_,
+    null
+  );
+};
+goog.inherits(proto.grpc.reflection.v1.ListServiceResponse, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.ListServiceResponse.displayName =
+    'proto.grpc.reflection.v1.ListServiceResponse';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.ServiceResponse = function (opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.grpc.reflection.v1.ServiceResponse, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.ServiceResponse.displayName =
+    'proto.grpc.reflection.v1.ServiceResponse';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.grpc.reflection.v1.ErrorResponse = function (opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.grpc.reflection.v1.ErrorResponse, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  /**
+   * @public
+   * @override
+   */
+  proto.grpc.reflection.v1.ErrorResponse.displayName =
+    'proto.grpc.reflection.v1.ErrorResponse';
+}
+
+/**
+ * Oneof group definitions for this message. Each group defines the field
+ * numbers belonging to that group. When of these fields' value is set, all
+ * other fields in the group are cleared. During deserialization, if multiple
+ * fields are encountered for a group, only the last value seen will be kept.
+ * @private {!Array<!Array<number>>}
+ * @const
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_ = [
+  [3, 4, 5, 6, 7],
+];
+
+/**
+ * @enum {number}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.MessageRequestCase = {
+  MESSAGE_REQUEST_NOT_SET: 0,
+  FILE_BY_FILENAME: 3,
+  FILE_CONTAINING_SYMBOL: 4,
+  FILE_CONTAINING_EXTENSION: 5,
+  ALL_EXTENSION_NUMBERS_OF_TYPE: 6,
+  LIST_SERVICES: 7,
+};
+
+/**
+ * @return {proto.grpc.reflection.v1.ServerReflectionRequest.MessageRequestCase}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.getMessageRequestCase = function () {
+  return /** @type {proto.grpc.reflection.v1.ServerReflectionRequest.MessageRequestCase} */ (jspb.Message.computeOneofCase(
+    this,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0]
+  ));
+};
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.ServerReflectionRequest.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.ServerReflectionRequest.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.ServerReflectionRequest} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.ServerReflectionRequest.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        host: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        fileByFilename: jspb.Message.getFieldWithDefault(msg, 3, ''),
+        fileContainingSymbol: jspb.Message.getFieldWithDefault(msg, 4, ''),
+        fileContainingExtension:
+          (f = msg.getFileContainingExtension()) &&
+          proto.grpc.reflection.v1.ExtensionRequest.toObject(
+            includeInstance,
+            f
+          ),
+        allExtensionNumbersOfType: jspb.Message.getFieldWithDefault(msg, 6, ''),
+        listServices: jspb.Message.getFieldWithDefault(msg, 7, ''),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.deserializeBinary = function (
+  bytes
+) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.ServerReflectionRequest();
+  return proto.grpc.reflection.v1.ServerReflectionRequest.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.ServerReflectionRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setHost(value);
+        break;
+      case 3:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setFileByFilename(value);
+        break;
+      case 4:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setFileContainingSymbol(value);
+        break;
+      case 5:
+        var value = new proto.grpc.reflection.v1.ExtensionRequest();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1.ExtensionRequest.deserializeBinaryFromReader
+        );
+        msg.setFileContainingExtension(value);
+        break;
+      case 6:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setAllExtensionNumbersOfType(value);
+        break;
+      case 7:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setListServices(value);
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.ServerReflectionRequest.serializeBinaryToWriter(
+    this,
+    writer
+  );
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.ServerReflectionRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getHost();
+  if (f.length > 0) {
+    writer.writeString(1, f);
+  }
+  f = /** @type {string} */ (jspb.Message.getField(message, 3));
+  if (f != null) {
+    writer.writeString(3, f);
+  }
+  f = /** @type {string} */ (jspb.Message.getField(message, 4));
+  if (f != null) {
+    writer.writeString(4, f);
+  }
+  f = message.getFileContainingExtension();
+  if (f != null) {
+    writer.writeMessage(
+      5,
+      f,
+      proto.grpc.reflection.v1.ExtensionRequest.serializeBinaryToWriter
+    );
+  }
+  f = /** @type {string} */ (jspb.Message.getField(message, 6));
+  if (f != null) {
+    writer.writeString(6, f);
+  }
+  f = /** @type {string} */ (jspb.Message.getField(message, 7));
+  if (f != null) {
+    writer.writeString(7, f);
+  }
+};
+
+/**
+ * optional string host = 1;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.getHost = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.setHost = function (
+  value
+) {
+  return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+/**
+ * optional string file_by_filename = 3;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.getFileByFilename = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.setFileByFilename = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    3,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.clearFileByFilename = function () {
+  return jspb.Message.setOneofField(
+    this,
+    3,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.hasFileByFilename = function () {
+  return jspb.Message.getField(this, 3) != null;
+};
+
+/**
+ * optional string file_containing_symbol = 4;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.getFileContainingSymbol = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.setFileContainingSymbol = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    4,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.clearFileContainingSymbol = function () {
+  return jspb.Message.setOneofField(
+    this,
+    4,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.hasFileContainingSymbol = function () {
+  return jspb.Message.getField(this, 4) != null;
+};
+
+/**
+ * optional ExtensionRequest file_containing_extension = 5;
+ * @return {?proto.grpc.reflection.v1.ExtensionRequest}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.getFileContainingExtension = function () {
+  return /** @type{?proto.grpc.reflection.v1.ExtensionRequest} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1.ExtensionRequest,
+    5
+  ));
+};
+
+/**
+ * @param {?proto.grpc.reflection.v1.ExtensionRequest|undefined} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.setFileContainingExtension = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    5,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the message field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.clearFileContainingExtension = function () {
+  return this.setFileContainingExtension(undefined);
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.hasFileContainingExtension = function () {
+  return jspb.Message.getField(this, 5) != null;
+};
+
+/**
+ * optional string all_extension_numbers_of_type = 6;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.getAllExtensionNumbersOfType = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.setAllExtensionNumbersOfType = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    6,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.clearAllExtensionNumbersOfType = function () {
+  return jspb.Message.setOneofField(
+    this,
+    6,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.hasAllExtensionNumbersOfType = function () {
+  return jspb.Message.getField(this, 6) != null;
+};
+
+/**
+ * optional string list_services = 7;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.getListServices = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.setListServices = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    7,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionRequest} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.clearListServices = function () {
+  return jspb.Message.setOneofField(
+    this,
+    7,
+    proto.grpc.reflection.v1.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionRequest.prototype.hasListServices = function () {
+  return jspb.Message.getField(this, 7) != null;
+};
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.ExtensionRequest.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.ExtensionRequest.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.ExtensionRequest} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.ExtensionRequest.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        containingType: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        extensionNumber: jspb.Message.getFieldWithDefault(msg, 2, 0),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.ExtensionRequest}
+ */
+proto.grpc.reflection.v1.ExtensionRequest.deserializeBinary = function (bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.ExtensionRequest();
+  return proto.grpc.reflection.v1.ExtensionRequest.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.ExtensionRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.ExtensionRequest}
+ */
+proto.grpc.reflection.v1.ExtensionRequest.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setContainingType(value);
+        break;
+      case 2:
+        var value = /** @type {number} */ (reader.readInt32());
+        msg.setExtensionNumber(value);
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.ExtensionRequest.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.ExtensionRequest.serializeBinaryToWriter(
+    this,
+    writer
+  );
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.ExtensionRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.ExtensionRequest.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getContainingType();
+  if (f.length > 0) {
+    writer.writeString(1, f);
+  }
+  f = message.getExtensionNumber();
+  if (f !== 0) {
+    writer.writeInt32(2, f);
+  }
+};
+
+/**
+ * optional string containing_type = 1;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ExtensionRequest.prototype.getContainingType = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ExtensionRequest} returns this
+ */
+proto.grpc.reflection.v1.ExtensionRequest.prototype.setContainingType = function (
+  value
+) {
+  return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+/**
+ * optional int32 extension_number = 2;
+ * @return {number}
+ */
+proto.grpc.reflection.v1.ExtensionRequest.prototype.getExtensionNumber = function () {
+  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
+};
+
+/**
+ * @param {number} value
+ * @return {!proto.grpc.reflection.v1.ExtensionRequest} returns this
+ */
+proto.grpc.reflection.v1.ExtensionRequest.prototype.setExtensionNumber = function (
+  value
+) {
+  return jspb.Message.setProto3IntField(this, 2, value);
+};
+
+/**
+ * Oneof group definitions for this message. Each group defines the field
+ * numbers belonging to that group. When of these fields' value is set, all
+ * other fields in the group are cleared. During deserialization, if multiple
+ * fields are encountered for a group, only the last value seen will be kept.
+ * @private {!Array<!Array<number>>}
+ * @const
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.oneofGroups_ = [[4, 5, 6, 7]];
+
+/**
+ * @enum {number}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.MessageResponseCase = {
+  MESSAGE_RESPONSE_NOT_SET: 0,
+  FILE_DESCRIPTOR_RESPONSE: 4,
+  ALL_EXTENSION_NUMBERS_RESPONSE: 5,
+  LIST_SERVICES_RESPONSE: 6,
+  ERROR_RESPONSE: 7,
+};
+
+/**
+ * @return {proto.grpc.reflection.v1.ServerReflectionResponse.MessageResponseCase}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.getMessageResponseCase = function () {
+  return /** @type {proto.grpc.reflection.v1.ServerReflectionResponse.MessageResponseCase} */ (jspb.Message.computeOneofCase(
+    this,
+    proto.grpc.reflection.v1.ServerReflectionResponse.oneofGroups_[0]
+  ));
+};
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.ServerReflectionResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.ServerReflectionResponse.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.ServerReflectionResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.ServerReflectionResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        validHost: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        originalRequest:
+          (f = msg.getOriginalRequest()) &&
+          proto.grpc.reflection.v1.ServerReflectionRequest.toObject(
+            includeInstance,
+            f
+          ),
+        fileDescriptorResponse:
+          (f = msg.getFileDescriptorResponse()) &&
+          proto.grpc.reflection.v1.FileDescriptorResponse.toObject(
+            includeInstance,
+            f
+          ),
+        allExtensionNumbersResponse:
+          (f = msg.getAllExtensionNumbersResponse()) &&
+          proto.grpc.reflection.v1.ExtensionNumberResponse.toObject(
+            includeInstance,
+            f
+          ),
+        listServicesResponse:
+          (f = msg.getListServicesResponse()) &&
+          proto.grpc.reflection.v1.ListServiceResponse.toObject(
+            includeInstance,
+            f
+          ),
+        errorResponse:
+          (f = msg.getErrorResponse()) &&
+          proto.grpc.reflection.v1.ErrorResponse.toObject(includeInstance, f),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.deserializeBinary = function (
+  bytes
+) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.ServerReflectionResponse();
+  return proto.grpc.reflection.v1.ServerReflectionResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.ServerReflectionResponse} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setValidHost(value);
+        break;
+      case 2:
+        var value = new proto.grpc.reflection.v1.ServerReflectionRequest();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1.ServerReflectionRequest
+            .deserializeBinaryFromReader
+        );
+        msg.setOriginalRequest(value);
+        break;
+      case 4:
+        var value = new proto.grpc.reflection.v1.FileDescriptorResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1.FileDescriptorResponse
+            .deserializeBinaryFromReader
+        );
+        msg.setFileDescriptorResponse(value);
+        break;
+      case 5:
+        var value = new proto.grpc.reflection.v1.ExtensionNumberResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1.ExtensionNumberResponse
+            .deserializeBinaryFromReader
+        );
+        msg.setAllExtensionNumbersResponse(value);
+        break;
+      case 6:
+        var value = new proto.grpc.reflection.v1.ListServiceResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1.ListServiceResponse
+            .deserializeBinaryFromReader
+        );
+        msg.setListServicesResponse(value);
+        break;
+      case 7:
+        var value = new proto.grpc.reflection.v1.ErrorResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1.ErrorResponse.deserializeBinaryFromReader
+        );
+        msg.setErrorResponse(value);
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.ServerReflectionResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.ServerReflectionResponse} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getValidHost();
+  if (f.length > 0) {
+    writer.writeString(1, f);
+  }
+  f = message.getOriginalRequest();
+  if (f != null) {
+    writer.writeMessage(
+      2,
+      f,
+      proto.grpc.reflection.v1.ServerReflectionRequest.serializeBinaryToWriter
+    );
+  }
+  f = message.getFileDescriptorResponse();
+  if (f != null) {
+    writer.writeMessage(
+      4,
+      f,
+      proto.grpc.reflection.v1.FileDescriptorResponse.serializeBinaryToWriter
+    );
+  }
+  f = message.getAllExtensionNumbersResponse();
+  if (f != null) {
+    writer.writeMessage(
+      5,
+      f,
+      proto.grpc.reflection.v1.ExtensionNumberResponse.serializeBinaryToWriter
+    );
+  }
+  f = message.getListServicesResponse();
+  if (f != null) {
+    writer.writeMessage(
+      6,
+      f,
+      proto.grpc.reflection.v1.ListServiceResponse.serializeBinaryToWriter
+    );
+  }
+  f = message.getErrorResponse();
+  if (f != null) {
+    writer.writeMessage(
+      7,
+      f,
+      proto.grpc.reflection.v1.ErrorResponse.serializeBinaryToWriter
+    );
+  }
+};
+
+/**
+ * optional string valid_host = 1;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.getValidHost = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.setValidHost = function (
+  value
+) {
+  return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+/**
+ * optional ServerReflectionRequest original_request = 2;
+ * @return {?proto.grpc.reflection.v1.ServerReflectionRequest}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.getOriginalRequest = function () {
+  return /** @type{?proto.grpc.reflection.v1.ServerReflectionRequest} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1.ServerReflectionRequest,
+    2
+  ));
+};
+
+/**
+ * @param {?proto.grpc.reflection.v1.ServerReflectionRequest|undefined} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.setOriginalRequest = function (
+  value
+) {
+  return jspb.Message.setWrapperField(this, 2, value);
+};
+
+/**
+ * Clears the message field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.clearOriginalRequest = function () {
+  return this.setOriginalRequest(undefined);
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.hasOriginalRequest = function () {
+  return jspb.Message.getField(this, 2) != null;
+};
+
+/**
+ * optional FileDescriptorResponse file_descriptor_response = 4;
+ * @return {?proto.grpc.reflection.v1.FileDescriptorResponse}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.getFileDescriptorResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1.FileDescriptorResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1.FileDescriptorResponse,
+    4
+  ));
+};
+
+/**
+ * @param {?proto.grpc.reflection.v1.FileDescriptorResponse|undefined} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.setFileDescriptorResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    4,
+    proto.grpc.reflection.v1.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the message field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.clearFileDescriptorResponse = function () {
+  return this.setFileDescriptorResponse(undefined);
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.hasFileDescriptorResponse = function () {
+  return jspb.Message.getField(this, 4) != null;
+};
+
+/**
+ * optional ExtensionNumberResponse all_extension_numbers_response = 5;
+ * @return {?proto.grpc.reflection.v1.ExtensionNumberResponse}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.getAllExtensionNumbersResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1.ExtensionNumberResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1.ExtensionNumberResponse,
+    5
+  ));
+};
+
+/**
+ * @param {?proto.grpc.reflection.v1.ExtensionNumberResponse|undefined} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.setAllExtensionNumbersResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    5,
+    proto.grpc.reflection.v1.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the message field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.clearAllExtensionNumbersResponse = function () {
+  return this.setAllExtensionNumbersResponse(undefined);
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.hasAllExtensionNumbersResponse = function () {
+  return jspb.Message.getField(this, 5) != null;
+};
+
+/**
+ * optional ListServiceResponse list_services_response = 6;
+ * @return {?proto.grpc.reflection.v1.ListServiceResponse}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.getListServicesResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1.ListServiceResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1.ListServiceResponse,
+    6
+  ));
+};
+
+/**
+ * @param {?proto.grpc.reflection.v1.ListServiceResponse|undefined} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.setListServicesResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    6,
+    proto.grpc.reflection.v1.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the message field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.clearListServicesResponse = function () {
+  return this.setListServicesResponse(undefined);
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.hasListServicesResponse = function () {
+  return jspb.Message.getField(this, 6) != null;
+};
+
+/**
+ * optional ErrorResponse error_response = 7;
+ * @return {?proto.grpc.reflection.v1.ErrorResponse}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.getErrorResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1.ErrorResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1.ErrorResponse,
+    7
+  ));
+};
+
+/**
+ * @param {?proto.grpc.reflection.v1.ErrorResponse|undefined} value
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.setErrorResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    7,
+    proto.grpc.reflection.v1.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
+};
+
+/**
+ * Clears the message field making it undefined.
+ * @return {!proto.grpc.reflection.v1.ServerReflectionResponse} returns this
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.clearErrorResponse = function () {
+  return this.setErrorResponse(undefined);
+};
+
+/**
+ * Returns whether this field is set.
+ * @return {boolean}
+ */
+proto.grpc.reflection.v1.ServerReflectionResponse.prototype.hasErrorResponse = function () {
+  return jspb.Message.getField(this, 7) != null;
+};
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.repeatedFields_ = [1];
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.FileDescriptorResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.FileDescriptorResponse.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.FileDescriptorResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.FileDescriptorResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        fileDescriptorProtoList: msg.getFileDescriptorProtoList_asB64(),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.FileDescriptorResponse}
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.deserializeBinary = function (
+  bytes
+) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.FileDescriptorResponse();
+  return proto.grpc.reflection.v1.FileDescriptorResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.FileDescriptorResponse} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.FileDescriptorResponse}
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = /** @type {!Uint8Array} */ (reader.readBytes());
+        msg.addFileDescriptorProto(value);
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.FileDescriptorResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.FileDescriptorResponse} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getFileDescriptorProtoList_asU8();
+  if (f.length > 0) {
+    writer.writeRepeatedBytes(1, f);
+  }
+};
+
+/**
+ * repeated bytes file_descriptor_proto = 1;
+ * @return {!(Array<!Uint8Array>|Array<string>)}
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.prototype.getFileDescriptorProtoList = function () {
+  return /** @type {!(Array<!Uint8Array>|Array<string>)} */ (jspb.Message.getRepeatedField(
+    this,
+    1
+  ));
+};
+
+/**
+ * repeated bytes file_descriptor_proto = 1;
+ * This is a type-conversion wrapper around `getFileDescriptorProtoList()`
+ * @return {!Array<string>}
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.prototype.getFileDescriptorProtoList_asB64 = function () {
+  return /** @type {!Array<string>} */ (jspb.Message.bytesListAsB64(
+    this.getFileDescriptorProtoList()
+  ));
+};
+
+/**
+ * repeated bytes file_descriptor_proto = 1;
+ * Note that Uint8Array is not supported on all browsers.
+ * @see http://caniuse.com/Uint8Array
+ * This is a type-conversion wrapper around `getFileDescriptorProtoList()`
+ * @return {!Array<!Uint8Array>}
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.prototype.getFileDescriptorProtoList_asU8 = function () {
+  return /** @type {!Array<!Uint8Array>} */ (jspb.Message.bytesListAsU8(
+    this.getFileDescriptorProtoList()
+  ));
+};
+
+/**
+ * @param {!(Array<!Uint8Array>|Array<string>)} value
+ * @return {!proto.grpc.reflection.v1.FileDescriptorResponse} returns this
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.prototype.setFileDescriptorProtoList = function (
+  value
+) {
+  return jspb.Message.setField(this, 1, value || []);
+};
+
+/**
+ * @param {!(string|Uint8Array)} value
+ * @param {number=} opt_index
+ * @return {!proto.grpc.reflection.v1.FileDescriptorResponse} returns this
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.prototype.addFileDescriptorProto = function (
+  value,
+  opt_index
+) {
+  return jspb.Message.addToRepeatedField(this, 1, value, opt_index);
+};
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.grpc.reflection.v1.FileDescriptorResponse} returns this
+ */
+proto.grpc.reflection.v1.FileDescriptorResponse.prototype.clearFileDescriptorProtoList = function () {
+  return this.setFileDescriptorProtoList([]);
+};
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.repeatedFields_ = [2];
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.ExtensionNumberResponse.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.ExtensionNumberResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.ExtensionNumberResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        baseTypeName: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        extensionNumberList:
+          (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f,
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.ExtensionNumberResponse}
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.deserializeBinary = function (
+  bytes
+) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.ExtensionNumberResponse();
+  return proto.grpc.reflection.v1.ExtensionNumberResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.ExtensionNumberResponse} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.ExtensionNumberResponse}
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setBaseTypeName(value);
+        break;
+      case 2:
+        var values = /** @type {!Array<number>} */ (reader.isDelimited()
+          ? reader.readPackedInt32()
+          : [reader.readInt32()]);
+        for (var i = 0; i < values.length; i++) {
+          msg.addExtensionNumber(values[i]);
+        }
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.ExtensionNumberResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.ExtensionNumberResponse} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getBaseTypeName();
+  if (f.length > 0) {
+    writer.writeString(1, f);
+  }
+  f = message.getExtensionNumberList();
+  if (f.length > 0) {
+    writer.writePackedInt32(2, f);
+  }
+};
+
+/**
+ * optional string base_type_name = 1;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.getBaseTypeName = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ExtensionNumberResponse} returns this
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.setBaseTypeName = function (
+  value
+) {
+  return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+/**
+ * repeated int32 extension_number = 2;
+ * @return {!Array<number>}
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.getExtensionNumberList = function () {
+  return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 2));
+};
+
+/**
+ * @param {!Array<number>} value
+ * @return {!proto.grpc.reflection.v1.ExtensionNumberResponse} returns this
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.setExtensionNumberList = function (
+  value
+) {
+  return jspb.Message.setField(this, 2, value || []);
+};
+
+/**
+ * @param {number} value
+ * @param {number=} opt_index
+ * @return {!proto.grpc.reflection.v1.ExtensionNumberResponse} returns this
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.addExtensionNumber = function (
+  value,
+  opt_index
+) {
+  return jspb.Message.addToRepeatedField(this, 2, value, opt_index);
+};
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.grpc.reflection.v1.ExtensionNumberResponse} returns this
+ */
+proto.grpc.reflection.v1.ExtensionNumberResponse.prototype.clearExtensionNumberList = function () {
+  return this.setExtensionNumberList([]);
+};
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.grpc.reflection.v1.ListServiceResponse.repeatedFields_ = [1];
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.ListServiceResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.ListServiceResponse.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.ListServiceResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.ListServiceResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        serviceList: jspb.Message.toObjectList(
+          msg.getServiceList(),
+          proto.grpc.reflection.v1.ServiceResponse.toObject,
+          includeInstance
+        ),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.ListServiceResponse}
+ */
+proto.grpc.reflection.v1.ListServiceResponse.deserializeBinary = function (
+  bytes
+) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.ListServiceResponse();
+  return proto.grpc.reflection.v1.ListServiceResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.ListServiceResponse} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.ListServiceResponse}
+ */
+proto.grpc.reflection.v1.ListServiceResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = new proto.grpc.reflection.v1.ServiceResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1.ServiceResponse.deserializeBinaryFromReader
+        );
+        msg.addService(value);
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.ListServiceResponse.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.ListServiceResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.ListServiceResponse} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.ListServiceResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getServiceList();
+  if (f.length > 0) {
+    writer.writeRepeatedMessage(
+      1,
+      f,
+      proto.grpc.reflection.v1.ServiceResponse.serializeBinaryToWriter
+    );
+  }
+};
+
+/**
+ * repeated ServiceResponse service = 1;
+ * @return {!Array<!proto.grpc.reflection.v1.ServiceResponse>}
+ */
+proto.grpc.reflection.v1.ListServiceResponse.prototype.getServiceList = function () {
+  return /** @type{!Array<!proto.grpc.reflection.v1.ServiceResponse>} */ (jspb.Message.getRepeatedWrapperField(
+    this,
+    proto.grpc.reflection.v1.ServiceResponse,
+    1
+  ));
+};
+
+/**
+ * @param {!Array<!proto.grpc.reflection.v1.ServiceResponse>} value
+ * @return {!proto.grpc.reflection.v1.ListServiceResponse} returns this
+ */
+proto.grpc.reflection.v1.ListServiceResponse.prototype.setServiceList = function (
+  value
+) {
+  return jspb.Message.setRepeatedWrapperField(this, 1, value);
+};
+
+/**
+ * @param {!proto.grpc.reflection.v1.ServiceResponse=} opt_value
+ * @param {number=} opt_index
+ * @return {!proto.grpc.reflection.v1.ServiceResponse}
+ */
+proto.grpc.reflection.v1.ListServiceResponse.prototype.addService = function (
+  opt_value,
+  opt_index
+) {
+  return jspb.Message.addToRepeatedWrapperField(
+    this,
+    1,
+    opt_value,
+    proto.grpc.reflection.v1.ServiceResponse,
+    opt_index
+  );
+};
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.grpc.reflection.v1.ListServiceResponse} returns this
+ */
+proto.grpc.reflection.v1.ListServiceResponse.prototype.clearServiceList = function () {
+  return this.setServiceList([]);
+};
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.ServiceResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.ServiceResponse.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.ServiceResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.ServiceResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        name: jspb.Message.getFieldWithDefault(msg, 1, ''),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.ServiceResponse}
+ */
+proto.grpc.reflection.v1.ServiceResponse.deserializeBinary = function (bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.ServiceResponse();
+  return proto.grpc.reflection.v1.ServiceResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.ServiceResponse} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.ServiceResponse}
+ */
+proto.grpc.reflection.v1.ServiceResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setName(value);
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.ServiceResponse.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.ServiceResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.ServiceResponse} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.ServiceResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getName();
+  if (f.length > 0) {
+    writer.writeString(1, f);
+  }
+};
+
+/**
+ * optional string name = 1;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ServiceResponse.prototype.getName = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ServiceResponse} returns this
+ */
+proto.grpc.reflection.v1.ServiceResponse.prototype.setName = function (value) {
+  return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1.ErrorResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1.ErrorResponse.toObject(
+      opt_includeInstance,
+      this
+    );
+  };
+
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1.ErrorResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1.ErrorResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        errorCode: jspb.Message.getFieldWithDefault(msg, 1, 0),
+        errorMessage: jspb.Message.getFieldWithDefault(msg, 2, ''),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
+}
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.grpc.reflection.v1.ErrorResponse}
+ */
+proto.grpc.reflection.v1.ErrorResponse.deserializeBinary = function (bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.grpc.reflection.v1.ErrorResponse();
+  return proto.grpc.reflection.v1.ErrorResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
+};
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.grpc.reflection.v1.ErrorResponse} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.grpc.reflection.v1.ErrorResponse}
+ */
+proto.grpc.reflection.v1.ErrorResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+      case 1:
+        var value = /** @type {number} */ (reader.readInt32());
+        msg.setErrorCode(value);
+        break;
+      case 2:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setErrorMessage(value);
+        break;
+      default:
+        reader.skipField();
+        break;
+    }
+  }
+  return msg;
+};
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.grpc.reflection.v1.ErrorResponse.prototype.serializeBinary = function () {
+  var writer = new jspb.BinaryWriter();
+  proto.grpc.reflection.v1.ErrorResponse.serializeBinaryToWriter(this, writer);
+  return writer.getResultBuffer();
+};
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.grpc.reflection.v1.ErrorResponse} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.grpc.reflection.v1.ErrorResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
+  var f = undefined;
+  f = message.getErrorCode();
+  if (f !== 0) {
+    writer.writeInt32(1, f);
+  }
+  f = message.getErrorMessage();
+  if (f.length > 0) {
+    writer.writeString(2, f);
+  }
+};
+
+/**
+ * optional int32 error_code = 1;
+ * @return {number}
+ */
+proto.grpc.reflection.v1.ErrorResponse.prototype.getErrorCode = function () {
+  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+/**
+ * @param {number} value
+ * @return {!proto.grpc.reflection.v1.ErrorResponse} returns this
+ */
+proto.grpc.reflection.v1.ErrorResponse.prototype.setErrorCode = function (
+  value
+) {
+  return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+/**
+ * optional string error_message = 2;
+ * @return {string}
+ */
+proto.grpc.reflection.v1.ErrorResponse.prototype.getErrorMessage = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ''));
+};
+
+/**
+ * @param {string} value
+ * @return {!proto.grpc.reflection.v1.ErrorResponse} returns this
+ */
+proto.grpc.reflection.v1.ErrorResponse.prototype.setErrorMessage = function (
+  value
+) {
+  return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+goog.object.extend(exports, proto.grpc.reflection.v1);
diff --git a/src/generated/v1alpha/reflection_grpc_pb.d.ts b/src/generated/v1alpha/reflection_grpc_pb.d.ts
new file mode 100644
index 0000000..7e62cfc
--- /dev/null
+++ b/src/generated/v1alpha/reflection_grpc_pb.d.ts
@@ -0,0 +1,79 @@
+// package: grpc.reflection.v1alpha
+// file: reflection.proto
+
+/* tslint:disable */
+/* eslint-disable */
+
+import * as grpc from '@postman/grpc-js';
+import * as reflection_pb from './reflection_pb';
+
+interface IServerReflectionService
+  extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  serverReflectionInfo: IServerReflectionService_IServerReflectionInfo;
+}
+
+interface IServerReflectionService_IServerReflectionInfo
+  extends grpc.MethodDefinition<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  > {
+  path: '/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo';
+  requestStream: true;
+  responseStream: true;
+  requestSerialize: grpc.serialize<reflection_pb.ServerReflectionRequest>;
+  requestDeserialize: grpc.deserialize<reflection_pb.ServerReflectionRequest>;
+  responseSerialize: grpc.serialize<reflection_pb.ServerReflectionResponse>;
+  responseDeserialize: grpc.deserialize<reflection_pb.ServerReflectionResponse>;
+}
+
+export const ServerReflectionService: IServerReflectionService;
+
+export interface IServerReflectionServer {
+  serverReflectionInfo: grpc.handleBidiStreamingCall<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+}
+
+export interface IServerReflectionClient {
+  serverReflectionInfo(): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+  serverReflectionInfo(
+    options: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+  serverReflectionInfo(
+    metadata: grpc.Metadata,
+    options?: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+}
+
+export class ServerReflectionClient
+  extends grpc.Client
+  implements IServerReflectionClient {
+  constructor(
+    address: string,
+    credentials: grpc.ChannelCredentials,
+    options?: Partial<grpc.ClientOptions>
+  );
+  public serverReflectionInfo(
+    options?: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+  public serverReflectionInfo(
+    metadata?: grpc.Metadata,
+    options?: Partial<grpc.CallOptions>
+  ): grpc.ClientDuplexStream<
+    reflection_pb.ServerReflectionRequest,
+    reflection_pb.ServerReflectionResponse
+  >;
+}
diff --git a/src/reflection_grpc_pb.js b/src/generated/v1alpha/reflection_grpc_pb.js
similarity index 76%
rename from src/reflection_grpc_pb.js
rename to src/generated/v1alpha/reflection_grpc_pb.js
index 4fc6bb2..b4b2dae 100644
--- a/src/reflection_grpc_pb.js
+++ b/src/generated/v1alpha/reflection_grpc_pb.js
@@ -18,36 +18,47 @@
 // Service exported by server reflection
 //
 'use strict';
-var grpc = require('@postman/grpc-js');
-var reflection_pb = require('./reflection_pb.js');
+const grpc = require('@postman/grpc-js');
+const reflection_pb = require('./reflection_pb.js');
 
 function serialize_grpc_reflection_v1alpha_ServerReflectionRequest(arg) {
   if (!(arg instanceof reflection_pb.ServerReflectionRequest)) {
-    throw new Error('Expected argument of type grpc.reflection.v1alpha.ServerReflectionRequest');
+    throw new Error(
+      'Expected argument of type grpc.reflection.v1alpha.ServerReflectionRequest'
+    );
   }
   return Buffer.from(arg.serializeBinary());
 }
 
-function deserialize_grpc_reflection_v1alpha_ServerReflectionRequest(buffer_arg) {
-  return reflection_pb.ServerReflectionRequest.deserializeBinary(new Uint8Array(buffer_arg));
+function deserialize_grpc_reflection_v1alpha_ServerReflectionRequest(
+  buffer_arg
+) {
+  return reflection_pb.ServerReflectionRequest.deserializeBinary(
+    new Uint8Array(buffer_arg)
+  );
 }
 
 function serialize_grpc_reflection_v1alpha_ServerReflectionResponse(arg) {
   if (!(arg instanceof reflection_pb.ServerReflectionResponse)) {
-    throw new Error('Expected argument of type grpc.reflection.v1alpha.ServerReflectionResponse');
+    throw new Error(
+      'Expected argument of type grpc.reflection.v1alpha.ServerReflectionResponse'
+    );
   }
   return Buffer.from(arg.serializeBinary());
 }
 
-function deserialize_grpc_reflection_v1alpha_ServerReflectionResponse(buffer_arg) {
-  return reflection_pb.ServerReflectionResponse.deserializeBinary(new Uint8Array(buffer_arg));
+function deserialize_grpc_reflection_v1alpha_ServerReflectionResponse(
+  buffer_arg
+) {
+  return reflection_pb.ServerReflectionResponse.deserializeBinary(
+    new Uint8Array(buffer_arg)
+  );
 }
 
-
-var ServerReflectionService = exports.ServerReflectionService = {
+const ServerReflectionService = (exports.ServerReflectionService = {
   // The reflection service is structured as a bidirectional stream, ensuring
-// all related requests go to a single server.
-serverReflectionInfo: {
+  // all related requests go to a single server.
+  serverReflectionInfo: {
     path: '/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo',
     requestStream: true,
     responseStream: true,
@@ -58,6 +69,9 @@ serverReflectionInfo: {
     responseSerialize: serialize_grpc_reflection_v1alpha_ServerReflectionResponse,
     responseDeserialize: deserialize_grpc_reflection_v1alpha_ServerReflectionResponse,
   },
-};
+});
 
-exports.ServerReflectionClient = grpc.makeGenericClientConstructor(ServerReflectionService);
+exports.ServerReflectionClient = grpc.makeGenericClientConstructor(
+  ServerReflectionService,
+  'ServerReflection'
+);
diff --git a/src/generated/v1alpha/reflection_pb.d.ts b/src/generated/v1alpha/reflection_pb.d.ts
new file mode 100644
index 0000000..d0891b9
--- /dev/null
+++ b/src/generated/v1alpha/reflection_pb.d.ts
@@ -0,0 +1,376 @@
+// package: grpc.reflection.v1alpha
+// file: reflection.proto
+
+/* tslint:disable */
+/* eslint-disable */
+
+import * as jspb from 'google-protobuf';
+
+export class ServerReflectionRequest extends jspb.Message {
+  getHost(): string;
+  setHost(value: string): ServerReflectionRequest;
+
+  hasFileByFilename(): boolean;
+  clearFileByFilename(): void;
+  getFileByFilename(): string;
+  setFileByFilename(value: string): ServerReflectionRequest;
+
+  hasFileContainingSymbol(): boolean;
+  clearFileContainingSymbol(): void;
+  getFileContainingSymbol(): string;
+  setFileContainingSymbol(value: string): ServerReflectionRequest;
+
+  hasFileContainingExtension(): boolean;
+  clearFileContainingExtension(): void;
+  getFileContainingExtension(): ExtensionRequest | undefined;
+  setFileContainingExtension(value?: ExtensionRequest): ServerReflectionRequest;
+
+  hasAllExtensionNumbersOfType(): boolean;
+  clearAllExtensionNumbersOfType(): void;
+  getAllExtensionNumbersOfType(): string;
+  setAllExtensionNumbersOfType(value: string): ServerReflectionRequest;
+
+  hasListServices(): boolean;
+  clearListServices(): void;
+  getListServices(): string;
+  setListServices(value: string): ServerReflectionRequest;
+
+  getMessageRequestCase(): ServerReflectionRequest.MessageRequestCase;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServerReflectionRequest.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ServerReflectionRequest
+  ): ServerReflectionRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ServerReflectionRequest,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ServerReflectionRequest;
+  static deserializeBinaryFromReader(
+    message: ServerReflectionRequest,
+    reader: jspb.BinaryReader
+  ): ServerReflectionRequest;
+}
+
+export namespace ServerReflectionRequest {
+  export type AsObject = {
+    host: string;
+    fileByFilename: string;
+    fileContainingSymbol: string;
+    fileContainingExtension?: ExtensionRequest.AsObject;
+    allExtensionNumbersOfType: string;
+    listServices: string;
+  };
+
+  export enum MessageRequestCase {
+    MESSAGE_REQUEST_NOT_SET = 0,
+
+    FILE_BY_FILENAME = 3,
+
+    FILE_CONTAINING_SYMBOL = 4,
+
+    FILE_CONTAINING_EXTENSION = 5,
+
+    ALL_EXTENSION_NUMBERS_OF_TYPE = 6,
+
+    LIST_SERVICES = 7,
+  }
+}
+
+export class ExtensionRequest extends jspb.Message {
+  getContainingType(): string;
+  setContainingType(value: string): ExtensionRequest;
+
+  getExtensionNumber(): number;
+  setExtensionNumber(value: number): ExtensionRequest;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ExtensionRequest.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ExtensionRequest
+  ): ExtensionRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ExtensionRequest,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ExtensionRequest;
+  static deserializeBinaryFromReader(
+    message: ExtensionRequest,
+    reader: jspb.BinaryReader
+  ): ExtensionRequest;
+}
+
+export namespace ExtensionRequest {
+  export type AsObject = {
+    containingType: string;
+    extensionNumber: number;
+  };
+}
+
+export class ServerReflectionResponse extends jspb.Message {
+  getValidHost(): string;
+  setValidHost(value: string): ServerReflectionResponse;
+
+  hasOriginalRequest(): boolean;
+  clearOriginalRequest(): void;
+  getOriginalRequest(): ServerReflectionRequest | undefined;
+  setOriginalRequest(value?: ServerReflectionRequest): ServerReflectionResponse;
+
+  hasFileDescriptorResponse(): boolean;
+  clearFileDescriptorResponse(): void;
+  getFileDescriptorResponse(): FileDescriptorResponse | undefined;
+  setFileDescriptorResponse(
+    value?: FileDescriptorResponse
+  ): ServerReflectionResponse;
+
+  hasAllExtensionNumbersResponse(): boolean;
+  clearAllExtensionNumbersResponse(): void;
+  getAllExtensionNumbersResponse(): ExtensionNumberResponse | undefined;
+  setAllExtensionNumbersResponse(
+    value?: ExtensionNumberResponse
+  ): ServerReflectionResponse;
+
+  hasListServicesResponse(): boolean;
+  clearListServicesResponse(): void;
+  getListServicesResponse(): ListServiceResponse | undefined;
+  setListServicesResponse(
+    value?: ListServiceResponse
+  ): ServerReflectionResponse;
+
+  hasErrorResponse(): boolean;
+  clearErrorResponse(): void;
+  getErrorResponse(): ErrorResponse | undefined;
+  setErrorResponse(value?: ErrorResponse): ServerReflectionResponse;
+
+  getMessageResponseCase(): ServerReflectionResponse.MessageResponseCase;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServerReflectionResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ServerReflectionResponse
+  ): ServerReflectionResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ServerReflectionResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ServerReflectionResponse;
+  static deserializeBinaryFromReader(
+    message: ServerReflectionResponse,
+    reader: jspb.BinaryReader
+  ): ServerReflectionResponse;
+}
+
+export namespace ServerReflectionResponse {
+  export type AsObject = {
+    validHost: string;
+    originalRequest?: ServerReflectionRequest.AsObject;
+    fileDescriptorResponse?: FileDescriptorResponse.AsObject;
+    allExtensionNumbersResponse?: ExtensionNumberResponse.AsObject;
+    listServicesResponse?: ListServiceResponse.AsObject;
+    errorResponse?: ErrorResponse.AsObject;
+  };
+
+  export enum MessageResponseCase {
+    MESSAGE_RESPONSE_NOT_SET = 0,
+
+    FILE_DESCRIPTOR_RESPONSE = 4,
+
+    ALL_EXTENSION_NUMBERS_RESPONSE = 5,
+
+    LIST_SERVICES_RESPONSE = 6,
+
+    ERROR_RESPONSE = 7,
+  }
+}
+
+export class FileDescriptorResponse extends jspb.Message {
+  clearFileDescriptorProtoList(): void;
+  getFileDescriptorProtoList(): Array<Uint8Array | string>;
+  getFileDescriptorProtoList_asU8(): Array<Uint8Array>;
+  getFileDescriptorProtoList_asB64(): Array<string>;
+  setFileDescriptorProtoList(
+    value: Array<Uint8Array | string>
+  ): FileDescriptorResponse;
+  addFileDescriptorProto(
+    value: Uint8Array | string,
+    index?: number
+  ): Uint8Array | string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FileDescriptorResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: FileDescriptorResponse
+  ): FileDescriptorResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: FileDescriptorResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): FileDescriptorResponse;
+  static deserializeBinaryFromReader(
+    message: FileDescriptorResponse,
+    reader: jspb.BinaryReader
+  ): FileDescriptorResponse;
+}
+
+export namespace FileDescriptorResponse {
+  export type AsObject = {
+    fileDescriptorProtoList: Array<Uint8Array | string>;
+  };
+}
+
+export class ExtensionNumberResponse extends jspb.Message {
+  getBaseTypeName(): string;
+  setBaseTypeName(value: string): ExtensionNumberResponse;
+
+  clearExtensionNumberList(): void;
+  getExtensionNumberList(): Array<number>;
+  setExtensionNumberList(value: Array<number>): ExtensionNumberResponse;
+  addExtensionNumber(value: number, index?: number): number;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ExtensionNumberResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ExtensionNumberResponse
+  ): ExtensionNumberResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ExtensionNumberResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ExtensionNumberResponse;
+  static deserializeBinaryFromReader(
+    message: ExtensionNumberResponse,
+    reader: jspb.BinaryReader
+  ): ExtensionNumberResponse;
+}
+
+export namespace ExtensionNumberResponse {
+  export type AsObject = {
+    baseTypeName: string;
+    extensionNumberList: Array<number>;
+  };
+}
+
+export class ListServiceResponse extends jspb.Message {
+  clearServiceList(): void;
+  getServiceList(): Array<ServiceResponse>;
+  setServiceList(value: Array<ServiceResponse>): ListServiceResponse;
+  addService(value?: ServiceResponse, index?: number): ServiceResponse;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListServiceResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ListServiceResponse
+  ): ListServiceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ListServiceResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ListServiceResponse;
+  static deserializeBinaryFromReader(
+    message: ListServiceResponse,
+    reader: jspb.BinaryReader
+  ): ListServiceResponse;
+}
+
+export namespace ListServiceResponse {
+  export type AsObject = {
+    serviceList: Array<ServiceResponse.AsObject>;
+  };
+}
+
+export class ServiceResponse extends jspb.Message {
+  getName(): string;
+  setName(value: string): ServiceResponse;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServiceResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ServiceResponse
+  ): ServiceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ServiceResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ServiceResponse;
+  static deserializeBinaryFromReader(
+    message: ServiceResponse,
+    reader: jspb.BinaryReader
+  ): ServiceResponse;
+}
+
+export namespace ServiceResponse {
+  export type AsObject = {
+    name: string;
+  };
+}
+
+export class ErrorResponse extends jspb.Message {
+  getErrorCode(): number;
+  setErrorCode(value: number): ErrorResponse;
+
+  getErrorMessage(): string;
+  setErrorMessage(value: string): ErrorResponse;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ErrorResponse.AsObject;
+  static toObject(
+    includeInstance: boolean,
+    msg: ErrorResponse
+  ): ErrorResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {
+    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
+  };
+  static serializeBinaryToWriter(
+    message: ErrorResponse,
+    writer: jspb.BinaryWriter
+  ): void;
+  static deserializeBinary(bytes: Uint8Array): ErrorResponse;
+  static deserializeBinaryFromReader(
+    message: ErrorResponse,
+    reader: jspb.BinaryReader
+  ): ErrorResponse;
+}
+
+export namespace ErrorResponse {
+  export type AsObject = {
+    errorCode: number;
+    errorMessage: string;
+  };
+}
diff --git a/src/reflection_pb.js b/src/generated/v1alpha/reflection_pb.js
similarity index 55%
rename from src/reflection_pb.js
rename to src/generated/v1alpha/reflection_pb.js
index 1410488..da8040a 100644
--- a/src/reflection_pb.js
+++ b/src/generated/v1alpha/reflection_pb.js
@@ -2,26 +2,79 @@
 /**
  * @fileoverview
  * @enhanceable
+ * @suppress {missingRequire} reports error on implicit type usages.
  * @suppress {messageConventions} JS Compiler reports an error if a variable or
  *     field starts with 'MSG_' and isn't a translatable message.
  * @public
  */
 // GENERATED CODE -- DO NOT EDIT!
+/* eslint-disable */
+// @ts-nocheck
 
 var jspb = require('google-protobuf');
 var goog = jspb;
-var global = Function('return this')();
+var global = function () {
+  if (this) {
+    return this;
+  }
+  if (typeof window !== 'undefined') {
+    return window;
+  }
+  if (typeof global !== 'undefined') {
+    return global;
+  }
+  if (typeof self !== 'undefined') {
+    return self;
+  }
+  return Function('return this')();
+}.call(null);
 
 goog.exportSymbol('proto.grpc.reflection.v1alpha.ErrorResponse', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ExtensionNumberResponse', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ExtensionRequest', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.FileDescriptorResponse', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ListServiceResponse', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ServerReflectionRequest', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ServerReflectionRequest.MessageRequestCase', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ServerReflectionResponse', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ServerReflectionResponse.MessageResponseCase', null, global);
-goog.exportSymbol('proto.grpc.reflection.v1alpha.ServiceResponse', null, global);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ExtensionNumberResponse',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ExtensionRequest',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.FileDescriptorResponse',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ListServiceResponse',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ServerReflectionRequest',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ServerReflectionRequest.MessageRequestCase',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ServerReflectionResponse',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ServerReflectionResponse.MessageResponseCase',
+  null,
+  global
+);
+goog.exportSymbol(
+  'proto.grpc.reflection.v1alpha.ServiceResponse',
+  null,
+  global
+);
 /**
  * Generated by JsPbCodeGenerator.
  * @param {Array=} opt_data Optional initial data array, typically from a
@@ -32,16 +85,27 @@ goog.exportSymbol('proto.grpc.reflection.v1alpha.ServiceResponse', null, global)
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_);
-};
-goog.inherits(proto.grpc.reflection.v1alpha.ServerReflectionRequest, jspb.Message);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    null,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_
+  );
+};
+goog.inherits(
+  proto.grpc.reflection.v1alpha.ServerReflectionRequest,
+  jspb.Message
+);
 if (goog.DEBUG && !COMPILED) {
   /**
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.ServerReflectionRequest.displayName = 'proto.grpc.reflection.v1alpha.ServerReflectionRequest';
+  proto.grpc.reflection.v1alpha.ServerReflectionRequest.displayName =
+    'proto.grpc.reflection.v1alpha.ServerReflectionRequest';
 }
 /**
  * Generated by JsPbCodeGenerator.
@@ -53,7 +117,7 @@ if (goog.DEBUG && !COMPILED) {
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest = function(opt_data) {
+proto.grpc.reflection.v1alpha.ExtensionRequest = function (opt_data) {
   jspb.Message.initialize(this, opt_data, 0, -1, null, null);
 };
 goog.inherits(proto.grpc.reflection.v1alpha.ExtensionRequest, jspb.Message);
@@ -62,7 +126,8 @@ if (goog.DEBUG && !COMPILED) {
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.ExtensionRequest.displayName = 'proto.grpc.reflection.v1alpha.ExtensionRequest';
+  proto.grpc.reflection.v1alpha.ExtensionRequest.displayName =
+    'proto.grpc.reflection.v1alpha.ExtensionRequest';
 }
 /**
  * Generated by JsPbCodeGenerator.
@@ -74,16 +139,27 @@ if (goog.DEBUG && !COMPILED) {
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_);
-};
-goog.inherits(proto.grpc.reflection.v1alpha.ServerReflectionResponse, jspb.Message);
+proto.grpc.reflection.v1alpha.ServerReflectionResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    null,
+    proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_
+  );
+};
+goog.inherits(
+  proto.grpc.reflection.v1alpha.ServerReflectionResponse,
+  jspb.Message
+);
 if (goog.DEBUG && !COMPILED) {
   /**
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.ServerReflectionResponse.displayName = 'proto.grpc.reflection.v1alpha.ServerReflectionResponse';
+  proto.grpc.reflection.v1alpha.ServerReflectionResponse.displayName =
+    'proto.grpc.reflection.v1alpha.ServerReflectionResponse';
 }
 /**
  * Generated by JsPbCodeGenerator.
@@ -95,16 +171,27 @@ if (goog.DEBUG && !COMPILED) {
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.grpc.reflection.v1alpha.FileDescriptorResponse.repeatedFields_, null);
-};
-goog.inherits(proto.grpc.reflection.v1alpha.FileDescriptorResponse, jspb.Message);
+proto.grpc.reflection.v1alpha.FileDescriptorResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    proto.grpc.reflection.v1alpha.FileDescriptorResponse.repeatedFields_,
+    null
+  );
+};
+goog.inherits(
+  proto.grpc.reflection.v1alpha.FileDescriptorResponse,
+  jspb.Message
+);
 if (goog.DEBUG && !COMPILED) {
   /**
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.FileDescriptorResponse.displayName = 'proto.grpc.reflection.v1alpha.FileDescriptorResponse';
+  proto.grpc.reflection.v1alpha.FileDescriptorResponse.displayName =
+    'proto.grpc.reflection.v1alpha.FileDescriptorResponse';
 }
 /**
  * Generated by JsPbCodeGenerator.
@@ -116,16 +203,27 @@ if (goog.DEBUG && !COMPILED) {
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.grpc.reflection.v1alpha.ExtensionNumberResponse.repeatedFields_, null);
-};
-goog.inherits(proto.grpc.reflection.v1alpha.ExtensionNumberResponse, jspb.Message);
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    proto.grpc.reflection.v1alpha.ExtensionNumberResponse.repeatedFields_,
+    null
+  );
+};
+goog.inherits(
+  proto.grpc.reflection.v1alpha.ExtensionNumberResponse,
+  jspb.Message
+);
 if (goog.DEBUG && !COMPILED) {
   /**
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.ExtensionNumberResponse.displayName = 'proto.grpc.reflection.v1alpha.ExtensionNumberResponse';
+  proto.grpc.reflection.v1alpha.ExtensionNumberResponse.displayName =
+    'proto.grpc.reflection.v1alpha.ExtensionNumberResponse';
 }
 /**
  * Generated by JsPbCodeGenerator.
@@ -137,8 +235,15 @@ if (goog.DEBUG && !COMPILED) {
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.grpc.reflection.v1alpha.ListServiceResponse.repeatedFields_, null);
+proto.grpc.reflection.v1alpha.ListServiceResponse = function (opt_data) {
+  jspb.Message.initialize(
+    this,
+    opt_data,
+    0,
+    -1,
+    proto.grpc.reflection.v1alpha.ListServiceResponse.repeatedFields_,
+    null
+  );
 };
 goog.inherits(proto.grpc.reflection.v1alpha.ListServiceResponse, jspb.Message);
 if (goog.DEBUG && !COMPILED) {
@@ -146,7 +251,8 @@ if (goog.DEBUG && !COMPILED) {
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.ListServiceResponse.displayName = 'proto.grpc.reflection.v1alpha.ListServiceResponse';
+  proto.grpc.reflection.v1alpha.ListServiceResponse.displayName =
+    'proto.grpc.reflection.v1alpha.ListServiceResponse';
 }
 /**
  * Generated by JsPbCodeGenerator.
@@ -158,7 +264,7 @@ if (goog.DEBUG && !COMPILED) {
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.ServiceResponse = function(opt_data) {
+proto.grpc.reflection.v1alpha.ServiceResponse = function (opt_data) {
   jspb.Message.initialize(this, opt_data, 0, -1, null, null);
 };
 goog.inherits(proto.grpc.reflection.v1alpha.ServiceResponse, jspb.Message);
@@ -167,7 +273,8 @@ if (goog.DEBUG && !COMPILED) {
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.ServiceResponse.displayName = 'proto.grpc.reflection.v1alpha.ServiceResponse';
+  proto.grpc.reflection.v1alpha.ServiceResponse.displayName =
+    'proto.grpc.reflection.v1alpha.ServiceResponse';
 }
 /**
  * Generated by JsPbCodeGenerator.
@@ -179,7 +286,7 @@ if (goog.DEBUG && !COMPILED) {
  * @extends {jspb.Message}
  * @constructor
  */
-proto.grpc.reflection.v1alpha.ErrorResponse = function(opt_data) {
+proto.grpc.reflection.v1alpha.ErrorResponse = function (opt_data) {
   jspb.Message.initialize(this, opt_data, 0, -1, null, null);
 };
 goog.inherits(proto.grpc.reflection.v1alpha.ErrorResponse, jspb.Message);
@@ -188,7 +295,8 @@ if (goog.DEBUG && !COMPILED) {
    * @public
    * @override
    */
-  proto.grpc.reflection.v1alpha.ErrorResponse.displayName = 'proto.grpc.reflection.v1alpha.ErrorResponse';
+  proto.grpc.reflection.v1alpha.ErrorResponse.displayName =
+    'proto.grpc.reflection.v1alpha.ErrorResponse';
 }
 
 /**
@@ -199,7 +307,9 @@ if (goog.DEBUG && !COMPILED) {
  * @private {!Array<!Array<number>>}
  * @const
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_ = [[3,4,5,6,7]];
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_ = [
+  [3, 4, 5, 6, 7],
+];
 
 /**
  * @enum {number}
@@ -210,75 +320,92 @@ proto.grpc.reflection.v1alpha.ServerReflectionRequest.MessageRequestCase = {
   FILE_CONTAINING_SYMBOL: 4,
   FILE_CONTAINING_EXTENSION: 5,
   ALL_EXTENSION_NUMBERS_OF_TYPE: 6,
-  LIST_SERVICES: 7
+  LIST_SERVICES: 7,
 };
 
 /**
  * @return {proto.grpc.reflection.v1alpha.ServerReflectionRequest.MessageRequestCase}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getMessageRequestCase = function() {
-  return /** @type {proto.grpc.reflection.v1alpha.ServerReflectionRequest.MessageRequestCase} */(jspb.Message.computeOneofCase(this, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0]));
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getMessageRequestCase = function () {
+  return /** @type {proto.grpc.reflection.v1alpha.ServerReflectionRequest.MessageRequestCase} */ (jspb.Message.computeOneofCase(
+    this,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0]
+  ));
 };
 
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.ServerReflectionRequest.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    host: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    fileByFilename: jspb.Message.getFieldWithDefault(msg, 3, ""),
-    fileContainingSymbol: jspb.Message.getFieldWithDefault(msg, 4, ""),
-    fileContainingExtension: (f = msg.getFileContainingExtension()) && proto.grpc.reflection.v1alpha.ExtensionRequest.toObject(includeInstance, f),
-    allExtensionNumbersOfType: jspb.Message.getFieldWithDefault(msg, 6, ""),
-    listServices: jspb.Message.getFieldWithDefault(msg, 7, "")
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.ServerReflectionRequest.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.ServerReflectionRequest.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        host: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        fileByFilename: jspb.Message.getFieldWithDefault(msg, 3, ''),
+        fileContainingSymbol: jspb.Message.getFieldWithDefault(msg, 4, ''),
+        fileContainingExtension:
+          (f = msg.getFileContainingExtension()) &&
+          proto.grpc.reflection.v1alpha.ExtensionRequest.toObject(
+            includeInstance,
+            f
+          ),
+        allExtensionNumbersOfType: jspb.Message.getFieldWithDefault(msg, 6, ''),
+        listServices: jspb.Message.getFieldWithDefault(msg, 7, ''),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.ServerReflectionRequest;
-  return proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.ServerReflectionRequest();
+  return proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -286,58 +413,66 @@ proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinary = functi
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setHost(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setFileByFilename(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setFileContainingSymbol(value);
-      break;
-    case 5:
-      var value = new proto.grpc.reflection.v1alpha.ExtensionRequest;
-      reader.readMessage(value,proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinaryFromReader);
-      msg.setFileContainingExtension(value);
-      break;
-    case 6:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setAllExtensionNumbersOfType(value);
-      break;
-    case 7:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setListServices(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setHost(value);
+        break;
+      case 3:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setFileByFilename(value);
+        break;
+      case 4:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setFileContainingSymbol(value);
+        break;
+      case 5:
+        var value = new proto.grpc.reflection.v1alpha.ExtensionRequest();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1alpha.ExtensionRequest
+            .deserializeBinaryFromReader
+        );
+        msg.setFileContainingExtension(value);
+        break;
+      case 6:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setAllExtensionNumbersOfType(value);
+        break;
+      case 7:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setListServices(value);
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.ServerReflectionRequest.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.ServerReflectionRequest.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -345,28 +480,22 @@ proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.serializeBinary
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getHost();
   if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
+    writer.writeString(1, f);
   }
   f = /** @type {string} */ (jspb.Message.getField(message, 3));
   if (f != null) {
-    writer.writeString(
-      3,
-      f
-    );
+    writer.writeString(3, f);
   }
   f = /** @type {string} */ (jspb.Message.getField(message, 4));
   if (f != null) {
-    writer.writeString(
-      4,
-      f
-    );
+    writer.writeString(4, f);
   }
   f = message.getFileContainingExtension();
   if (f != null) {
@@ -378,276 +507,315 @@ proto.grpc.reflection.v1alpha.ServerReflectionRequest.serializeBinaryToWriter =
   }
   f = /** @type {string} */ (jspb.Message.getField(message, 6));
   if (f != null) {
-    writer.writeString(
-      6,
-      f
-    );
+    writer.writeString(6, f);
   }
   f = /** @type {string} */ (jspb.Message.getField(message, 7));
   if (f != null) {
-    writer.writeString(
-      7,
-      f
-    );
+    writer.writeString(7, f);
   }
 };
 
-
 /**
  * optional string host = 1;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getHost = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getHost = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setHost = function(value) {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setHost = function (
+  value
+) {
   return jspb.Message.setProto3StringField(this, 1, value);
 };
 
-
 /**
  * optional string file_by_filename = 3;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getFileByFilename = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getFileByFilename = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setFileByFilename = function(value) {
-  return jspb.Message.setOneofField(this, 3, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], value);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setFileByFilename = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    3,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearFileByFilename = function() {
-  return jspb.Message.setOneofField(this, 3, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], undefined);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearFileByFilename = function () {
+  return jspb.Message.setOneofField(
+    this,
+    3,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasFileByFilename = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasFileByFilename = function () {
   return jspb.Message.getField(this, 3) != null;
 };
 
-
 /**
  * optional string file_containing_symbol = 4;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getFileContainingSymbol = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getFileContainingSymbol = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setFileContainingSymbol = function(value) {
-  return jspb.Message.setOneofField(this, 4, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], value);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setFileContainingSymbol = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    4,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearFileContainingSymbol = function() {
-  return jspb.Message.setOneofField(this, 4, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], undefined);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearFileContainingSymbol = function () {
+  return jspb.Message.setOneofField(
+    this,
+    4,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasFileContainingSymbol = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasFileContainingSymbol = function () {
   return jspb.Message.getField(this, 4) != null;
 };
 
-
 /**
  * optional ExtensionRequest file_containing_extension = 5;
  * @return {?proto.grpc.reflection.v1alpha.ExtensionRequest}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getFileContainingExtension = function() {
-  return /** @type{?proto.grpc.reflection.v1alpha.ExtensionRequest} */ (
-    jspb.Message.getWrapperField(this, proto.grpc.reflection.v1alpha.ExtensionRequest, 5));
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getFileContainingExtension = function () {
+  return /** @type{?proto.grpc.reflection.v1alpha.ExtensionRequest} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1alpha.ExtensionRequest,
+    5
+  ));
 };
 
-
 /**
  * @param {?proto.grpc.reflection.v1alpha.ExtensionRequest|undefined} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
-*/
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setFileContainingExtension = function(value) {
-  return jspb.Message.setOneofWrapperField(this, 5, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], value);
+ */
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setFileContainingExtension = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    5,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the message field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearFileContainingExtension = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearFileContainingExtension = function () {
   return this.setFileContainingExtension(undefined);
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasFileContainingExtension = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasFileContainingExtension = function () {
   return jspb.Message.getField(this, 5) != null;
 };
 
-
 /**
  * optional string all_extension_numbers_of_type = 6;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getAllExtensionNumbersOfType = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ""));
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getAllExtensionNumbersOfType = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setAllExtensionNumbersOfType = function(value) {
-  return jspb.Message.setOneofField(this, 6, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], value);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setAllExtensionNumbersOfType = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    6,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearAllExtensionNumbersOfType = function() {
-  return jspb.Message.setOneofField(this, 6, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], undefined);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearAllExtensionNumbersOfType = function () {
+  return jspb.Message.setOneofField(
+    this,
+    6,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasAllExtensionNumbersOfType = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasAllExtensionNumbersOfType = function () {
   return jspb.Message.getField(this, 6) != null;
 };
 
-
 /**
  * optional string list_services = 7;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getListServices = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, ""));
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.getListServices = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setListServices = function(value) {
-  return jspb.Message.setOneofField(this, 7, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], value);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.setListServices = function (
+  value
+) {
+  return jspb.Message.setOneofField(
+    this,
+    7,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearListServices = function() {
-  return jspb.Message.setOneofField(this, 7, proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0], undefined);
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.clearListServices = function () {
+  return jspb.Message.setOneofField(
+    this,
+    7,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest.oneofGroups_[0],
+    undefined
+  );
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasListServices = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionRequest.prototype.hasListServices = function () {
   return jspb.Message.getField(this, 7) != null;
 };
 
-
-
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.ExtensionRequest.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.ExtensionRequest} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.ExtensionRequest.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    containingType: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    extensionNumber: jspb.Message.getFieldWithDefault(msg, 2, 0)
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.ExtensionRequest.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.ExtensionRequest} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.ExtensionRequest.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        containingType: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        extensionNumber: jspb.Message.getFieldWithDefault(msg, 2, 0),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.ExtensionRequest}
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.ExtensionRequest;
-  return proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.ExtensionRequest();
+  return proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -655,41 +823,45 @@ proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinary = function(byte
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.ExtensionRequest}
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.ExtensionRequest.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setContainingType(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readInt32());
-      msg.setExtensionNumber(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setContainingType(value);
+        break;
+      case 2:
+        var value = /** @type {number} */ (reader.readInt32());
+        msg.setExtensionNumber(value);
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.ExtensionRequest.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.ExtensionRequest.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -697,62 +869,57 @@ proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.serializeBinary = funct
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.ExtensionRequest.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getContainingType();
   if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
+    writer.writeString(1, f);
   }
   f = message.getExtensionNumber();
   if (f !== 0) {
-    writer.writeInt32(
-      2,
-      f
-    );
+    writer.writeInt32(2, f);
   }
 };
 
-
 /**
  * optional string containing_type = 1;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.getContainingType = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.getContainingType = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ExtensionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.setContainingType = function(value) {
+proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.setContainingType = function (
+  value
+) {
   return jspb.Message.setProto3StringField(this, 1, value);
 };
 
-
 /**
  * optional int32 extension_number = 2;
  * @return {number}
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.getExtensionNumber = function() {
+proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.getExtensionNumber = function () {
   return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
 };
 
-
 /**
  * @param {number} value
  * @return {!proto.grpc.reflection.v1alpha.ExtensionRequest} returns this
  */
-proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.setExtensionNumber = function(value) {
+proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.setExtensionNumber = function (
+  value
+) {
   return jspb.Message.setProto3IntField(this, 2, value);
 };
 
-
-
 /**
  * Oneof group definitions for this message. Each group defines the field
  * numbers belonging to that group. When of these fields' value is set, all
@@ -761,7 +928,9 @@ proto.grpc.reflection.v1alpha.ExtensionRequest.prototype.setExtensionNumber = fu
  * @private {!Array<!Array<number>>}
  * @const
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_ = [[4,5,6,7]];
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_ = [
+  [4, 5, 6, 7],
+];
 
 /**
  * @enum {number}
@@ -771,75 +940,112 @@ proto.grpc.reflection.v1alpha.ServerReflectionResponse.MessageResponseCase = {
   FILE_DESCRIPTOR_RESPONSE: 4,
   ALL_EXTENSION_NUMBERS_RESPONSE: 5,
   LIST_SERVICES_RESPONSE: 6,
-  ERROR_RESPONSE: 7
+  ERROR_RESPONSE: 7,
 };
 
 /**
  * @return {proto.grpc.reflection.v1alpha.ServerReflectionResponse.MessageResponseCase}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getMessageResponseCase = function() {
-  return /** @type {proto.grpc.reflection.v1alpha.ServerReflectionResponse.MessageResponseCase} */(jspb.Message.computeOneofCase(this, proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0]));
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getMessageResponseCase = function () {
+  return /** @type {proto.grpc.reflection.v1alpha.ServerReflectionResponse.MessageResponseCase} */ (jspb.Message.computeOneofCase(
+    this,
+    proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0]
+  ));
 };
 
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.ServerReflectionResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    validHost: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    originalRequest: (f = msg.getOriginalRequest()) && proto.grpc.reflection.v1alpha.ServerReflectionRequest.toObject(includeInstance, f),
-    fileDescriptorResponse: (f = msg.getFileDescriptorResponse()) && proto.grpc.reflection.v1alpha.FileDescriptorResponse.toObject(includeInstance, f),
-    allExtensionNumbersResponse: (f = msg.getAllExtensionNumbersResponse()) && proto.grpc.reflection.v1alpha.ExtensionNumberResponse.toObject(includeInstance, f),
-    listServicesResponse: (f = msg.getListServicesResponse()) && proto.grpc.reflection.v1alpha.ListServiceResponse.toObject(includeInstance, f),
-    errorResponse: (f = msg.getErrorResponse()) && proto.grpc.reflection.v1alpha.ErrorResponse.toObject(includeInstance, f)
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.ServerReflectionResponse.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.ServerReflectionResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        validHost: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        originalRequest:
+          (f = msg.getOriginalRequest()) &&
+          proto.grpc.reflection.v1alpha.ServerReflectionRequest.toObject(
+            includeInstance,
+            f
+          ),
+        fileDescriptorResponse:
+          (f = msg.getFileDescriptorResponse()) &&
+          proto.grpc.reflection.v1alpha.FileDescriptorResponse.toObject(
+            includeInstance,
+            f
+          ),
+        allExtensionNumbersResponse:
+          (f = msg.getAllExtensionNumbersResponse()) &&
+          proto.grpc.reflection.v1alpha.ExtensionNumberResponse.toObject(
+            includeInstance,
+            f
+          ),
+        listServicesResponse:
+          (f = msg.getListServicesResponse()) &&
+          proto.grpc.reflection.v1alpha.ListServiceResponse.toObject(
+            includeInstance,
+            f
+          ),
+        errorResponse:
+          (f = msg.getErrorResponse()) &&
+          proto.grpc.reflection.v1alpha.ErrorResponse.toObject(
+            includeInstance,
+            f
+          ),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.ServerReflectionResponse;
-  return proto.grpc.reflection.v1alpha.ServerReflectionResponse.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.ServerReflectionResponse();
+  return proto.grpc.reflection.v1alpha.ServerReflectionResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -847,62 +1053,86 @@ proto.grpc.reflection.v1alpha.ServerReflectionResponse.deserializeBinary = funct
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setValidHost(value);
-      break;
-    case 2:
-      var value = new proto.grpc.reflection.v1alpha.ServerReflectionRequest;
-      reader.readMessage(value,proto.grpc.reflection.v1alpha.ServerReflectionRequest.deserializeBinaryFromReader);
-      msg.setOriginalRequest(value);
-      break;
-    case 4:
-      var value = new proto.grpc.reflection.v1alpha.FileDescriptorResponse;
-      reader.readMessage(value,proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinaryFromReader);
-      msg.setFileDescriptorResponse(value);
-      break;
-    case 5:
-      var value = new proto.grpc.reflection.v1alpha.ExtensionNumberResponse;
-      reader.readMessage(value,proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinaryFromReader);
-      msg.setAllExtensionNumbersResponse(value);
-      break;
-    case 6:
-      var value = new proto.grpc.reflection.v1alpha.ListServiceResponse;
-      reader.readMessage(value,proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinaryFromReader);
-      msg.setListServicesResponse(value);
-      break;
-    case 7:
-      var value = new proto.grpc.reflection.v1alpha.ErrorResponse;
-      reader.readMessage(value,proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinaryFromReader);
-      msg.setErrorResponse(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setValidHost(value);
+        break;
+      case 2:
+        var value = new proto.grpc.reflection.v1alpha.ServerReflectionRequest();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1alpha.ServerReflectionRequest
+            .deserializeBinaryFromReader
+        );
+        msg.setOriginalRequest(value);
+        break;
+      case 4:
+        var value = new proto.grpc.reflection.v1alpha.FileDescriptorResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1alpha.FileDescriptorResponse
+            .deserializeBinaryFromReader
+        );
+        msg.setFileDescriptorResponse(value);
+        break;
+      case 5:
+        var value = new proto.grpc.reflection.v1alpha.ExtensionNumberResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1alpha.ExtensionNumberResponse
+            .deserializeBinaryFromReader
+        );
+        msg.setAllExtensionNumbersResponse(value);
+        break;
+      case 6:
+        var value = new proto.grpc.reflection.v1alpha.ListServiceResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1alpha.ListServiceResponse
+            .deserializeBinaryFromReader
+        );
+        msg.setListServicesResponse(value);
+        break;
+      case 7:
+        var value = new proto.grpc.reflection.v1alpha.ErrorResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1alpha.ErrorResponse
+            .deserializeBinaryFromReader
+        );
+        msg.setErrorResponse(value);
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.ServerReflectionResponse.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.ServerReflectionResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -910,21 +1140,22 @@ proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.serializeBinary
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getValidHost();
   if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
+    writer.writeString(1, f);
   }
   f = message.getOriginalRequest();
   if (f != null) {
     writer.writeMessage(
       2,
       f,
-      proto.grpc.reflection.v1alpha.ServerReflectionRequest.serializeBinaryToWriter
+      proto.grpc.reflection.v1alpha.ServerReflectionRequest
+        .serializeBinaryToWriter
     );
   }
   f = message.getFileDescriptorResponse();
@@ -932,7 +1163,8 @@ proto.grpc.reflection.v1alpha.ServerReflectionResponse.serializeBinaryToWriter =
     writer.writeMessage(
       4,
       f,
-      proto.grpc.reflection.v1alpha.FileDescriptorResponse.serializeBinaryToWriter
+      proto.grpc.reflection.v1alpha.FileDescriptorResponse
+        .serializeBinaryToWriter
     );
   }
   f = message.getAllExtensionNumbersResponse();
@@ -940,7 +1172,8 @@ proto.grpc.reflection.v1alpha.ServerReflectionResponse.serializeBinaryToWriter =
     writer.writeMessage(
       5,
       f,
-      proto.grpc.reflection.v1alpha.ExtensionNumberResponse.serializeBinaryToWriter
+      proto.grpc.reflection.v1alpha.ExtensionNumberResponse
+        .serializeBinaryToWriter
     );
   }
   f = message.getListServicesResponse();
@@ -961,211 +1194,234 @@ proto.grpc.reflection.v1alpha.ServerReflectionResponse.serializeBinaryToWriter =
   }
 };
 
-
 /**
  * optional string valid_host = 1;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getValidHost = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getValidHost = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setValidHost = function(value) {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setValidHost = function (
+  value
+) {
   return jspb.Message.setProto3StringField(this, 1, value);
 };
 
-
 /**
  * optional ServerReflectionRequest original_request = 2;
  * @return {?proto.grpc.reflection.v1alpha.ServerReflectionRequest}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getOriginalRequest = function() {
-  return /** @type{?proto.grpc.reflection.v1alpha.ServerReflectionRequest} */ (
-    jspb.Message.getWrapperField(this, proto.grpc.reflection.v1alpha.ServerReflectionRequest, 2));
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getOriginalRequest = function () {
+  return /** @type{?proto.grpc.reflection.v1alpha.ServerReflectionRequest} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1alpha.ServerReflectionRequest,
+    2
+  ));
 };
 
-
 /**
  * @param {?proto.grpc.reflection.v1alpha.ServerReflectionRequest|undefined} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
-*/
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setOriginalRequest = function(value) {
+ */
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setOriginalRequest = function (
+  value
+) {
   return jspb.Message.setWrapperField(this, 2, value);
 };
 
-
 /**
  * Clears the message field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearOriginalRequest = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearOriginalRequest = function () {
   return this.setOriginalRequest(undefined);
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasOriginalRequest = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasOriginalRequest = function () {
   return jspb.Message.getField(this, 2) != null;
 };
 
-
 /**
  * optional FileDescriptorResponse file_descriptor_response = 4;
  * @return {?proto.grpc.reflection.v1alpha.FileDescriptorResponse}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getFileDescriptorResponse = function() {
-  return /** @type{?proto.grpc.reflection.v1alpha.FileDescriptorResponse} */ (
-    jspb.Message.getWrapperField(this, proto.grpc.reflection.v1alpha.FileDescriptorResponse, 4));
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getFileDescriptorResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1alpha.FileDescriptorResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1alpha.FileDescriptorResponse,
+    4
+  ));
 };
 
-
 /**
  * @param {?proto.grpc.reflection.v1alpha.FileDescriptorResponse|undefined} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
-*/
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setFileDescriptorResponse = function(value) {
-  return jspb.Message.setOneofWrapperField(this, 4, proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0], value);
+ */
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setFileDescriptorResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    4,
+    proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the message field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearFileDescriptorResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearFileDescriptorResponse = function () {
   return this.setFileDescriptorResponse(undefined);
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasFileDescriptorResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasFileDescriptorResponse = function () {
   return jspb.Message.getField(this, 4) != null;
 };
 
-
 /**
  * optional ExtensionNumberResponse all_extension_numbers_response = 5;
  * @return {?proto.grpc.reflection.v1alpha.ExtensionNumberResponse}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getAllExtensionNumbersResponse = function() {
-  return /** @type{?proto.grpc.reflection.v1alpha.ExtensionNumberResponse} */ (
-    jspb.Message.getWrapperField(this, proto.grpc.reflection.v1alpha.ExtensionNumberResponse, 5));
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getAllExtensionNumbersResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1alpha.ExtensionNumberResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1alpha.ExtensionNumberResponse,
+    5
+  ));
 };
 
-
 /**
  * @param {?proto.grpc.reflection.v1alpha.ExtensionNumberResponse|undefined} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
-*/
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setAllExtensionNumbersResponse = function(value) {
-  return jspb.Message.setOneofWrapperField(this, 5, proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0], value);
+ */
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setAllExtensionNumbersResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    5,
+    proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the message field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearAllExtensionNumbersResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearAllExtensionNumbersResponse = function () {
   return this.setAllExtensionNumbersResponse(undefined);
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasAllExtensionNumbersResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasAllExtensionNumbersResponse = function () {
   return jspb.Message.getField(this, 5) != null;
 };
 
-
 /**
  * optional ListServiceResponse list_services_response = 6;
  * @return {?proto.grpc.reflection.v1alpha.ListServiceResponse}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getListServicesResponse = function() {
-  return /** @type{?proto.grpc.reflection.v1alpha.ListServiceResponse} */ (
-    jspb.Message.getWrapperField(this, proto.grpc.reflection.v1alpha.ListServiceResponse, 6));
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getListServicesResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1alpha.ListServiceResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1alpha.ListServiceResponse,
+    6
+  ));
 };
 
-
 /**
  * @param {?proto.grpc.reflection.v1alpha.ListServiceResponse|undefined} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
-*/
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setListServicesResponse = function(value) {
-  return jspb.Message.setOneofWrapperField(this, 6, proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0], value);
+ */
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setListServicesResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    6,
+    proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the message field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearListServicesResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearListServicesResponse = function () {
   return this.setListServicesResponse(undefined);
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasListServicesResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasListServicesResponse = function () {
   return jspb.Message.getField(this, 6) != null;
 };
 
-
 /**
  * optional ErrorResponse error_response = 7;
  * @return {?proto.grpc.reflection.v1alpha.ErrorResponse}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getErrorResponse = function() {
-  return /** @type{?proto.grpc.reflection.v1alpha.ErrorResponse} */ (
-    jspb.Message.getWrapperField(this, proto.grpc.reflection.v1alpha.ErrorResponse, 7));
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.getErrorResponse = function () {
+  return /** @type{?proto.grpc.reflection.v1alpha.ErrorResponse} */ (jspb.Message.getWrapperField(
+    this,
+    proto.grpc.reflection.v1alpha.ErrorResponse,
+    7
+  ));
 };
 
-
 /**
  * @param {?proto.grpc.reflection.v1alpha.ErrorResponse|undefined} value
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
-*/
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setErrorResponse = function(value) {
-  return jspb.Message.setOneofWrapperField(this, 7, proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0], value);
+ */
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.setErrorResponse = function (
+  value
+) {
+  return jspb.Message.setOneofWrapperField(
+    this,
+    7,
+    proto.grpc.reflection.v1alpha.ServerReflectionResponse.oneofGroups_[0],
+    value
+  );
 };
 
-
 /**
  * Clears the message field making it undefined.
  * @return {!proto.grpc.reflection.v1alpha.ServerReflectionResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearErrorResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.clearErrorResponse = function () {
   return this.setErrorResponse(undefined);
 };
 
-
 /**
  * Returns whether this field is set.
  * @return {boolean}
  */
-proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasErrorResponse = function() {
+proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasErrorResponse = function () {
   return jspb.Message.getField(this, 7) != null;
 };
 
-
-
 /**
  * List of repeated fields within this message type.
  * @private {!Array<number>}
@@ -1173,60 +1429,69 @@ proto.grpc.reflection.v1alpha.ServerReflectionResponse.prototype.hasErrorRespons
  */
 proto.grpc.reflection.v1alpha.FileDescriptorResponse.repeatedFields_ = [1];
 
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.FileDescriptorResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.FileDescriptorResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    fileDescriptorProtoList: msg.getFileDescriptorProtoList_asB64()
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.FileDescriptorResponse.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.FileDescriptorResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.FileDescriptorResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        fileDescriptorProtoList: msg.getFileDescriptorProtoList_asB64(),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.FileDescriptorResponse}
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.FileDescriptorResponse;
-  return proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.FileDescriptorResponse();
+  return proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -1234,37 +1499,41 @@ proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinary = functio
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.FileDescriptorResponse}
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = /** @type {!Uint8Array} */ (reader.readBytes());
-      msg.addFileDescriptorProto(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = /** @type {!Uint8Array} */ (reader.readBytes());
+        msg.addFileDescriptorProto(value);
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.FileDescriptorResponse.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.FileDescriptorResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -1272,38 +1541,39 @@ proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.serializeBinary =
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getFileDescriptorProtoList_asU8();
   if (f.length > 0) {
-    writer.writeRepeatedBytes(
-      1,
-      f
-    );
+    writer.writeRepeatedBytes(1, f);
   }
 };
 
-
 /**
  * repeated bytes file_descriptor_proto = 1;
  * @return {!(Array<!Uint8Array>|Array<string>)}
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.getFileDescriptorProtoList = function() {
-  return /** @type {!(Array<!Uint8Array>|Array<string>)} */ (jspb.Message.getRepeatedField(this, 1));
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.getFileDescriptorProtoList = function () {
+  return /** @type {!(Array<!Uint8Array>|Array<string>)} */ (jspb.Message.getRepeatedField(
+    this,
+    1
+  ));
 };
 
-
 /**
  * repeated bytes file_descriptor_proto = 1;
  * This is a type-conversion wrapper around `getFileDescriptorProtoList()`
  * @return {!Array<string>}
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.getFileDescriptorProtoList_asB64 = function() {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.getFileDescriptorProtoList_asB64 = function () {
   return /** @type {!Array<string>} */ (jspb.Message.bytesListAsB64(
-      this.getFileDescriptorProtoList()));
+    this.getFileDescriptorProtoList()
+  ));
 };
 
-
 /**
  * repeated bytes file_descriptor_proto = 1;
  * Note that Uint8Array is not supported on all browsers.
@@ -1311,41 +1581,42 @@ proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.getFileDescriptor
  * This is a type-conversion wrapper around `getFileDescriptorProtoList()`
  * @return {!Array<!Uint8Array>}
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.getFileDescriptorProtoList_asU8 = function() {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.getFileDescriptorProtoList_asU8 = function () {
   return /** @type {!Array<!Uint8Array>} */ (jspb.Message.bytesListAsU8(
-      this.getFileDescriptorProtoList()));
+    this.getFileDescriptorProtoList()
+  ));
 };
 
-
 /**
  * @param {!(Array<!Uint8Array>|Array<string>)} value
  * @return {!proto.grpc.reflection.v1alpha.FileDescriptorResponse} returns this
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.setFileDescriptorProtoList = function(value) {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.setFileDescriptorProtoList = function (
+  value
+) {
   return jspb.Message.setField(this, 1, value || []);
 };
 
-
 /**
  * @param {!(string|Uint8Array)} value
  * @param {number=} opt_index
  * @return {!proto.grpc.reflection.v1alpha.FileDescriptorResponse} returns this
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.addFileDescriptorProto = function(value, opt_index) {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.addFileDescriptorProto = function (
+  value,
+  opt_index
+) {
   return jspb.Message.addToRepeatedField(this, 1, value, opt_index);
 };
 
-
 /**
  * Clears the list making it empty but non-null.
  * @return {!proto.grpc.reflection.v1alpha.FileDescriptorResponse} returns this
  */
-proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.clearFileDescriptorProtoList = function() {
+proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.clearFileDescriptorProtoList = function () {
   return this.setFileDescriptorProtoList([]);
 };
 
-
-
 /**
  * List of repeated fields within this message type.
  * @private {!Array<number>}
@@ -1353,61 +1624,71 @@ proto.grpc.reflection.v1alpha.FileDescriptorResponse.prototype.clearFileDescript
  */
 proto.grpc.reflection.v1alpha.ExtensionNumberResponse.repeatedFields_ = [2];
 
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.ExtensionNumberResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    baseTypeName: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    extensionNumberList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.ExtensionNumberResponse.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.ExtensionNumberResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        baseTypeName: jspb.Message.getFieldWithDefault(msg, 1, ''),
+        extensionNumberList:
+          (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f,
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse}
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.ExtensionNumberResponse;
-  return proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.ExtensionNumberResponse();
+  return proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -1415,41 +1696,49 @@ proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinary = functi
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse}
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBaseTypeName(value);
-      break;
-    case 2:
-      var value = /** @type {!Array<number>} */ (reader.readPackedInt32());
-      msg.setExtensionNumberList(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setBaseTypeName(value);
+        break;
+      case 2:
+        var values = /** @type {!Array<number>} */ (reader.isDelimited()
+          ? reader.readPackedInt32()
+          : [reader.readInt32()]);
+        for (var i = 0; i < values.length; i++) {
+          msg.addExtensionNumber(values[i]);
+        }
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.ExtensionNumberResponse.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.ExtensionNumberResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -1457,81 +1746,77 @@ proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.serializeBinary
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getBaseTypeName();
   if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
+    writer.writeString(1, f);
   }
   f = message.getExtensionNumberList();
   if (f.length > 0) {
-    writer.writePackedInt32(
-      2,
-      f
-    );
+    writer.writePackedInt32(2, f);
   }
 };
 
-
 /**
  * optional string base_type_name = 1;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.getBaseTypeName = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.getBaseTypeName = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.setBaseTypeName = function(value) {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.setBaseTypeName = function (
+  value
+) {
   return jspb.Message.setProto3StringField(this, 1, value);
 };
 
-
 /**
  * repeated int32 extension_number = 2;
  * @return {!Array<number>}
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.getExtensionNumberList = function() {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.getExtensionNumberList = function () {
   return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 2));
 };
 
-
 /**
  * @param {!Array<number>} value
  * @return {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.setExtensionNumberList = function(value) {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.setExtensionNumberList = function (
+  value
+) {
   return jspb.Message.setField(this, 2, value || []);
 };
 
-
 /**
  * @param {number} value
  * @param {number=} opt_index
  * @return {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.addExtensionNumber = function(value, opt_index) {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.addExtensionNumber = function (
+  value,
+  opt_index
+) {
   return jspb.Message.addToRepeatedField(this, 2, value, opt_index);
 };
 
-
 /**
  * Clears the list making it empty but non-null.
  * @return {!proto.grpc.reflection.v1alpha.ExtensionNumberResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.clearExtensionNumberList = function() {
+proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.clearExtensionNumberList = function () {
   return this.setExtensionNumberList([]);
 };
 
-
-
 /**
  * List of repeated fields within this message type.
  * @private {!Array<number>}
@@ -1539,61 +1824,73 @@ proto.grpc.reflection.v1alpha.ExtensionNumberResponse.prototype.clearExtensionNu
  */
 proto.grpc.reflection.v1alpha.ListServiceResponse.repeatedFields_ = [1];
 
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.ListServiceResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.ListServiceResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.ListServiceResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    serviceList: jspb.Message.toObjectList(msg.getServiceList(),
-    proto.grpc.reflection.v1alpha.ServiceResponse.toObject, includeInstance)
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.ListServiceResponse.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.ListServiceResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.ListServiceResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        serviceList: jspb.Message.toObjectList(
+          msg.getServiceList(),
+          proto.grpc.reflection.v1alpha.ServiceResponse.toObject,
+          includeInstance
+        ),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.ListServiceResponse}
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.ListServiceResponse;
-  return proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.ListServiceResponse();
+  return proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -1601,38 +1898,46 @@ proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinary = function(b
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.ListServiceResponse}
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.ListServiceResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = new proto.grpc.reflection.v1alpha.ServiceResponse;
-      reader.readMessage(value,proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinaryFromReader);
-      msg.addService(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = new proto.grpc.reflection.v1alpha.ServiceResponse();
+        reader.readMessage(
+          value,
+          proto.grpc.reflection.v1alpha.ServiceResponse
+            .deserializeBinaryFromReader
+        );
+        msg.addService(value);
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.ListServiceResponse.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.ListServiceResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -1640,7 +1945,10 @@ proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.serializeBinary = fu
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.ListServiceResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getServiceList();
   if (f.length > 0) {
@@ -1652,100 +1960,117 @@ proto.grpc.reflection.v1alpha.ListServiceResponse.serializeBinaryToWriter = func
   }
 };
 
-
 /**
  * repeated ServiceResponse service = 1;
  * @return {!Array<!proto.grpc.reflection.v1alpha.ServiceResponse>}
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.getServiceList = function() {
-  return /** @type{!Array<!proto.grpc.reflection.v1alpha.ServiceResponse>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.grpc.reflection.v1alpha.ServiceResponse, 1));
+proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.getServiceList = function () {
+  return /** @type{!Array<!proto.grpc.reflection.v1alpha.ServiceResponse>} */ (jspb.Message.getRepeatedWrapperField(
+    this,
+    proto.grpc.reflection.v1alpha.ServiceResponse,
+    1
+  ));
 };
 
-
 /**
  * @param {!Array<!proto.grpc.reflection.v1alpha.ServiceResponse>} value
  * @return {!proto.grpc.reflection.v1alpha.ListServiceResponse} returns this
-*/
-proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.setServiceList = function(value) {
+ */
+proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.setServiceList = function (
+  value
+) {
   return jspb.Message.setRepeatedWrapperField(this, 1, value);
 };
 
-
 /**
  * @param {!proto.grpc.reflection.v1alpha.ServiceResponse=} opt_value
  * @param {number=} opt_index
  * @return {!proto.grpc.reflection.v1alpha.ServiceResponse}
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.addService = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.grpc.reflection.v1alpha.ServiceResponse, opt_index);
+proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.addService = function (
+  opt_value,
+  opt_index
+) {
+  return jspb.Message.addToRepeatedWrapperField(
+    this,
+    1,
+    opt_value,
+    proto.grpc.reflection.v1alpha.ServiceResponse,
+    opt_index
+  );
 };
 
-
 /**
  * Clears the list making it empty but non-null.
  * @return {!proto.grpc.reflection.v1alpha.ListServiceResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.clearServiceList = function() {
+proto.grpc.reflection.v1alpha.ListServiceResponse.prototype.clearServiceList = function () {
   return this.setServiceList([]);
 };
 
-
-
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.ServiceResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.ServiceResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.ServiceResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.ServiceResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    name: jspb.Message.getFieldWithDefault(msg, 1, "")
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.ServiceResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.ServiceResponse.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.ServiceResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.ServiceResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        name: jspb.Message.getFieldWithDefault(msg, 1, ''),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.ServiceResponse}
  */
-proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.ServiceResponse;
-  return proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.ServiceResponse();
+  return proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -1753,37 +2078,41 @@ proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinary = function(bytes
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.ServiceResponse}
  */
-proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.ServiceResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setName(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setName(value);
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.ServiceResponse.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.ServiceResponse.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.ServiceResponse.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.ServiceResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -1791,92 +2120,99 @@ proto.grpc.reflection.v1alpha.ServiceResponse.prototype.serializeBinary = functi
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.ServiceResponse.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.ServiceResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getName();
   if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
+    writer.writeString(1, f);
   }
 };
 
-
 /**
  * optional string name = 1;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ServiceResponse.prototype.getName = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+proto.grpc.reflection.v1alpha.ServiceResponse.prototype.getName = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ServiceResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ServiceResponse.prototype.setName = function(value) {
+proto.grpc.reflection.v1alpha.ServiceResponse.prototype.setName = function (
+  value
+) {
   return jspb.Message.setProto3StringField(this, 1, value);
 };
 
-
-
-
-
 if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.grpc.reflection.v1alpha.ErrorResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.grpc.reflection.v1alpha.ErrorResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.grpc.reflection.v1alpha.ErrorResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.grpc.reflection.v1alpha.ErrorResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    errorCode: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    errorMessage: jspb.Message.getFieldWithDefault(msg, 2, "")
+  /**
+   * Creates an object representation of this proto.
+   * Field names that are reserved in JavaScript and will be renamed to pb_name.
+   * Optional fields that are not set will be set to undefined.
+   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+   * For the list of reserved names please see:
+   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+   *     JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @return {!Object}
+   */
+  proto.grpc.reflection.v1alpha.ErrorResponse.prototype.toObject = function (
+    opt_includeInstance
+  ) {
+    return proto.grpc.reflection.v1alpha.ErrorResponse.toObject(
+      opt_includeInstance,
+      this
+    );
   };
 
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
+  /**
+   * Static version of the {@see toObject} method.
+   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+   *     the JSPB instance for transitional soy proto support:
+   *     http://goto/soy-param-migration
+   * @param {!proto.grpc.reflection.v1alpha.ErrorResponse} msg The msg instance to transform.
+   * @return {!Object}
+   * @suppress {unusedLocalVariables} f is only used for nested messages
+   */
+  proto.grpc.reflection.v1alpha.ErrorResponse.toObject = function (
+    includeInstance,
+    msg
+  ) {
+    var f,
+      obj = {
+        errorCode: jspb.Message.getFieldWithDefault(msg, 1, 0),
+        errorMessage: jspb.Message.getFieldWithDefault(msg, 2, ''),
+      };
+
+    if (includeInstance) {
+      obj.$jspbMessageInstance = msg;
+    }
+    return obj;
+  };
 }
 
-
 /**
  * Deserializes binary data (in protobuf wire format).
  * @param {jspb.ByteSource} bytes The bytes to deserialize.
  * @return {!proto.grpc.reflection.v1alpha.ErrorResponse}
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinary = function(bytes) {
+proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinary = function (
+  bytes
+) {
   var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.grpc.reflection.v1alpha.ErrorResponse;
-  return proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinaryFromReader(msg, reader);
+  var msg = new proto.grpc.reflection.v1alpha.ErrorResponse();
+  return proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinaryFromReader(
+    msg,
+    reader
+  );
 };
 
-
 /**
  * Deserializes binary data (in protobuf wire format) from the
  * given reader into the given message object.
@@ -1884,41 +2220,45 @@ proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinary = function(bytes)
  * @param {!jspb.BinaryReader} reader The BinaryReader to use.
  * @return {!proto.grpc.reflection.v1alpha.ErrorResponse}
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinaryFromReader = function(msg, reader) {
+proto.grpc.reflection.v1alpha.ErrorResponse.deserializeBinaryFromReader = function (
+  msg,
+  reader
+) {
   while (reader.nextField()) {
     if (reader.isEndGroup()) {
       break;
     }
     var field = reader.getFieldNumber();
     switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readInt32());
-      msg.setErrorCode(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setErrorMessage(value);
-      break;
-    default:
-      reader.skipField();
-      break;
+      case 1:
+        var value = /** @type {number} */ (reader.readInt32());
+        msg.setErrorCode(value);
+        break;
+      case 2:
+        var value = /** @type {string} */ (reader.readString());
+        msg.setErrorMessage(value);
+        break;
+      default:
+        reader.skipField();
+        break;
     }
   }
   return msg;
 };
 
-
 /**
  * Serializes the message to binary data (in protobuf wire format).
  * @return {!Uint8Array}
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.prototype.serializeBinary = function() {
+proto.grpc.reflection.v1alpha.ErrorResponse.prototype.serializeBinary = function () {
   var writer = new jspb.BinaryWriter();
-  proto.grpc.reflection.v1alpha.ErrorResponse.serializeBinaryToWriter(this, writer);
+  proto.grpc.reflection.v1alpha.ErrorResponse.serializeBinaryToWriter(
+    this,
+    writer
+  );
   return writer.getResultBuffer();
 };
 
-
 /**
  * Serializes the given message to binary data (in protobuf wire
  * format), writing to the given BinaryWriter.
@@ -1926,59 +2266,55 @@ proto.grpc.reflection.v1alpha.ErrorResponse.prototype.serializeBinary = function
  * @param {!jspb.BinaryWriter} writer
  * @suppress {unusedLocalVariables} f is only used for nested messages
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.serializeBinaryToWriter = function(message, writer) {
+proto.grpc.reflection.v1alpha.ErrorResponse.serializeBinaryToWriter = function (
+  message,
+  writer
+) {
   var f = undefined;
   f = message.getErrorCode();
   if (f !== 0) {
-    writer.writeInt32(
-      1,
-      f
-    );
+    writer.writeInt32(1, f);
   }
   f = message.getErrorMessage();
   if (f.length > 0) {
-    writer.writeString(
-      2,
-      f
-    );
+    writer.writeString(2, f);
   }
 };
 
-
 /**
  * optional int32 error_code = 1;
  * @return {number}
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.prototype.getErrorCode = function() {
+proto.grpc.reflection.v1alpha.ErrorResponse.prototype.getErrorCode = function () {
   return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
 };
 
-
 /**
  * @param {number} value
  * @return {!proto.grpc.reflection.v1alpha.ErrorResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.prototype.setErrorCode = function(value) {
+proto.grpc.reflection.v1alpha.ErrorResponse.prototype.setErrorCode = function (
+  value
+) {
   return jspb.Message.setProto3IntField(this, 1, value);
 };
 
-
 /**
  * optional string error_message = 2;
  * @return {string}
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.prototype.getErrorMessage = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+proto.grpc.reflection.v1alpha.ErrorResponse.prototype.getErrorMessage = function () {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ''));
 };
 
-
 /**
  * @param {string} value
  * @return {!proto.grpc.reflection.v1alpha.ErrorResponse} returns this
  */
-proto.grpc.reflection.v1alpha.ErrorResponse.prototype.setErrorMessage = function(value) {
+proto.grpc.reflection.v1alpha.ErrorResponse.prototype.setErrorMessage = function (
+  value
+) {
   return jspb.Message.setProto3StringField(this, 2, value);
 };
 
-
 goog.object.extend(exports, proto.grpc.reflection.v1alpha);
diff --git a/src/reflection_grpc_pb.d.ts b/src/reflection_grpc_pb.d.ts
deleted file mode 100644
index 6329b8c..0000000
--- a/src/reflection_grpc_pb.d.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-// package: grpc.reflection.v1alpha
-// file: reflection.proto
-
-/* tslint:disable */
-/* eslint-disable */
-
-import * as grpc from "@postman/grpc-js";
-import * as reflection_pb from "./reflection_pb";
-
-interface IServerReflectionService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
-    serverReflectionInfo: IServerReflectionService_IServerReflectionInfo;
-}
-
-interface IServerReflectionService_IServerReflectionInfo extends grpc.MethodDefinition<reflection_pb.ServerReflectionRequest, reflection_pb.ServerReflectionResponse> {
-    path: "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo";
-    requestStream: true;
-    responseStream: true;
-    requestSerialize: grpc.serialize<reflection_pb.ServerReflectionRequest>;
-    requestDeserialize: grpc.deserialize<reflection_pb.ServerReflectionRequest>;
-    responseSerialize: grpc.serialize<reflection_pb.ServerReflectionResponse>;
-    responseDeserialize: grpc.deserialize<reflection_pb.ServerReflectionResponse>;
-}
-
-export const ServerReflectionService: IServerReflectionService;
-
-export interface IServerReflectionServer {
-    serverReflectionInfo: grpc.handleBidiStreamingCall<reflection_pb.ServerReflectionRequest, reflection_pb.ServerReflectionResponse>;
-}
-
-export interface IServerReflectionClient {
-    serverReflectionInfo(): grpc.ClientDuplexStream<reflection_pb.ServerReflectionRequest, reflection_pb.ServerReflectionResponse>;
-    serverReflectionInfo(options: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<reflection_pb.ServerReflectionRequest, reflection_pb.ServerReflectionResponse>;
-    serverReflectionInfo(metadata: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<reflection_pb.ServerReflectionRequest, reflection_pb.ServerReflectionResponse>;
-}
-
-export class ServerReflectionClient extends grpc.Client implements IServerReflectionClient {
-    constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
-    public serverReflectionInfo(options?: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<reflection_pb.ServerReflectionRequest, reflection_pb.ServerReflectionResponse>;
-    public serverReflectionInfo(metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<reflection_pb.ServerReflectionRequest, reflection_pb.ServerReflectionResponse>;
-}
diff --git a/src/reflection_pb.d.ts b/src/reflection_pb.d.ts
deleted file mode 100644
index 9ef8551..0000000
--- a/src/reflection_pb.d.ts
+++ /dev/null
@@ -1,299 +0,0 @@
-// package: grpc.reflection.v1alpha
-// file: reflection.proto
-
-/* tslint:disable */
-/* eslint-disable */
-
-import * as jspb from "google-protobuf";
-
-export class ServerReflectionRequest extends jspb.Message { 
-    getHost(): string;
-    setHost(value: string): ServerReflectionRequest;
-
-
-    hasFileByFilename(): boolean;
-    clearFileByFilename(): void;
-    getFileByFilename(): string;
-    setFileByFilename(value: string): ServerReflectionRequest;
-
-
-    hasFileContainingSymbol(): boolean;
-    clearFileContainingSymbol(): void;
-    getFileContainingSymbol(): string;
-    setFileContainingSymbol(value: string): ServerReflectionRequest;
-
-
-    hasFileContainingExtension(): boolean;
-    clearFileContainingExtension(): void;
-    getFileContainingExtension(): ExtensionRequest | undefined;
-    setFileContainingExtension(value?: ExtensionRequest): ServerReflectionRequest;
-
-
-    hasAllExtensionNumbersOfType(): boolean;
-    clearAllExtensionNumbersOfType(): void;
-    getAllExtensionNumbersOfType(): string;
-    setAllExtensionNumbersOfType(value: string): ServerReflectionRequest;
-
-
-    hasListServices(): boolean;
-    clearListServices(): void;
-    getListServices(): string;
-    setListServices(value: string): ServerReflectionRequest;
-
-
-    getMessageRequestCase(): ServerReflectionRequest.MessageRequestCase;
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): ServerReflectionRequest.AsObject;
-    static toObject(includeInstance: boolean, msg: ServerReflectionRequest): ServerReflectionRequest.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: ServerReflectionRequest, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): ServerReflectionRequest;
-    static deserializeBinaryFromReader(message: ServerReflectionRequest, reader: jspb.BinaryReader): ServerReflectionRequest;
-}
-
-export namespace ServerReflectionRequest {
-    export type AsObject = {
-        host: string,
-        fileByFilename: string,
-        fileContainingSymbol: string,
-        fileContainingExtension?: ExtensionRequest.AsObject,
-        allExtensionNumbersOfType: string,
-        listServices: string,
-    }
-
-    export enum MessageRequestCase {
-        MESSAGE_REQUEST_NOT_SET = 0,
-    
-    FILE_BY_FILENAME = 3,
-
-    FILE_CONTAINING_SYMBOL = 4,
-
-    FILE_CONTAINING_EXTENSION = 5,
-
-    ALL_EXTENSION_NUMBERS_OF_TYPE = 6,
-
-    LIST_SERVICES = 7,
-
-    }
-
-}
-
-export class ExtensionRequest extends jspb.Message { 
-    getContainingType(): string;
-    setContainingType(value: string): ExtensionRequest;
-
-    getExtensionNumber(): number;
-    setExtensionNumber(value: number): ExtensionRequest;
-
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): ExtensionRequest.AsObject;
-    static toObject(includeInstance: boolean, msg: ExtensionRequest): ExtensionRequest.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: ExtensionRequest, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): ExtensionRequest;
-    static deserializeBinaryFromReader(message: ExtensionRequest, reader: jspb.BinaryReader): ExtensionRequest;
-}
-
-export namespace ExtensionRequest {
-    export type AsObject = {
-        containingType: string,
-        extensionNumber: number,
-    }
-}
-
-export class ServerReflectionResponse extends jspb.Message { 
-    getValidHost(): string;
-    setValidHost(value: string): ServerReflectionResponse;
-
-
-    hasOriginalRequest(): boolean;
-    clearOriginalRequest(): void;
-    getOriginalRequest(): ServerReflectionRequest | undefined;
-    setOriginalRequest(value?: ServerReflectionRequest): ServerReflectionResponse;
-
-
-    hasFileDescriptorResponse(): boolean;
-    clearFileDescriptorResponse(): void;
-    getFileDescriptorResponse(): FileDescriptorResponse | undefined;
-    setFileDescriptorResponse(value?: FileDescriptorResponse): ServerReflectionResponse;
-
-
-    hasAllExtensionNumbersResponse(): boolean;
-    clearAllExtensionNumbersResponse(): void;
-    getAllExtensionNumbersResponse(): ExtensionNumberResponse | undefined;
-    setAllExtensionNumbersResponse(value?: ExtensionNumberResponse): ServerReflectionResponse;
-
-
-    hasListServicesResponse(): boolean;
-    clearListServicesResponse(): void;
-    getListServicesResponse(): ListServiceResponse | undefined;
-    setListServicesResponse(value?: ListServiceResponse): ServerReflectionResponse;
-
-
-    hasErrorResponse(): boolean;
-    clearErrorResponse(): void;
-    getErrorResponse(): ErrorResponse | undefined;
-    setErrorResponse(value?: ErrorResponse): ServerReflectionResponse;
-
-
-    getMessageResponseCase(): ServerReflectionResponse.MessageResponseCase;
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): ServerReflectionResponse.AsObject;
-    static toObject(includeInstance: boolean, msg: ServerReflectionResponse): ServerReflectionResponse.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: ServerReflectionResponse, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): ServerReflectionResponse;
-    static deserializeBinaryFromReader(message: ServerReflectionResponse, reader: jspb.BinaryReader): ServerReflectionResponse;
-}
-
-export namespace ServerReflectionResponse {
-    export type AsObject = {
-        validHost: string,
-        originalRequest?: ServerReflectionRequest.AsObject,
-        fileDescriptorResponse?: FileDescriptorResponse.AsObject,
-        allExtensionNumbersResponse?: ExtensionNumberResponse.AsObject,
-        listServicesResponse?: ListServiceResponse.AsObject,
-        errorResponse?: ErrorResponse.AsObject,
-    }
-
-    export enum MessageResponseCase {
-        MESSAGE_RESPONSE_NOT_SET = 0,
-    
-    FILE_DESCRIPTOR_RESPONSE = 4,
-
-    ALL_EXTENSION_NUMBERS_RESPONSE = 5,
-
-    LIST_SERVICES_RESPONSE = 6,
-
-    ERROR_RESPONSE = 7,
-
-    }
-
-}
-
-export class FileDescriptorResponse extends jspb.Message { 
-    clearFileDescriptorProtoList(): void;
-    getFileDescriptorProtoList(): Array<Uint8Array | string>;
-    getFileDescriptorProtoList_asU8(): Array<Uint8Array>;
-    getFileDescriptorProtoList_asB64(): Array<string>;
-    setFileDescriptorProtoList(value: Array<Uint8Array | string>): FileDescriptorResponse;
-    addFileDescriptorProto(value: Uint8Array | string, index?: number): Uint8Array | string;
-
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): FileDescriptorResponse.AsObject;
-    static toObject(includeInstance: boolean, msg: FileDescriptorResponse): FileDescriptorResponse.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: FileDescriptorResponse, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): FileDescriptorResponse;
-    static deserializeBinaryFromReader(message: FileDescriptorResponse, reader: jspb.BinaryReader): FileDescriptorResponse;
-}
-
-export namespace FileDescriptorResponse {
-    export type AsObject = {
-        fileDescriptorProtoList: Array<Uint8Array | string>,
-    }
-}
-
-export class ExtensionNumberResponse extends jspb.Message { 
-    getBaseTypeName(): string;
-    setBaseTypeName(value: string): ExtensionNumberResponse;
-
-    clearExtensionNumberList(): void;
-    getExtensionNumberList(): Array<number>;
-    setExtensionNumberList(value: Array<number>): ExtensionNumberResponse;
-    addExtensionNumber(value: number, index?: number): number;
-
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): ExtensionNumberResponse.AsObject;
-    static toObject(includeInstance: boolean, msg: ExtensionNumberResponse): ExtensionNumberResponse.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: ExtensionNumberResponse, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): ExtensionNumberResponse;
-    static deserializeBinaryFromReader(message: ExtensionNumberResponse, reader: jspb.BinaryReader): ExtensionNumberResponse;
-}
-
-export namespace ExtensionNumberResponse {
-    export type AsObject = {
-        baseTypeName: string,
-        extensionNumberList: Array<number>,
-    }
-}
-
-export class ListServiceResponse extends jspb.Message { 
-    clearServiceList(): void;
-    getServiceList(): Array<ServiceResponse>;
-    setServiceList(value: Array<ServiceResponse>): ListServiceResponse;
-    addService(value?: ServiceResponse, index?: number): ServiceResponse;
-
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): ListServiceResponse.AsObject;
-    static toObject(includeInstance: boolean, msg: ListServiceResponse): ListServiceResponse.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: ListServiceResponse, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): ListServiceResponse;
-    static deserializeBinaryFromReader(message: ListServiceResponse, reader: jspb.BinaryReader): ListServiceResponse;
-}
-
-export namespace ListServiceResponse {
-    export type AsObject = {
-        serviceList: Array<ServiceResponse.AsObject>,
-    }
-}
-
-export class ServiceResponse extends jspb.Message { 
-    getName(): string;
-    setName(value: string): ServiceResponse;
-
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): ServiceResponse.AsObject;
-    static toObject(includeInstance: boolean, msg: ServiceResponse): ServiceResponse.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: ServiceResponse, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): ServiceResponse;
-    static deserializeBinaryFromReader(message: ServiceResponse, reader: jspb.BinaryReader): ServiceResponse;
-}
-
-export namespace ServiceResponse {
-    export type AsObject = {
-        name: string,
-    }
-}
-
-export class ErrorResponse extends jspb.Message { 
-    getErrorCode(): number;
-    setErrorCode(value: number): ErrorResponse;
-
-    getErrorMessage(): string;
-    setErrorMessage(value: string): ErrorResponse;
-
-
-    serializeBinary(): Uint8Array;
-    toObject(includeInstance?: boolean): ErrorResponse.AsObject;
-    static toObject(includeInstance: boolean, msg: ErrorResponse): ErrorResponse.AsObject;
-    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-    static serializeBinaryToWriter(message: ErrorResponse, writer: jspb.BinaryWriter): void;
-    static deserializeBinary(bytes: Uint8Array): ErrorResponse;
-    static deserializeBinaryFromReader(message: ErrorResponse, reader: jspb.BinaryReader): ErrorResponse;
-}
-
-export namespace ErrorResponse {
-    export type AsObject = {
-        errorCode: number,
-        errorMessage: string,
-    }
-}
diff --git a/static/grpc/reflection/v1/reflection.proto b/static/grpc/reflection/v1/reflection.proto
new file mode 100644
index 0000000..f9f349f
--- /dev/null
+++ b/static/grpc/reflection/v1/reflection.proto
@@ -0,0 +1,146 @@
+// Copyright 2016 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.
+
+// Service exported by server reflection.  A more complete description of how
+// server reflection works can be found at
+// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md
+//
+// The canonical version of this proto can be found at
+// https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto
+
+syntax = "proto3";
+
+package grpc.reflection.v1;
+
+option go_package = "google.golang.org/grpc/reflection/grpc_reflection_v1";
+option java_multiple_files = true;
+option java_package = "io.grpc.reflection.v1";
+option java_outer_classname = "ServerReflectionProto";
+
+service ServerReflection {
+  // The reflection service is structured as a bidirectional stream, ensuring
+  // all related requests go to a single server.
+  rpc ServerReflectionInfo(stream ServerReflectionRequest)
+      returns (stream ServerReflectionResponse);
+}
+
+// The message sent by the client when calling ServerReflectionInfo method.
+message ServerReflectionRequest {
+  string host = 1;
+  // To use reflection service, the client should set one of the following
+  // fields in message_request. The server distinguishes requests by their
+  // defined field and then handles them using corresponding methods.
+  oneof message_request {
+    // Find a proto file by the file name.
+    string file_by_filename = 3;
+
+    // Find the proto file that declares the given fully-qualified symbol name.
+    // This field should be a fully-qualified symbol name
+    // (e.g. <package>.<service>[.<method>] or <package>.<type>).
+    string file_containing_symbol = 4;
+
+    // Find the proto file which defines an extension extending the given
+    // message type with the given field number.
+    ExtensionRequest file_containing_extension = 5;
+
+    // Finds the tag numbers used by all known extensions of the given message
+    // type, and appends them to ExtensionNumberResponse in an undefined order.
+    // Its corresponding method is best-effort: it's not guaranteed that the
+    // reflection service will implement this method, and it's not guaranteed
+    // that this method will provide all extensions. Returns
+    // StatusCode::UNIMPLEMENTED if it's not implemented.
+    // This field should be a fully-qualified type name. The format is
+    // <package>.<type>
+    string all_extension_numbers_of_type = 6;
+
+    // List the full names of registered services. The content will not be
+    // checked.
+    string list_services = 7;
+  }
+}
+
+// The type name and extension number sent by the client when requesting
+// file_containing_extension.
+message ExtensionRequest {
+  // Fully-qualified type name. The format should be <package>.<type>
+  string containing_type = 1;
+  int32 extension_number = 2;
+}
+
+// The message sent by the server to answer ServerReflectionInfo method.
+message ServerReflectionResponse {
+  string valid_host = 1;
+  ServerReflectionRequest original_request = 2;
+  // The server sets one of the following fields according to the message_request
+  // in the request.
+  oneof message_response {
+    // This message is used to answer file_by_filename, file_containing_symbol,
+    // file_containing_extension requests with transitive dependencies.
+    // As the repeated label is not allowed in oneof fields, we use a
+    // FileDescriptorResponse message to encapsulate the repeated fields.
+    // The reflection service is allowed to avoid sending FileDescriptorProtos
+    // that were previously sent in response to earlier requests in the stream.
+    FileDescriptorResponse file_descriptor_response = 4;
+
+    // This message is used to answer all_extension_numbers_of_type requests.
+    ExtensionNumberResponse all_extension_numbers_response = 5;
+
+    // This message is used to answer list_services requests.
+    ListServiceResponse list_services_response = 6;
+
+    // This message is used when an error occurs.
+    ErrorResponse error_response = 7;
+  }
+}
+
+// Serialized FileDescriptorProto messages sent by the server answering
+// a file_by_filename, file_containing_symbol, or file_containing_extension
+// request.
+message FileDescriptorResponse {
+  // Serialized FileDescriptorProto messages. We avoid taking a dependency on
+  // descriptor.proto, which uses proto2 only features, by making them opaque
+  // bytes instead.
+  repeated bytes file_descriptor_proto = 1;
+}
+
+// A list of extension numbers sent by the server answering
+// all_extension_numbers_of_type request.
+message ExtensionNumberResponse {
+  // Full name of the base type, including the package name. The format
+  // is <package>.<type>
+  string base_type_name = 1;
+  repeated int32 extension_number = 2;
+}
+
+// A list of ServiceResponse sent by the server answering list_services request.
+message ListServiceResponse {
+  // The information of each service may be expanded in the future, so we use
+  // ServiceResponse message to encapsulate it.
+  repeated ServiceResponse service = 1;
+}
+
+// The information of a single service used by ListServiceResponse to answer
+// list_services request.
+message ServiceResponse {
+  // Full name of a registered service, including its package name. The format
+  // is <package>.<service>
+  string name = 1;
+}
+
+// The error code and error message sent by the server when an error occurs.
+message ErrorResponse {
+  // This field uses the error codes defined in grpc::StatusCode.
+  int32 error_code = 1;
+  string error_message = 2;
+}
diff --git a/test/client.test.ts b/test/client.test.ts
index c6f7aaa..b3c5f1b 100644
--- a/test/client.test.ts
+++ b/test/client.test.ts
@@ -1,144 +1,591 @@
+/* eslint-disable no-undef */
+import {
+  credentials,
+  ServiceError,
+  status as GrpcStatus,
+} from '@postman/grpc-js';
 import {Client} from '../src/client';
-import {credentials} from '@postman/grpc-js';
-// eslint-disable-next-line node/no-unpublished-import
 import {assert} from 'chai';
 import * as sinon from 'sinon';
+
+import * as services_v1alpha from '../src/generated/v1alpha/reflection_grpc_pb';
 import {
-  ServerReflectionResponse,
-  ListServiceResponse,
-  ServiceResponse,
-  FileDescriptorResponse,
-} from '../src/reflection_pb';
-
-// eslint-disable-next-line no-undef
-describe('listServices', () => {
-  // eslint-disable-next-line no-undef
-  it('should return services', async () => {
-    const reflectionClient = new Client(
-      'localhost:4770',
-      credentials.createInsecure()
-    );
+  ServerReflectionResponse as ServerReflectionResponse_v1alpha,
+  ListServiceResponse as ListServiceResponse_v1alpha,
+  ServiceResponse as ServiceResponse_v1alpha,
+  FileDescriptorResponse as FileDescriptorResponse_v1alpha,
+} from '../src/generated/v1alpha/reflection_pb';
+import * as services_v1 from '../src/generated/v1/reflection_grpc_pb';
+import {
+  ServerReflectionResponse as ServerReflectionResponse_v1,
+  ListServiceResponse as ListServiceResponse_v1,
+  ServiceResponse as ServiceResponse_v1,
+  FileDescriptorResponse as FileDescriptorResponse_v1,
+} from '../src/generated/v1/reflection_pb';
 
-    const grpcCall = {
-      // eslint-disable-next-line @typescript-eslint/no-explicit-any
-      on: function (_event: string, listener: (...args: any[]) => void) {
-        const res = new ServerReflectionResponse();
-
-        const service1 = new ServiceResponse();
-        service1.setName('grpc.reflection.v1alpha.ServerReflection');
-        const service2 = new ServiceResponse();
-        service2.setName('phone.Messenger');
-        const serviceList = [service1, service2];
-
-        const listService = new ListServiceResponse();
-        listService.setServiceList(serviceList);
-        res.setListServicesResponse(listService);
-
-        listener(res);
-      },
-      write: function () {},
-      end: function () {},
-    };
-
-    const mock = sinon.mock(reflectionClient.grpcClient);
-    mock.expects('serverReflectionInfo').once().returns(grpcCall);
-
-    const expectedServices: string[] = [
-      'grpc.reflection.v1alpha.ServerReflection',
-      'phone.Messenger',
-    ];
-    assert.sameMembers(await reflectionClient.listServices(), expectedServices);
-  });
-});
+const v1TestServices = [
+  'grpc.reflection.v1.ServerReflection',
+  'phone.Messenger',
+];
 
-// eslint-disable-next-line no-undef
-describe('fileContainingSymbol', () => {
-  // eslint-disable-next-line no-undef
-  it('should return Root', async () => {
-    const reflectionClient = new Client(
-      'localhost:4770',
-      credentials.createInsecure()
-    );
+const v1alphaTestServices = [
+  'grpc.reflection.v1alpha.ServerReflection',
+  'phone.Messenger',
+];
+
+const phoneProtoBytes = Buffer.from([
+  10,
+  11,
+  112,
+  104,
+  111,
+  110,
+  101,
+  46,
+  112,
+  114,
+  111,
+  116,
+  111,
+  18,
+  5,
+  112,
+  104,
+  111,
+  110,
+  101,
+  26,
+  13,
+  99,
+  111,
+  110,
+  116,
+  97,
+  99,
+  116,
+  46,
+  112,
+  114,
+  111,
+  116,
+  111,
+  34,
+  97,
+  10,
+  11,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  113,
+  117,
+  101,
+  115,
+  116,
+  18,
+  14,
+  10,
+  2,
+  105,
+  100,
+  24,
+  1,
+  32,
+  1,
+  40,
+  9,
+  82,
+  2,
+  105,
+  100,
+  18,
+  24,
+  10,
+  7,
+  109,
+  101,
+  115,
+  115,
+  97,
+  103,
+  101,
+  24,
+  2,
+  32,
+  1,
+  40,
+  9,
+  82,
+  7,
+  109,
+  101,
+  115,
+  115,
+  97,
+  103,
+  101,
+  18,
+  40,
+  10,
+  7,
+  99,
+  111,
+  110,
+  116,
+  97,
+  99,
+  116,
+  24,
+  3,
+  32,
+  1,
+  40,
+  11,
+  50,
+  14,
+  46,
+  112,
+  104,
+  111,
+  110,
+  101,
+  46,
+  67,
+  111,
+  110,
+  116,
+  97,
+  99,
+  116,
+  82,
+  7,
+  99,
+  111,
+  110,
+  116,
+  97,
+  99,
+  116,
+  34,
+  40,
+  10,
+  12,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  115,
+  112,
+  111,
+  110,
+  115,
+  101,
+  18,
+  24,
+  10,
+  7,
+  115,
+  117,
+  99,
+  99,
+  101,
+  115,
+  115,
+  24,
+  1,
+  32,
+  1,
+  40,
+  8,
+  82,
+  7,
+  115,
+  117,
+  99,
+  99,
+  101,
+  115,
+  115,
+  50,
+  63,
+  10,
+  9,
+  77,
+  101,
+  115,
+  115,
+  101,
+  110,
+  103,
+  101,
+  114,
+  18,
+  50,
+  10,
+  7,
+  77,
+  101,
+  115,
+  115,
+  97,
+  103,
+  101,
+  18,
+  18,
+  46,
+  112,
+  104,
+  111,
+  110,
+  101,
+  46,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  113,
+  117,
+  101,
+  115,
+  116,
+  26,
+  19,
+  46,
+  112,
+  104,
+  111,
+  110,
+  101,
+  46,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  115,
+  112,
+  111,
+  110,
+  115,
+  101,
+  98,
+  6,
+  112,
+  114,
+  111,
+  116,
+  111,
+  51,
+]);
+const contactProtoBytes = Buffer.from([
+  10,
+  13,
+  99,
+  111,
+  110,
+  116,
+  97,
+  99,
+  116,
+  46,
+  112,
+  114,
+  111,
+  116,
+  111,
+  18,
+  5,
+  112,
+  104,
+  111,
+  110,
+  101,
+  34,
+  53,
+  10,
+  7,
+  67,
+  111,
+  110,
+  116,
+  97,
+  99,
+  116,
+  18,
+  18,
+  10,
+  4,
+  110,
+  97,
+  109,
+  101,
+  24,
+  1,
+  32,
+  1,
+  40,
+  9,
+  82,
+  4,
+  110,
+  97,
+  109,
+  101,
+  18,
+  22,
+  10,
+  6,
+  110,
+  117,
+  109,
+  98,
+  101,
+  114,
+  24,
+  2,
+  32,
+  1,
+  40,
+  9,
+  82,
+  6,
+  110,
+  117,
+  109,
+  98,
+  101,
+  114,
+  98,
+  6,
+  112,
+  114,
+  111,
+  116,
+  111,
+  51,
+]);
 
-    const grpcCallPhone = {
-      // eslint-disable-next-line @typescript-eslint/no-explicit-any
-      on: function (_event: string, listener: (...args: any[]) => void) {
-        if (_event === 'error') {
-          return;
+const mockReflectionStream = (
+  options: {
+    responseMessage?:
+      | ServerReflectionResponse_v1
+      | ServerReflectionResponse_v1alpha
+      | null;
+    error?: ServiceError | null;
+  } = {}
+) => {
+  const {responseMessage, error} = options;
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
+  let dataListener: ((response: any) => void) | null = null;
+  let errorListener: ((error: ServiceError) => void) | null = null;
+  let endListener: (() => void) | null = null;
+
+  const stream = {
+    // eslint-disable-next-line @typescript-eslint/no-explicit-any
+    on: (event: string, listener: (...args: any[]) => void) => {
+      if (event === 'data') {
+        dataListener = listener;
+      } else if (event === 'error') {
+        errorListener = listener as (error: ServiceError) => void; // Cast needed
+      } else if (event === 'end') {
+        endListener = listener;
+      }
+    },
+    write: sinon.stub(),
+
+    end: sinon.stub().callsFake(() => {
+      setTimeout(() => {
+        if (error && errorListener) {
+          errorListener(error);
+        } else if (responseMessage && dataListener) {
+          dataListener(responseMessage);
         }
 
-        const res = new ServerReflectionResponse();
-        const fileDescriptorResponse = new FileDescriptorResponse();
-        // eslint-disable-next-line prettier/prettier
-        const protoBytes = Buffer.from([10,11,112,104,111,110,101,46,112,114,111,116,111,18,5,112,104,111,110,101,26,13,99,111,110,116,97,99,116,46,112,114,111,116,111,34,97,10,11,84,101,120,116,82,101,113,117,101,115,116,18,14,10,2,105,100,24,1,32,1,40,9,82,2,105,100,18,24,10,7,109,101,115,115,97,103,101,24,2,32,1,40,9,82,7,109,101,115,115,97,103,101,18,40,10,7,99,111,110,116,97,99,116,24,3,32,1,40,11,50,14,46,112,104,111,110,101,46,67,111,110,116,97,99,116,82,7,99,111,110,116,97,99,116,34,40,10,12,84,101,120,116,82,101,115,112,111,110,115,101,18,24,10,7,115,117,99,99,101,115,115,24,1,32,1,40,8,82,7,115,117,99,99,101,115,115,50,63,10,9,77,101,115,115,101,110,103,101,114,18,50,10,7,77,101,115,115,97,103,101,18,18,46,112,104,111,110,101,46,84,101,120,116,82,101,113,117,101,115,116,26,19,46,112,104,111,110,101,46,84,101,120,116,82,101,115,112,111,110,115,101,98,6,112,114,111,116,111,51]);
-        fileDescriptorResponse.addFileDescriptorProto(protoBytes);
-        res.setFileDescriptorResponse(fileDescriptorResponse);
-
-        listener(res);
-      },
-      write: function () {},
-      end: function () {},
-    };
-
-    const grpcCallContact = {
-      // eslint-disable-next-line @typescript-eslint/no-explicit-any
-      on: function (_event: string, listener: (...args: any[]) => void) {
-        if (_event === 'error') {
-          return;
+        if (endListener) {
+          endListener();
         }
+      }, 0);
+    }),
+  };
+  return stream;
+};
 
-        const res = new ServerReflectionResponse();
-        const fileDescriptorResponse = new FileDescriptorResponse();
-        // eslint-disable-next-line prettier/prettier
-        const protoBytes = Buffer.from([10,13,99,111,110,116,97,99,116,46,112,114,111,116,111,18,5,112,104,111,110,101,34,53,10,7,67,111,110,116,97,99,116,18,18,10,4,110,97,109,101,24,1,32,1,40,9,82,4,110,97,109,101,18,22,10,6,110,117,109,98,101,114,24,2,32,1,40,9,82,6,110,117,109,98,101,114,98,6,112,114,111,116,111,51]);
-        fileDescriptorResponse.addFileDescriptorProto(protoBytes);
-        res.setFileDescriptorResponse(fileDescriptorResponse);
-
-        listener(res);
-      },
-      write: function () {},
-      end: function () {},
-    };
-
-    const mock = sinon.mock(reflectionClient.grpcClient);
-    mock.expects('serverReflectionInfo').once().returns(grpcCallPhone);
-    mock.expects('serverReflectionInfo').once().returns(grpcCallContact);
-    const root = await reflectionClient.fileContainingSymbol('phone.Messenger');
-    assert.sameDeepMembers(root.files, ['contact.proto', 'phone.proto']);
-  });
+const unimplementedCall = mockReflectionStream({
+  error: Object.assign(new Error('Method not found') as ServiceError, {
+    code: GrpcStatus.UNIMPLEMENTED,
+  }),
 });
 
-// eslint-disable-next-line no-undef
-describe('fileByFilename', () => {
-  // eslint-disable-next-line no-undef
-  it('should return Root', async () => {
-    const reflectionClient = new Client(
+// V1 Mocks
+const v1_listServicesCall = (() => {
+  const res = new ServerReflectionResponse_v1();
+  const listRes = new ListServiceResponse_v1();
+  listRes.setServiceList(
+    v1TestServices.map(name => new ServiceResponse_v1().setName(name))
+  );
+  res.setListServicesResponse(listRes);
+  return mockReflectionStream({responseMessage: res});
+})();
+
+const v1_phoneProtoCall = (() => {
+  const res = new ServerReflectionResponse_v1();
+  const fdRes = new FileDescriptorResponse_v1();
+  fdRes.addFileDescriptorProto(phoneProtoBytes);
+  res.setFileDescriptorResponse(fdRes);
+  return mockReflectionStream({responseMessage: res});
+})();
+
+const v1_contactProtoCall = (() => {
+  const res = new ServerReflectionResponse_v1();
+  const fdRes = new FileDescriptorResponse_v1();
+  fdRes.addFileDescriptorProto(contactProtoBytes);
+  res.setFileDescriptorResponse(fdRes);
+  return mockReflectionStream({responseMessage: res});
+})();
+
+// V1Alpha Mocks
+const v1alpha_listServicesCall = (() => {
+  const res = new ServerReflectionResponse_v1alpha();
+  const listRes = new ListServiceResponse_v1alpha();
+  listRes.setServiceList(
+    v1alphaTestServices.map(name => new ServiceResponse_v1alpha().setName(name))
+  );
+  res.setListServicesResponse(listRes);
+  return mockReflectionStream({responseMessage: res});
+})();
+
+const v1alpha_phoneProtoCall = (() => {
+  const res = new ServerReflectionResponse_v1alpha();
+  const fdRes = new FileDescriptorResponse_v1alpha();
+  fdRes.addFileDescriptorProto(phoneProtoBytes);
+  res.setFileDescriptorResponse(fdRes);
+  return mockReflectionStream({responseMessage: res});
+})();
+
+const v1alpha_contactProtoCall = (() => {
+  const res = new ServerReflectionResponse_v1alpha();
+  const fdRes = new FileDescriptorResponse_v1alpha();
+  fdRes.addFileDescriptorProto(contactProtoBytes);
+  res.setFileDescriptorResponse(fdRes);
+  return mockReflectionStream({responseMessage: res});
+})();
+
+describe('gRPC Reflection Client', () => {
+  let sandbox: sinon.SinonSandbox;
+  let clientV1Stub: sinon.SinonStub;
+  let clientV1AlphaStub: sinon.SinonStub;
+  let reflectionClient: Client;
+
+  beforeEach(() => {
+    sandbox = sinon.createSandbox();
+    clientV1Stub = sandbox.stub(
+      services_v1.ServerReflectionClient.prototype,
+      'serverReflectionInfo'
+    );
+    clientV1AlphaStub = sandbox.stub(
+      services_v1alpha.ServerReflectionClient.prototype,
+      'serverReflectionInfo'
+    );
+    reflectionClient = new Client(
       'localhost:4770',
       credentials.createInsecure()
     );
+  });
 
-    const grpcCallContact = {
-      // eslint-disable-next-line @typescript-eslint/no-explicit-any
-      on: function (_event: string, listener: (...args: any[]) => void) {
-        if (_event === 'error') {
-          return;
-        }
-        const res = new ServerReflectionResponse();
-        const fileDescriptorResponse = new FileDescriptorResponse();
-        // eslint-disable-next-line prettier/prettier
-        const protoBytes = Buffer.from([10,13,99,111,110,116,97,99,116,46,112,114,111,116,111,18,5,112,104,111,110,101,34,53,10,7,67,111,110,116,97,99,116,18,18,10,4,110,97,109,101,24,1,32,1,40,9,82,4,110,97,109,101,18,22,10,6,110,117,109,98,101,114,24,2,32,1,40,9,82,6,110,117,109,98,101,114,98,6,112,114,111,116,111,51]);
-        fileDescriptorResponse.addFileDescriptorProto(protoBytes);
-        res.setFileDescriptorResponse(fileDescriptorResponse);
-
-        listener(res);
-      },
-      write: function () {},
-      end: function () {},
-    };
-
-    const mock = sinon.mock(reflectionClient.grpcClient);
-    mock.expects('serverReflectionInfo').once().returns(grpcCallContact);
-    const root = await reflectionClient.fileByFilename('contact.proto');
-    assert.deepEqual(root.files, ['contact.proto']);
+  afterEach(() => {
+    sandbox.restore();
+  });
+
+  describe('Client - v1alpha Protocol', () => {
+    beforeEach(() => {
+      // assuming v1 probe fails, v1alpha succeeds
+      clientV1Stub.returns(unimplementedCall);
+      clientV1AlphaStub.returns(v1alpha_listServicesCall);
+    });
+
+    it('listServices: should return services', async () => {
+      const services = await reflectionClient.listServices();
+
+      // assert detected version is v1alpha
+      assert.strictEqual(reflectionClient['detectedVersion'], 'v1alpha');
+      assert.sameMembers(services, v1alphaTestServices);
+      sinon.assert.calledOnce(clientV1Stub);
+      sinon.assert.calledOnce(clientV1AlphaStub);
+    });
+
+    it('fileContainingSymbol: should return Root', async () => {
+      clientV1AlphaStub.onSecondCall().returns(v1alpha_phoneProtoCall);
+      clientV1AlphaStub.onThirdCall().returns(v1alpha_contactProtoCall);
+
+      const root = await reflectionClient.fileContainingSymbol(
+        'phone.Messenger'
+      );
+
+      assert.strictEqual(reflectionClient['detectedVersion'], 'v1alpha');
+      assert.sameDeepMembers(root.files, ['contact.proto', 'phone.proto']);
+      sinon.assert.calledOnce(clientV1Stub);
+      sinon.assert.callCount(clientV1AlphaStub, 3);
+    });
+
+    it('fileByFilename: should return Root', async () => {
+      clientV1AlphaStub.onSecondCall().returns(v1alpha_contactProtoCall);
+
+      const root = await reflectionClient.fileByFilename('contact.proto');
+
+      assert.deepEqual(root.files, ['contact.proto']);
+      assert.strictEqual(reflectionClient['detectedVersion'], 'v1alpha');
+      sinon.assert.calledOnce(clientV1Stub);
+      sinon.assert.calledTwice(clientV1AlphaStub);
+    });
+  });
+
+  describe('Client - v1 Protocol', () => {
+    beforeEach(() => {
+      clientV1Stub.returns(v1_listServicesCall);
+      clientV1AlphaStub.returns(unimplementedCall); // v1alpha calls will fail
+    });
+
+    it('listServices: should return services', async () => {
+      const services = await reflectionClient.listServices();
+      // ensure activation completed and detected v1
+      assert.strictEqual(reflectionClient['detectedVersion'], 'v1');
+      // assert only v1 services are returned
+      assert.sameMembers(services, v1TestServices);
+
+      // assert that only v1 client was called only once
+      sinon.assert.calledOnce(clientV1Stub);
+      sinon.assert.notCalled(clientV1AlphaStub);
+    });
+
+    it('fileContainingSymbol: should return Root', async () => {
+      clientV1Stub.onSecondCall().returns(v1_phoneProtoCall);
+      clientV1Stub.onThirdCall().returns(v1_contactProtoCall);
+
+      const root = await reflectionClient.fileContainingSymbol(
+        'phone.Messenger'
+      );
+
+      assert.strictEqual(reflectionClient['detectedVersion'], 'v1');
+      assert.sameDeepMembers(root.files, ['contact.proto', 'phone.proto']);
+      sinon.assert.callCount(clientV1Stub, 3);
+      sinon.assert.notCalled(clientV1AlphaStub);
+    });
+
+    it('fileByFilename: should return Root', async () => {
+      clientV1Stub.onSecondCall().returns(v1_contactProtoCall);
+
+      const root = await reflectionClient.fileByFilename('contact.proto');
+      assert.strictEqual(reflectionClient['detectedVersion'], 'v1');
+      assert.deepEqual(root.files, ['contact.proto']);
+      sinon.assert.calledTwice(clientV1Stub);
+      sinon.assert.notCalled(clientV1AlphaStub);
+    });
   });
 });
diff --git a/test/descriptor.test.ts b/test/descriptor.test.ts
index be5dc05..c1ed9b6 100644
--- a/test/descriptor.test.ts
+++ b/test/descriptor.test.ts
@@ -11,7 +11,200 @@ import {
 import set from 'lodash.set';
 
 // eslint-disable-next-line prettier/prettier
-const protoBytes = Buffer.from([10,11,112,104,111,110,101,46,112,114,111,116,111,18,5,112,104,111,110,101,34,55,10,11,84,101,120,116,82,101,113,117,101,115,116,18,14,10,2,105,100,24,1,32,1,40,9,82,2,105,100,18,24,10,7,109,101,115,115,97,103,101,24,2,32,1,40,9,82,7,109,101,115,115,97,103,101,34,40,10,12,84,101,120,116,82,101,115,112,111,110,115,101,18,24,10,7,115,117,99,99,101,115,115,24,1,32,1,40,8,82,7,115,117,99,99,101,115,115,50,63,10,9,77,101,115,115,101,110,103,101,114,18,50,10,7,77,101,115,115,97,103,101,18,18,46,112,104,111,110,101,46,84,101,120,116,82,101,113,117,101,115,116,26,19,46,112,104,111,110,101,46,84,101,120,116,82,101,115,112,111,110,115,101,98,6,112,114,111,116,111,51]);
+const protoBytes = Buffer.from([
+  10,
+  11,
+  112,
+  104,
+  111,
+  110,
+  101,
+  46,
+  112,
+  114,
+  111,
+  116,
+  111,
+  18,
+  5,
+  112,
+  104,
+  111,
+  110,
+  101,
+  34,
+  55,
+  10,
+  11,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  113,
+  117,
+  101,
+  115,
+  116,
+  18,
+  14,
+  10,
+  2,
+  105,
+  100,
+  24,
+  1,
+  32,
+  1,
+  40,
+  9,
+  82,
+  2,
+  105,
+  100,
+  18,
+  24,
+  10,
+  7,
+  109,
+  101,
+  115,
+  115,
+  97,
+  103,
+  101,
+  24,
+  2,
+  32,
+  1,
+  40,
+  9,
+  82,
+  7,
+  109,
+  101,
+  115,
+  115,
+  97,
+  103,
+  101,
+  34,
+  40,
+  10,
+  12,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  115,
+  112,
+  111,
+  110,
+  115,
+  101,
+  18,
+  24,
+  10,
+  7,
+  115,
+  117,
+  99,
+  99,
+  101,
+  115,
+  115,
+  24,
+  1,
+  32,
+  1,
+  40,
+  8,
+  82,
+  7,
+  115,
+  117,
+  99,
+  99,
+  101,
+  115,
+  115,
+  50,
+  63,
+  10,
+  9,
+  77,
+  101,
+  115,
+  115,
+  101,
+  110,
+  103,
+  101,
+  114,
+  18,
+  50,
+  10,
+  7,
+  77,
+  101,
+  115,
+  115,
+  97,
+  103,
+  101,
+  18,
+  18,
+  46,
+  112,
+  104,
+  111,
+  110,
+  101,
+  46,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  113,
+  117,
+  101,
+  115,
+  116,
+  26,
+  19,
+  46,
+  112,
+  104,
+  111,
+  110,
+  101,
+  46,
+  84,
+  101,
+  120,
+  116,
+  82,
+  101,
+  115,
+  112,
+  111,
+  110,
+  115,
+  101,
+  98,
+  6,
+  112,
+  114,
+  111,
+  116,
+  111,
+  51,
+]);
 
 // eslint-disable-next-line no-undef
 describe('getDescriptorRoot', () => {