// 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  createDeploymentDetails = {
		displayName: "EXAMPLE-displayName-Value",
		gatewayId: "ocid1.test.oc1..<unique_ID>EXAMPLE-gatewayId-Value",
		compartmentId: "ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value",
		pathPrefix: "EXAMPLE-pathPrefix-Value",
		specification: {
			requestPolicies: {
				authentication: {
					type: "CUSTOM_AUTHENTICATION",					functionId: "ocid1.test.oc1..<unique_ID>EXAMPLE-functionId-Value",
					tokenHeader: "EXAMPLE-tokenHeader-Value",
					tokenQueryParam: "EXAMPLE-tokenQueryParam-Value",
					parameters: {
						EXAMPLE_KEY_0MJGM :"EXAMPLE_VALUE_uelaw5shG0IqEMNHIz3p"
						},
					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.Allow,
								items: [{
										name: "EXAMPLE-name-Value",

										}
										],

								}
,

							}


						}
,
					isAnonymousAccessAllowed: false

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

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

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

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

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

						}
,
					authenticationServers: [{
							key: {
								type: "WILDCARD",								expression: "EXAMPLE-expression-Value",
								isDefault: true,
								name: "EXAMPLE-name-Value"

								}
,
							authenticationServerDetail: {
								type: "TOKEN_AUTHENTICATION",								tokenHeader: "EXAMPLE-tokenHeader-Value",
								tokenQueryParam: "EXAMPLE-tokenQueryParam-Value",
								tokenAuthScheme: "EXAMPLE-tokenAuthScheme-Value",
								maxClockSkewInSeconds: 42.137024,
								validationPolicy: {
									type: "REMOTE_JWKS",									uri: "EXAMPLE-uri-Value",
									isSslVerifyDisabled: true,
									maxCacheDurationInHours: 15,
									additionalValidationPolicy: {
										issuers: ["EXAMPLE--Value"												],
										audiences: ["EXAMPLE--Value"												],
										verifyClaims: [{
												key: "EXAMPLE-key-Value",
												values: ["EXAMPLE--Value"														],
												isRequired: false,

												}
												],

										}


									}
,
								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.Append,

													}
													],

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

													}
													],

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

													}
													],

											}
,

										}


									}
,
								isAnonymousAccessAllowed: false

								}
,

							}
							],

					}
,

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

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

					}
,

				}
,
			routes: [{
					path: "EXAMPLE-path-Value",
					methods: [apigateway.models.ApiSpecificationRoute.Methods.Patch							],
					requestPolicies: {
						authorization: {
							type: "ANONYMOUS",
							}
,
						cors: {
							allowedOrigins: ["EXAMPLE--Value"									],
							allowedMethods: ["EXAMPLE--Value"									],
							allowedHeaders: ["EXAMPLE--Value"									],
							exposedHeaders: ["EXAMPLE--Value"									],
							isAllowCredentialsEnabled: true,
							maxAgeInSeconds: 5,

							}
,
						queryParameterValidations: {
							parameters: [{
									required: true,
									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: true,
							content: {
								EXAMPLE_KEY_cq7Xr :{
									validationType: "NONE",
									}

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

							}
,
						headerTransformations: {
							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",

										}
										],

								}
,

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

										}
										],

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

										}
										],

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

										}
										],

								}
,

							}
,
						responseCacheLookup: {
							type: "SIMPLE_LOOKUP_POLICY",							cacheKeyAdditions: ["EXAMPLE--Value"									],
							isEnabled: true,
							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: 120

							}
,

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

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

							}
,

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

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

									}
,

								}
								]

						}
,

					}
					],

			}
,
		freeformTags: {
			EXAMPLE_KEY_HiPQL :"EXAMPLE_VALUE_Meq7ybc1MHA1YQdw5rMs"
			},
		definedTags: {
			EXAMPLE_KEY_2nHKI :{
				EXAMPLE_KEY_too5Q :"EXAMPLE--Value"
				}
			},

		}

	const createDeploymentRequest: apigateway.requests.CreateDeploymentRequest = { 
	createDeploymentDetails: createDeploymentDetails,
	opcRetryToken: "EXAMPLE-opcRetryToken-Value",
	opcRequestId: "49K1LIGOP6DRYKDEEEWX<unique_ID>",

		}; 


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