// 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 apigateway from "oci-apigateway";
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 apigateway.DeploymentClient({ authenticationDetailsProvider: provider });

     // Create a request and dependent object(s).
	const  updateDeploymentDetails = {
		displayName: "EXAMPLE-displayName-Value",
		specification: {
			requestPolicies: {
				authentication: {
					type: "JWT_AUTHENTICATION",					tokenHeader: "EXAMPLE-tokenHeader-Value",
					tokenQueryParam: "EXAMPLE-tokenQueryParam-Value",
					tokenAuthScheme: "EXAMPLE-tokenAuthScheme-Value",
					maxClockSkewInSeconds: 1.6556883,
					issuers: ["EXAMPLE--Value"							],
					audiences: ["EXAMPLE--Value"							],
					verifyClaims: [{
							key: "EXAMPLE-key-Value",
							values: ["EXAMPLE--Value"									],
							isRequired: true,

							}
							],
					publicKeys: {
						type: "STATIC_KEYS",						keys: [{
								format: "JSON_WEB_KEY",								kty: apigateway.models.JsonWebKey.Kty.Rsa,
								use: apigateway.models.JsonWebKey.Use.Sig,
								keyOps: [apigateway.models.JsonWebKey.KeyOps.Verify										],
								alg: "EXAMPLE-alg-Value",
								n: "EXAMPLE-n-Value",
								e: "EXAMPLE-e-Value",
								kid: "EXAMPLE-kid-Value"

								}
								]

						}
,
					isAnonymousAccessAllowed: true

					}
,
				rateLimiting: {
					rateInRequestsPerSecond: 179,
					rateKey: apigateway.models.RateLimitingPolicy.RateKey.ClientIp,

					}
,
				cors: {
					allowedOrigins: ["EXAMPLE--Value"							],
					allowedMethods: ["EXAMPLE--Value"							],
					allowedHeaders: ["EXAMPLE--Value"							],
					exposedHeaders: ["EXAMPLE--Value"							],
					isAllowCredentialsEnabled: true,
					maxAgeInSeconds: 137,

					}
,
				mutualTls: {
					isVerifiedCertificateRequired: true,
					allowedSans: ["EXAMPLE--Value"							],

					}
,
				usagePlans: {
					tokenLocations: ["EXAMPLE--Value"							],

					}
,
				dynamicAuthentication: {
					selectionSource: {
						type: "SINGLE",						selector: "EXAMPLE-selector-Value"

						}
,
					authenticationServers: [{
							key: {
								type: "ANY_OF",								values: ["EXAMPLE--Value"										],
								isDefault: true,
								name: "EXAMPLE-name-Value"

								}
,
							authenticationServerDetail: {
								type: "CUSTOM_AUTHENTICATION",								functionId: "ocid1.test.oc1..<unique_ID>EXAMPLE-functionId-Value",
								tokenHeader: "EXAMPLE-tokenHeader-Value",
								tokenQueryParam: "EXAMPLE-tokenQueryParam-Value",
								parameters: {
									EXAMPLE_KEY_rH4ud :"EXAMPLE_VALUE_mOruwCJ1DwBrXXEEm3sx"
									},
								cacheKey: ["EXAMPLE--Value"										],
								validationFailurePolicy: {
									type: "MODIFY_RESPONSE",									responseCode: "EXAMPLE-responseCode-Value",
									responseMessage: "EXAMPLE-responseMessage-Value",
									responseHeaderTransformations: {
										setHeaders: {
											items: [{
													name: "EXAMPLE-name-Value",
													values: ["EXAMPLE--Value"															],
													ifExists: apigateway.models.SetHeaderPolicyItem.IfExists.Skip,

													}
													],

											}
,
										renameHeaders: {
											items: [{
													from: "EXAMPLE-from-Value",
													to: "EXAMPLE-to-Value",

													}
													],

											}
,
										filterHeaders: {
											type: apigateway.models.FilterHeaderPolicy.Type.Block,
											items: [{
													name: "EXAMPLE-name-Value",

													}
													],

											}
,

										}


									}
,
								isAnonymousAccessAllowed: true

								}
,

							}
							],

					}
,

				}
,
			loggingPolicies: {
				accessLog: {
					isEnabled: true,

					}
,
				executionLog: {
					isEnabled: true,
					logLevel: apigateway.models.ExecutionLogPolicy.LogLevel.Error,

					}
,

				}
,
			routes: [{
					path: "EXAMPLE-path-Value",
					methods: [apigateway.models.ApiSpecificationRoute.Methods.Get							],
					requestPolicies: {
						authorization: {
							type: "ANY_OF",							allowedScope: ["EXAMPLE--Value"									]

							}
,
						cors: {
							allowedOrigins: ["EXAMPLE--Value"									],
							allowedMethods: ["EXAMPLE--Value"									],
							allowedHeaders: ["EXAMPLE--Value"									],
							exposedHeaders: ["EXAMPLE--Value"									],
							isAllowCredentialsEnabled: true,
							maxAgeInSeconds: 222,

							}
,
						queryParameterValidations: {
							parameters: [{
									required: false,
									name: "EXAMPLE-name-Value",

									}
									],
							validationMode: apigateway.models.QueryParameterValidationRequestPolicy.ValidationMode.Enforcing,

							}
,
						headerValidations: {
							headers: [{
									required: true,
									name: "EXAMPLE-name-Value",

									}
									],
							validationMode: apigateway.models.HeaderValidationRequestPolicy.ValidationMode.Enforcing,

							}
,
						bodyValidation: {
							required: false,
							content: {
								EXAMPLE_KEY_tiZJa :{
									validationType: "NONE",
									}

								},
							validationMode: apigateway.models.BodyValidationRequestPolicy.ValidationMode.Enforcing,

							}
,
						headerTransformations: {
							setHeaders: {
								items: [{
										name: "EXAMPLE-name-Value",
										values: ["EXAMPLE--Value"												],
										ifExists: apigateway.models.SetHeaderPolicyItem.IfExists.Overwrite,

										}
										],

								}
,
							renameHeaders: {
								items: [{
										from: "EXAMPLE-from-Value",
										to: "EXAMPLE-to-Value",

										}
										],

								}
,
							filterHeaders: {
								type: apigateway.models.FilterHeaderPolicy.Type.Block,
								items: [{
										name: "EXAMPLE-name-Value",

										}
										],

								}
,

							}
,
						queryParameterTransformations: {
							setQueryParameters: {
								items: [{
										name: "EXAMPLE-name-Value",
										values: ["EXAMPLE--Value"												],
										ifExists: apigateway.models.SetQueryParameterPolicyItem.IfExists.Overwrite,

										}
										],

								}
,
							renameQueryParameters: {
								items: [{
										from: "EXAMPLE-from-Value",
										to: "EXAMPLE-to-Value",

										}
										],

								}
,
							filterQueryParameters: {
								type: apigateway.models.FilterQueryParameterPolicy.Type.Allow,
								items: [{
										name: "EXAMPLE-name-Value",

										}
										],

								}
,

							}
,
						responseCacheLookup: {
							type: "SIMPLE_LOOKUP_POLICY",							cacheKeyAdditions: ["EXAMPLE--Value"									],
							isEnabled: false,
							isPrivateCachingEnabled: false

							}
,

						}
,
					responsePolicies: {
						headerTransformations: {
							setHeaders: {
								items: [{
										name: "EXAMPLE-name-Value",
										values: ["EXAMPLE--Value"												],
										ifExists: apigateway.models.SetHeaderPolicyItem.IfExists.Append,

										}
										],

								}
,
							renameHeaders: {
								items: [{
										from: "EXAMPLE-from-Value",
										to: "EXAMPLE-to-Value",

										}
										],

								}
,
							filterHeaders: {
								type: apigateway.models.FilterHeaderPolicy.Type.Allow,
								items: [{
										name: "EXAMPLE-name-Value",

										}
										],

								}
,

							}
,
						responseCacheStore: {
							type: "FIXED_TTL_STORE_POLICY",							timeToLiveInSeconds: 164

							}
,

						}
,
					loggingPolicies: {
						accessLog: {
							isEnabled: false,

							}
,
						executionLog: {
							isEnabled: false,
							logLevel: apigateway.models.ExecutionLogPolicy.LogLevel.Warn,

							}
,

						}
,
					backend: {
						type: "ORACLE_FUNCTIONS_BACKEND",						functionId: "ocid1.test.oc1..<unique_ID>EXAMPLE-functionId-Value"

						}
,

					}
					],

			}
,
		freeformTags: {
			EXAMPLE_KEY_ZFGaC :"EXAMPLE_VALUE_yceU5BnEkDZwToAWfEBe"
			},
		definedTags: {
			EXAMPLE_KEY_DdYiE :{
				EXAMPLE_KEY_hCMxc :"EXAMPLE--Value"
				}
			},

		}

	const updateDeploymentRequest: apigateway.requests.UpdateDeploymentRequest = { 
	deploymentId: "ocid1.test.oc1..<unique_ID>EXAMPLE-deploymentId-Value",
	updateDeploymentDetails: updateDeploymentDetails,
	ifMatch: "EXAMPLE-ifMatch-Value",
	opcRequestId: "LTZCDKIREXBRXOBDGMMK<unique_ID>",
	isLockOverride: true,

		}; 


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