/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import { securityAddBypassIp } from "../funcs/securityAddBypassIp.js";
import { securityGetActiveAttackStatus } from "../funcs/securityGetActiveAttackStatus.js";
import { securityGetBypassIp } from "../funcs/securityGetBypassIp.js";
import { securityGetFirewallConfig } from "../funcs/securityGetFirewallConfig.js";
import { securityGetSecurityFirewallEvents } from "../funcs/securityGetSecurityFirewallEvents.js";
import { securityPutFirewallConfig } from "../funcs/securityPutFirewallConfig.js";
import { securityRemoveBypassIp } from "../funcs/securityRemoveBypassIp.js";
import { securityUpdateAttackChallengeMode } from "../funcs/securityUpdateAttackChallengeMode.js";
import { securityUpdateFirewallConfig } from "../funcs/securityUpdateFirewallConfig.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import {
  AddBypassIpRequest,
  AddBypassIpResponseBody,
} from "../models/addbypassipop.js";
import {
  GetActiveAttackStatusRequest,
  GetActiveAttackStatusResponseBody,
} from "../models/getactiveattackstatusop.js";
import {
  GetBypassIpRequest,
  GetBypassIpResponseBody,
} from "../models/getbypassipop.js";
import {
  GetFirewallConfigRequest,
  GetFirewallConfigResponseBody,
} from "../models/getfirewallconfigop.js";
import {
  GetSecurityFirewallEventsRequest,
  GetSecurityFirewallEventsResponseBody,
} from "../models/getsecurityfirewalleventsop.js";
import {
  PutFirewallConfigRequest,
  PutFirewallConfigResponseBody,
} from "../models/putfirewallconfigop.js";
import {
  RemoveBypassIpRequest,
  RemoveBypassIpResponseBody,
} from "../models/removebypassipop.js";
import {
  UpdateAttackChallengeModeRequest,
  UpdateAttackChallengeModeResponseBody,
} from "../models/updateattackchallengemodeop.js";
import {
  UpdateFirewallConfigRequest,
  UpdateFirewallConfigResponseBody,
} from "../models/updatefirewallconfigop.js";
import { unwrapAsync } from "../types/fp.js";

export class Security extends ClientSDK {
  /**
   * Update Attack Challenge mode
   *
   * @remarks
   * Update the setting for determining if the project has Attack Challenge mode enabled.
   */
  async updateAttackChallengeMode(
    request: UpdateAttackChallengeModeRequest,
    options?: RequestOptions,
  ): Promise<UpdateAttackChallengeModeResponseBody> {
    return unwrapAsync(securityUpdateAttackChallengeMode(
      this,
      request,
      options,
    ));
  }

  /**
   * Put Firewall Configuration
   *
   * @remarks
   * Set the firewall configuration to provided rules and settings. Creates or overwrite the existing firewall configuration.
   */
  async putFirewallConfig(
    request: PutFirewallConfigRequest,
    options?: RequestOptions,
  ): Promise<PutFirewallConfigResponseBody> {
    return unwrapAsync(securityPutFirewallConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Update Firewall Configuration
   *
   * @remarks
   * Process updates to modify the existing firewall config for a project
   */
  async updateFirewallConfig(
    request: UpdateFirewallConfigRequest,
    options?: RequestOptions,
  ): Promise<UpdateFirewallConfigResponseBody> {
    return unwrapAsync(securityUpdateFirewallConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Read Firewall Configuration
   *
   * @remarks
   * Retrieve the specified firewall configuration for a project. The deployed configVersion will be `active`
   */
  async getFirewallConfig(
    request: GetFirewallConfigRequest,
    options?: RequestOptions,
  ): Promise<GetFirewallConfigResponseBody> {
    return unwrapAsync(securityGetFirewallConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Read active attack data
   *
   * @remarks
   * Retrieve active attack data within the last N days (default: 1 day)
   */
  async getActiveAttackStatus(
    request: GetActiveAttackStatusRequest,
    options?: RequestOptions,
  ): Promise<GetActiveAttackStatusResponseBody> {
    return unwrapAsync(securityGetActiveAttackStatus(
      this,
      request,
      options,
    ));
  }

  /**
   * Read System Bypass
   *
   * @remarks
   * Retrieve the system bypass rules configured for the specified project
   */
  async getBypassIp(
    request: GetBypassIpRequest,
    options?: RequestOptions,
  ): Promise<GetBypassIpResponseBody> {
    return unwrapAsync(securityGetBypassIp(
      this,
      request,
      options,
    ));
  }

  /**
   * Create System Bypass Rule
   *
   * @remarks
   * Create new system bypass rules
   */
  async addBypassIp(
    request: AddBypassIpRequest,
    options?: RequestOptions,
  ): Promise<AddBypassIpResponseBody> {
    return unwrapAsync(securityAddBypassIp(
      this,
      request,
      options,
    ));
  }

  /**
   * Remove System Bypass Rule
   *
   * @remarks
   * Remove system bypass rules
   */
  async removeBypassIp(
    request: RemoveBypassIpRequest,
    options?: RequestOptions,
  ): Promise<RemoveBypassIpResponseBody> {
    return unwrapAsync(securityRemoveBypassIp(
      this,
      request,
      options,
    ));
  }

  /**
   * Read Firewall Actions by Project
   *
   * @remarks
   * Retrieve firewall actions for a project
   */
  async getSecurityFirewallEvents(
    request: GetSecurityFirewallEventsRequest,
    options?: RequestOptions,
  ): Promise<GetSecurityFirewallEventsResponseBody> {
    return unwrapAsync(securityGetSecurityFirewallEvents(
      this,
      request,
      options,
    ));
  }
}
