import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * This resource provides the Web App Firewall Policy resource in Oracle Cloud Infrastructure Waf service.
 * Api doc link for the resource: https://docs.oracle.com/iaas/api/#/en/waf/latest/WebAppFirewallPolicy
 *
 * Example terraform configs related to the resource : https://github.com/oracle/terraform-provider-oci/tree/master/examples/web_app_firewall
 *
 * Creates a new WebAppFirewallPolicy.
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as oci from "@pulumi/oci";
 *
 * const testWebAppFirewallPolicy = new oci.waf.AppFirewallPolicy("test_web_app_firewall_policy", {
 *     compartmentId: compartmentId,
 *     actions: [{
 *         name: webAppFirewallPolicyActionsName,
 *         type: webAppFirewallPolicyActionsType,
 *         body: {
 *             text: webAppFirewallPolicyActionsBodyText,
 *             type: webAppFirewallPolicyActionsBodyType,
 *         },
 *         code: Number(webAppFirewallPolicyActionsCode),
 *         headers: [{
 *             name: webAppFirewallPolicyActionsHeadersName,
 *             value: webAppFirewallPolicyActionsHeadersValue,
 *         }],
 *     }],
 *     definedTags: {
 *         "foo-namespace.bar-key": "value",
 *     },
 *     displayName: webAppFirewallPolicyDisplayName,
 *     freeformTags: {
 *         "bar-key": "value",
 *     },
 *     requestAccessControl: {
 *         defaultActionName: webAppFirewallPolicyRequestAccessControlDefaultActionName,
 *         rules: [{
 *             actionName: webAppFirewallPolicyRequestAccessControlRulesActionName,
 *             name: webAppFirewallPolicyRequestAccessControlRulesName,
 *             type: webAppFirewallPolicyRequestAccessControlRulesType,
 *             condition: webAppFirewallPolicyRequestAccessControlRulesCondition,
 *             conditionLanguage: webAppFirewallPolicyRequestAccessControlRulesConditionLanguage,
 *         }],
 *     },
 *     requestProtection: {
 *         bodyInspectionSizeLimitExceededActionName: webAppFirewallPolicyRequestProtectionBodyInspectionSizeLimitExceededActionName,
 *         bodyInspectionSizeLimitInBytes: Number(webAppFirewallPolicyRequestProtectionBodyInspectionSizeLimitInBytes),
 *         rules: [{
 *             actionName: webAppFirewallPolicyRequestProtectionRulesActionName,
 *             name: webAppFirewallPolicyRequestProtectionRulesName,
 *             protectionCapabilities: [{
 *                 key: webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesKey,
 *                 version: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesVersion),
 *                 actionName: webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesActionName,
 *                 collaborativeActionThreshold: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesCollaborativeActionThreshold),
 *                 collaborativeWeights: [{
 *                     key: webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesCollaborativeWeightsKey,
 *                     weight: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesCollaborativeWeightsWeight),
 *                 }],
 *                 exclusions: {
 *                     args: webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesExclusionsArgs,
 *                     requestCookies: webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitiesExclusionsRequestCookies,
 *                 },
 *             }],
 *             type: webAppFirewallPolicyRequestProtectionRulesType,
 *             condition: webAppFirewallPolicyRequestProtectionRulesCondition,
 *             conditionLanguage: webAppFirewallPolicyRequestProtectionRulesConditionLanguage,
 *             isBodyInspectionEnabled: webAppFirewallPolicyRequestProtectionRulesIsBodyInspectionEnabled === "true",
 *             protectionCapabilitySettings: {
 *                 allowedHttpMethods: webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitySettingsAllowedHttpMethods,
 *                 maxHttpRequestHeaderLength: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitySettingsMaxHttpRequestHeaderLength),
 *                 maxHttpRequestHeaders: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitySettingsMaxHttpRequestHeaders),
 *                 maxNumberOfArguments: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitySettingsMaxNumberOfArguments),
 *                 maxSingleArgumentLength: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitySettingsMaxSingleArgumentLength),
 *                 maxTotalArgumentLength: Number(webAppFirewallPolicyRequestProtectionRulesProtectionCapabilitySettingsMaxTotalArgumentLength),
 *             },
 *         }],
 *     },
 *     requestRateLimiting: {
 *         rules: [{
 *             actionName: webAppFirewallPolicyRequestRateLimitingRulesActionName,
 *             configurations: [{
 *                 periodInSeconds: Number(webAppFirewallPolicyRequestRateLimitingRulesConfigurationsPeriodInSeconds),
 *                 requestsLimit: Number(webAppFirewallPolicyRequestRateLimitingRulesConfigurationsRequestsLimit),
 *                 actionDurationInSeconds: Number(webAppFirewallPolicyRequestRateLimitingRulesConfigurationsActionDurationInSeconds),
 *             }],
 *             name: webAppFirewallPolicyRequestRateLimitingRulesName,
 *             type: webAppFirewallPolicyRequestRateLimitingRulesType,
 *             condition: webAppFirewallPolicyRequestRateLimitingRulesCondition,
 *             conditionLanguage: webAppFirewallPolicyRequestRateLimitingRulesConditionLanguage,
 *         }],
 *     },
 *     responseAccessControl: {
 *         rules: [{
 *             actionName: webAppFirewallPolicyResponseAccessControlRulesActionName,
 *             name: webAppFirewallPolicyResponseAccessControlRulesName,
 *             type: webAppFirewallPolicyResponseAccessControlRulesType,
 *             condition: webAppFirewallPolicyResponseAccessControlRulesCondition,
 *             conditionLanguage: webAppFirewallPolicyResponseAccessControlRulesConditionLanguage,
 *         }],
 *     },
 *     responseProtection: {
 *         rules: [{
 *             actionName: webAppFirewallPolicyResponseProtectionRulesActionName,
 *             name: webAppFirewallPolicyResponseProtectionRulesName,
 *             protectionCapabilities: [{
 *                 key: webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesKey,
 *                 version: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesVersion),
 *                 actionName: webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesActionName,
 *                 collaborativeActionThreshold: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesCollaborativeActionThreshold),
 *                 collaborativeWeights: [{
 *                     key: webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesCollaborativeWeightsKey,
 *                     weight: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesCollaborativeWeightsWeight),
 *                 }],
 *                 exclusions: {
 *                     args: webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesExclusionsArgs,
 *                     requestCookies: webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitiesExclusionsRequestCookies,
 *                 },
 *             }],
 *             type: webAppFirewallPolicyResponseProtectionRulesType,
 *             condition: webAppFirewallPolicyResponseProtectionRulesCondition,
 *             conditionLanguage: webAppFirewallPolicyResponseProtectionRulesConditionLanguage,
 *             isBodyInspectionEnabled: webAppFirewallPolicyResponseProtectionRulesIsBodyInspectionEnabled === "true",
 *             protectionCapabilitySettings: {
 *                 allowedHttpMethods: webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitySettingsAllowedHttpMethods,
 *                 maxHttpRequestHeaderLength: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitySettingsMaxHttpRequestHeaderLength),
 *                 maxHttpRequestHeaders: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitySettingsMaxHttpRequestHeaders),
 *                 maxNumberOfArguments: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitySettingsMaxNumberOfArguments),
 *                 maxSingleArgumentLength: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitySettingsMaxSingleArgumentLength),
 *                 maxTotalArgumentLength: Number(webAppFirewallPolicyResponseProtectionRulesProtectionCapabilitySettingsMaxTotalArgumentLength),
 *             },
 *         }],
 *     },
 *     systemTags: webAppFirewallPolicySystemTags,
 * });
 * ```
 *
 * ## Import
 *
 * WebAppFirewallPolicies can be imported using the `id`, e.g.
 *
 * ```sh
 * $ pulumi import oci:Waf/appFirewallPolicy:AppFirewallPolicy test_web_app_firewall_policy "id"
 * ```
 */
export declare class AppFirewallPolicy extends pulumi.CustomResource {
    /**
     * Get an existing AppFirewallPolicy resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: AppFirewallPolicyState, opts?: pulumi.CustomResourceOptions): AppFirewallPolicy;
    /**
     * Returns true if the given object is an instance of AppFirewallPolicy.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is AppFirewallPolicy;
    /**
     * (Updatable) Predefined actions for use in multiple different rules. Not all actions are supported in every module. Some actions terminate further execution of modules and rules in a module and some do not. Actions names must be unique within this array.
     */
    readonly actions: pulumi.Output<outputs.Waf.AppFirewallPolicyAction[]>;
    /**
     * (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
     */
    readonly compartmentId: pulumi.Output<string>;
    /**
     * (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
     */
    readonly definedTags: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * (Updatable) WebAppFirewallPolicy display name, can be renamed.
     */
    readonly displayName: pulumi.Output<string>;
    /**
     * (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}`
     */
    readonly freeformTags: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * A message describing the current state in more detail. For example, can be used to provide actionable information for a resource in FAILED state.
     */
    readonly lifecycleDetails: pulumi.Output<string>;
    /**
     * (Updatable) Module that allows inspection of HTTP request properties and to return a defined HTTP response. In this module, rules with the name 'Default Action' are not allowed, since this name is reserved for default action logs.
     */
    readonly requestAccessControl: pulumi.Output<outputs.Waf.AppFirewallPolicyRequestAccessControl>;
    /**
     * (Updatable) Module that allows to enable OCI-managed protection capabilities for incoming HTTP requests.
     */
    readonly requestProtection: pulumi.Output<outputs.Waf.AppFirewallPolicyRequestProtection>;
    /**
     * (Updatable) Module that allows inspection of HTTP connection properties and to limit requests frequency for a given key.
     */
    readonly requestRateLimiting: pulumi.Output<outputs.Waf.AppFirewallPolicyRequestRateLimiting>;
    /**
     * (Updatable) Module that allows inspection of HTTP response properties and to return a defined HTTP response.
     */
    readonly responseAccessControl: pulumi.Output<outputs.Waf.AppFirewallPolicyResponseAccessControl>;
    /**
     * (Updatable) Module that allows to enable OCI-managed protection capabilities for HTTP responses.
     */
    readonly responseProtection: pulumi.Output<outputs.Waf.AppFirewallPolicyResponseProtection>;
    /**
     * The current state of the WebAppFirewallPolicy.
     */
    readonly state: pulumi.Output<string>;
    /**
     * (Updatable) Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
     *
     *
     * ** IMPORTANT **
     * Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
     */
    readonly systemTags: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * The time the WebAppFirewallPolicy was created. An RFC3339 formatted datetime string.
     */
    readonly timeCreated: pulumi.Output<string>;
    /**
     * The time the WebAppFirewallPolicy was updated. An RFC3339 formatted datetime string.
     */
    readonly timeUpdated: pulumi.Output<string>;
    /**
     * Create a AppFirewallPolicy resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: AppFirewallPolicyArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering AppFirewallPolicy resources.
 */
