IBM/scc-node-sdk

View on GitHub
security-and-compliance-center-api/v3.ts

Summary

Maintainability
F
2 mos
Test Coverage
A
96%
/**
 * (C) Copyright IBM Corp. 2023.
 *
 * 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.
 */

/**
 * IBM OpenAPI SDK Code Generator Version: 3.76.0-ad3e6f96-20230724-172814
 */

/* eslint-disable max-classes-per-file */
/* eslint-disable no-await-in-loop */

import * as extend from 'extend';
import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http';
import {
  Authenticator,
  BaseService,
  getAuthenticatorFromEnvironment,
  validateParams,
  UserOptions,
} from 'ibm-cloud-sdk-core';
import { constructServiceUrl } from 'ibm-cloud-sdk-core';
import { getSdkHeaders } from '../lib/common';
import { getQueryParam } from 'ibm-cloud-sdk-core';

/**
 * Security and Compliance Center API
 *
 * API Version: 4.0.0
 */

class SecurityAndComplianceCenterApiV3 extends BaseService {
  static DEFAULT_SERVICE_URL: string = 'https://us-south.compliance.cloud.ibm.com/instances/instance_id/v3';

  static DEFAULT_SERVICE_NAME: string = 'security_and_compliance_center_api';

  static PARAMETERIZED_SERVICE_URL: string = 'https://{region}.cloud.ibm.com/instances/{instance_id}/v3';

  private static defaultUrlVariables = new Map([
    ['region', 'us-south.compliance'],
    ['instance_id', 'instance_id'],
  ]);

  /**
   * Constructs a service URL by formatting the parameterized service URL.
   *
   * The parameterized service URL is:
   * 'https://{region}.cloud.ibm.com/instances/{instance_id}/v3'
   *
   * The default variable values are:
   * - 'region': 'us-south.compliance'
   * - 'instance_id': 'instance_id'
   *
   * @param {Map<string, string>} | null providedUrlVariables Map from variable names to desired values.
   *  If a variable is not provided in this map,
   *  the default variable value will be used instead.
   * @returns {string} The formatted URL with all variable placeholders replaced by values.
   */
  static constructServiceUrl(providedUrlVariables: Map<string, string> | null): string {
    return constructServiceUrl(
      SecurityAndComplianceCenterApiV3.PARAMETERIZED_SERVICE_URL, 
      SecurityAndComplianceCenterApiV3.defaultUrlVariables, 
      providedUrlVariables
    );
  }

  /*************************
   * Factory method
   ************************/

  /**
   * Constructs an instance of SecurityAndComplianceCenterApiV3 with passed in options and external configuration.
   *
   * @param {UserOptions} [options] - The parameters to send to the service.
   * @param {string} [options.serviceName] - The name of the service to configure
   * @param {Authenticator} [options.authenticator] - The Authenticator object used to authenticate requests to the service
   * @param {string} [options.serviceUrl] - The URL for the service
   * @returns {SecurityAndComplianceCenterApiV3}
   */

  public static newInstance(options: UserOptions): SecurityAndComplianceCenterApiV3 {
    options = options || {};

    if (!options.serviceName) {
      options.serviceName = this.DEFAULT_SERVICE_NAME;
    }
    if (!options.authenticator) {
      options.authenticator = getAuthenticatorFromEnvironment(options.serviceName);
    }
    const service = new SecurityAndComplianceCenterApiV3(options);
    service.configureService(options.serviceName);
    if (options.serviceUrl) {
      service.setServiceUrl(options.serviceUrl);
    }
    return service;
  }

  /**
   * Construct a SecurityAndComplianceCenterApiV3 object.
   *
   * @param {Object} options - Options for the service.
   * @param {string} [options.serviceUrl] - The base url to use when contacting the service. The base url may differ between IBM Cloud regions.
   * @param {OutgoingHttpHeaders} [options.headers] - Default headers that shall be included with every request to the service.
   * @param {Authenticator} options.authenticator - The Authenticator object used to authenticate requests to the service
   * @constructor
   * @returns {SecurityAndComplianceCenterApiV3}
   */
  constructor(options: UserOptions) {
    options = options || {};

    super(options);
    if (options.serviceUrl) {
      this.setServiceUrl(options.serviceUrl);
    } else {
      this.setServiceUrl(SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_URL);
    }
  }

  /*************************
   * settings
   ************************/

  /**
   * Get settings.
   *
   * Retrieve the settings of your service instance.
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request,
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request, and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Settings>>}
   */
  public getSettings(
    params?: SecurityAndComplianceCenterApiV3.GetSettingsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Settings>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getSettings'
    );

