// 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: "JWT_AUTHENTICATION",					tokenHeader: "EXAMPLE-tokenHeader-Value",
					tokenQueryParam: "EXAMPLE-tokenQueryParam-Value",
					tokenAuthScheme: "EXAMPLE-tokenAuthScheme-Value",
					maxClockSkewInSeconds: 15.945475,
					issuers: ["EXAMPLE--Value"							],
					audiences: ["EXAMPLE--Value"							],
					verifyClaims: [{
							key: "EXAMPLE-key-Value",
							values: ["EXAMPLE--Value"									],
							isRequired: true,

							}
							],
					publicKeys: {
						type: "REMOTE_JWKS",						uri: "EXAMPLE-uri-Value",
						isSslVerifyDisabled: true,
						maxCacheDurationInHours: 19

						}
,
					isAnonymousAccessAllowed: false

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

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

					}
,
				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: false,
								name: "EXAMPLE-name-Value"

								}
,
							authenticationServerDetail: {
								type: "TOKEN_AUTHENTICATION",								tokenHeader: "EXAMPLE-tokenHeader-Value",
								tokenQueryParam: "EXAMPLE-tokenQueryParam-Value",
								tokenAuthScheme: "EXAMPLE-tokenAuthScheme-Value",
								maxClockSkewInSeconds: 4.506712,
								validationPolicy: {
									type: "REMOTE_DISCOVERY",									clientDetails: {
										type: "CUSTOM",										clientId: "ocid1.test.oc1..<unique_ID>EXAMPLE-clientId-Value",
										clientSecretId: "ocid1.test.oc1..<unique_ID>EXAMPLE-clientSecretId-Value",
										clientSecretVersionNumber: 468

										}
,
									sourceUriDetails: {
										type: "DISCOVERY_URI",										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.Overwrite,

													}
													],

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

													}
													],

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

													}
													],

											}
,

										}


									}
,
								isAnonymousAccessAllowed: true

								}
,

							}
							],

					}
,

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

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

					}
,

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

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

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

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

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

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

							}
,
						bodyValidation: {
							required: true,
							content: {
								EXAMPLE_KEY_jsJGQ :{
									validationType: "NONE",
									}

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

							}
,
						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: false,
							isPrivateCachingEnabled: true

							}
,

						}
,
					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: 41

							}
,

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

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

							}
,

						}
,
					backend: {
						type: "STOCK_RESPONSE_BACKEND",						body: "EXAMPLE-body-Value",
						status: 103,
						headers: [{
								name: "EXAMPLE-name-Value",
								value: "EXAMPLE-value-Value",

								}
								]

						}
,

					}
					],

			}
,
		locks: [{
				type: apigateway.models.AddResourceLockDetails.Type.Delete,
				message: "EXAMPLE-message-Value",

				}
				],
		freeformTags: {
			EXAMPLE_KEY_vGbob :"EXAMPLE_VALUE_tOVyOpICuc9Xdaa7usB1"
			},
		definedTags: {
			EXAMPLE_KEY_VVf7a :{
				EXAMPLE_KEY_teuRC :"EXAMPLE--Value"
				}
			},

		}

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

		}; 


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