export interface AppFirewallPolicyState {
    /**
     * (Updatable) Predefined actions for use in multiple different rules. Not all actions are supported in every module. Some actions terminate further execution of modules and rules in a module and some do not. Actions names must be unique within this array.
     */
    actions?: pulumi.Input<pulumi.Input<inputs.Waf.AppFirewallPolicyAction>[] | undefined>;
    /**
     * (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
     */
    compartmentId?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
     */
    definedTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * (Updatable) WebAppFirewallPolicy display name, can be renamed.
     */
    displayName?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}`
     */
    freeformTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * A message describing the current state in more detail. For example, can be used to provide actionable information for a resource in FAILED state.
     */
    lifecycleDetails?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) Module that allows inspection of HTTP request properties and to return a defined HTTP response. In this module, rules with the name 'Default Action' are not allowed, since this name is reserved for default action logs.
     */
    requestAccessControl?: pulumi.Input<inputs.Waf.AppFirewallPolicyRequestAccessControl | undefined>;
    /**
     * (Updatable) Module that allows to enable OCI-managed protection capabilities for incoming HTTP requests.
     */
    requestProtection?: pulumi.Input<inputs.Waf.AppFirewallPolicyRequestProtection | undefined>;
    /**
     * (Updatable) Module that allows inspection of HTTP connection properties and to limit requests frequency for a given key.
     */
    requestRateLimiting?: pulumi.Input<inputs.Waf.AppFirewallPolicyRequestRateLimiting | undefined>;
    /**
     * (Updatable) Module that allows inspection of HTTP response properties and to return a defined HTTP response.
     */
    responseAccessControl?: pulumi.Input<inputs.Waf.AppFirewallPolicyResponseAccessControl | undefined>;
    /**
     * (Updatable) Module that allows to enable OCI-managed protection capabilities for HTTP responses.
     */
    responseProtection?: pulumi.Input<inputs.Waf.AppFirewallPolicyResponseProtection | undefined>;
    /**
     * The current state of the WebAppFirewallPolicy.
     */
    state?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
     *
     *
     * ** IMPORTANT **
     * Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
     */
    systemTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * The time the WebAppFirewallPolicy was created. An RFC3339 formatted datetime string.
     */
    timeCreated?: pulumi.Input<string | undefined>;
    /**
     * The time the WebAppFirewallPolicy was updated. An RFC3339 formatted datetime string.
     */
    timeUpdated?: pulumi.Input<string | undefined>;
}
/**
 * The set of arguments for constructing a AppFirewallPolicy resource.
 */
export interface AppFirewallPolicyArgs {
    /**
     * (Updatable) Predefined actions for use in multiple different rules. Not all actions are supported in every module. Some actions terminate further execution of modules and rules in a module and some do not. Actions names must be unique within this array.
     */
    actions?: pulumi.Input<pulumi.Input<inputs.Waf.AppFirewallPolicyAction>[] | undefined>;
    /**
     * (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
     */
    compartmentId: pulumi.Input<string>;
    /**
     * (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
     */
    definedTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * (Updatable) WebAppFirewallPolicy display name, can be renamed.
     */
    displayName?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}`
     */
    freeformTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * (Updatable) Module that allows inspection of HTTP request properties and to return a defined HTTP response. In this module, rules with the name 'Default Action' are not allowed, since this name is reserved for default action logs.
     */
    requestAccessControl?: pulumi.Input<inputs.Waf.AppFirewallPolicyRequestAccessControl | undefined>;
    /**
     * (Updatable) Module that allows to enable OCI-managed protection capabilities for incoming HTTP requests.
     */
    requestProtection?: pulumi.Input<inputs.Waf.AppFirewallPolicyRequestProtection | undefined>;
    /**
     * (Updatable) Module that allows inspection of HTTP connection properties and to limit requests frequency for a given key.
     */
    requestRateLimiting?: pulumi.Input<inputs.Waf.AppFirewallPolicyRequestRateLimiting | undefined>;
    /**
     * (Updatable) Module that allows inspection of HTTP response properties and to return a defined HTTP response.
     */
    responseAccessControl?: pulumi.Input<inputs.Waf.AppFirewallPolicyResponseAccessControl | undefined>;
    /**
     * (Updatable) Module that allows to enable OCI-managed protection capabilities for HTTP responses.
     */
    responseProtection?: pulumi.Input<inputs.Waf.AppFirewallPolicyResponseProtection | undefined>;
    /**
     * (Updatable) Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
     *
     *
     * ** IMPORTANT **
     * Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
     */
    systemTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
}
//# sourceMappingURL=appFirewallPolicy.d.ts.map