    const parameters = {
      options: {
        url: '/settings',
        method: 'GET',
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Update settings.
   *
   * Update the settings of your service instance.
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {EventNotifications} [params.eventNotifications] - The Event Notifications settings.
   * @param {ObjectStorage} [params.objectStorage] - The Cloud Object Storage settings.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request,
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request, and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Settings>>}
   */
  public updateSettings(
    params?: SecurityAndComplianceCenterApiV3.UpdateSettingsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Settings>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['eventNotifications', 'objectStorage', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'event_notifications': _params.eventNotifications,
      'object_storage': _params.objectStorage,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'updateSettings'
    );

    const parameters = {
      options: {
        url: '/settings',
        method: 'PATCH',
        body,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Create a test event.
   *
   * Send a test event to your Event Notifications instance to ensure that the events that are generated  by Security
   * and Compliance Center are being forwarded to Event Notifications. For more information, see [Enabling event
   * notifications](/docs/security-compliance?topic=security-compliance-event-notifications#event-notifications-test-api).
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request,
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request, and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.TestEvent>>}
   */
  public postTestEvent(
    params?: SecurityAndComplianceCenterApiV3.PostTestEventParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.TestEvent>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'postTestEvent'
    );

    const parameters = {
      options: {
        url: '/test_event',
        method: 'POST',
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
  /*************************
   * controlLibraries
   ************************/

  /**
   * Get control libraries.
   *
   * Retrieve all of the control libraries that are available in your account, including predefined, and custom
   * libraries.
   *
   * With Security and Compliance Center, you can create a custom control library that is specific to your
   * organization's needs.  You define the controls and specifications before you map previously created assessments.
   * Each control has several specifications  and assessments that are mapped to it. A specification is a defined
   * requirement that is specific to a component. An assessment, or several,  are mapped to each specification with a
   * detailed evaluation that is done to check whether the specification is compliant. For more information, see
   * [Creating custom libraries](/docs/security-compliance?topic=security-compliance-custom-library).
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {number} [params.limit] - The field that indicates how many resources to return, unless the response is the
   * last page of resources.
   * @param {string} [params.controlLibraryType] - The field that indicate how you want the resources to be filtered by.
   * @param {string} [params.start] - Determine what resource to start the page on or after.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibraryCollection>>}
   */
  public listControlLibraries(
    params?: SecurityAndComplianceCenterApiV3.ListControlLibrariesParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibraryCollection>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'limit', 'controlLibraryType', 'start', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'limit': _params.limit,
      'control_library_type': _params.controlLibraryType,
      'start': _params.start,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listControlLibraries'
    );

    const parameters = {
      options: {
        url: '/control_libraries',
        method: 'GET',
        qs: query,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Create a custom control library.
   *
   * Create a custom control library that is specific to your organization's needs.
   *
   * With Security and Compliance Center, you can create a custom control library that is specific to your
   * organization's needs.  You define the controls and specifications before you map previously created assessments.
   * Each control has several specifications  and assessments that are mapped to it. A specification is a defined
   * requirement that is specific to a component. An assessment, or several,  are mapped to each specification with a
   * detailed evaluation that is done to check whether the specification is compliant. For more information, see
   * [Creating custom libraries](/docs/security-compliance?topic=security-compliance-custom-library).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.controlLibraryName - The control library name.
   * @param {string} params.controlLibraryDescription - The control library description.
   * @param {string} params.controlLibraryType - The control library type.
   * @param {ControlsInControlLib[]} params.controls - The controls.
   * @param {string} [params.versionGroupLabel] - The version group label.
   * @param {string} [params.controlLibraryVersion] - The control library version.
   * @param {boolean} [params.latest] - The latest control library version.
   * @param {number} [params.controlsCount] - The number of controls.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibrary>>}
   */
  public createCustomControlLibrary(
    params: SecurityAndComplianceCenterApiV3.CreateCustomControlLibraryParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibrary>> {
    const _params = { ...params };
    const _requiredParams = ['controlLibraryName', 'controlLibraryDescription', 'controlLibraryType', 'controls'];
    const _validParams = ['controlLibraryName', 'controlLibraryDescription', 'controlLibraryType', 'controls', 'versionGroupLabel', 'controlLibraryVersion', 'latest', 'controlsCount', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'control_library_name': _params.controlLibraryName,
      'control_library_description': _params.controlLibraryDescription,
      'control_library_type': _params.controlLibraryType,
      'controls': _params.controls,
      'version_group_label': _params.versionGroupLabel,
      'control_library_version': _params.controlLibraryVersion,
      'latest': _params.latest,
      'controls_count': _params.controlsCount,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'createCustomControlLibrary'
    );

    const parameters = {
      options: {
        url: '/control_libraries',
        method: 'POST',
        body,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Delete a control library.
   *
   * Delete a custom control library by providing the control library ID.  You can find this ID by looking in the
   * Security and Compliance Center UI.
   *
   * With Security and Compliance Center, you can manage a custom control library  that is specific to your
   * organization's needs. Each control has several specifications  and assessments that are mapped to it.  For more
   * information, see [Creating custom libraries](/docs/security-compliance?topic=security-compliance-custom-library).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.controlLibrariesId - The control library ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibraryDelete>>}
   */
  public deleteCustomControlLibrary(
    params: SecurityAndComplianceCenterApiV3.DeleteCustomControlLibraryParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibraryDelete>> {
    const _params = { ...params };
    const _requiredParams = ['controlLibrariesId'];
    const _validParams = ['controlLibrariesId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'control_libraries_id': _params.controlLibrariesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'deleteCustomControlLibrary'
    );

    const parameters = {
      options: {
        url: '/control_libraries/{control_libraries_id}',
        method: 'DELETE',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a control library.
   *
   * View the details of a control library by specifying its ID.
   *
   * With Security and Compliance Center, you can create a custom control library that is specific to your
   * organization's needs.  You define the controls and specifications before you map previously created assessments.
   * Each control has several specifications  and assessments that are mapped to it. A specification is a defined
   * requirement that is specific to a component. An assessment, or several,  are mapped to each specification with a
   * detailed evaluation that is done to check whether the specification is compliant. For more information, see
   * [Creating custom libraries](/docs/security-compliance?topic=security-compliance-custom-library).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.controlLibrariesId - The control library ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibrary>>}
   */
  public getControlLibrary(
    params: SecurityAndComplianceCenterApiV3.GetControlLibraryParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibrary>> {
    const _params = { ...params };
    const _requiredParams = ['controlLibrariesId'];
    const _validParams = ['controlLibrariesId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'control_libraries_id': _params.controlLibrariesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getControlLibrary'
    );

    const parameters = {
      options: {
        url: '/control_libraries/{control_libraries_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Update a control library.
   *
   * Update a custom control library by providing the control library ID. You can find this ID in the Security and
   * Compliance Center UI.
   *
   * With Security and Compliance Center, you can create and update a custom control library that is specific to your
   * organization's needs.  You define the controls and specifications before you map previously created assessments.
   * Each control has several specifications  and assessments that are mapped to it. For more information, see [Creating
   * custom libraries](/docs/security-compliance?topic=security-compliance-custom-library).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.controlLibrariesId - The control library ID.
   * @param {string} [params.id] - The control library ID.
   * @param {string} [params.accountId] - The account ID.
   * @param {string} [params.controlLibraryName] - The control library name.
   * @param {string} [params.controlLibraryDescription] - The control library description.
   * @param {string} [params.controlLibraryType] - The control library type.
   * @param {string} [params.versionGroupLabel] - The version group label.
   * @param {string} [params.controlLibraryVersion] - The control library version.
   * @param {string} [params.createdOn] - The date when the control library was created.
   * @param {string} [params.createdBy] - The user who created the control library.
   * @param {string} [params.updatedOn] - The date when the control library was updated.
   * @param {string} [params.updatedBy] - The user who updated the control library.
   * @param {boolean} [params.latest] - The latest version of the control library.
   * @param {boolean} [params.hierarchyEnabled] - The indication of whether hierarchy is enabled for the control
   * library.
   * @param {number} [params.controlsCount] - The number of controls.
   * @param {number} [params.controlParentsCount] - The number of parent controls in the control library.
   * @param {ControlsInControlLib[]} [params.controls] - The list of controls in a control library.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibrary>>}
   */
  public replaceCustomControlLibrary(
    params: SecurityAndComplianceCenterApiV3.ReplaceCustomControlLibraryParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ControlLibrary>> {
    const _params = { ...params };
    const _requiredParams = ['controlLibrariesId'];
    const _validParams = ['controlLibrariesId', 'id', 'accountId', 'controlLibraryName', 'controlLibraryDescription', 'controlLibraryType', 'versionGroupLabel', 'controlLibraryVersion', 'createdOn', 'createdBy', 'updatedOn', 'updatedBy', 'latest', 'hierarchyEnabled', 'controlsCount', 'controlParentsCount', 'controls', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'id': _params.id,
      'account_id': _params.accountId,
      'control_library_name': _params.controlLibraryName,
      'control_library_description': _params.controlLibraryDescription,
      'control_library_type': _params.controlLibraryType,
      'version_group_label': _params.versionGroupLabel,
      'control_library_version': _params.controlLibraryVersion,
      'created_on': _params.createdOn,
      'created_by': _params.createdBy,
      'updated_on': _params.updatedOn,
      'updated_by': _params.updatedBy,
      'latest': _params.latest,
      'hierarchy_enabled': _params.hierarchyEnabled,
      'controls_count': _params.controlsCount,
      'control_parents_count': _params.controlParentsCount,
      'controls': _params.controls,
    };

    const path = {
      'control_libraries_id': _params.controlLibrariesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'replaceCustomControlLibrary'
    );

    const parameters = {
      options: {
        url: '/control_libraries/{control_libraries_id}',
        method: 'PUT',
        body,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
  /*************************
   * profiles
   ************************/

  /**
   * Get all profiles.
   *
   * View all of the predefined and custom profiles that are available in your account.
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request,
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests,
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {number} [params.limit] - The indication of how many resources to return, unless the response is the last
   * page of resources.
   * @param {string} [params.profileType] - The field that indicate how you want the resources to be filtered by.
   * @param {string} [params.start] - Determine what resource to start the page on or after.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProfileCollection>>}
   */
  public listProfiles(
    params?: SecurityAndComplianceCenterApiV3.ListProfilesParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProfileCollection>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'limit', 'profileType', 'start', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'limit': _params.limit,
      'profile_type': _params.profileType,
      'start': _params.start,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listProfiles'
    );

    const parameters = {
      options: {
        url: '/profiles',
        method: 'GET',
        qs: query,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Create a custom profile.
   *
   * Create a custom profile that is specific to your usecase, by using an existing library as a starting point.  For
   * more information, see [Building custom
   * profiles](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-build-custom-profiles&interface=api).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.profileName - The name of the profile.
   * @param {string} params.profileDescription - The description of the profile.
   * @param {string} params.profileType - The profile type.
   * @param {ProfileControlsPrototype[]} params.controls - The controls that are in the profile.
   * @param {DefaultParametersPrototype[]} params.defaultParameters - The default parameters of the profile.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request,
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests,
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>>}
   */
  public createProfile(
    params: SecurityAndComplianceCenterApiV3.CreateProfileParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>> {
    const _params = { ...params };
    const _requiredParams = ['profileName', 'profileDescription', 'profileType', 'controls', 'defaultParameters'];
    const _validParams = ['profileName', 'profileDescription', 'profileType', 'controls', 'defaultParameters', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'profile_name': _params.profileName,
      'profile_description': _params.profileDescription,
      'profile_type': _params.profileType,
      'controls': _params.controls,
      'default_parameters': _params.defaultParameters,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'createProfile'
    );

    const parameters = {
      options: {
        url: '/profiles',
        method: 'POST',
        body,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Delete a custom profile.
   *
   * Delete a custom profile by providing the profile ID.  You can find the ID in the Security and Compliance Center UI.
   * For more information about managing your custom profiles, see [Building custom
   * profiles](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-build-custom-profiles&interface=api).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.profilesId - The profile ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>>}
   */
  public deleteCustomProfile(
    params: SecurityAndComplianceCenterApiV3.DeleteCustomProfileParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>> {
    const _params = { ...params };
    const _requiredParams = ['profilesId'];
    const _validParams = ['profilesId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'deleteCustomProfile'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}',
        method: 'DELETE',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a profile.
   *
   * View the details of a profile by providing the profile ID.  You can find the profile ID in the Security and
   * Compliance Center UI. For more information, see [Building custom
   * profiles](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-build-custom-profiles&interface=api).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.profilesId - The profile ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>>}
   */
  public getProfile(
    params: SecurityAndComplianceCenterApiV3.GetProfileParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>> {
    const _params = { ...params };
    const _requiredParams = ['profilesId'];
    const _validParams = ['profilesId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getProfile'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Update a profile.
   *
   * Update the details of a custom profile. With Security and Compliance Center, you can manage  a profile that is
   * specific to your usecase, by using an existing library as a starting point.  For more information, see [Building
   * custom
   * profiles](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-build-custom-profiles&interface=api).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.profilesId - The profile ID.
   * @param {string} params.profileName - The name of the profile.
   * @param {string} params.profileDescription - The description of the profile.
   * @param {string} params.profileType - The profile type.
   * @param {ProfileControlsPrototype[]} params.controls - The controls that are in the profile.
   * @param {DefaultParametersPrototype[]} params.defaultParameters - The default parameters of the profile.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>>}
   */
  public replaceProfile(
    params: SecurityAndComplianceCenterApiV3.ReplaceProfileParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Profile>> {
    const _params = { ...params };
    const _requiredParams = ['profilesId', 'profileName', 'profileDescription', 'profileType', 'controls', 'defaultParameters'];
    const _validParams = ['profilesId', 'profileName', 'profileDescription', 'profileType', 'controls', 'defaultParameters', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'profile_name': _params.profileName,
      'profile_description': _params.profileDescription,
      'profile_type': _params.profileType,
      'controls': _params.controls,
      'default_parameters': _params.defaultParameters,
    };

    const path = {
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'replaceProfile'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}',
        method: 'PUT',
        body,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
  /*************************
   * rules
   ************************/

  /**
   * List all rules.
   *
   * Retrieve all the rules that you use to target the exact configuration properties  that you need to ensure are
   * compliant. For more information, see [Defining custom
   * rules](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-rules-define).
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.type] - The list of only user-defined, or system-defined rules.
   * @param {string} [params.search] - The indication of whether to search for rules with a specific string string in
   * the name, description, or labels.
   * @param {string} [params.serviceName] - Searches for rules targeting corresponding service.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.RulesPageBase>>}
   */
  public listRules(
    params?: SecurityAndComplianceCenterApiV3.ListRulesParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.RulesPageBase>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'type', 'search', 'serviceName', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'type': _params.type,
      'search': _params.search,
      'service_name': _params.serviceName,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listRules'
    );

    const parameters = {
      options: {
        url: '/rules',
        method: 'GET',
        qs: query,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Create a custom rule.
   *
   * Create a custom rule to to target the exact configuration properties  that you need to evaluate your resources for
   * compliance. For more information, see [Defining custom
   * rules](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-rules-define).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.description - The rule description.
   * @param {Target} params.target - The rule target.
   * @param {RequiredConfig} params.requiredConfig - The required configurations.
   * @param {string} [params.type] - The rule type (user_defined or system_defined).
   * @param {string} [params.version] - The rule version number.
   * @param {Import} [params._import] - The collection of import parameters.
   * @param {string[]} [params.labels] - The list of labels that correspond to a rule.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Rule>>}
   */
  public createRule(
    params: SecurityAndComplianceCenterApiV3.CreateRuleParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Rule>> {
    const _params = { ...params };
    const _requiredParams = ['description', 'target', 'requiredConfig'];
    const _validParams = ['description', 'target', 'requiredConfig', 'type', 'version', '_import', 'labels', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'description': _params.description,
      'target': _params.target,
      'required_config': _params.requiredConfig,
      'type': _params.type,
      'version': _params.version,
      'import': _params._import,
      'labels': _params.labels,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'createRule'
    );

    const parameters = {
      options: {
        url: '/rules',
        method: 'POST',
        body,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Delete a custom rule.
   *
   * Delete a custom rule that you no longer require to evaluate your resources. For more information, see [Defining
   * custom rules](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-rules-define).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.ruleId - The ID of the corresponding rule.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.EmptyObject>>}
   */
  public deleteRule(
    params: SecurityAndComplianceCenterApiV3.DeleteRuleParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.EmptyObject>> {
    const _params = { ...params };
    const _requiredParams = ['ruleId'];
    const _validParams = ['ruleId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'rule_id': _params.ruleId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'deleteRule'
    );

    const parameters = {
      options: {
        url: '/rules/{rule_id}',
        method: 'DELETE',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a custom rule.
   *
   * Retrieve a rule that you created to evaluate your resources.  For more information, see [Defining custom
   * rules](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-rules-define).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.ruleId - The ID of the corresponding rule.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Rule>>}
   */
  public getRule(
    params: SecurityAndComplianceCenterApiV3.GetRuleParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Rule>> {
    const _params = { ...params };
    const _requiredParams = ['ruleId'];
    const _validParams = ['ruleId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'rule_id': _params.ruleId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getRule'
    );

    const parameters = {
      options: {
        url: '/rules/{rule_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Update a custom rule.
   *
   * Update a custom rule that you use to target the exact configuration properties  that you need to evaluate your
   * resources for compliance. For more information, see [Defining custom
   * rules](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-rules-define).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.ruleId - The ID of the corresponding rule.
   * @param {string} params.ifMatch - This field compares a supplied `Etag` value with the version that is stored for
   * the requested resource. If the values match, the server allows the request method to continue.
   *
   * To find the `Etag` value, run a GET request on the resource that you want to modify, and check the response
   * headers.
   * @param {string} params.description - The rule description.
   * @param {Target} params.target - The rule target.
   * @param {RequiredConfig} params.requiredConfig - The required configurations.
   * @param {string} [params.type] - The rule type (user_defined or system_defined).
   * @param {string} [params.version] - The rule version number.
   * @param {Import} [params._import] - The collection of import parameters.
   * @param {string[]} [params.labels] - The list of labels that correspond to a rule.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Rule>>}
   */
  public replaceRule(
    params: SecurityAndComplianceCenterApiV3.ReplaceRuleParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Rule>> {
    const _params = { ...params };
    const _requiredParams = ['ruleId', 'ifMatch', 'description', 'target', 'requiredConfig'];
    const _validParams = ['ruleId', 'ifMatch', 'description', 'target', 'requiredConfig', 'type', 'version', '_import', 'labels', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'description': _params.description,
      'target': _params.target,
      'required_config': _params.requiredConfig,
      'type': _params.type,
      'version': _params.version,
      'import': _params._import,
      'labels': _params.labels,
    };

    const path = {
      'rule_id': _params.ruleId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'replaceRule'
    );

    const parameters = {
      options: {
        url: '/rules/{rule_id}',
        method: 'PUT',
        body,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'If-Match': _params.ifMatch,
            'X-Correlation-Id': _params.xCorrelationId,
            'X-Request-Id': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
  /*************************
   * attachments
   ************************/

  /**
   * Get all attachments linked to a specific profile.
   *
   * View all of the attachments that are linked to a specific profile.  An attachment is the association between the
   * set of resources that you want to evaluate  and a profile that contains the specific controls that you want to use.
   * For more information, see [Running an evaluation for IBM
   * Cloud](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-scan-resources).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.profilesId - The profile ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {number} [params.limit] - The indication of how many resources to return, unless the response is the last
   * page of resources.
   * @param {string} [params.start] - Determine what resource to start the page on or after.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentCollection>>}
   */
  public listAttachments(
    params: SecurityAndComplianceCenterApiV3.ListAttachmentsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentCollection>> {
    const _params = { ...params };
    const _requiredParams = ['profilesId'];
    const _validParams = ['profilesId', 'xCorrelationId', 'xRequestId', 'limit', 'start', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'limit': _params.limit,
      'start': _params.start,
    };

    const path = {
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listAttachments'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}/attachments',
        method: 'GET',
        qs: query,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Create an attachment.
   *
   * Create an attachment to link to a profile to schedule evaluations  of your resources on a recurring schedule, or
   * on-demand. For more information, see [Running an evaluation for IBM
   * Cloud](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-scan-resources).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.profilesId - The profile ID.
   * @param {AttachmentsPrototype[]} params.attachments - The array that displays all of the available attachments.
   * @param {string} [params.profileId] - The ID of the profile that is specified in the attachment.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentPrototype>>}
   */
  public createAttachment(
    params: SecurityAndComplianceCenterApiV3.CreateAttachmentParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentPrototype>> {
    const _params = { ...params };
    const _requiredParams = ['profilesId', 'attachments'];
    const _validParams = ['profilesId', 'attachments', 'profileId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'attachments': _params.attachments,
      'profile_id': _params.profileId,
    };

    const path = {
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'createAttachment'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}/attachments',
        method: 'POST',
        body,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Delete an attachment.
   *
   * Delete an attachment. Alternatively, if you think that you might need  this configuration in the future, you can
   * pause an attachment to stop being charged. For more information, see [Running an evaluation for IBM
   * Cloud](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-scan-resources).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.attachmentId - The attachment ID.
   * @param {string} params.profilesId - The profile ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentItem>>}
   */
  public deleteProfileAttachment(
    params: SecurityAndComplianceCenterApiV3.DeleteProfileAttachmentParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentItem>> {
    const _params = { ...params };
    const _requiredParams = ['attachmentId', 'profilesId'];
    const _validParams = ['attachmentId', 'profilesId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'attachment_id': _params.attachmentId,
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'deleteProfileAttachment'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}/attachments/{attachment_id}',
        method: 'DELETE',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get an attachment.
   *
   * View the details of an attachment a profile by providing the attachment ID.  You can find this value in the
   * Security and Compliance Center UI. For more information, see [Running an evaluation for IBM
   * Cloud](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-scan-resources).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.attachmentId - The attachment ID.
   * @param {string} params.profilesId - The profile ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentItem>>}
   */
  public getProfileAttachment(
    params: SecurityAndComplianceCenterApiV3.GetProfileAttachmentParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentItem>> {
    const _params = { ...params };
    const _requiredParams = ['attachmentId', 'profilesId'];
    const _validParams = ['attachmentId', 'profilesId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'attachment_id': _params.attachmentId,
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getProfileAttachment'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}/attachments/{attachment_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Update an attachment.
   *
   * Update an attachment that is linked to a profile to evaluate your resources  on a recurring schedule, or on-demand.
   * For more information, see [Running an evaluation for IBM
   * Cloud](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-scan-resources).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.attachmentId - The attachment ID.
   * @param {string} params.profilesId - The profile ID.
   * @param {string} [params.id] - The ID of the attachment.
   * @param {string} [params.profileId] - The ID of the profile that is specified in the attachment.
   * @param {string} [params.accountId] - The account ID that is associated to the attachment.
   * @param {string} [params.instanceId] - The instance ID of the account that is associated to the attachment.
   * @param {MultiCloudScope[]} [params.scope] - The scope payload for the multi cloud feature.
   * @param {string} [params.createdOn] - The date when the attachment was created.
   * @param {string} [params.createdBy] - The user who created the attachment.
   * @param {string} [params.updatedOn] - The date when the attachment was updated.
   * @param {string} [params.updatedBy] - The user who updated the attachment.
   * @param {string} [params.status] - The status of an attachment evaluation.
   * @param {string} [params.schedule] - The schedule of an attachment evaluation.
   * @param {AttachmentsNotificationsPrototype} [params.notifications] - The request payload of the attachment
   * notifications.
   * @param {AttachmentParameterPrototype[]} [params.attachmentParameters] - The profile parameters for the attachment.
   * @param {LastScan} [params.lastScan] - The details of the last scan of an attachment.
   * @param {string} [params.nextScanTime] - The start time of the next scan.
   * @param {string} [params.name] - The name of the attachment.
   * @param {string} [params.description] - The description for the attachment.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentItem>>}
   */
  public replaceProfileAttachment(
    params: SecurityAndComplianceCenterApiV3.ReplaceProfileAttachmentParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentItem>> {
    const _params = { ...params };
    const _requiredParams = ['attachmentId', 'profilesId'];
    const _validParams = ['attachmentId', 'profilesId', 'id', 'profileId', 'accountId', 'instanceId', 'scope', 'createdOn', 'createdBy', 'updatedOn', 'updatedBy', 'status', 'schedule', 'notifications', 'attachmentParameters', 'lastScan', 'nextScanTime', 'name', 'description', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'id': _params.id,
      'profile_id': _params.profileId,
      'account_id': _params.accountId,
      'instance_id': _params.instanceId,
      'scope': _params.scope,
      'created_on': _params.createdOn,
      'created_by': _params.createdBy,
      'updated_on': _params.updatedOn,
      'updated_by': _params.updatedBy,
      'status': _params.status,
      'schedule': _params.schedule,
      'notifications': _params.notifications,
      'attachment_parameters': _params.attachmentParameters,
      'last_scan': _params.lastScan,
      'next_scan_time': _params.nextScanTime,
      'name': _params.name,
      'description': _params.description,
    };

    const path = {
      'attachment_id': _params.attachmentId,
      'profiles_id': _params.profilesId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'replaceProfileAttachment'
    );

    const parameters = {
      options: {
        url: '/profiles/{profiles_id}/attachments/{attachment_id}',
        method: 'PUT',
        body,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Create a scan.
   *
   * Create a scan to evaluate your resources on a recurring basis or on demand.
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.attachmentId - The attachment ID of a profile.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Scan>>}
   */
  public createScan(
    params: SecurityAndComplianceCenterApiV3.CreateScanParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Scan>> {
    const _params = { ...params };
    const _requiredParams = ['attachmentId'];
    const _validParams = ['attachmentId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'attachment_id': _params.attachmentId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'createScan'
    );

    const parameters = {
      options: {
        url: '/scans',
        method: 'POST',
        body,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get all attachments in an instance.
   *
   * View all of the attachments that are linked to an account. An attachment is the association between the set of
   * resources that you want to evaluate  and a profile that contains the specific controls that you want to use. For
   * more information, see [Running an evaluation for IBM
   * Cloud](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-scan-resources).
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header for the corresponding response. The same value is not used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {number} [params.limit] - The indication of how many resources to return, unless the response is the last
   * page of resources.
   * @param {string} [params.start] - Determine what resource to start the page on or after.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentCollection>>}
   */
  public listAttachmentsAccount(
    params?: SecurityAndComplianceCenterApiV3.ListAttachmentsAccountParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.AttachmentCollection>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'limit', 'start', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'limit': _params.limit,
      'start': _params.start,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listAttachmentsAccount'
    );

    const parameters = {
      options: {
        url: '/attachments',
        method: 'GET',
        qs: query,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
  /*************************
   * reports
   ************************/

  /**
   * Get the latest reports.
   *
   * Retrieve the latest reports, which are grouped by profile ID, scope ID, and attachment ID. For more information,
   * see [Viewing results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.sort] - This field sorts results by using a valid sort field. To learn more, see
   * [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportLatest>>}
   */
  public getLatestReports(
    params?: SecurityAndComplianceCenterApiV3.GetLatestReportsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportLatest>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'sort', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'sort': _params.sort,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getLatestReports'
    );

    const parameters = {
      options: {
        url: '/reports/latest',
        method: 'GET',
        qs: query,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * List reports.
   *
   * Retrieve a page of reports that are filtered by the specified parameters. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.attachmentId] - The ID of the attachment.
   * @param {string} [params.groupId] - The report group ID.
   * @param {string} [params.profileId] - The ID of the profile.
   * @param {string} [params.type] - The type of the scan.
   * @param {string} [params.start] - The indication of what resource to start the page on.
   * @param {number} [params.limit] - The indication of many resources to return, unless the response is  the last page
   * of resources.
   * @param {string} [params.sort] - This field sorts results by using a valid sort field. To learn more, see
   * [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportPage>>}
   */
  public listReports(
    params?: SecurityAndComplianceCenterApiV3.ListReportsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportPage>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'attachmentId', 'groupId', 'profileId', 'type', 'start', 'limit', 'sort', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'attachment_id': _params.attachmentId,
      'group_id': _params.groupId,
      'profile_id': _params.profileId,
      'type': _params.type,
      'start': _params.start,
      'limit': _params.limit,
      'sort': _params.sort,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listReports'
    );

    const parameters = {
      options: {
        url: '/reports',
        method: 'GET',
        qs: query,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a report.
   *
   * Retrieve a report by specifying its ID. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Report>>}
   */
  public getReport(
    params: SecurityAndComplianceCenterApiV3.GetReportParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.Report>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getReport'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a report summary.
   *
   * Retrieve the complete summarized information for a report. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportSummary>>}
   */
  public getReportSummary(
    params: SecurityAndComplianceCenterApiV3.GetReportSummaryParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportSummary>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getReportSummary'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/summary',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get report evaluation details.
   *
   * Retrieve the evaluation details of a report by specifying the report ID. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {boolean} [params.excludeSummary] - The indication of whether report summary metadata must be excluded.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<NodeJS.ReadableStream>>}
   */
  public getReportEvaluation(
    params: SecurityAndComplianceCenterApiV3.GetReportEvaluationParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<NodeJS.ReadableStream>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'excludeSummary', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'exclude_summary': _params.excludeSummary,
    };

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getReportEvaluation'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/download',
        method: 'GET',
        qs: query,
        path,
        responseType: 'stream',
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/csv',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get report controls.
   *
   * Retrieve a sorted and filtered list of controls for the specified report. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.controlId] - The ID of the control.
   * @param {string} [params.controlName] - The name of the control.
   * @param {string} [params.controlDescription] - The description of the control.
   * @param {string} [params.controlCategory] - A control category value.
   * @param {string} [params.status] - The compliance status value.
   * @param {string} [params.sort] - This field sorts controls by using a valid sort field. To learn more, see
   * [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportControls>>}
   */
  public getReportControls(
    params: SecurityAndComplianceCenterApiV3.GetReportControlsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportControls>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'controlId', 'controlName', 'controlDescription', 'controlCategory', 'status', 'sort', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'control_id': _params.controlId,
      'control_name': _params.controlName,
      'control_description': _params.controlDescription,
      'control_category': _params.controlCategory,
      'status': _params.status,
      'sort': _params.sort,
    };

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getReportControls'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/controls',
        method: 'GET',
        qs: query,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a report rule.
   *
   * Retrieve the rule by specifying the report ID and rule ID. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} params.ruleId - The ID of a rule in a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.RuleInfo>>}
   */
  public getReportRule(
    params: SecurityAndComplianceCenterApiV3.GetReportRuleParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.RuleInfo>> {
    const _params = { ...params };
    const _requiredParams = ['reportId', 'ruleId'];
    const _validParams = ['reportId', 'ruleId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'report_id': _params.reportId,
      'rule_id': _params.ruleId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getReportRule'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/rules/{rule_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * List report evaluations.
   *
   * Get a paginated list of evaluations for the specified report. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.assessmentId] - The ID of the assessment.
   * @param {string} [params.componentId] - The ID of component.
   * @param {string} [params.targetId] - The ID of the evaluation target.
   * @param {string} [params.targetName] - The name of the evaluation target.
   * @param {string} [params.status] - The evaluation status value.
   * @param {string} [params.start] - The indication of what resource to start the page on.
   * @param {number} [params.limit] - The indication of many resources to return, unless the response is  the last page
   * of resources.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.EvaluationPage>>}
   */
  public listReportEvaluations(
    params: SecurityAndComplianceCenterApiV3.ListReportEvaluationsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.EvaluationPage>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'assessmentId', 'componentId', 'targetId', 'targetName', 'status', 'start', 'limit', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'assessment_id': _params.assessmentId,
      'component_id': _params.componentId,
      'target_id': _params.targetId,
      'target_name': _params.targetName,
      'status': _params.status,
      'start': _params.start,
      'limit': _params.limit,
    };

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listReportEvaluations'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/evaluations',
        method: 'GET',
        qs: query,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * List report resources.
   *
   * Get a paginated list of resources for the specified report. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.id] - The ID of the resource.
   * @param {string} [params.resourceName] - The name of the resource.
   * @param {string} [params.accountId] - The ID of the account owning a resource.
   * @param {string} [params.componentId] - The ID of component.
   * @param {string} [params.status] - The compliance status value.
   * @param {string} [params.sort] - This field sorts resources by using a valid sort field. To learn more, see
   * [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
   * @param {string} [params.start] - The indication of what resource to start the page on.
   * @param {number} [params.limit] - The indication of many resources to return, unless the response is  the last page
   * of resources.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ResourcePage>>}
   */
  public listReportResources(
    params: SecurityAndComplianceCenterApiV3.ListReportResourcesParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ResourcePage>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'id', 'resourceName', 'accountId', 'componentId', 'status', 'sort', 'start', 'limit', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'id': _params.id,
      'resource_name': _params.resourceName,
      'account_id': _params.accountId,
      'component_id': _params.componentId,
      'status': _params.status,
      'sort': _params.sort,
      'start': _params.start,
      'limit': _params.limit,
    };

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listReportResources'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/resources',
        method: 'GET',
        qs: query,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get report tags.
   *
   * Retrieve a list of tags for the specified report. For more information, see [Viewing
   * results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportTags>>}
   */
  public getReportTags(
    params: SecurityAndComplianceCenterApiV3.GetReportTagsParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportTags>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getReportTags'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/tags',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get report violations drift.
   *
   * Get a list of report violation data points for the specified report and time frame. For more information, see
   * [Viewing results](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-results).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.reportId - The ID of the scan that is associated with a report.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this header is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {number} [params.scanTimeDuration] - The duration of the `scan_time` timestamp in number of days.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportViolationsDrift>>}
   */
  public getReportViolationsDrift(
    params: SecurityAndComplianceCenterApiV3.GetReportViolationsDriftParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ReportViolationsDrift>> {
    const _params = { ...params };
    const _requiredParams = ['reportId'];
    const _validParams = ['reportId', 'xCorrelationId', 'xRequestId', 'scanTimeDuration', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const query = {
      'scan_time_duration': _params.scanTimeDuration,
    };

    const path = {
      'report_id': _params.reportId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getReportViolationsDrift'
    );

    const parameters = {
      options: {
        url: '/reports/{report_id}/violations_drift',
        method: 'GET',
        qs: query,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
  /*************************
   * providerTypes
   ************************/

  /**
   * List all provider types.
   *
   * List all the registered provider types. For more information about connecting Workload Protection with the Security
   * and Compliance Center, see [Connecting Workload
   * Protection](/docs/security-compliance?topic=security-compliance-setup-workload-protection&interface=api#wp-register).
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypesCollection>>}
   */
  public listProviderTypes(
    params?: SecurityAndComplianceCenterApiV3.ListProviderTypesParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypesCollection>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listProviderTypes'
    );

    const parameters = {
      options: {
        url: '/provider_types',
        method: 'GET',
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a provider type.
   *
   * Retrieve a provider type by specifying its ID. For more information about integrations, see [Connecting Workload
   * Protection](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-setup-workload-protection).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.providerTypeId - The provider type ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeItem>>}
   */
  public getProviderTypeById(
    params: SecurityAndComplianceCenterApiV3.GetProviderTypeByIdParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeItem>> {
    const _params = { ...params };
    const _requiredParams = ['providerTypeId'];
    const _validParams = ['providerTypeId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'provider_type_id': _params.providerTypeId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getProviderTypeById'
    );

    const parameters = {
      options: {
        url: '/provider_types/{provider_type_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
  /*************************
   * providerTypeInstances
   ************************/

  /**
   * List all provider type instances.
   *
   * Retrieve all instances of provider type. For more information about integrations, see [Connecting Workload
   * Protection](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-setup-workload-protection).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.providerTypeId - The provider type ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstancesResponse>>}
   */
  public listProviderTypeInstances(
    params: SecurityAndComplianceCenterApiV3.ListProviderTypeInstancesParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstancesResponse>> {
    const _params = { ...params };
    const _requiredParams = ['providerTypeId'];
    const _validParams = ['providerTypeId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'provider_type_id': _params.providerTypeId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'listProviderTypeInstances'
    );

    const parameters = {
      options: {
        url: '/provider_types/{provider_type_id}/provider_type_instances',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Create a provider type instance.
   *
   * Create an instance of a provider type. For more information about integrations, see [Connecting Workload
   * Protection](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-setup-workload-protection).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.providerTypeId - The provider type ID.
   * @param {string} [params.name] - The provider type instance name.
   * @param {JsonObject} [params.attributes] - The attributes for connecting to the provider type instance.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstanceItem>>}
   */
  public createProviderTypeInstance(
    params: SecurityAndComplianceCenterApiV3.CreateProviderTypeInstanceParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstanceItem>> {
    const _params = { ...params };
    const _requiredParams = ['providerTypeId'];
    const _validParams = ['providerTypeId', 'name', 'attributes', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'name': _params.name,
      'attributes': _params.attributes,
    };

    const path = {
      'provider_type_id': _params.providerTypeId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'createProviderTypeInstance'
    );

    const parameters = {
      options: {
        url: '/provider_types/{provider_type_id}/provider_type_instances',
        method: 'POST',
        body,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Remove a specific instance of a provider type.
   *
   * Remove a specific instance of a provider type.
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.providerTypeId - The provider type ID.
   * @param {string} params.providerTypeInstanceId - The provider type instance ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.EmptyObject>>}
   */
  public deleteProviderTypeInstance(
    params: SecurityAndComplianceCenterApiV3.DeleteProviderTypeInstanceParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.EmptyObject>> {
    const _params = { ...params };
    const _requiredParams = ['providerTypeId', 'providerTypeInstanceId'];
    const _validParams = ['providerTypeId', 'providerTypeInstanceId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'provider_type_id': _params.providerTypeId,
      'provider_type_instance_id': _params.providerTypeInstanceId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'deleteProviderTypeInstance'
    );

    const parameters = {
      options: {
        url: '/provider_types/{provider_type_id}/provider_type_instances/{provider_type_instance_id}',
        method: 'DELETE',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * List a provider type instance.
   *
   * Retrieve a provider type instance by specifying the provider type ID, and Security and Compliance Center instance
   * ID. For more information about integrations, see [Connecting Workload
   * Protection](https://test.cloud.ibm.com/docs/security-compliance?topic=security-compliance-setup-workload-protection).
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.providerTypeId - The provider type ID.
   * @param {string} params.providerTypeInstanceId - The provider type instance ID.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstanceItem>>}
   */
  public getProviderTypeInstance(
    params: SecurityAndComplianceCenterApiV3.GetProviderTypeInstanceParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstanceItem>> {
    const _params = { ...params };
    const _requiredParams = ['providerTypeId', 'providerTypeInstanceId'];
    const _validParams = ['providerTypeId', 'providerTypeInstanceId', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const path = {
      'provider_type_id': _params.providerTypeId,
      'provider_type_instance_id': _params.providerTypeInstanceId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getProviderTypeInstance'
    );

    const parameters = {
      options: {
        url: '/provider_types/{provider_type_id}/provider_type_instances/{provider_type_instance_id}',
        method: 'GET',
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Patch a specific instance of a provider type.
   *
   * Patch a specific instance of a provider type.
   *
   * @param {Object} params - The parameters to send to the service.
   * @param {string} params.providerTypeId - The provider type ID.
   * @param {string} params.providerTypeInstanceId - The provider type instance ID.
   * @param {string} [params.name] - The provider type instance name.
   * @param {JsonObject} [params.attributes] - The attributes for connecting to the provider type instance.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstanceItem>>}
   */
  public updateProviderTypeInstance(
    params: SecurityAndComplianceCenterApiV3.UpdateProviderTypeInstanceParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypeInstanceItem>> {
    const _params = { ...params };
    const _requiredParams = ['providerTypeId', 'providerTypeInstanceId'];
    const _validParams = ['providerTypeId', 'providerTypeInstanceId', 'name', 'attributes', 'xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const body = {
      'name': _params.name,
      'attributes': _params.attributes,
    };

    const path = {
      'provider_type_id': _params.providerTypeId,
      'provider_type_instance_id': _params.providerTypeInstanceId,
    };

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'updateProviderTypeInstance'
    );

    const parameters = {
      options: {
        url: '/provider_types/{provider_type_id}/provider_type_instances/{provider_type_instance_id}',
        method: 'PATCH',
        body,
        path,
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }

  /**
   * Get a list of instances for all provider types.
   *
   * Get a list of instances for all provider types.
   *
   * @param {Object} [params] - The parameters to send to the service.
   * @param {string} [params.xCorrelationId] - The supplied or generated value of this header is logged for a request
   * and repeated in a response header for the corresponding response. The same value is used for downstream requests
   * and retries of those requests. If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {string} [params.xRequestId] - The supplied or generated value of this header is logged for a request and
   * repeated in a response header  for the corresponding response.  The same value is not used for downstream requests
   * and retries of those requests.  If a value of this headers is not supplied in a request, the service generates a
   * random (version 4) UUID.
   * @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
   * @returns {Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypesInstancesResponse>>}
   */
  public getProviderTypesInstances(
    params?: SecurityAndComplianceCenterApiV3.GetProviderTypesInstancesParams
  ): Promise<SecurityAndComplianceCenterApiV3.Response<SecurityAndComplianceCenterApiV3.ProviderTypesInstancesResponse>> {
    const _params = { ...params };
    const _requiredParams = [];
    const _validParams = ['xCorrelationId', 'xRequestId', 'headers'];
    const _validationErrors = validateParams(_params, _requiredParams, _validParams);
    if (_validationErrors) {
      return Promise.reject(_validationErrors);
    }

    const sdkHeaders = getSdkHeaders(
      SecurityAndComplianceCenterApiV3.DEFAULT_SERVICE_NAME,
      'v3',
      'getProviderTypesInstances'
    );

    const parameters = {
      options: {
        url: '/provider_types_instances',
        method: 'GET',
      },
      defaultOptions: extend(true, {}, this.baseOptions, {
        headers: extend(
          true,
          sdkHeaders,
          {
            'Accept': 'application/json',
            'X-Correlation-ID': _params.xCorrelationId,
            'X-Request-ID': _params.xRequestId,
          },
          _params.headers
        ),
      }),
    };

    return this.createRequest(parameters);
  }
}

/*************************
 * interfaces
 ************************/

namespace SecurityAndComplianceCenterApiV3 {
  /** An operation response. */
  export interface Response<T = any> {
    result: T;
    status: number;
    statusText: string;
    headers: IncomingHttpHeaders;
  }

  /** The callback for a service request. */
  export type Callback<T> = (error: any, response?: Response<T>) => void;

  /** The body of a service request that returns no response data. */
  export interface EmptyObject {}

  /** A standard JS object, defined to avoid the limitations of `Object` and `object` */
  export interface JsonObject {
    [key: string]: any;
  }

  /*************************
   * request interfaces
   ************************/

  /** Parameters for the `getSettings` operation. */
  export interface GetSettingsParams {
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response. The same value is used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `updateSettings` operation. */
  export interface UpdateSettingsParams {
    /** The Event Notifications settings. */
    eventNotifications?: EventNotifications;
    /** The Cloud Object Storage settings. */
    objectStorage?: ObjectStorage;
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response. The same value is used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `postTestEvent` operation. */
  export interface PostTestEventParams {
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response. The same value is used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `listControlLibraries` operation. */
  export interface ListControlLibrariesParams {
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    /** The field that indicates how many resources to return, unless the response is the last page of resources. */
    limit?: number;
    /** The field that indicate how you want the resources to be filtered by. */
    controlLibraryType?: string;
    /** Determine what resource to start the page on or after. */
    start?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `createCustomControlLibrary` operation. */
  export interface CreateCustomControlLibraryParams {
    /** The control library name. */
    controlLibraryName: string;
    /** The control library description. */
    controlLibraryDescription: string;
    /** The control library type. */
    controlLibraryType: CreateCustomControlLibraryConstants.ControlLibraryType | string;
    /** The controls. */
    controls: ControlsInControlLib[];
    /** The version group label. */
    versionGroupLabel?: string;
    /** The control library version. */
    controlLibraryVersion?: string;
    /** The latest control library version. */
    latest?: boolean;
    /** The number of controls. */
    controlsCount?: number;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `createCustomControlLibrary` operation. */
  export namespace CreateCustomControlLibraryConstants {
    /** The control library type. */
    export enum ControlLibraryType {
      PREDEFINED = 'predefined',
      CUSTOM = 'custom',
    }
  }

  /** Parameters for the `deleteCustomControlLibrary` operation. */
  export interface DeleteCustomControlLibraryParams {
    /** The control library ID. */
    controlLibrariesId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getControlLibrary` operation. */
  export interface GetControlLibraryParams {
    /** The control library ID. */
    controlLibrariesId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `replaceCustomControlLibrary` operation. */
  export interface ReplaceCustomControlLibraryParams {
    /** The control library ID. */
    controlLibrariesId: string;
    /** The control library ID. */
    id?: string;
    /** The account ID. */
    accountId?: string;
    /** The control library name. */
    controlLibraryName?: string;
    /** The control library description. */
    controlLibraryDescription?: string;
    /** The control library type. */
    controlLibraryType?: ReplaceCustomControlLibraryConstants.ControlLibraryType | string;
    /** The version group label. */
    versionGroupLabel?: string;
    /** The control library version. */
    controlLibraryVersion?: string;
    /** The date when the control library was created. */
    createdOn?: string;
    /** The user who created the control library. */
    createdBy?: string;
    /** The date when the control library was updated. */
    updatedOn?: string;
    /** The user who updated the control library. */
    updatedBy?: string;
    /** The latest version of the control library. */
    latest?: boolean;
    /** The indication of whether hierarchy is enabled for the control library. */
    hierarchyEnabled?: boolean;
    /** The number of controls. */
    controlsCount?: number;
    /** The number of parent controls in the control library. */
    controlParentsCount?: number;
    /** The list of controls in a control library. */
    controls?: ControlsInControlLib[];
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `replaceCustomControlLibrary` operation. */
  export namespace ReplaceCustomControlLibraryConstants {
    /** The control library type. */
    export enum ControlLibraryType {
      PREDEFINED = 'predefined',
      CUSTOM = 'custom',
    }
  }

  /** Parameters for the `listProfiles` operation. */
  export interface ListProfilesParams {
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response. The same value is used for downstream requests, and retries of those requests.
     *  If a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    /** The indication of how many resources to return, unless the response is the last page of resources. */
    limit?: number;
    /** The field that indicate how you want the resources to be filtered by. */
    profileType?: string;
    /** Determine what resource to start the page on or after. */
    start?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `createProfile` operation. */
  export interface CreateProfileParams {
    /** The name of the profile. */
    profileName: string;
    /** The description of the profile. */
    profileDescription: string;
    /** The profile type. */
    profileType: CreateProfileConstants.ProfileType | string;
    /** The controls that are in the profile. */
    controls: ProfileControlsPrototype[];
    /** The default parameters of the profile. */
    defaultParameters: DefaultParametersPrototype[];
    /** The supplied or generated value of this header is logged for a request, and repeated in a response header
     *  for the corresponding response. The same value is used for downstream requests, and retries of those requests.
     *  If a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `createProfile` operation. */
  export namespace CreateProfileConstants {
    /** The profile type. */
    export enum ProfileType {
      PREDEFINED = 'predefined',
      CUSTOM = 'custom',
    }
  }

  /** Parameters for the `deleteCustomProfile` operation. */
  export interface DeleteCustomProfileParams {
    /** The profile ID. */
    profilesId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getProfile` operation. */
  export interface GetProfileParams {
    /** The profile ID. */
    profilesId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `replaceProfile` operation. */
  export interface ReplaceProfileParams {
    /** The profile ID. */
    profilesId: string;
    /** The name of the profile. */
    profileName: string;
    /** The description of the profile. */
    profileDescription: string;
    /** The profile type. */
    profileType: ReplaceProfileConstants.ProfileType | string;
    /** The controls that are in the profile. */
    controls: ProfileControlsPrototype[];
    /** The default parameters of the profile. */
    defaultParameters: DefaultParametersPrototype[];
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `replaceProfile` operation. */
  export namespace ReplaceProfileConstants {
    /** The profile type. */
    export enum ProfileType {
      PREDEFINED = 'predefined',
      CUSTOM = 'custom',
    }
  }

  /** Parameters for the `listRules` operation. */
  export interface ListRulesParams {
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** The list of only user-defined, or system-defined rules. */
    type?: string;
    /** The indication of whether to search for rules with a specific string string in the name, description, or
     *  labels.
     */
    search?: string;
    /** Searches for rules targeting corresponding service. */
    serviceName?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `createRule` operation. */
  export interface CreateRuleParams {
    /** The rule description. */
    description: string;
    /** The rule target. */
    target: Target;
    /** The required configurations. */
    requiredConfig: RequiredConfig;
    /** The rule type (user_defined or system_defined). */
    type?: CreateRuleConstants.Type | string;
    /** The rule version number. */
    version?: string;
    /** The collection of import parameters. */
    _import?: Import;
    /** The list of labels that correspond to a rule. */
    labels?: string[];
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `createRule` operation. */
  export namespace CreateRuleConstants {
    /** The rule type (user_defined or system_defined). */
    export enum Type {
      USER_DEFINED = 'user_defined',
      SYSTEM_DEFINED = 'system_defined',
    }
  }

  /** Parameters for the `deleteRule` operation. */
  export interface DeleteRuleParams {
    /** The ID of the corresponding rule. */
    ruleId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getRule` operation. */
  export interface GetRuleParams {
    /** The ID of the corresponding rule. */
    ruleId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `replaceRule` operation. */
  export interface ReplaceRuleParams {
    /** The ID of the corresponding rule. */
    ruleId: string;
    /** This field compares a supplied `Etag` value with the version that is stored for the requested resource. If
     *  the values match, the server allows the request method to continue.
     *
     *  To find the `Etag` value, run a GET request on the resource that you want to modify, and check the response
     *  headers.
     */
    ifMatch: string;
    /** The rule description. */
    description: string;
    /** The rule target. */
    target: Target;
    /** The required configurations. */
    requiredConfig: RequiredConfig;
    /** The rule type (user_defined or system_defined). */
    type?: ReplaceRuleConstants.Type | string;
    /** The rule version number. */
    version?: string;
    /** The collection of import parameters. */
    _import?: Import;
    /** The list of labels that correspond to a rule. */
    labels?: string[];
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `replaceRule` operation. */
  export namespace ReplaceRuleConstants {
    /** The rule type (user_defined or system_defined). */
    export enum Type {
      USER_DEFINED = 'user_defined',
      SYSTEM_DEFINED = 'system_defined',
    }
  }

  /** Parameters for the `listAttachments` operation. */
  export interface ListAttachmentsParams {
    /** The profile ID. */
    profilesId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    /** The indication of how many resources to return, unless the response is the last page of resources. */
    limit?: number;
    /** Determine what resource to start the page on or after. */
    start?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `createAttachment` operation. */
  export interface CreateAttachmentParams {
    /** The profile ID. */
    profilesId: string;
    /** The array that displays all of the available attachments. */
    attachments: AttachmentsPrototype[];
    /** The ID of the profile that is specified in the attachment. */
    profileId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `deleteProfileAttachment` operation. */
  export interface DeleteProfileAttachmentParams {
    /** The attachment ID. */
    attachmentId: string;
    /** The profile ID. */
    profilesId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getProfileAttachment` operation. */
  export interface GetProfileAttachmentParams {
    /** The attachment ID. */
    attachmentId: string;
    /** The profile ID. */
    profilesId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `replaceProfileAttachment` operation. */
  export interface ReplaceProfileAttachmentParams {
    /** The attachment ID. */
    attachmentId: string;
    /** The profile ID. */
    profilesId: string;
    /** The ID of the attachment. */
    id?: string;
    /** The ID of the profile that is specified in the attachment. */
    profileId?: string;
    /** The account ID that is associated to the attachment. */
    accountId?: string;
    /** The instance ID of the account that is associated to the attachment. */
    instanceId?: string;
    /** The scope payload for the multi cloud feature. */
    scope?: MultiCloudScope[];
    /** The date when the attachment was created. */
    createdOn?: string;
    /** The user who created the attachment. */
    createdBy?: string;
    /** The date when the attachment was updated. */
    updatedOn?: string;
    /** The user who updated the attachment. */
    updatedBy?: string;
    /** The status of an attachment evaluation. */
    status?: ReplaceProfileAttachmentConstants.Status | string;
    /** The schedule of an attachment evaluation. */
    schedule?: ReplaceProfileAttachmentConstants.Schedule | string;
    /** The request payload of the attachment notifications. */
    notifications?: AttachmentsNotificationsPrototype;
    /** The profile parameters for the attachment. */
    attachmentParameters?: AttachmentParameterPrototype[];
    /** The details of the last scan of an attachment. */
    lastScan?: LastScan;
    /** The start time of the next scan. */
    nextScanTime?: string;
    /** The name of the attachment. */
    name?: string;
    /** The description for the attachment. */
    description?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `replaceProfileAttachment` operation. */
  export namespace ReplaceProfileAttachmentConstants {
    /** The status of an attachment evaluation. */
    export enum Status {
      ENABLED = 'enabled',
      DISABLED = 'disabled',
    }
    /** The schedule of an attachment evaluation. */
    export enum Schedule {
      DAILY = 'daily',
      EVERY_7_DAYS = 'every_7_days',
      EVERY_30_DAYS = 'every_30_days',
    }
  }

  /** Parameters for the `createScan` operation. */
  export interface CreateScanParams {
    /** The attachment ID of a profile. */
    attachmentId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `listAttachmentsAccount` operation. */
  export interface ListAttachmentsAccountParams {
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is not used for downstream requests and retries of those requests. If
     *  a value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xRequestId?: string;
    /** The indication of how many resources to return, unless the response is the last page of resources. */
    limit?: number;
    /** Determine what resource to start the page on or after. */
    start?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getLatestReports` operation. */
  export interface GetLatestReportsParams {
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** This field sorts results by using a valid sort field. To learn more, see
     *  [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
     */
    sort?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `listReports` operation. */
  export interface ListReportsParams {
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** The ID of the attachment. */
    attachmentId?: string;
    /** The report group ID. */
    groupId?: string;
    /** The ID of the profile. */
    profileId?: string;
    /** The type of the scan. */
    type?: ListReportsConstants.Type | string;
    /** The indication of what resource to start the page on. */
    start?: string;
    /** The indication of many resources to return, unless the response is  the last page of resources. */
    limit?: number;
    /** This field sorts results by using a valid sort field. To learn more, see
     *  [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
     */
    sort?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `listReports` operation. */
  export namespace ListReportsConstants {
    /** The type of the scan. */
    export enum Type {
      ONDEMAND = 'ondemand',
      SCHEDULED = 'scheduled',
    }
  }

  /** Parameters for the `getReport` operation. */
  export interface GetReportParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getReportSummary` operation. */
  export interface GetReportSummaryParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getReportEvaluation` operation. */
  export interface GetReportEvaluationParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** The indication of whether report summary metadata must be excluded. */
    excludeSummary?: boolean;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getReportControls` operation. */
  export interface GetReportControlsParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** The ID of the control. */
    controlId?: string;
    /** The name of the control. */
    controlName?: string;
    /** The description of the control. */
    controlDescription?: string;
    /** A control category value. */
    controlCategory?: string;
    /** The compliance status value. */
    status?: GetReportControlsConstants.Status | string;
    /** This field sorts controls by using a valid sort field. To learn more, see
     *  [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
     */
    sort?: GetReportControlsConstants.Sort | string;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `getReportControls` operation. */
  export namespace GetReportControlsConstants {
    /** The compliance status value. */
    export enum Status {
      COMPLIANT = 'compliant',
      NOT_COMPLIANT = 'not_compliant',
      UNABLE_TO_PERFORM = 'unable_to_perform',
      USER_EVALUATION_REQUIRED = 'user_evaluation_required',
    }
    /** This field sorts controls by using a valid sort field. To learn more, see [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting). */
    export enum Sort {
      CONTROL_NAME = 'control_name',
      CONTROL_CATEGORY = 'control_category',
      STATUS = 'status',
    }
  }

  /** Parameters for the `getReportRule` operation. */
  export interface GetReportRuleParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The ID of a rule in a report. */
    ruleId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `listReportEvaluations` operation. */
  export interface ListReportEvaluationsParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** The ID of the assessment. */
    assessmentId?: string;
    /** The ID of component. */
    componentId?: string;
    /** The ID of the evaluation target. */
    targetId?: string;
    /** The name of the evaluation target. */
    targetName?: string;
    /** The evaluation status value. */
    status?: ListReportEvaluationsConstants.Status | string;
    /** The indication of what resource to start the page on. */
    start?: string;
    /** The indication of many resources to return, unless the response is  the last page of resources. */
    limit?: number;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `listReportEvaluations` operation. */
  export namespace ListReportEvaluationsConstants {
    /** The evaluation status value. */
    export enum Status {
      PASS = 'pass',
      FAILURE = 'failure',
      ERROR = 'error',
      SKIPPED = 'skipped',
    }
  }

  /** Parameters for the `listReportResources` operation. */
  export interface ListReportResourcesParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** The ID of the resource. */
    id?: string;
    /** The name of the resource. */
    resourceName?: string;
    /** The ID of the account owning a resource. */
    accountId?: string;
    /** The ID of component. */
    componentId?: string;
    /** The compliance status value. */
    status?: ListReportResourcesConstants.Status | string;
    /** This field sorts resources by using a valid sort field. To learn more, see
     *  [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting).
     */
    sort?: ListReportResourcesConstants.Sort | string;
    /** The indication of what resource to start the page on. */
    start?: string;
    /** The indication of many resources to return, unless the response is  the last page of resources. */
    limit?: number;
    headers?: OutgoingHttpHeaders;
  }

  /** Constants for the `listReportResources` operation. */
  export namespace ListReportResourcesConstants {
    /** The compliance status value. */
    export enum Status {
      COMPLIANT = 'compliant',
      NOT_COMPLIANT = 'not_compliant',
      UNABLE_TO_PERFORM = 'unable_to_perform',
      USER_EVALUATION_REQUIRED = 'user_evaluation_required',
    }
    /** This field sorts resources by using a valid sort field. To learn more, see [Sorting](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-sorting). */
    export enum Sort {
      ACCOUNT_ID = 'account_id',
      COMPONENT_ID = 'component_id',
      RESOURCE_NAME = 'resource_name',
      STATUS = 'status',
    }
  }

  /** Parameters for the `getReportTags` operation. */
  export interface GetReportTagsParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getReportViolationsDrift` operation. */
  export interface GetReportViolationsDriftParams {
    /** The ID of the scan that is associated with a report. */
    reportId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this header is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this header is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    /** The duration of the `scan_time` timestamp in number of days. */
    scanTimeDuration?: number;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `listProviderTypes` operation. */
  export interface ListProviderTypesParams {
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getProviderTypeById` operation. */
  export interface GetProviderTypeByIdParams {
    /** The provider type ID. */
    providerTypeId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `listProviderTypeInstances` operation. */
  export interface ListProviderTypeInstancesParams {
    /** The provider type ID. */
    providerTypeId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `createProviderTypeInstance` operation. */
  export interface CreateProviderTypeInstanceParams {
    /** The provider type ID. */
    providerTypeId: string;
    /** The provider type instance name. */
    name?: string;
    /** The attributes for connecting to the provider type instance. */
    attributes?: JsonObject;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `deleteProviderTypeInstance` operation. */
  export interface DeleteProviderTypeInstanceParams {
    /** The provider type ID. */
    providerTypeId: string;
    /** The provider type instance ID. */
    providerTypeInstanceId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getProviderTypeInstance` operation. */
  export interface GetProviderTypeInstanceParams {
    /** The provider type ID. */
    providerTypeId: string;
    /** The provider type instance ID. */
    providerTypeInstanceId: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `updateProviderTypeInstance` operation. */
  export interface UpdateProviderTypeInstanceParams {
    /** The provider type ID. */
    providerTypeId: string;
    /** The provider type instance ID. */
    providerTypeInstanceId: string;
    /** The provider type instance name. */
    name?: string;
    /** The attributes for connecting to the provider type instance. */
    attributes?: JsonObject;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /** Parameters for the `getProviderTypesInstances` operation. */
  export interface GetProviderTypesInstancesParams {
    /** The supplied or generated value of this header is logged for a request and repeated in a response header for
     *  the corresponding response. The same value is used for downstream requests and retries of those requests. If a
     *  value of this headers is not supplied in a request, the service generates a random (version 4) UUID.
     */
    xCorrelationId?: string;
    /** The supplied or generated value of this header is logged for a request and repeated in a response header
     *  for the corresponding response.  The same value is not used for downstream requests and retries of those
     *  requests.  If a value of this headers is not supplied in a request, the service generates a random (version 4)
     *  UUID.
     */
    xRequestId?: string;
    headers?: OutgoingHttpHeaders;
  }

  /*************************
   * model interfaces
   ************************/

  /** The account that is associated with a report. */
  export interface Account {
    /** The account ID. */
    id?: string;
    /** The account name. */
    name?: string;
    /** The account type. */
    type?: string;
  }

  /** AdditionalProperty. */
  export interface AdditionalProperty {
    /** An additional property that indicates the type of the attribute in various formats (text, url, secret,
     *  label, masked).
     */
    type: string;
    /** The name of the attribute that is displayed in the UI. */
    display_name: string;
  }

  /** The additional target attribute of the service. */
  export interface AdditionalTargetAttribute {
    /** The additional target attribute name. */
    name?: string;
    /** The operator. */
    operator?: string;
    /** The value. */
    value?: string;
  }

  /** The control specification assessment. */
  export interface Assessment {
    /** The assessment ID. */
    assessment_id?: string;
    /** The assessment type. */
    assessment_type?: string;
    /** The assessment method. */
    assessment_method?: string;
    /** The assessment description. */
    assessment_description?: string;
    /** The number of parameters of this assessment. */
    parameter_count?: number;
    /** The list of parameters of this assessment. */
    parameters?: ParameterInfo[];
  }

  /** The attachment that is associated with a report. */
  export interface Attachment {
    /** The attachment ID. */
    id?: string;
    /** The name of the attachment. */
    name?: string;
    /** The description of the attachment. */
    description?: string;
    /** The attachment schedule. */
    schedule?: string;
    /** The scope of the attachment. */
    scope?: AttachmentScope[];
  }

  /** The response body of an attachment. */
  export interface AttachmentCollection {
    /** The number of attachments. */
    total_count: number;
    /** The limit of attachments per request. */
    limit: number;
    /** The reference to the first page of entries. */
    first: PaginatedCollectionFirst;
    /** The reference URL for the next few entries. */
    next: PaginatedCollectionNext;
    /** The list of attachments. */
    attachments: AttachmentItem[];
  }

  /** The request payload of the attachments parameter. */
  export interface AttachmentItem {
    /** The ID of the attachment. */
    id?: string;
    /** The ID of the profile that is specified in the attachment. */
    profile_id?: string;
    /** The account ID that is associated to the attachment. */
    account_id?: string;
    /** The instance ID of the account that is associated to the attachment. */
    instance_id?: string;
    /** The scope payload for the multi cloud feature. */
    scope?: MultiCloudScope[];
    /** The date when the attachment was created. */
    created_on?: string;
    /** The user who created the attachment. */
    created_by?: string;
    /** The date when the attachment was updated. */
    updated_on?: string;
    /** The user who updated the attachment. */
    updated_by?: string;
    /** The status of an attachment evaluation. */
    status?: string;
    /** The schedule of an attachment evaluation. */
    schedule?: string;
    /** The request payload of the attachment notifications. */
    notifications?: AttachmentsNotificationsPrototype;
    /** The profile parameters for the attachment. */
    attachment_parameters?: AttachmentParameterPrototype[];
    /** The details of the last scan of an attachment. */
    last_scan?: LastScan;
    /** The start time of the next scan. */
    next_scan_time?: string;
    /** The name of the attachment. */
    name?: string;
    /** The description for the attachment. */
    description?: string;
  }

  /** The parameters related to the Attachment. */
  export interface AttachmentParameterPrototype {
    /** The type of the implementation. */
    assessment_type?: string;
    /** The implementation ID of the parameter. */
    assessment_id?: string;
    /** The parameter name. */
    parameter_name?: string;
    /** The value of the parameter. */
    parameter_value?: string;
    /** The parameter display name. */
    parameter_display_name?: string;
    /** The parameter type. */
    parameter_type?: string;
  }

  /** The request body of getting an attachment that is associated with your account. */
  export interface AttachmentPrototype {
    /** The ID of the profile that is specified in the attachment. */
    profile_id?: string;
    /** The array that displays all of the available attachments. */
    attachments: AttachmentsPrototype[];
  }

  /** A scope of the attachment. */
  export interface AttachmentScope {
    /** The unique identifier for this scope. */
    id?: string;
    /** The environment that relates to this scope. */
    environment?: string;
    /** The properties that are supported for scoping by this environment. */
    properties?: ScopeProperty[];
  }

  /** The request payload of the attachment notifications. */
  export interface AttachmentsNotificationsPrototype {
    /** enabled notifications. */
    enabled: boolean;
    /** The failed controls. */
    controls: FailedControls;
  }

  /** The request payload of getting all of the attachments that are associated with the account. */
  export interface AttachmentsPrototype {
    /** The id that is generated from the scope type and ID. */
    id?: string;
    /** The name that is generated from the scope type and ID. */
    name: string;
    /** The description for the attachment. */
    description?: string;
    /** The scope payload for the multi cloud feature. */
    scope: MultiCloudScope[];
    /** The status of the scan of an attachment. */
    status: string;
    /** The schedule of an attachment evaluation. */
    schedule: string;
    /** The request payload of the attachment notifications. */
    notifications?: AttachmentsNotificationsPrototype;
    /** The profile parameters for the attachment. */
    attachment_parameters: AttachmentParameterPrototype[];
  }

  /** The compliance score. */
  export interface ComplianceScore {
    /** The number of successful evaluations. */
    passed?: number;
    /** The total number of evaluations. */
    total_count?: number;
    /** The percentage of successful evaluations. */
    percent?: number;
  }

  /** The compliance stats. */
  export interface ComplianceStats {
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of checks. */
    total_count?: number;
    /** The number of compliant checks. */
    compliant_count?: number;
    /** The number of checks that are not compliant. */
    not_compliant_count?: number;
    /** The number of checks that are unable to perform. */
    unable_to_perform_count?: number;
    /** The number of checks that require a user evaluation. */
    user_evaluation_required_count?: number;
  }

  /** The control documentation. */
  export interface ControlDocs {
    /** The ID of the control documentation. */
    control_docs_id?: string;
    /** The type of control documentation. */
    control_docs_type?: string;
  }

  /** The request payload of the control library. */
  export interface ControlLibrary {
    /** The control library ID. */
    id?: string;
    /** The account ID. */
    account_id?: string;
    /** The control library name. */
    control_library_name?: string;
    /** The control library description. */
    control_library_description?: string;
    /** The control library type. */
    control_library_type?: string;
    /** The version group label. */
    version_group_label?: string;
    /** The control library version. */
    control_library_version?: string;
    /** The date when the control library was created. */
    created_on?: string;
    /** The user who created the control library. */
    created_by?: string;
    /** The date when the control library was updated. */
    updated_on?: string;
    /** The user who updated the control library. */
    updated_by?: string;
    /** The latest version of the control library. */
    latest?: boolean;
    /** The indication of whether hierarchy is enabled for the control library. */
    hierarchy_enabled?: boolean;
    /** The number of controls. */
    controls_count?: number;
    /** The number of parent controls in the control library. */
    control_parents_count?: number;
    /** The list of controls in a control library. */
    controls?: ControlsInControlLib[];
  }

  /** The response body of control libraries. */
  export interface ControlLibraryCollection {
    /** The number of control libraries. */
    total_count: number;
    /** limit. */
    limit: number;
    /** The reference to the first page of entries. */
    first: PaginatedCollectionFirst;
    /** The reference URL for the next few entries. */
    next: PaginatedCollectionNext;
    /** The control libraries. */
    control_libraries: ControlLibraryItem[];
  }

  /** The response body of deleting of a control library. */
  export interface ControlLibraryDelete {
    /** The delete message of a control library. */
    deleted?: string;
  }

  /** ControlLibraryItem. */
  export interface ControlLibraryItem {
    /** The ID of the control library. */
    id?: string;
    /** The Account ID. */
    account_id?: string;
    /** The control library name. */
    control_library_name?: string;
    /** The control library description. */
    control_library_description?: string;
    /** The control library type. */
    control_library_type?: string;
    /** The date when the control library was created. */
    created_on?: string;
    /** The user who created the control library. */
    created_by?: string;
    /** The date when the control library was updated. */
    updated_on?: string;
    /** The use who updated the control library. */
    updated_by?: string;
    /** The version group label. */
    version_group_label?: string;
    /** The control library version. */
    control_library_version?: string;
    /** The latest control library version. */
    latest?: boolean;
    /** The number of controls. */
    controls_count?: number;
  }

  /** The control specification with compliance stats. */
  export interface ControlSpecificationWithStats {
    /** The control specification ID. */
    control_specification_id?: string;
    /** The component ID. */
    component_id?: string;
    /** The component description. */
    control_specification_description?: string;
    /** The environment. */
    environment?: string;
    /** The responsibility for managing control specifications. */
    responsibility?: string;
    /** The list of assessments. */
    assessments?: Assessment[];
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of checks. */
    total_count?: number;
    /** The number of compliant checks. */
    compliant_count?: number;
    /** The number of checks that are not compliant. */
    not_compliant_count?: number;
    /** The number of checks that are unable to perform. */
    unable_to_perform_count?: number;
    /** The number of checks that require a user evaluation. */
    user_evaluation_required_count?: number;
  }

  /** The control specifications of a control library. */
  export interface ControlSpecifications {
    /** The control specification ID. */
    control_specification_id?: string;
    /** The responsibility for managing the control. */
    responsibility?: string;
    /** The component ID. */
    component_id?: string;
    /** The component name. */
    componenet_name?: string;
    /** The control specifications environment. */
    environment?: string;
    /** The control specifications description. */
    control_specification_description?: string;
    /** The number of assessments. */
    assessments_count?: number;
    /** The assessments. */
    assessments?: Implementation[];
  }

  /** The control with compliance stats. */
  export interface ControlWithStats {
    /** The control ID. */
    id?: string;
    /** The control library ID. */
    control_library_id?: string;
    /** The control library version. */
    control_library_version?: string;
    /** The control name. */
    control_name?: string;
    /** The control description. */
    control_description?: string;
    /** The control category. */
    control_category?: string;
    /** The control path. */
    control_path?: string;
    /** The list of specifications that are on the page. */
    control_specifications?: ControlSpecificationWithStats[];
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of checks. */
    total_count?: number;
    /** The number of compliant checks. */
    compliant_count?: number;
    /** The number of checks that are not compliant. */
    not_compliant_count?: number;
    /** The number of checks that are unable to perform. */
    unable_to_perform_count?: number;
    /** The number of checks that require a user evaluation. */
    user_evaluation_required_count?: number;
  }

  /** The control details of a control library. */
  export interface ControlsInControlLib {
    /** The ID of the control library that contains the profile. */
    control_name?: string;
    /** The control name. */
    control_id?: string;
    /** The control description. */
    control_description?: string;
    /** The control category. */
    control_category?: string;
    /** The parent control. */
    control_parent?: string;
    /** The control tags. */
    control_tags?: string[];
    /** The control specifications. */
    control_specifications?: ControlSpecifications[];
    /** The control documentation. */
    control_docs?: ControlDocs;
    /** Is this a control that can be automated or manually evaluated. */
    control_requirement?: boolean;
    /** The control status. */
    status?: string;
  }

  /** The control details of a profile. */
  export interface DefaultParametersPrototype {
    /** The type of the implementation. */
    assessment_type?: string;
    /** The implementation ID of the parameter. */
    assessment_id?: string;
    /** The parameter name. */
    parameter_name?: string;
    /** The default value of the parameter. */
    parameter_default_value?: string;
    /** The parameter display name. */
    parameter_display_name?: string;
    /** The parameter type. */
    parameter_type?: string;
  }

  /** The evaluation details. */
  export interface EvalDetails {
    /** The evaluation properties. */
    properties?: Property[];
  }

  /** The evaluation stats. */
  export interface EvalStats {
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of evaluations. */
    total_count?: number;
    /** The number of passed evaluations. */
    pass_count?: number;
    /** The number of failed evaluations. */
    failure_count?: number;
    /** The number of evaluations that started, but did not finish, and ended with errors. */
    error_count?: number;
    /** The total number of completed evaluations. */
    completed_count?: number;
  }

  /** The evaluation of a control specification assessment. */
  export interface Evaluation {
    /** The ID of the home account. */
    home_account_id?: string;
    /** The ID of the report that is associated to the evaluation. */
    report_id?: string;
    /** The control ID. */
    control_id?: string;
    /** The component ID. */
    component_id?: string;
    /** The control specification assessment. */
    assessment?: Assessment;
    /** The time when the evaluation was made. */
    evaluate_time?: string;
    /** The evaluation target. */
    target?: TargetInfo;
    /** The allowed values of an evaluation status. */
    status?: string;
    /** The reason for the evaluation failure. */
    reason?: string;
    /** The evaluation details. */
    details?: EvalDetails;
  }

  /** The page of assessment evaluations. */
  export interface EvaluationPage {
    /** The total number of resources that are in the collection. */
    total_count: number;
    /** The requested page limi.t. */
    limit: number;
    /** The token of the next page, when it's present. */
    start?: string;
    /** The page reference. */
    first: PageHRef;
    /** The page reference. */
    next?: PageHRef;
    /** The ID of the home account. */
    home_account_id?: string;
    /** The ID of the report. */
    report_id?: string;
    /** The list of evaluations that are on the page. */
    evaluations?: Evaluation[];
  }

  /** The Event Notifications settings. */
  export interface EventNotifications {
    /** The Event Notifications instance CRN. */
    instance_crn?: string;
    /** The date when the Event Notifications connection was updated. */
    updated_on?: string;
    /** The connected Security and Compliance Center instance CRN. */
    source_id?: string;
    /** The description of the source of the Event Notifications. */
    source_description?: string;
    /** The name of the source of the Event Notifications. */
    source_name?: string;
  }

  /** The failed controls. */
  export interface FailedControls {
    /** The threshold limit. */
    threshold_limit?: number;
    /** The failed control IDs. */
    failed_control_ids?: string[];
  }

  /** The implementation details of a control library. */
  export interface Implementation {
    /** The assessment ID. */
    assessment_id?: string;
    /** The assessment method. */
    assessment_method?: string;
    /** The assessment type. */
    assessment_type?: string;
    /** The assessment description. */
    assessment_description?: string;
    /** The parameter count. */
    parameter_count?: number;
    /** The parameters. */
    parameters?: ParameterInfo[];
  }

  /** The collection of import parameters. */
  export interface Import {
    /** The list of import parameters. */
    parameters?: Parameter[];
  }

  /** The label that is associated with the provider type. */
  export interface LabelType {
    /** The text of the label. */
    text?: string;
    /** The text to be shown when user hover overs the label. */
    tip?: string;
  }

  /** The details of the last scan of an attachment. */
  export interface LastScan {
    /** The ID of the last scan of an attachment. */
    id?: string;
    /** The status of the last scan of an attachment. */
    status?: string;
    /** The time when the last scan started. */
    time?: string;
  }

  /** The scope payload for the multi cloud feature. */
  export interface MultiCloudScope {
    /** The environment that relates to this scope. */
    environment: string;
    /** The properties supported for scoping by this environment. */
    properties: PropertyItem[];
  }

  /** The Cloud Object Storage settings. */
  export interface ObjectStorage {
    /** The connected Cloud Object Storage instance CRN. */
    instance_crn?: string;
    /** The connected Cloud Object Storage bucket name. */
    bucket?: string;
    /** The connected Cloud Object Storage bucket location. */
    bucket_location?: string;
    /** The connected Cloud Object Storage bucket endpoint. */
    bucket_endpoint?: string;
    /** The date when the bucket connection was updated. */
    updated_on?: string;
  }

  /** The page reference. */
  export interface PageHRef {
    /** The URL for the first and next page. */
    href: string;
  }

  /** A page reference. */
  export interface PageHRefFirst {
    /** A URL for the first and next page. */
    href: string;
  }

  /** A page reference. */
  export interface PageHRefNext {
    /** A URL for the first and next page. */
    href: string;
    /** The token of the next page when present. */
    start?: string;
  }

  /** The reference to the first page of entries. */
  export interface PaginatedCollectionFirst {
    /** The reference URL for the first few entries. */
    href?: string;
  }

  /** The reference URL for the next few entries. */
  export interface PaginatedCollectionNext {
    /** The reference URL for the entries. */
    href?: string;
    /** The reference to the start of the list of entries. */
    start?: string;
  }

  /** The rule import parameter. */
  export interface Parameter {
    /** The import parameter name. */
    name?: string;
    /** The display name of the property. */
    display_name?: string;
    /** The propery description. */
    description?: string;
    /** The property type. */
    type?: string;
  }

  /** The parameter details. */
  export interface ParameterInfo {
    /** The parameter name. */
    parameter_name?: string;
    /** The parameter display name. */
    parameter_display_name?: string;
    /** The parameter type. */
    parameter_type?: string;
    /** The property value. */
    parameter_value?: any;
  }

  /** The response body of the profile. */
  export interface Profile {
    /** The unique ID of the profile. */
    id?: string;
    /** The profile name. */
    profile_name?: string;
    /** The profile description. */
    profile_description?: string;
    /** The profile type, such as custom or predefined. */
    profile_type?: string;
    /** The version status of the profile. */
    profile_version?: string;
    /** The version group label of the profile. */
    version_group_label?: string;
    /** The instance ID. */
    instance_id?: string;
    /** The latest version of the profile. */
    latest?: boolean;
    /** The indication of whether hierarchy is enabled for the profile. */
    hierarchy_enabled?: boolean;
    /** The user who created the profile. */
    created_by?: string;
    /** The date when the profile was created. */
    created_on?: string;
    /** The user who updated the profile. */
    updated_by?: string;
    /** The date when the profile was updated. */
    updated_on?: string;
    /** The number of controls for the profile. */
    controls_count?: number;
    /** The number of parent controls for the profile. */
    control_parents_count?: number;
    /** The number of attachments related to this profile. */
    attachments_count?: number;
    /** The array of controls that are used to create the profile. */
    controls?: ProfileControls[];
    /** The default parameters of the profile. */
    default_parameters?: DefaultParametersPrototype[];
  }

  /** The response body to get all profiles that are linked to your account. */
  export interface ProfileCollection {
    /** The number of profiles. */
    total_count: number;
    /** The limit of profiles that can be created. */
    limit: number;
    /** The reference to the first page of entries. */
    first: PaginatedCollectionFirst;
    /** The reference URL for the next few entries. */
    next: PaginatedCollectionNext;
    /** The profiles. */
    profiles: ProfileItem[];
  }

  /** The control details for the profile. */
  export interface ProfileControls {
    /** The ID of the control library that contains the profile. */
    control_library_id?: string;
    /** The unique ID of the control library that contains the profile. */
    control_id?: string;
    /** The most recent version of the control library. */
    control_library_version?: string;
    /** The control name. */
    control_name?: string;
    /** The control description. */
    control_description?: string;
    /** The control category. */
    control_category?: string;
    /** The parent control. */
    control_parent?: string;
    /** Is this a control that can be automated or manually evaluated. */
    control_requirement?: boolean;
    /** The control documentation. */
    control_docs?: ControlDocs;
    /** The number of control specifications. */
    control_specifications_count?: number;
    /** The control specifications. */
    control_specifications?: ControlSpecifications[];
  }

  /** The control details of a profile. */
  export interface ProfileControlsPrototype {
    /** The ID of the control library that contains the profile. */
    control_library_id?: string;
    /** The control ID. */
    control_id?: string;
  }

  /** The profile information. */
  export interface ProfileInfo {
    /** The profile ID. */
    id?: string;
    /** The profile name. */
    name?: string;
    /** The profile version. */
    version?: string;
  }

  /** ProfileItem. */
  export interface ProfileItem {
    /** The profile ID. */
    id?: string;
    /** The profile name. */
    profile_name?: string;
    /** The profile description. */
    profile_description?: string;
    /** The profile type. */
    profile_type?: string;
    /** The profile version. */
    profile_version?: string;
    /** The version group label. */
    version_group_label?: string;
    /** The latest profile. */
    latest?: boolean;
    /** The user who created the profile. */
    created_by?: string;
    /** The date when the profile was created. */
    created_on?: string;
    /** The user who updated the profile. */
    updated_by?: string;
    /** The date when the profile was updated. */
    updated_on?: string;
    /** The number of controls. */
    controls_count?: number;
    /** The number of attachments. */
    attachments_count?: number;
  }

  /** The property. */
  export interface Property {
    /** The property name. */
    property?: string;
    /** The property description. */
    property_description?: string;
    /** The property operator. */
    operator?: string;
    /** The property value. */
    expected_value?: any;
    /** The property value. */
    found_value?: any;
  }

  /** The properties supported for scoping by this environment. */
  export interface PropertyItem {
    /** The name of the property. */
    name?: string;
    /** The value of the property. */
    value?: string;
  }

  /** A provider type instance. */
  export interface ProviderTypeInstanceItem {
    /** The unique identifier of the provider type instance. */
    id?: string;
    /** The type of the provider type. */
    type?: string;
    /** The name of the provider type instance. */
    name?: string;
    /** The attributes for connecting to the provider type instance. */
    attributes?: JsonObject;
    /** Time at which resource was created. */
    created_at?: string;
    /** Time at which resource was updated. */
    updated_at?: string;
  }

  /** Provider type instances response. */
  export interface ProviderTypeInstancesResponse {
    /** The array of instances for a provider type. */
    provider_type_instances?: ProviderTypeInstanceItem[];
  }

  /** The provider type item. */
  export interface ProviderTypeItem {
    /** The unique identifier of the provider type. */
    id: string;
    /** The type of the provider type. */
    type: string;
    /** The name of the provider type. */
    name: string;
    /** The provider type description. */
    description: string;
    /** A boolean that indicates whether the provider type is s2s-enabled. */
    s2s_enabled: boolean;
    /** The maximum number of instances that can be created for the provider type. */
    instance_limit: number;
    /** The mode that is used to get results from provider (`PUSH` or `PULL`). */
    mode: string;
    /** The format of the results that a provider supports. */
    data_type: string;
    /** The icon of a provider in .svg format that is encoded as a base64 string. */
    icon: string;
    /** The label that is associated with the provider type. */
    label?: LabelType;
    /** The attributes that are required when you're creating an instance of a provider type. The attributes field
     *  can have multiple  keys in its value. Each of those keys has a value  object that includes the type, and display
     *  name as keys. For example, `{type:"", display_name:""}`.
     *  **NOTE;** If the provider type is s2s-enabled, which means that if the `s2s_enabled` field is set to `true`,
     *  then a CRN field of type text is required in the attributes value object.
     */
    attributes: JsonObject;
    /** Time at which resource was created. */
    created_at?: string;
    /** Time at which resource was updated. */
    updated_at?: string;
  }

  /** The provider types collection. */
  export interface ProviderTypesCollection {
    /** The array of provder type. */
    provider_types?: ProviderTypeItem[];
  }

  /** Provider types instances response. */
  export interface ProviderTypesInstancesResponse {
    /** The array of instances for all provider types. */
    provider_types_instances?: ProviderTypeInstanceItem[];
  }

  /** The report. */
  export interface Report {
    /** The ID of the report. */
    id?: string;
    /** The group ID that is associated with the report. The group ID combines profile, scope, and attachment IDs. */
    group_id?: string;
    /** The date when the report was created. */
    created_on?: string;
    /** The date when the scan was run. */
    scan_time?: string;
    /** The type of the scan. */
    type?: string;
    /** The Cloud Object Storage object that is associated with the report. */
    cos_object?: string;
    /** Instance ID. */
    instance_id?: string;
    /** The account that is associated with a report. */
    account?: Account;
    /** The profile information. */
    profile?: ProfileInfo;
    /** The attachment that is associated with a report. */
    attachment?: Attachment;
  }

  /** The list of controls. */
  export interface ReportControls {
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of checks. */
    total_count?: number;
    /** The number of compliant checks. */
    compliant_count?: number;
    /** The number of checks that are not compliant. */
    not_compliant_count?: number;
    /** The number of checks that are unable to perform. */
    unable_to_perform_count?: number;
    /** The number of checks that require a user evaluation. */
    user_evaluation_required_count?: number;
    /** The ID of the home account. */
    home_account_id?: string;
    /** The ID of the report. */
    report_id?: string;
    /** The list of controls that are in the report. */
    controls?: ControlWithStats[];
  }

  /** The response body of the `get_latest_reports` operation. */
  export interface ReportLatest {
    /** The ID of the home account. */
    home_account_id?: string;
    /** The compliance stats. */
    controls_summary?: ComplianceStats;
    /** The evaluation stats. */
    evaluations_summary?: EvalStats;
    /** The compliance score. */
    score?: ComplianceScore;
    /** The list of reports. */
    reports?: Report[];
  }

  /** The page of reports. */
  export interface ReportPage {
    /** The total number of resources that are in the collection. */
    total_count: number;
    /** The requested page limi.t. */
    limit: number;
    /** The token of the next page, when it's present. */
    start?: string;
    /** The page reference. */
    first: PageHRef;
    /** The page reference. */
    next?: PageHRef;
    /** The ID of the home account. */
    home_account_id?: string;
    /** The list of reports that are on the page. */
    reports?: Report[];
  }

  /** The report summary. */
  export interface ReportSummary {
    /** The ID of the report. */
    report_id?: string;
    /** Instance ID. */
    isntance_id?: string;
    /** The account that is associated with a report. */
    account?: Account;
    /** The compliance score. */
    score?: ComplianceScore;
    /** The compliance stats. */
    controls?: ComplianceStats;
    /** The evaluation stats. */
    evaluations?: EvalStats;
    /** The resource summary. */
    resources?: ResourceSummary;
  }

  /** The response body of the `get_tags` operation. */
  export interface ReportTags {
    /** The ID of the report. */
    report_id?: string;
    /** The collection of different types of tags. */
    tags?: Tags;
  }

  /** The report violation data point. */
  export interface ReportViolationDataPoint {
    /** The ID of the report. */
    report_id?: string;
    /** The group ID that is associated with the report. The group ID combines profile, scope, and attachment IDs. */
    report_group_id?: string;
    /** The date when the scan was run. */
    scan_time?: string;
    /** The compliance stats. */
    controls?: ComplianceStats;
  }

  /** The response body of the `get_report_violations_drift` operation. */
  export interface ReportViolationsDrift {
    /** The ID of the home account. */
    home_account_id?: string;
    /** The ID of the report. */
    report_id?: string;
    /** The list of report violations data points. */
    data_points?: ReportViolationDataPoint[];
  }

  /** The required configurations. */
  export interface RequiredConfig {
  }

  /** RequiredConfigItems. */
  export interface RequiredConfigItems {
  }

  /** The resource. */
  export interface Resource {
    /** The ID of the report. */
    report_id?: string;
    /** The resource CRN. */
    id?: string;
    /** The resource name. */
    resource_name?: string;
    /** The ID of the component. */
    component_id?: string;
    /** The environment. */
    environment?: string;
    /** The account that is associated with a report. */
    account?: Account;
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of evaluations. */
    total_count?: number;
    /** The number of passed evaluations. */
    pass_count?: number;
    /** The number of failed evaluations. */
    failure_count?: number;
    /** The number of evaluations that started, but did not finish, and ended with errors. */
    error_count?: number;
    /** The total number of completed evaluations. */
    completed_count?: number;
  }

  /** The page of resource evaluation summaries. */
  export interface ResourcePage {
    /** The total number of resources that are in the collection. */
    total_count: number;
    /** The requested page limi.t. */
    limit: number;
    /** The token of the next page, when it's present. */
    start?: string;
    /** The page reference. */
    first: PageHRef;
    /** The page reference. */
    next?: PageHRef;
    /** The ID of the home account. */
    home_account_id?: string;
    /** The ID of the report. */
    report_id?: string;
    /** The list of resource evaluation summaries that are on the page. */
    resources?: Resource[];
  }

  /** The resource summary. */
  export interface ResourceSummary {
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of checks. */
    total_count?: number;
    /** The number of compliant checks. */
    compliant_count?: number;
    /** The number of checks that are not compliant. */
    not_compliant_count?: number;
    /** The number of checks that are unable to perform. */
    unable_to_perform_count?: number;
    /** The number of checks that require a user evaluation. */
    user_evaluation_required_count?: number;
    /** The top 10 resources that have the most failures. */
    top_failed?: ResourceSummaryItem[];
  }

  /** The resource summary item. */
  export interface ResourceSummaryItem {
    /** The resource name. */
    name?: string;
    /** The resource ID. */
    id?: string;
    /** The service that is managing the resource. */
    service?: string;
    /** The collection of different types of tags. */
    tags?: Tags;
    /** The account that owns the resource. */
    account?: string;
    /** The allowed values of an aggregated status for controls, specifications, assessments, and resources. */
    status?: string;
    /** The total number of evaluations. */
    total_count?: number;
    /** The number of passed evaluations. */
    pass_count?: number;
    /** The number of failed evaluations. */
    failure_count?: number;
    /** The number of evaluations that started, but did not finish, and ended with errors. */
    error_count?: number;
    /** The total number of completed evaluations. */
    completed_count?: number;
  }

  /** The rule response that corresponds to an account instance. */
  export interface Rule {
    /** The date when the rule was created. */
    created_on: string;
    /** The user who created the rule. */
    created_by: string;
    /** The date when the rule was modified. */
    updated_on: string;
    /** The user who modified the rule. */
    updated_by: string;
    /** The rule ID. */
    id: string;
    /** The account ID. */
    account_id: string;
    /** The details of a rule's response. */
    description: string;
    /** The rule type (allowable values are `user_defined` or `system_defined`). */
    type: string;
    /** The version number of a rule. */
    version: string;
    /** The collection of import parameters. */
    import?: Import;
    /** The rule target. */
    target: Target;
    /** The required configurations. */
    required_config: RequiredConfig;
    /** The list of labels. */
    labels: string[];
  }

  /** The rule. */
  export interface RuleInfo {
    /** The rule ID. */
    id?: string;
    /** The rule type. */
    type?: string;
    /** The rule description. */
    description?: string;
    /** The rule version. */
    version?: string;
    /** The rule account ID. */
    account_id?: string;
    /** The date when the rule was created. */
    created_on?: string;
    /** The ID of the user who created the rule. */
    created_by?: string;
    /** The date when the rule was updated. */
    updated_on?: string;
    /** The ID of the user who updated the rule. */
    updated_by?: string;
    /** The rule labels. */
    labels?: string[];
  }

  /** Page common fields. */
  export interface RulesPageBase {
    /** The requested page limit. */
    limit: number;
    /** The total number of resources in the collection. */
    total_count: number;
    /** A page reference. */
    first: PageHRefFirst;
    /** A page reference. */
    next?: PageHRefNext;
    /** The collection of rules that correspond to an account instance. Maximum of 100/500 custom rules per
     *  stand-alone/enterprise account.
     */
    rules?: Rule[];
  }

  /** The response schema for creating a scan. */
  export interface Scan {
    /** The scan ID. */
    id?: string;
    /** The account ID. */
    account_id?: string;
    /** The attachment ID of a profile. */
    attachment_id?: string;
    /** The report ID. */
    report_id?: string;
    /** The status of the scan. */
    status?: string;
    /** The last scan time. */
    last_scan_time?: string;
    /** The next scan time. */
    next_scan_time?: string;
    /** The type of scan. */
    scan_type?: string;
    /** The occurrence of the scan. */
    occurence?: number;
  }

  /** The properties that are supported for scoping by this attachment. */
  export interface ScopeProperty {
    /** The property name. */
    name?: string;
    /** The property value. */
    value?: string;
  }

  /** The settings. */
  export interface Settings {
    /** The Event Notifications settings. */
    event_notifications?: EventNotifications;
    /** The Cloud Object Storage settings. */
    object_storage?: ObjectStorage;
  }

  /** The collection of different types of tags. */
  export interface Tags {
    /** The collection of user tags. */
    user?: string[];
    /** The collection of access tags. */
    access?: string[];
    /** The collection of service tags. */
    service?: string[];
  }

  /** The rule target. */
  export interface Target {
    /** The target service name. */
    service_name: string;
    /** The display name of the target service. */
    service_display_name?: string;
    /** The target resource kind. */
    resource_kind: string;
    /** The list of targets supported properties. */
    additional_target_attributes?: AdditionalTargetAttribute[];
  }

  /** The evaluation target. */
  export interface TargetInfo {
    /** The target ID. */
    id?: string;
    /** The target account ID. */
    account_id?: string;
    /** The target resource CRN. */
    resource_crn?: string;
    /** The target resource name. */
    resource_name?: string;
    /** The target service name. */
    service_name?: string;
  }

  /** The details of a test event response. */
  export interface TestEvent {
    /** The indication of whether the event was received by Event Notifications. */
    success: boolean;
  }

  /** RequiredConfigItemsRequiredConfigAnd. */
  export interface RequiredConfigItemsRequiredConfigAnd extends RequiredConfigItems {
    /** The required config description. */
    description?: string;
    /** The `AND` required configurations. */
    and?: RequiredConfigItems[];
  }

  /** The required configuration base object. */
  export interface RequiredConfigItemsRequiredConfigBase extends RequiredConfigItems {
    /** The required config description. */
    description?: string;
    /** The property. */
    property: string;
    /** The operator. */
    operator: string;
    /** Schema for any JSON type. */
    value?: any;
  }

  /** The `OR` required configurations. */
  export interface RequiredConfigItemsRequiredConfigOr extends RequiredConfigItems {
    /** The required config description. */
    description?: string;
    /** The `OR` required configurations. */
    or?: RequiredConfigItems[];
  }

  /** RequiredConfigRequiredConfigAnd. */
  export interface RequiredConfigRequiredConfigAnd extends RequiredConfig {
    /** The required config description. */
    description?: string;
    /** The `AND` required configurations. */
    and?: RequiredConfigItems[];
  }

  /** The required configuration base object. */
  export interface RequiredConfigRequiredConfigBase extends RequiredConfig {
    /** The required config description. */
    description?: string;
    /** The property. */
    property: string;
    /** The operator. */
    operator: string;
    /** Schema for any JSON type. */
    value?: any;
  }

  /** The `OR` required configurations. */
  export interface RequiredConfigRequiredConfigOr extends RequiredConfig {
    /** The required config description. */
    description?: string;
    /** The `OR` required configurations. */
    or?: RequiredConfigItems[];
  }

  /*************************
   * pager classes
   ************************/

  /**
   * ControlLibrariesPager can be used to simplify the use of listControlLibraries().
   */
  export class ControlLibrariesPager {
    protected _hasNext: boolean;
    protected pageContext: any;

    protected client: SecurityAndComplianceCenterApiV3;

    protected params: SecurityAndComplianceCenterApiV3.ListControlLibrariesParams;

    /**
     * Construct a ControlLibrariesPager object.
     *
     * @param {SecurityAndComplianceCenterApiV3}  client - The service client instance used to invoke listControlLibraries()
     * @param {Object} [params] - The parameters to be passed to listControlLibraries()
     * @constructor
     * @returns {ControlLibrariesPager}
     */
    constructor(
      client: SecurityAndComplianceCenterApiV3,
      params?: SecurityAndComplianceCenterApiV3.ListControlLibrariesParams
    ) {
      if (params && params.start) {
        throw new Error(`the params.start field should not be set`);
      }

      this._hasNext = true;
      this.pageContext = { next: undefined };
      this.client = client;
      this.params = JSON.parse(JSON.stringify(params || {}));
    }

    /**
     * Returns true if there are potentially more results to be retrieved by invoking getNext().
     * @returns {boolean}
     */
    public hasNext(): boolean {
      return this._hasNext;
    }

    /**
     * Returns the next page of results by invoking listControlLibraries().
     * @returns {Promise<SecurityAndComplianceCenterApiV3.ControlLibraryItem[]>}
     */
    public async getNext(): Promise<SecurityAndComplianceCenterApiV3.ControlLibraryItem[]> {
      if (!this.hasNext()) {
        throw new Error('No more results available');
      }

      if (this.pageContext.next) {
        this.params.start = this.pageContext.next;
      }
      const response = await this.client.listControlLibraries(this.params);
      const { result } = response;

      let next = null;
      if (result && result.next) {
        next = result.next.start
      }
      this.pageContext.next = next;
      if (!this.pageContext.next) {
        this._hasNext = false;
      }
      return result.control_libraries;
    }

    /**
     * Returns all results by invoking listControlLibraries() repeatedly until all pages of results have been retrieved.
     * @returns {Promise<SecurityAndComplianceCenterApiV3.ControlLibraryItem[]>}
     */
    public async getAll(): Promise<SecurityAndComplianceCenterApiV3.ControlLibraryItem[]> {
      const results: ControlLibraryItem[] = [];
      while (this.hasNext()) {
        const nextPage = await this.getNext();
        results.push(...nextPage);
      }
      return results;
    }
  }

  /**
   * ProfilesPager can be used to simplify the use of listProfiles().
   */
  export class ProfilesPager {
    protected _hasNext: boolean;
    protected pageContext: any;

    protected client: SecurityAndComplianceCenterApiV3;

    protected params: SecurityAndComplianceCenterApiV3.ListProfilesParams;

    /**
     * Construct a ProfilesPager object.
     *
     * @param {SecurityAndComplianceCenterApiV3}  client - The service client instance used to invoke listProfiles()
     * @param {Object} [params] - The parameters to be passed to listProfiles()
     * @constructor
     * @returns {ProfilesPager}
     */
    constructor(
      client: SecurityAndComplianceCenterApiV3,
      params?: SecurityAndComplianceCenterApiV3.ListProfilesParams
    ) {
      if (params && params.start) {
        throw new Error(`the params.start field should not be set`);
      }

      this._hasNext = true;
      this.pageContext = { next: undefined };
      this.client = client;
      this.params = JSON.parse(JSON.stringify(params || {}));
    }

    /**
     * Returns true if there are potentially more results to be retrieved by invoking getNext().
     * @returns {boolean}
     */
    public hasNext(): boolean {
      return this._hasNext;
    }

    /**
     * Returns the next page of results by invoking listProfiles().
     * @returns {Promise<SecurityAndComplianceCenterApiV3.ProfileItem[]>}
     */
    public async getNext(): Promise<SecurityAndComplianceCenterApiV3.ProfileItem[]> {
      if (!this.hasNext()) {
        throw new Error('No more results available');
      }

      if (this.pageContext.next) {
        this.params.start = this.pageContext.next;
      }
      const response = await this.client.listProfiles(this.params);
      const { result } = response;

      let next = null;
      if (result && result.next) {
        next = result.next.start
      }
      this.pageContext.next = next;
      if (!this.pageContext.next) {
        this._hasNext = false;
      }
      return result.profiles;
    }

    /**
     * Returns all results by invoking listProfiles() repeatedly until all pages of results have been retrieved.
     * @returns {Promise<SecurityAndComplianceCenterApiV3.ProfileItem[]>}
     */
    public async getAll(): Promise<SecurityAndComplianceCenterApiV3.ProfileItem[]> {
      const results: ProfileItem[] = [];
      while (this.hasNext()) {
        const nextPage = await this.getNext();
        results.push(...nextPage);
      }
      return results;
    }
  }

  /**
   * AttachmentsPager can be used to simplify the use of listAttachments().
   */
  export class AttachmentsPager {
    protected _hasNext: boolean;
    protected pageContext: any;

    protected client: SecurityAndComplianceCenterApiV3;

    protected params: SecurityAndComplianceCenterApiV3.ListAttachmentsParams;

    /**
     * Construct a AttachmentsPager object.
     *
     * @param {SecurityAndComplianceCenterApiV3}  client - The service client instance used to invoke listAttachments()
     * @param {Object} params - The parameters to be passed to listAttachments()
     * @constructor
     * @returns {AttachmentsPager}
     */
    constructor(
      client: SecurityAndComplianceCenterApiV3,
      params: SecurityAndComplianceCenterApiV3.ListAttachmentsParams
    ) {
      if (params && params.start) {
        throw new Error(`the params.start field should not be set`);
      }

      this._hasNext = true;
      this.pageContext = { next: undefined };
      this.client = client;
      this.params = JSON.parse(JSON.stringify(params || {}));
    }

    /**
     * Returns true if there are potentially more results to be retrieved by invoking getNext().
     * @returns {boolean}
     */
    public hasNext(): boolean {
      return this._hasNext;
    }

    /**
     * Returns the next page of results by invoking listAttachments().
     * @returns {Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]>}
     */
    public async getNext(): Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]> {
      if (!this.hasNext()) {
        throw new Error('No more results available');
      }

      if (this.pageContext.next) {
        this.params.start = this.pageContext.next;
      }
      const response = await this.client.listAttachments(this.params);
      const { result } = response;

      let next = null;
      if (result && result.next) {
        next = result.next.start
      }
      this.pageContext.next = next;
      if (!this.pageContext.next) {
        this._hasNext = false;
      }
      return result.attachments;
    }

    /**
     * Returns all results by invoking listAttachments() repeatedly until all pages of results have been retrieved.
     * @returns {Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]>}
     */
    public async getAll(): Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]> {
      const results: AttachmentItem[] = [];
      while (this.hasNext()) {
        const nextPage = await this.getNext();
        results.push(...nextPage);
      }
      return results;
    }
  }

  /**
   * AttachmentsAccountPager can be used to simplify the use of listAttachmentsAccount().
   */
  export class AttachmentsAccountPager {
    protected _hasNext: boolean;
    protected pageContext: any;

    protected client: SecurityAndComplianceCenterApiV3;

    protected params: SecurityAndComplianceCenterApiV3.ListAttachmentsAccountParams;

    /**
     * Construct a AttachmentsAccountPager object.
     *
     * @param {SecurityAndComplianceCenterApiV3}  client - The service client instance used to invoke listAttachmentsAccount()
     * @param {Object} [params] - The parameters to be passed to listAttachmentsAccount()
     * @constructor
     * @returns {AttachmentsAccountPager}
     */
    constructor(
      client: SecurityAndComplianceCenterApiV3,
      params?: SecurityAndComplianceCenterApiV3.ListAttachmentsAccountParams
    ) {
      if (params && params.start) {
        throw new Error(`the params.start field should not be set`);
      }

      this._hasNext = true;
      this.pageContext = { next: undefined };
      this.client = client;
      this.params = JSON.parse(JSON.stringify(params || {}));
    }

    /**
     * Returns true if there are potentially more results to be retrieved by invoking getNext().
     * @returns {boolean}
     */
    public hasNext(): boolean {
      return this._hasNext;
    }

    /**
     * Returns the next page of results by invoking listAttachmentsAccount().
     * @returns {Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]>}
     */
    public async getNext(): Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]> {
      if (!this.hasNext()) {
        throw new Error('No more results available');
      }

      if (this.pageContext.next) {
        this.params.start = this.pageContext.next;
      }
      const response = await this.client.listAttachmentsAccount(this.params);
      const { result } = response;

      let next = null;
      if (result && result.next) {
        next = result.next.start
      }
      this.pageContext.next = next;
      if (!this.pageContext.next) {
        this._hasNext = false;
      }
      return result.attachments;
    }

    /**
     * Returns all results by invoking listAttachmentsAccount() repeatedly until all pages of results have been retrieved.
     * @returns {Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]>}
     */
    public async getAll(): Promise<SecurityAndComplianceCenterApiV3.AttachmentItem[]> {
      const results: AttachmentItem[] = [];
      while (this.hasNext()) {
        const nextPage = await this.getNext();
        results.push(...nextPage);
      }
      return results;
    }
  }

  /**
   * ReportsPager can be used to simplify the use of listReports().
   */
  export class ReportsPager {
    protected _hasNext: boolean;
    protected pageContext: any;

    protected client: SecurityAndComplianceCenterApiV3;

    protected params: SecurityAndComplianceCenterApiV3.ListReportsParams;

    /**
     * Construct a ReportsPager object.
     *
     * @param {SecurityAndComplianceCenterApiV3}  client - The service client instance used to invoke listReports()
     * @param {Object} [params] - The parameters to be passed to listReports()
     * @constructor
     * @returns {ReportsPager}
     */
    constructor(
      client: SecurityAndComplianceCenterApiV3,
      params?: SecurityAndComplianceCenterApiV3.ListReportsParams
    ) {
      if (params && params.start) {
        throw new Error(`the params.start field should not be set`);
      }

      this._hasNext = true;
      this.pageContext = { next: undefined };
      this.client = client;
      this.params = JSON.parse(JSON.stringify(params || {}));
    }

    /**
     * Returns true if there are potentially more results to be retrieved by invoking getNext().
     * @returns {boolean}
     */
    public hasNext(): boolean {
      return this._hasNext;
    }

    /**
     * Returns the next page of results by invoking listReports().
     * @returns {Promise<SecurityAndComplianceCenterApiV3.Report[]>}
     */
    public async getNext(): Promise<SecurityAndComplianceCenterApiV3.Report[]> {
      if (!this.hasNext()) {
        throw new Error('No more results available');
      }

      if (this.pageContext.next) {
        this.params.start = this.pageContext.next;
      }
      const response = await this.client.listReports(this.params);
      const { result } = response;

      let next = null;
      if (result && result.next) {
        if (result.next.href) {
          next = getQueryParam(result.next.href, 'start');
        }
      }
      this.pageContext.next = next;
      if (!this.pageContext.next) {
        this._hasNext = false;
      }
      return result.reports;
    }

    /**
     * Returns all results by invoking listReports() repeatedly until all pages of results have been retrieved.
     * @returns {Promise<SecurityAndComplianceCenterApiV3.Report[]>}
     */
    public async getAll(): Promise<SecurityAndComplianceCenterApiV3.Report[]> {
      const results: Report[] = [];
      while (this.hasNext()) {
        const nextPage = await this.getNext();
        results.push(...nextPage);
      }
      return results;
    }
  }

  /**
   * ReportEvaluationsPager can be used to simplify the use of listReportEvaluations().
   */
  export class ReportEvaluationsPager {
    protected _hasNext: boolean;
    protected pageContext: any;

    protected client: SecurityAndComplianceCenterApiV3;

    protected params: SecurityAndComplianceCenterApiV3.ListReportEvaluationsParams;

    /**
     * Construct a ReportEvaluationsPager object.
     *
     * @param {SecurityAndComplianceCenterApiV3}  client - The service client instance used to invoke listReportEvaluations()
     * @param {Object} params - The parameters to be passed to listReportEvaluations()
     * @constructor
     * @returns {ReportEvaluationsPager}
     */
    constructor(
      client: SecurityAndComplianceCenterApiV3,
      params: SecurityAndComplianceCenterApiV3.ListReportEvaluationsParams
    ) {
      if (params && params.start) {
        throw new Error(`the params.start field should not be set`);
      }

      this._hasNext = true;
      this.pageContext = { next: undefined };
      this.client = client;
      this.params = JSON.parse(JSON.stringify(params || {}));
    }

    /**
     * Returns true if there are potentially more results to be retrieved by invoking getNext().
     * @returns {boolean}
     */
    public hasNext(): boolean {
      return this._hasNext;
    }

    /**
     * Returns the next page of results by invoking listReportEvaluations().
     * @returns {Promise<SecurityAndComplianceCenterApiV3.Evaluation[]>}
     */
    public async getNext(): Promise<SecurityAndComplianceCenterApiV3.Evaluation[]> {
      if (!this.hasNext()) {
        throw new Error('No more results available');
      }

      if (this.pageContext.next) {
        this.params.start = this.pageContext.next;
      }
      const response = await this.client.listReportEvaluations(this.params);
      const { result } = response;

      let next = null;
      if (result && result.next) {
        if (result.next.href) {
          next = getQueryParam(result.next.href, 'start');
        }
      }
      this.pageContext.next = next;
      if (!this.pageContext.next) {
        this._hasNext = false;
      }
      return result.evaluations;
    }

    /**
     * Returns all results by invoking listReportEvaluations() repeatedly until all pages of results have been retrieved.
     * @returns {Promise<SecurityAndComplianceCenterApiV3.Evaluation[]>}
     */
    public async getAll(): Promise<SecurityAndComplianceCenterApiV3.Evaluation[]> {
      const results: Evaluation[] = [];
      while (this.hasNext()) {
        const nextPage = await this.getNext();
        results.push(...nextPage);
      }
      return results;
    }
  }

  /**
   * ReportResourcesPager can be used to simplify the use of listReportResources().
   */
  export class ReportResourcesPager {
    protected _hasNext: boolean;
    protected pageContext: any;

    protected client: SecurityAndComplianceCenterApiV3;

    protected params: SecurityAndComplianceCenterApiV3.ListReportResourcesParams;

    /**
     * Construct a ReportResourcesPager object.
     *
     * @param {SecurityAndComplianceCenterApiV3}  client - The service client instance used to invoke listReportResources()
     * @param {Object} params - The parameters to be passed to listReportResources()
     * @constructor
     * @returns {ReportResourcesPager}
     */
    constructor(
      client: SecurityAndComplianceCenterApiV3,
      params: SecurityAndComplianceCenterApiV3.ListReportResourcesParams
    ) {
      if (params && params.start) {
        throw new Error(`the params.start field should not be set`);
      }

      this._hasNext = true;
      this.pageContext = { next: undefined };
      this.client = client;
      this.params = JSON.parse(JSON.stringify(params || {}));
    }

    /**
     * Returns true if there are potentially more results to be retrieved by invoking getNext().
     * @returns {boolean}
     */
    public hasNext(): boolean {
      return this._hasNext;
    }

    /**
     * Returns the next page of results by invoking listReportResources().
     * @returns {Promise<SecurityAndComplianceCenterApiV3.Resource[]>}
     */
    public async getNext(): Promise<SecurityAndComplianceCenterApiV3.Resource[]> {
      if (!this.hasNext()) {
        throw new Error('No more results available');
      }

      if (this.pageContext.next) {
        this.params.start = this.pageContext.next;
      }
      const response = await this.client.listReportResources(this.params);
      const { result } = response;

      let next = null;
      if (result && result.next) {
        if (result.next.href) {
          next = getQueryParam(result.next.href, 'start');
        }
      }
      this.pageContext.next = next;
      if (!this.pageContext.next) {
        this._hasNext = false;
      }
      return result.resources;
    }

    /**
     * Returns all results by invoking listReportResources() repeatedly until all pages of results have been retrieved.
     * @returns {Promise<SecurityAndComplianceCenterApiV3.Resource[]>}
     */
    public async getAll(): Promise<SecurityAndComplianceCenterApiV3.Resource[]> {
      const results: Resource[] = [];
      while (this.hasNext()) {
        const nextPage = await this.getNext();
        results.push(...nextPage);
      }
      return results;
    }
  }
}

export = SecurityAndComplianceCenterApiV3;