// This is an automatically generated code sample. 
// To make this code sample work in your Oracle Cloud tenancy, 
// please replace the values for any parameters whose current values do not fit
// your use case (such as resource IDs, strings containing ‘EXAMPLE’ or ‘unique_id’, and 
// boolean, number, and enum parameters with values not fitting your use case).

import * as waas from "oci-waas";
import common = require("oci-common");

// Create a default authentication provider that uses the DEFAULT
// profile in the configuration file.
// Refer to <see href="https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File>the public documentation</see> on how to prepare a configuration file.

const provider: common.ConfigFileAuthenticationDetailsProvider = new common.ConfigFileAuthenticationDetailsProvider();

(async () => {
    try {
     // Create a service client
     const client = new waas.WaasClient({ authenticationDetailsProvider: provider });

     // Create a request and dependent object(s).
	const  wafConfig = {
		accessRules: [{
				name: "EXAMPLE-name-Value",
				criteria: [{
						condition: waas.models.AccessRuleCriteria.Condition.IpInList,
						value: "EXAMPLE-value-Value",
						isCaseSensitive: true,

						}
						],
				action: waas.models.AccessRule.Action.Allow,
				blockAction: waas.models.AccessRule.BlockAction.SetResponseCode,
				blockResponseCode: 426,
				blockErrorPageMessage: "EXAMPLE-blockErrorPageMessage-Value",
				blockErrorPageCode: "EXAMPLE-blockErrorPageCode-Value",
				blockErrorPageDescription: "EXAMPLE-blockErrorPageDescription-Value",
				bypassChallenges: [waas.models.AccessRule.BypassChallenges.DeviceFingerprintChallenge						],
				redirectUrl: "EXAMPLE-redirectUrl-Value",
				redirectResponseCode: waas.models.AccessRule.RedirectResponseCode.Found,
				captchaTitle: "EXAMPLE-captchaTitle-Value",
				captchaHeader: "EXAMPLE-captchaHeader-Value",
				captchaFooter: "EXAMPLE-captchaFooter-Value",
				captchaSubmitLabel: "EXAMPLE-captchaSubmitLabel-Value",
				responseHeaderManipulation: [{
						action: "ADD_HTTP_RESPONSE_HEADER",						header: "EXAMPLE-header-Value",
						value: "EXAMPLE-value-Value"

						}
						],

				}
				],
		addressRateLimiting: {
			isEnabled: true,
			allowedRatePerAddress: 9701,
			maxDelayedCountPerAddress: 9409,
			blockResponseCode: 699,

			}
,
		captchas: [{
				url: "EXAMPLE-url-Value",
				sessionExpirationInSeconds: 118533,
				title: "EXAMPLE-title-Value",
				headerText: "EXAMPLE-headerText-Value",
				footerText: "EXAMPLE-footerText-Value",
				failureMessage: "EXAMPLE-failureMessage-Value",
				submitLabel: "EXAMPLE-submitLabel-Value",

				}
				],
		deviceFingerprintChallenge: {
			isEnabled: false,
			action: waas.models.DeviceFingerprintChallenge.Action.Block,
			failureThreshold: 262771,
			actionExpirationInSeconds: 190580,
			failureThresholdExpirationInSeconds: 266326,
			maxAddressCount: 791,
			maxAddressCountExpirationInSeconds: 421428,
			challengeSettings: {
				blockAction: waas.models.BlockChallengeSettings.BlockAction.ShowCaptcha,
				blockResponseCode: 946,
				blockErrorPageMessage: "EXAMPLE-blockErrorPageMessage-Value",
				blockErrorPageDescription: "EXAMPLE-blockErrorPageDescription-Value",
				blockErrorPageCode: "EXAMPLE-blockErrorPageCode-Value",
				captchaTitle: "EXAMPLE-captchaTitle-Value",
				captchaHeader: "EXAMPLE-captchaHeader-Value",
				captchaFooter: "EXAMPLE-captchaFooter-Value",
				captchaSubmitLabel: "EXAMPLE-captchaSubmitLabel-Value",

				}
,

			}
,
		goodBots: [{
				key: "EXAMPLE-key-Value",
				name: "EXAMPLE-name-Value",
				isEnabled: true,
				description: "EXAMPLE-description-Value",

				}
				],
		humanInteractionChallenge: {
			isEnabled: false,
			action: waas.models.HumanInteractionChallenge.Action.Detect,
			failureThreshold: 589281,
			actionExpirationInSeconds: 193129,
			failureThresholdExpirationInSeconds: 425016,
			interactionThreshold: 36,
			recordingPeriodInSeconds: 7073,
			setHttpHeader: {
				name: "EXAMPLE-name-Value",
				value: "EXAMPLE-value-Value",

				}
,
			challengeSettings: {
				blockAction: waas.models.BlockChallengeSettings.BlockAction.ShowErrorPage,
				blockResponseCode: 154,
				blockErrorPageMessage: "EXAMPLE-blockErrorPageMessage-Value",
				blockErrorPageDescription: "EXAMPLE-blockErrorPageDescription-Value",
				blockErrorPageCode: "EXAMPLE-blockErrorPageCode-Value",
				captchaTitle: "EXAMPLE-captchaTitle-Value",
				captchaHeader: "EXAMPLE-captchaHeader-Value",
				captchaFooter: "EXAMPLE-captchaFooter-Value",
				captchaSubmitLabel: "EXAMPLE-captchaSubmitLabel-Value",

				}
,
			isNatEnabled: true,

			}
,
		jsChallenge: {
			isEnabled: true,
			action: waas.models.JsChallenge.Action.Detect,
			failureThreshold: 541220,
			actionExpirationInSeconds: 293976,
			setHttpHeader: {
				name: "EXAMPLE-name-Value",
				value: "EXAMPLE-value-Value",

				}
,
			challengeSettings: {
				blockAction: waas.models.BlockChallengeSettings.BlockAction.ShowCaptcha,
				blockResponseCode: 463,
				blockErrorPageMessage: "EXAMPLE-blockErrorPageMessage-Value",
				blockErrorPageDescription: "EXAMPLE-blockErrorPageDescription-Value",
				blockErrorPageCode: "EXAMPLE-blockErrorPageCode-Value",
				captchaTitle: "EXAMPLE-captchaTitle-Value",
				captchaHeader: "EXAMPLE-captchaHeader-Value",
				captchaFooter: "EXAMPLE-captchaFooter-Value",
				captchaSubmitLabel: "EXAMPLE-captchaSubmitLabel-Value",

				}
,
			areRedirectsChallenged: true,
			criteria: [{
					condition: waas.models.AccessRuleCriteria.Condition.CountryIs,
					value: "EXAMPLE-value-Value",
					isCaseSensitive: true,

					}
					],
			isNatEnabled: true,

			}
,
		origin: "EXAMPLE-origin-Value",
		cachingRules: [{
				key: "EXAMPLE-key-Value",
				name: "EXAMPLE-name-Value",
				action: waas.models.CachingRule.Action.Cache,
				cachingDuration: "EXAMPLE-cachingDuration-Value",
				isClientCachingEnabled: true,
				clientCachingDuration: "EXAMPLE-clientCachingDuration-Value",
				criteria: [{
						condition: waas.models.CachingRuleCriteria.Condition.UrlStartsWith,
						value: "EXAMPLE-value-Value",

						}
						],

				}
				],
		customProtectionRules: [{
				id: "ocid1.test.oc1..<unique_ID>EXAMPLE-id-Value",
				action: waas.models.CustomProtectionRuleSetting.Action.Block,
				exclusions: [{
						target: waas.models.ProtectionRuleExclusion.Target.RequestCookieNames,
						exclusions: ["EXAMPLE--Value"								],

						}
						],

				}
				],
		originGroups: ["EXAMPLE--Value"				],
		protectionRules: [{
				key: "EXAMPLE-key-Value",
				modSecurityRuleIds: ["EXAMPLE--Value"						],
				name: "EXAMPLE-name-Value",
				description: "EXAMPLE-description-Value",
				action: waas.models.ProtectionRule.Action.Block,
				labels: ["EXAMPLE--Value"						],
				exclusions: [{
						target: waas.models.ProtectionRuleExclusion.Target.RequestCookies,
						exclusions: ["EXAMPLE--Value"								],

						}
						],

				}
				],
		protectionSettings: {
			blockAction: waas.models.ProtectionSettings.BlockAction.ShowErrorPage,
			blockResponseCode: 511,
			blockErrorPageMessage: "EXAMPLE-blockErrorPageMessage-Value",
			blockErrorPageCode: "EXAMPLE-blockErrorPageCode-Value",
			blockErrorPageDescription: "EXAMPLE-blockErrorPageDescription-Value",
			maxArgumentCount: 6042,
			maxNameLengthPerArgument: 91547,
			maxTotalNameLengthOfArguments: 268639,
			recommendationsPeriodInDays: 44,
			isResponseInspected: false,
			maxResponseSizeInKiB: 302,
			allowedHttpMethods: [waas.models.ProtectionSettings.AllowedHttpMethods.Get					],
			mediaTypes: ["EXAMPLE--Value"					],

			}
,
		threatFeeds: [{
				key: "EXAMPLE-key-Value",
				name: "EXAMPLE-name-Value",
				action: waas.models.ThreatFeed.Action.Block,
				description: "EXAMPLE-description-Value",

				}
				],
		whitelists: [{
				name: "EXAMPLE-name-Value",
				addresses: ["EXAMPLE--Value"						],
				addressLists: ["EXAMPLE--Value"						],

				}
				],

		}

	const updateWafConfigRequest: waas.requests.UpdateWafConfigRequest = { 
	waasPolicyId: "ocid1.test.oc1..<unique_ID>EXAMPLE-waasPolicyId-Value",
	updateWafConfigDetails: wafConfig,
	opcRequestId: "MZNF4CVR5G5V5MNER20V<unique_ID>",
	opcRetryToken: "EXAMPLE-opcRetryToken-Value",
	ifMatch: "EXAMPLE-ifMatch-Value",

		}; 


     // Send request to the Client.
     const updateWafConfigResponse = await client.updateWafConfig(updateWafConfigRequest);
     }
     catch (error) {
         console.log("updateWafConfig Failed with error  " + error);
     }
})();