text: "use strict";
  // Copyright 2020 Google LLC
  //
  // 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
  //
  //     https://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  //
  // ** This file is automatically generated by gapic-generator-typescript. **
  // ** https://github.com/googleapis/gapic-generator-typescript **
  // ** All changes to this file may be overwritten. **
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.SessionsClient = void 0;
  const gax = require("google-gax");
  const path = require("path");
  const gapicConfig = require("./sessions_client_config.json");
  const version = require('../../../package.json').version;
  /**
   *  A service used for session interactions.
   *
   *  For more information, see the [API interactions
   *  guide](https://cloud.google.com/dialogflow/docs/api-overview).
   * @class
   * @memberof v2beta1
   */
  class SessionsClient {
      /**
       * Construct an instance of SessionsClient.
       *
       * @param {object} [options] - The configuration object. See the subsequent
       *   parameters for more details.
       * @param {object} [options.credentials] - Credentials object.
       * @param {string} [options.credentials.client_email]
       * @param {string} [options.credentials.private_key]
       * @param {string} [options.email] - Account email address. Required when
       *     using a .pem or .p12 keyFilename.
       * @param {string} [options.keyFilename] - Full path to the a .json, .pem, or
       *     .p12 key downloaded from the Google Developers Console. If you provide
       *     a path to a JSON file, the projectId option below is not necessary.
       *     NOTE: .pem and .p12 require you to specify options.email as well.
       * @param {number} [options.port] - The port on which to connect to
       *     the remote host.
       * @param {string} [options.projectId] - The project ID from the Google
       *     Developer's Console, e.g. 'grape-spaceship-123'. We will also check
       *     the environment variable GCLOUD_PROJECT for your project ID. If your
       *     app is running in an environment which supports
       *     {@link https://developers.google.com/identity/protocols/application-default-credentials Application Default Credentials},
       *     your project ID will be detected automatically.
       * @param {string} [options.apiEndpoint] - The domain name of the
       *     API remote host.
       */
      constructor(opts) {
          this._terminated = false;
          this.descriptors = {
              page: {},
              stream: {},
              longrunning: {},
              batching: {},
          };
          // Ensure that options include the service address and port.
          const staticMembers = this.constructor;
          const servicePath = opts && opts.servicePath
              ? opts.servicePath
              : opts && opts.apiEndpoint
                  ? opts.apiEndpoint
                  : staticMembers.servicePath;
          const port = opts && opts.port ? opts.port : staticMembers.port;
          if (!opts) {
              opts = { servicePath, port };
          }
          opts.servicePath = opts.servicePath || servicePath;
          opts.port = opts.port || port;
          // users can override the config from client side, like retry codes name.
          // The detailed structure of the clientConfig can be found here: https://github.com/googleapis/gax-nodejs/blob/master/src/gax.ts#L546
          // The way to override client config for Showcase API:
          //
          // const customConfig = {"interfaces": {"google.showcase.v1beta1.Echo": {"methods": {"Echo": {"retry_codes_name": "idempotent", "retry_params_name": "default"}}}}}
          // const showcaseClient = new showcaseClient({ projectId, customConfig });
          opts.clientConfig = opts.clientConfig || {};
          // If we're running in browser, it's OK to omit `fallback` since
          // google-gax has `browser` field in its `package.json`.
          // For Electron (which does not respect `browser` field),
          // pass `{fallback: true}` to the SessionsClient constructor.
          this._gaxModule = opts.fallback ? gax.fallback : gax;
          // Create a `gaxGrpc` object, with any grpc-specific options
          // sent to the client.
          opts.scopes = this.constructor.scopes;
          this._gaxGrpc = new this._gaxModule.GrpcClient(opts);
          // Save options to use in initialize() method.
          this._opts = opts;
          // Save the auth object to the client, for use by other methods.
          this.auth = this._gaxGrpc.auth;
          // Determine the client header string.
          const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`];
          if (typeof process !== 'undefined' && 'versions' in process) {
              clientHeader.push(`gl-node/${process.versions.node}`);
          }
          else {
              clientHeader.push(`gl-web/${this._gaxModule.version}`);
          }
          if (!opts.fallback) {
              clientHeader.push(`grpc/${this._gaxGrpc.grpcVersion}`);
          }
          if (opts.libName && opts.libVersion) {
              clientHeader.push(`${opts.libName}/${opts.libVersion}`);
          }
          // Load the applicable protos.
          // For Node.js, pass the path to JSON proto file.
          // For browsers, pass the JSON content.
          const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json');
          this._protos = this._gaxGrpc.loadProto(opts.fallback
              ? // eslint-disable-next-line @typescript-eslint/no-var-requires
                  require('../../protos/protos.json')
              : nodejsProtoPath);
          // This API contains "path templates"; forward-slash-separated
          // identifiers to uniquely identify resources within the API.
          // Create useful helper objects for these.
          this.pathTemplates = {
              documentPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/knowledgeBases/{knowledge_base}/documents/{document}'),
              knowledgeBasePathTemplate: new this._gaxModule.PathTemplate('projects/{project}/knowledgeBases/{knowledge_base}'),
              projectAgentPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent'),
              projectAgentEntityTypePathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/entityTypes/{entity_type}'),
              projectAgentEnvironmentPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/environments/{environment}'),
              projectAgentEnvironmentUserSessionPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}'),
              projectAgentEnvironmentUserSessionContextPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}/contexts/{context}'),
              projectAgentEnvironmentUserSessionEntityTypePathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}/entityTypes/{entity_type}'),
              projectAgentIntentPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/intents/{intent}'),
              projectAgentSessionPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/sessions/{session}'),
              projectAgentSessionContextPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/sessions/{session}/contexts/{context}'),
              projectAgentSessionEntityTypePathTemplate: new this._gaxModule.PathTemplate('projects/{project}/agent/sessions/{session}/entityTypes/{entity_type}'),
              projectLocationAgentPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/locations/{location}/agent'),
              projectLocationAgentEntityTypePathTemplate: new this._gaxModule.PathTemplate('projects/{project}/locations/{location}/agent/entityTypes/{entity_type}'),
              projectLocationAgentEnvironmentPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/locations/{location}/agent/environments/{environment}'),
              projectLocationAgentIntentPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/locations/{location}/agent/intents/{intent}'),
              projectLocationAgentSessionPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/locations/{location}/agent/sessions/{session}'),
              projectLocationAgentSessionContextPathTemplate: new this._gaxModule.PathTemplate('projects/{project}/locations/{location}/agent/sessions/{session}/contexts/{context}'),
              projectLocationAgentSessionEntityTypePathTemplate: new this._gaxModule.PathTemplate('projects/{project}/locations/{location}/agent/sessions/{session}/entityTypes/{entity_type}'),
          };
          // Some of the methods on this service provide streaming responses.
          // Provide descriptors for these.
          this.descriptors.stream = {
              streamingDetectIntent: new this._gaxModule.StreamDescriptor(gax.StreamType.BIDI_STREAMING),
          };
          // Put together the default options sent with requests.
          this._defaults = this._gaxGrpc.constructSettings('google.cloud.dialogflow.v2beta1.Sessions', gapicConfig, opts.clientConfig || {}, { 'x-goog-api-client': clientHeader.join(' ') });
          // Set up a dictionary of "inner API calls"; the core implementation
          // of calling the API is handled in `google-gax`, with this code
          // merely providing the destination and request information.
          this.innerApiCalls = {};
      }
      /**
       * Initialize the client.
       * Performs asynchronous operations (such as authentication) and prepares the client.
       * This function will be called automatically when any class method is called for the
       * first time, but if you need to initialize it before calling an actual method,
       * feel free to call initialize() directly.
       *
       * You can await on this method if you want to make sure the client is initialized.
       *
       * @returns {Promise} A promise that resolves to an authenticated service stub.
       */
      initialize() {
          // If the client stub promise is already initialized, return immediately.
          if (this.sessionsStub) {
              return this.sessionsStub;
          }
          // Put together the "service stub" for
          // google.cloud.dialogflow.v2beta1.Sessions.
          this.sessionsStub = this._gaxGrpc.createStub(this._opts.fallback
              ? this._protos.lookupService('google.cloud.dialogflow.v2beta1.Sessions')
              : // eslint-disable-next-line @typescript-eslint/no-explicit-any
                  this._protos.google.cloud.dialogflow.v2beta1.Sessions, this._opts);
          // Iterate over each of the methods that the service provides
          // and create an API call method for each.
          const sessionsStubMethods = ['detectIntent', 'streamingDetectIntent'];
          for (const methodName of sessionsStubMethods) {
              const callPromise = this.sessionsStub.then(stub => (...args) => {
                  if (this._terminated) {
                      return Promise.reject('The client has already been closed.');
                  }
                  const func = stub[methodName];
                  return func.apply(stub, args);
              }, (err) => () => {
                  throw err;
              });
              const descriptor = this.descriptors.stream[methodName] || undefined;
              const apiCall = this._gaxModule.createApiCall(callPromise, this._defaults[methodName], descriptor);
              this.innerApiCalls[methodName] = apiCall;
          }
          return this.sessionsStub;
      }
      /**
       * The DNS address for this API service.
       */
      static get servicePath() {
          return 'dialogflow.googleapis.com';
      }
      /**
       * The DNS address for this API service - same as servicePath(),
       * exists for compatibility reasons.
       */
      static get apiEndpoint() {
          return 'dialogflow.googleapis.com';
      }
      /**
       * The port for this API service.
       */
      static get port() {
          return 443;
      }
      /**
       * The scopes needed to make gRPC calls for every method defined
       * in this service.
       */
      static get scopes() {
          return [
              'https://www.googleapis.com/auth/cloud-platform',
              'https://www.googleapis.com/auth/dialogflow',
          ];
      }
      /**
       * Return the project ID used by this class.
       * @param {function(Error, string)} callback - the callback to
       *   be called with the current project Id.
       */
      getProjectId(callback) {
          if (callback) {
              this.auth.getProjectId(callback);
              return;
          }
          return this.auth.getProjectId();
      }
      /**
       * Processes a natural language query and returns structured, actionable data
       * as a result. This method is not idempotent, because it may cause contexts
       * and session entity types to be updated, which in turn might affect
       * results of future queries.
       *
       * @param {Object} request
       *   The request object that will be sent.
       * @param {string} request.session
       *   Required. The name of the session this query is sent to. Supported formats:
       *   - `projects/<Project ID>/agent/sessions/<Session ID>,
       *   - `projects/<Project ID>/locations/<Location ID>/agent/sessions/<Session
       *     ID>`,
       *   - `projects/<Project ID>/agent/environments/<Environment ID>/users/<User
       *     ID>/sessions/<Session ID>`,
       *   - `projects/<Project ID>/locations/<Location
       *     ID>/agent/environments/<Environment ID>/users/<User ID>/sessions/<Session
       *     ID>`,
       *
       *   If `Location ID` is not specified we assume default 'us' location. If
       *   `Environment ID` is not specified, we assume default 'draft' environment.
       *   If `User ID` is not specified, we are using "-". It's up to the API caller
       *   to choose an appropriate `Session ID` and `User Id`. They can be a random
       *   number or some type of user and session identifiers (preferably hashed).
       *   The length of the `Session ID` and `User ID` must not exceed 36 characters.
       *   For more information, see the [API interactions
       *   guide](https://cloud.google.com/dialogflow/docs/api-overview).
       * @param {google.cloud.dialogflow.v2beta1.QueryParameters} request.queryParams
       *   The parameters of this query.
       * @param {google.cloud.dialogflow.v2beta1.QueryInput} request.queryInput
       *   Required. The input specification. It can be set to:
       *
       *   1.  an audio config
       *       which instructs the speech recognizer how to process the speech audio,
       *
       *   2.  a conversational query in the form of text, or
       *
       *   3.  an event that specifies which intent to trigger.
       * @param {google.cloud.dialogflow.v2beta1.OutputAudioConfig} request.outputAudioConfig
       *   Instructs the speech synthesizer how to generate the output
       *   audio. If this field is not set and agent-level speech synthesizer is not
       *   configured, no output audio is generated.
       * @param {google.protobuf.FieldMask} request.outputAudioConfigMask
       *   Mask for {@link google.cloud.dialogflow.v2beta1.DetectIntentRequest.output_audio_config|output_audio_config} indicating which settings in this
       *   request-level config should override speech synthesizer settings defined at
       *   agent-level.
       *
       *   If unspecified or empty, {@link google.cloud.dialogflow.v2beta1.DetectIntentRequest.output_audio_config|output_audio_config} replaces the agent-level
       *   config in its entirety.
       * @param {Buffer} request.inputAudio
       *   The natural language speech audio to be processed. This field
       *   should be populated iff `query_input` is set to an input audio config.
       *   A single request can contain up to 1 minute of speech audio data.
       * @param {object} [options]
       *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
       * @returns {Promise} - The promise which resolves to an array.
       *   The first element of the array is an object representing [DetectIntentResponse]{@link google.cloud.dialogflow.v2beta1.DetectIntentResponse}.
       *   The promise has a method named "cancel" which cancels the ongoing API call.
       */
      detectIntent(request, optionsOrCallback, callback) {
          request = request || {};
          let options;
          if (typeof optionsOrCallback === 'function' && callback === undefined) {
              callback = optionsOrCallback;
              options = {};
          }
          else {
              options = optionsOrCallback;
          }
          options = options || {};
          options.otherArgs = options.otherArgs || {};
          options.otherArgs.headers = options.otherArgs.headers || {};
          options.otherArgs.headers['x-goog-request-params'] = gax.routingHeader.fromParams({
              session: request.session || '',
          });
          this.initialize();
          return this.innerApiCalls.detectIntent(request, options, callback);
      }
      /**
       * Processes a natural language query in audio format in a streaming fashion
       * and returns structured, actionable data as a result. This method is only
       * available via the gRPC API (not REST).
       *
       * @param {object} [options]
       *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
       * @returns {Stream}
       *   An object stream which is both readable and writable. It accepts objects
       *   representing [StreamingDetectIntentRequest]{@link google.cloud.dialogflow.v2beta1.StreamingDetectIntentRequest} for write() method, and
       *   will emit objects representing [StreamingDetectIntentResponse]{@link google.cloud.dialogflow.v2beta1.StreamingDetectIntentResponse} on 'data' event asynchronously.
       */
      streamingDetectIntent(options) {
          this.initialize();
          return this.innerApiCalls.streamingDetectIntent(options);
      }
      // --------------------
      // -- Path templates --
      // --------------------
      /**
       * Return a fully-qualified document resource name string.
       *
       * @param {string} project
       * @param {string} knowledge_base
       * @param {string} document
       * @returns {string} Resource name string.
       */
      documentPath(project, knowledgeBase, document) {
          return this.pathTemplates.documentPathTemplate.render({
              project: project,
              knowledge_base: knowledgeBase,
              document: document,
          });
      }
      /**
       * Parse the project from Document resource.
       *
       * @param {string} documentName
       *   A fully-qualified path representing Document resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromDocumentName(documentName) {
          return this.pathTemplates.documentPathTemplate.match(documentName).project;
      }
      /**
       * Parse the knowledge_base from Document resource.
       *
       * @param {string} documentName
       *   A fully-qualified path representing Document resource.
       * @returns {string} A string representing the knowledge_base.
       */
      matchKnowledgeBaseFromDocumentName(documentName) {
          return this.pathTemplates.documentPathTemplate.match(documentName)
              .knowledge_base;
      }
      /**
       * Parse the document from Document resource.
       *
       * @param {string} documentName
       *   A fully-qualified path representing Document resource.
       * @returns {string} A string representing the document.
       */
      matchDocumentFromDocumentName(documentName) {
          return this.pathTemplates.documentPathTemplate.match(documentName).document;
      }
      /**
       * Return a fully-qualified knowledgeBase resource name string.
       *
       * @param {string} project
       * @param {string} knowledge_base
       * @returns {string} Resource name string.
       */
      knowledgeBasePath(project, knowledgeBase) {
          return this.pathTemplates.knowledgeBasePathTemplate.render({
              project: project,
              knowledge_base: knowledgeBase,
          });
      }
      /**
       * Parse the project from KnowledgeBase resource.
       *
       * @param {string} knowledgeBaseName
       *   A fully-qualified path representing KnowledgeBase resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromKnowledgeBaseName(knowledgeBaseName) {
          return this.pathTemplates.knowledgeBasePathTemplate.match(knowledgeBaseName)
              .project;
      }
      /**
       * Parse the knowledge_base from KnowledgeBase resource.
       *
       * @param {string} knowledgeBaseName
       *   A fully-qualified path representing KnowledgeBase resource.
       * @returns {string} A string representing the knowledge_base.
       */
      matchKnowledgeBaseFromKnowledgeBaseName(knowledgeBaseName) {
          return this.pathTemplates.knowledgeBasePathTemplate.match(knowledgeBaseName)
              .knowledge_base;
      }
      /**
       * Return a fully-qualified projectAgent resource name string.
       *
       * @param {string} project
       * @returns {string} Resource name string.
       */
      projectAgentPath(project) {
          return this.pathTemplates.projectAgentPathTemplate.render({
              project: project,
          });
      }
      /**
       * Parse the project from ProjectAgent resource.
       *
       * @param {string} projectAgentName
       *   A fully-qualified path representing project_agent resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentName(projectAgentName) {
          return this.pathTemplates.projectAgentPathTemplate.match(projectAgentName)
              .project;
      }
      /**
       * Return a fully-qualified projectAgentEntityType resource name string.
       *
       * @param {string} project
       * @param {string} entity_type
       * @returns {string} Resource name string.
       */
      projectAgentEntityTypePath(project, entityType) {
          return this.pathTemplates.projectAgentEntityTypePathTemplate.render({
              project: project,
              entity_type: entityType,
          });
      }
      /**
       * Parse the project from ProjectAgentEntityType resource.
       *
       * @param {string} projectAgentEntityTypeName
       *   A fully-qualified path representing project_agent_entity_type resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentEntityTypeName(projectAgentEntityTypeName) {
          return this.pathTemplates.projectAgentEntityTypePathTemplate.match(projectAgentEntityTypeName).project;
      }
      /**
       * Parse the entity_type from ProjectAgentEntityType resource.
       *
       * @param {string} projectAgentEntityTypeName
       *   A fully-qualified path representing project_agent_entity_type resource.
       * @returns {string} A string representing the entity_type.
       */
      matchEntityTypeFromProjectAgentEntityTypeName(projectAgentEntityTypeName) {
          return this.pathTemplates.projectAgentEntityTypePathTemplate.match(projectAgentEntityTypeName).entity_type;
      }
      /**
       * Return a fully-qualified projectAgentEnvironment resource name string.
       *
       * @param {string} project
       * @param {string} environment
       * @returns {string} Resource name string.
       */
      projectAgentEnvironmentPath(project, environment) {
          return this.pathTemplates.projectAgentEnvironmentPathTemplate.render({
              project: project,
              environment: environment,
          });
      }
      /**
       * Parse the project from ProjectAgentEnvironment resource.
       *
       * @param {string} projectAgentEnvironmentName
       *   A fully-qualified path representing project_agent_environment resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentEnvironmentName(projectAgentEnvironmentName) {
          return this.pathTemplates.projectAgentEnvironmentPathTemplate.match(projectAgentEnvironmentName).project;
      }
      /**
       * Parse the environment from ProjectAgentEnvironment resource.
       *
       * @param {string} projectAgentEnvironmentName
       *   A fully-qualified path representing project_agent_environment resource.
       * @returns {string} A string representing the environment.
       */
      matchEnvironmentFromProjectAgentEnvironmentName(projectAgentEnvironmentName) {
          return this.pathTemplates.projectAgentEnvironmentPathTemplate.match(projectAgentEnvironmentName).environment;
      }
      /**
       * Return a fully-qualified projectAgentEnvironmentUserSession resource name string.
       *
       * @param {string} project
       * @param {string} environment
       * @param {string} user
       * @param {string} session
       * @returns {string} Resource name string.
       */
      projectAgentEnvironmentUserSessionPath(project, environment, user, session) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionPathTemplate.render({
              project: project,
              environment: environment,
              user: user,
              session: session,
          });
      }
      /**
       * Parse the project from ProjectAgentEnvironmentUserSession resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionName
       *   A fully-qualified path representing project_agent_environment_user_session resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentEnvironmentUserSessionName(projectAgentEnvironmentUserSessionName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionPathTemplate.match(projectAgentEnvironmentUserSessionName).project;
      }
      /**
       * Parse the environment from ProjectAgentEnvironmentUserSession resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionName
       *   A fully-qualified path representing project_agent_environment_user_session resource.
       * @returns {string} A string representing the environment.
       */
      matchEnvironmentFromProjectAgentEnvironmentUserSessionName(projectAgentEnvironmentUserSessionName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionPathTemplate.match(projectAgentEnvironmentUserSessionName).environment;
      }
      /**
       * Parse the user from ProjectAgentEnvironmentUserSession resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionName
       *   A fully-qualified path representing project_agent_environment_user_session resource.
       * @returns {string} A string representing the user.
       */
      matchUserFromProjectAgentEnvironmentUserSessionName(projectAgentEnvironmentUserSessionName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionPathTemplate.match(projectAgentEnvironmentUserSessionName).user;
      }
      /**
       * Parse the session from ProjectAgentEnvironmentUserSession resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionName
       *   A fully-qualified path representing project_agent_environment_user_session resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectAgentEnvironmentUserSessionName(projectAgentEnvironmentUserSessionName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionPathTemplate.match(projectAgentEnvironmentUserSessionName).session;
      }
      /**
       * Return a fully-qualified projectAgentEnvironmentUserSessionContext resource name string.
       *
       * @param {string} project
       * @param {string} environment
       * @param {string} user
       * @param {string} session
       * @param {string} context
       * @returns {string} Resource name string.
       */
      projectAgentEnvironmentUserSessionContextPath(project, environment, user, session, context) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionContextPathTemplate.render({
              project: project,
              environment: environment,
              user: user,
              session: session,
              context: context,
          });
      }
      /**
       * Parse the project from ProjectAgentEnvironmentUserSessionContext resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionContextName
       *   A fully-qualified path representing project_agent_environment_user_session_context resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentEnvironmentUserSessionContextName(projectAgentEnvironmentUserSessionContextName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionContextPathTemplate.match(projectAgentEnvironmentUserSessionContextName).project;
      }
      /**
       * Parse the environment from ProjectAgentEnvironmentUserSessionContext resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionContextName
       *   A fully-qualified path representing project_agent_environment_user_session_context resource.
       * @returns {string} A string representing the environment.
       */
      matchEnvironmentFromProjectAgentEnvironmentUserSessionContextName(projectAgentEnvironmentUserSessionContextName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionContextPathTemplate.match(projectAgentEnvironmentUserSessionContextName).environment;
      }
      /**
       * Parse the user from ProjectAgentEnvironmentUserSessionContext resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionContextName
       *   A fully-qualified path representing project_agent_environment_user_session_context resource.
       * @returns {string} A string representing the user.
       */
      matchUserFromProjectAgentEnvironmentUserSessionContextName(projectAgentEnvironmentUserSessionContextName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionContextPathTemplate.match(projectAgentEnvironmentUserSessionContextName).user;
      }
      /**
       * Parse the session from ProjectAgentEnvironmentUserSessionContext resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionContextName
       *   A fully-qualified path representing project_agent_environment_user_session_context resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectAgentEnvironmentUserSessionContextName(projectAgentEnvironmentUserSessionContextName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionContextPathTemplate.match(projectAgentEnvironmentUserSessionContextName).session;
      }
      /**
       * Parse the context from ProjectAgentEnvironmentUserSessionContext resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionContextName
       *   A fully-qualified path representing project_agent_environment_user_session_context resource.
       * @returns {string} A string representing the context.
       */
      matchContextFromProjectAgentEnvironmentUserSessionContextName(projectAgentEnvironmentUserSessionContextName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionContextPathTemplate.match(projectAgentEnvironmentUserSessionContextName).context;
      }
      /**
       * Return a fully-qualified projectAgentEnvironmentUserSessionEntityType resource name string.
       *
       * @param {string} project
       * @param {string} environment
       * @param {string} user
       * @param {string} session
       * @param {string} entity_type
       * @returns {string} Resource name string.
       */
      projectAgentEnvironmentUserSessionEntityTypePath(project, environment, user, session, entityType) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionEntityTypePathTemplate.render({
              project: project,
              environment: environment,
              user: user,
              session: session,
              entity_type: entityType,
          });
      }
      /**
       * Parse the project from ProjectAgentEnvironmentUserSessionEntityType resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionEntityTypeName
       *   A fully-qualified path representing project_agent_environment_user_session_entity_type resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentEnvironmentUserSessionEntityTypeName(projectAgentEnvironmentUserSessionEntityTypeName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionEntityTypePathTemplate.match(projectAgentEnvironmentUserSessionEntityTypeName).project;
      }
      /**
       * Parse the environment from ProjectAgentEnvironmentUserSessionEntityType resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionEntityTypeName
       *   A fully-qualified path representing project_agent_environment_user_session_entity_type resource.
       * @returns {string} A string representing the environment.
       */
      matchEnvironmentFromProjectAgentEnvironmentUserSessionEntityTypeName(projectAgentEnvironmentUserSessionEntityTypeName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionEntityTypePathTemplate.match(projectAgentEnvironmentUserSessionEntityTypeName).environment;
      }
      /**
       * Parse the user from ProjectAgentEnvironmentUserSessionEntityType resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionEntityTypeName
       *   A fully-qualified path representing project_agent_environment_user_session_entity_type resource.
       * @returns {string} A string representing the user.
       */
      matchUserFromProjectAgentEnvironmentUserSessionEntityTypeName(projectAgentEnvironmentUserSessionEntityTypeName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionEntityTypePathTemplate.match(projectAgentEnvironmentUserSessionEntityTypeName).user;
      }
      /**
       * Parse the session from ProjectAgentEnvironmentUserSessionEntityType resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionEntityTypeName
       *   A fully-qualified path representing project_agent_environment_user_session_entity_type resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectAgentEnvironmentUserSessionEntityTypeName(projectAgentEnvironmentUserSessionEntityTypeName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionEntityTypePathTemplate.match(projectAgentEnvironmentUserSessionEntityTypeName).session;
      }
      /**
       * Parse the entity_type from ProjectAgentEnvironmentUserSessionEntityType resource.
       *
       * @param {string} projectAgentEnvironmentUserSessionEntityTypeName
       *   A fully-qualified path representing project_agent_environment_user_session_entity_type resource.
       * @returns {string} A string representing the entity_type.
       */
      matchEntityTypeFromProjectAgentEnvironmentUserSessionEntityTypeName(projectAgentEnvironmentUserSessionEntityTypeName) {
          return this.pathTemplates.projectAgentEnvironmentUserSessionEntityTypePathTemplate.match(projectAgentEnvironmentUserSessionEntityTypeName).entity_type;
      }
      /**
       * Return a fully-qualified projectAgentIntent resource name string.
       *
       * @param {string} project
       * @param {string} intent
       * @returns {string} Resource name string.
       */
      projectAgentIntentPath(project, intent) {
          return this.pathTemplates.projectAgentIntentPathTemplate.render({
              project: project,
              intent: intent,
          });
      }
      /**
       * Parse the project from ProjectAgentIntent resource.
       *
       * @param {string} projectAgentIntentName
       *   A fully-qualified path representing project_agent_intent resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentIntentName(projectAgentIntentName) {
          return this.pathTemplates.projectAgentIntentPathTemplate.match(projectAgentIntentName).project;
      }
      /**
       * Parse the intent from ProjectAgentIntent resource.
       *
       * @param {string} projectAgentIntentName
       *   A fully-qualified path representing project_agent_intent resource.
       * @returns {string} A string representing the intent.
       */
      matchIntentFromProjectAgentIntentName(projectAgentIntentName) {
          return this.pathTemplates.projectAgentIntentPathTemplate.match(projectAgentIntentName).intent;
      }
      /**
       * Return a fully-qualified projectAgentSession resource name string.
       *
       * @param {string} project
       * @param {string} session
       * @returns {string} Resource name string.
       */
      projectAgentSessionPath(project, session) {
          return this.pathTemplates.projectAgentSessionPathTemplate.render({
              project: project,
              session: session,
          });
      }
      /**
       * Parse the project from ProjectAgentSession resource.
       *
       * @param {string} projectAgentSessionName
       *   A fully-qualified path representing project_agent_session resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentSessionName(projectAgentSessionName) {
          return this.pathTemplates.projectAgentSessionPathTemplate.match(projectAgentSessionName).project;
      }
      /**
       * Parse the session from ProjectAgentSession resource.
       *
       * @param {string} projectAgentSessionName
       *   A fully-qualified path representing project_agent_session resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectAgentSessionName(projectAgentSessionName) {
          return this.pathTemplates.projectAgentSessionPathTemplate.match(projectAgentSessionName).session;
      }
      /**
       * Return a fully-qualified projectAgentSessionContext resource name string.
       *
       * @param {string} project
       * @param {string} session
       * @param {string} context
       * @returns {string} Resource name string.
       */
      projectAgentSessionContextPath(project, session, context) {
          return this.pathTemplates.projectAgentSessionContextPathTemplate.render({
              project: project,
              session: session,
              context: context,
          });
      }
      /**
       * Parse the project from ProjectAgentSessionContext resource.
       *
       * @param {string} projectAgentSessionContextName
       *   A fully-qualified path representing project_agent_session_context resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentSessionContextName(projectAgentSessionContextName) {
          return this.pathTemplates.projectAgentSessionContextPathTemplate.match(projectAgentSessionContextName).project;
      }
      /**
       * Parse the session from ProjectAgentSessionContext resource.
       *
       * @param {string} projectAgentSessionContextName
       *   A fully-qualified path representing project_agent_session_context resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectAgentSessionContextName(projectAgentSessionContextName) {
          return this.pathTemplates.projectAgentSessionContextPathTemplate.match(projectAgentSessionContextName).session;
      }
      /**
       * Parse the context from ProjectAgentSessionContext resource.
       *
       * @param {string} projectAgentSessionContextName
       *   A fully-qualified path representing project_agent_session_context resource.
       * @returns {string} A string representing the context.
       */
      matchContextFromProjectAgentSessionContextName(projectAgentSessionContextName) {
          return this.pathTemplates.projectAgentSessionContextPathTemplate.match(projectAgentSessionContextName).context;
      }
      /**
       * Return a fully-qualified projectAgentSessionEntityType resource name string.
       *
       * @param {string} project
       * @param {string} session
       * @param {string} entity_type
       * @returns {string} Resource name string.
       */
      projectAgentSessionEntityTypePath(project, session, entityType) {
          return this.pathTemplates.projectAgentSessionEntityTypePathTemplate.render({
              project: project,
              session: session,
              entity_type: entityType,
          });
      }
      /**
       * Parse the project from ProjectAgentSessionEntityType resource.
       *
       * @param {string} projectAgentSessionEntityTypeName
       *   A fully-qualified path representing project_agent_session_entity_type resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectAgentSessionEntityTypeName(projectAgentSessionEntityTypeName) {
          return this.pathTemplates.projectAgentSessionEntityTypePathTemplate.match(projectAgentSessionEntityTypeName).project;
      }
      /**
       * Parse the session from ProjectAgentSessionEntityType resource.
       *
       * @param {string} projectAgentSessionEntityTypeName
       *   A fully-qualified path representing project_agent_session_entity_type resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectAgentSessionEntityTypeName(projectAgentSessionEntityTypeName) {
          return this.pathTemplates.projectAgentSessionEntityTypePathTemplate.match(projectAgentSessionEntityTypeName).session;
      }
      /**
       * Parse the entity_type from ProjectAgentSessionEntityType resource.
       *
       * @param {string} projectAgentSessionEntityTypeName
       *   A fully-qualified path representing project_agent_session_entity_type resource.
       * @returns {string} A string representing the entity_type.
       */
      matchEntityTypeFromProjectAgentSessionEntityTypeName(projectAgentSessionEntityTypeName) {
          return this.pathTemplates.projectAgentSessionEntityTypePathTemplate.match(projectAgentSessionEntityTypeName).entity_type;
      }
      /**
       * Return a fully-qualified projectLocationAgent resource name string.
       *
       * @param {string} project
       * @param {string} location
       * @returns {string} Resource name string.
       */
      projectLocationAgentPath(project, location) {
          return this.pathTemplates.projectLocationAgentPathTemplate.render({
              project: project,
              location: location,
          });
      }
      /**
       * Parse the project from ProjectLocationAgent resource.
       *
       * @param {string} projectLocationAgentName
       *   A fully-qualified path representing project_location_agent resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectLocationAgentName(projectLocationAgentName) {
          return this.pathTemplates.projectLocationAgentPathTemplate.match(projectLocationAgentName).project;
      }
      /**
       * Parse the location from ProjectLocationAgent resource.
       *
       * @param {string} projectLocationAgentName
       *   A fully-qualified path representing project_location_agent resource.
       * @returns {string} A string representing the location.
       */
      matchLocationFromProjectLocationAgentName(projectLocationAgentName) {
          return this.pathTemplates.projectLocationAgentPathTemplate.match(projectLocationAgentName).location;
      }
      /**
       * Return a fully-qualified projectLocationAgentEntityType resource name string.
       *
       * @param {string} project
       * @param {string} location
       * @param {string} entity_type
       * @returns {string} Resource name string.
       */
      projectLocationAgentEntityTypePath(project, location, entityType) {
          return this.pathTemplates.projectLocationAgentEntityTypePathTemplate.render({
              project: project,
              location: location,
              entity_type: entityType,
          });
      }
      /**
       * Parse the project from ProjectLocationAgentEntityType resource.
       *
       * @param {string} projectLocationAgentEntityTypeName
       *   A fully-qualified path representing project_location_agent_entity_type resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectLocationAgentEntityTypeName(projectLocationAgentEntityTypeName) {
          return this.pathTemplates.projectLocationAgentEntityTypePathTemplate.match(projectLocationAgentEntityTypeName).project;
      }
      /**
       * Parse the location from ProjectLocationAgentEntityType resource.
       *
       * @param {string} projectLocationAgentEntityTypeName
       *   A fully-qualified path representing project_location_agent_entity_type resource.
       * @returns {string} A string representing the location.
       */
      matchLocationFromProjectLocationAgentEntityTypeName(projectLocationAgentEntityTypeName) {
          return this.pathTemplates.projectLocationAgentEntityTypePathTemplate.match(projectLocationAgentEntityTypeName).location;
      }
      /**
       * Parse the entity_type from ProjectLocationAgentEntityType resource.
       *
       * @param {string} projectLocationAgentEntityTypeName
       *   A fully-qualified path representing project_location_agent_entity_type resource.
       * @returns {string} A string representing the entity_type.
       */
      matchEntityTypeFromProjectLocationAgentEntityTypeName(projectLocationAgentEntityTypeName) {
          return this.pathTemplates.projectLocationAgentEntityTypePathTemplate.match(projectLocationAgentEntityTypeName).entity_type;
      }
      /**
       * Return a fully-qualified projectLocationAgentEnvironment resource name string.
       *
       * @param {string} project
       * @param {string} location
       * @param {string} environment
       * @returns {string} Resource name string.
       */
      projectLocationAgentEnvironmentPath(project, location, environment) {
          return this.pathTemplates.projectLocationAgentEnvironmentPathTemplate.render({
              project: project,
              location: location,
              environment: environment,
          });
      }
      /**
       * Parse the project from ProjectLocationAgentEnvironment resource.
       *
       * @param {string} projectLocationAgentEnvironmentName
       *   A fully-qualified path representing project_location_agent_environment resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectLocationAgentEnvironmentName(projectLocationAgentEnvironmentName) {
          return this.pathTemplates.projectLocationAgentEnvironmentPathTemplate.match(projectLocationAgentEnvironmentName).project;
      }
      /**
       * Parse the location from ProjectLocationAgentEnvironment resource.
       *
       * @param {string} projectLocationAgentEnvironmentName
       *   A fully-qualified path representing project_location_agent_environment resource.
       * @returns {string} A string representing the location.
       */
      matchLocationFromProjectLocationAgentEnvironmentName(projectLocationAgentEnvironmentName) {
          return this.pathTemplates.projectLocationAgentEnvironmentPathTemplate.match(projectLocationAgentEnvironmentName).location;
      }
      /**
       * Parse the environment from ProjectLocationAgentEnvironment resource.
       *
       * @param {string} projectLocationAgentEnvironmentName
       *   A fully-qualified path representing project_location_agent_environment resource.
       * @returns {string} A string representing the environment.
       */
      matchEnvironmentFromProjectLocationAgentEnvironmentName(projectLocationAgentEnvironmentName) {
          return this.pathTemplates.projectLocationAgentEnvironmentPathTemplate.match(projectLocationAgentEnvironmentName).environment;
      }
      /**
       * Return a fully-qualified projectLocationAgentIntent resource name string.
       *
       * @param {string} project
       * @param {string} location
       * @param {string} intent
       * @returns {string} Resource name string.
       */
      projectLocationAgentIntentPath(project, location, intent) {
          return this.pathTemplates.projectLocationAgentIntentPathTemplate.render({
              project: project,
              location: location,
              intent: intent,
          });
      }
      /**
       * Parse the project from ProjectLocationAgentIntent resource.
       *
       * @param {string} projectLocationAgentIntentName
       *   A fully-qualified path representing project_location_agent_intent resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectLocationAgentIntentName(projectLocationAgentIntentName) {
          return this.pathTemplates.projectLocationAgentIntentPathTemplate.match(projectLocationAgentIntentName).project;
      }
      /**
       * Parse the location from ProjectLocationAgentIntent resource.
       *
       * @param {string} projectLocationAgentIntentName
       *   A fully-qualified path representing project_location_agent_intent resource.
       * @returns {string} A string representing the location.
       */
      matchLocationFromProjectLocationAgentIntentName(projectLocationAgentIntentName) {
          return this.pathTemplates.projectLocationAgentIntentPathTemplate.match(projectLocationAgentIntentName).location;
      }
      /**
       * Parse the intent from ProjectLocationAgentIntent resource.
       *
       * @param {string} projectLocationAgentIntentName
       *   A fully-qualified path representing project_location_agent_intent resource.
       * @returns {string} A string representing the intent.
       */
      matchIntentFromProjectLocationAgentIntentName(projectLocationAgentIntentName) {
          return this.pathTemplates.projectLocationAgentIntentPathTemplate.match(projectLocationAgentIntentName).intent;
      }
      /**
       * Return a fully-qualified projectLocationAgentSession resource name string.
       *
       * @param {string} project
       * @param {string} location
       * @param {string} session
       * @returns {string} Resource name string.
       */
      projectLocationAgentSessionPath(project, location, session) {
          return this.pathTemplates.projectLocationAgentSessionPathTemplate.render({
              project: project,
              location: location,
              session: session,
          });
      }
      /**
       * Parse the project from ProjectLocationAgentSession resource.
       *
       * @param {string} projectLocationAgentSessionName
       *   A fully-qualified path representing project_location_agent_session resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectLocationAgentSessionName(projectLocationAgentSessionName) {
          return this.pathTemplates.projectLocationAgentSessionPathTemplate.match(projectLocationAgentSessionName).project;
      }
      /**
       * Parse the location from ProjectLocationAgentSession resource.
       *
       * @param {string} projectLocationAgentSessionName
       *   A fully-qualified path representing project_location_agent_session resource.
       * @returns {string} A string representing the location.
       */
      matchLocationFromProjectLocationAgentSessionName(projectLocationAgentSessionName) {
          return this.pathTemplates.projectLocationAgentSessionPathTemplate.match(projectLocationAgentSessionName).location;
      }
      /**
       * Parse the session from ProjectLocationAgentSession resource.
       *
       * @param {string} projectLocationAgentSessionName
       *   A fully-qualified path representing project_location_agent_session resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectLocationAgentSessionName(projectLocationAgentSessionName) {
          return this.pathTemplates.projectLocationAgentSessionPathTemplate.match(projectLocationAgentSessionName).session;
      }
      /**
       * Return a fully-qualified projectLocationAgentSessionContext resource name string.
       *
       * @param {string} project
       * @param {string} location
       * @param {string} session
       * @param {string} context
       * @returns {string} Resource name string.
       */
      projectLocationAgentSessionContextPath(project, location, session, context) {
          return this.pathTemplates.projectLocationAgentSessionContextPathTemplate.render({
              project: project,
              location: location,
              session: session,
              context: context,
          });
      }
      /**
       * Parse the project from ProjectLocationAgentSessionContext resource.
       *
       * @param {string} projectLocationAgentSessionContextName
       *   A fully-qualified path representing project_location_agent_session_context resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectLocationAgentSessionContextName(projectLocationAgentSessionContextName) {
          return this.pathTemplates.projectLocationAgentSessionContextPathTemplate.match(projectLocationAgentSessionContextName).project;
      }
      /**
       * Parse the location from ProjectLocationAgentSessionContext resource.
       *
       * @param {string} projectLocationAgentSessionContextName
       *   A fully-qualified path representing project_location_agent_session_context resource.
       * @returns {string} A string representing the location.
       */
      matchLocationFromProjectLocationAgentSessionContextName(projectLocationAgentSessionContextName) {
          return this.pathTemplates.projectLocationAgentSessionContextPathTemplate.match(projectLocationAgentSessionContextName).location;
      }
      /**
       * Parse the session from ProjectLocationAgentSessionContext resource.
       *
       * @param {string} projectLocationAgentSessionContextName
       *   A fully-qualified path representing project_location_agent_session_context resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectLocationAgentSessionContextName(projectLocationAgentSessionContextName) {
          return this.pathTemplates.projectLocationAgentSessionContextPathTemplate.match(projectLocationAgentSessionContextName).session;
      }
      /**
       * Parse the context from ProjectLocationAgentSessionContext resource.
       *
       * @param {string} projectLocationAgentSessionContextName
       *   A fully-qualified path representing project_location_agent_session_context resource.
       * @returns {string} A string representing the context.
       */
      matchContextFromProjectLocationAgentSessionContextName(projectLocationAgentSessionContextName) {
          return this.pathTemplates.projectLocationAgentSessionContextPathTemplate.match(projectLocationAgentSessionContextName).context;
      }
      /**
       * Return a fully-qualified projectLocationAgentSessionEntityType resource name string.
       *
       * @param {string} project
       * @param {string} location
       * @param {string} session
       * @param {string} entity_type
       * @returns {string} Resource name string.
       */
      projectLocationAgentSessionEntityTypePath(project, location, session, entityType) {
          return this.pathTemplates.projectLocationAgentSessionEntityTypePathTemplate.render({
              project: project,
              location: location,
              session: session,
              entity_type: entityType,
          });
      }
      /**
       * Parse the project from ProjectLocationAgentSessionEntityType resource.
       *
       * @param {string} projectLocationAgentSessionEntityTypeName
       *   A fully-qualified path representing project_location_agent_session_entity_type resource.
       * @returns {string} A string representing the project.
       */
      matchProjectFromProjectLocationAgentSessionEntityTypeName(projectLocationAgentSessionEntityTypeName) {
          return this.pathTemplates.projectLocationAgentSessionEntityTypePathTemplate.match(projectLocationAgentSessionEntityTypeName).project;
      }
      /**
       * Parse the location from ProjectLocationAgentSessionEntityType resource.
       *
       * @param {string} projectLocationAgentSessionEntityTypeName
       *   A fully-qualified path representing project_location_agent_session_entity_type resource.
       * @returns {string} A string representing the location.
       */
      matchLocationFromProjectLocationAgentSessionEntityTypeName(projectLocationAgentSessionEntityTypeName) {
          return this.pathTemplates.projectLocationAgentSessionEntityTypePathTemplate.match(projectLocationAgentSessionEntityTypeName).location;
      }
      /**
       * Parse the session from ProjectLocationAgentSessionEntityType resource.
       *
       * @param {string} projectLocationAgentSessionEntityTypeName
       *   A fully-qualified path representing project_location_agent_session_entity_type resource.
       * @returns {string} A string representing the session.
       */
      matchSessionFromProjectLocationAgentSessionEntityTypeName(projectLocationAgentSessionEntityTypeName) {
          return this.pathTemplates.projectLocationAgentSessionEntityTypePathTemplate.match(projectLocationAgentSessionEntityTypeName).session;
      }
      /**
       * Parse the entity_type from ProjectLocationAgentSessionEntityType resource.
       *
       * @param {string} projectLocationAgentSessionEntityTypeName
       *   A fully-qualified path representing project_location_agent_session_entity_type resource.
       * @returns {string} A string representing the entity_type.
       */
      matchEntityTypeFromProjectLocationAgentSessionEntityTypeName(projectLocationAgentSessionEntityTypeName) {
          return this.pathTemplates.projectLocationAgentSessionEntityTypePathTemplate.match(projectLocationAgentSessionEntityTypeName).entity_type;
      }
      /**
       * Terminate the GRPC channel and close the client.
       *
       * The client will no longer be usable and all future behavior is undefined.
       */
      close() {
          this.initialize();
          if (!this._terminated) {
              return this.sessionsStub.then(stub => {
                  this._terminated = true;
                  stub.close();
              });
          }
          return Promise.resolve();
      }
  }
  exports.SessionsClient = SessionsClient;
  //# sourceMappingURL=sessions_client.js.map