/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface NetworkServicesAuthzExtensionConfig extends cdktf.TerraformMetaArguments {
    /**
    * The :authority header in the gRPC request sent from Envoy to the extension service.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#authority NetworkServicesAuthzExtension#authority}
    */
    readonly authority: string;
    /**
    * A human-readable description of the resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#description NetworkServicesAuthzExtension#description}
    */
    readonly description?: string;
    /**
    * Determines how the proxy behaves if the call to the extension fails or times out.
    * When set to TRUE, request or response processing continues without error. Any subsequent extensions in the extension chain are also executed. When set to FALSE or the default setting of FALSE is used, one of the following happens:
    * * If response headers have not been delivered to the downstream client, a generic 500 error is returned to the client. The error response can be tailored by configuring a custom error response in the load balancer.
    * * If response headers have been delivered, then the HTTP stream to the downstream client is reset.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#fail_open NetworkServicesAuthzExtension#fail_open}
    */
    readonly failOpen?: boolean | cdktf.IResolvable;
    /**
    * List of the HTTP headers to forward to the extension (from the client). If omitted, all headers are sent. Each element is a string indicating the header name.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#forward_headers NetworkServicesAuthzExtension#forward_headers}
    */
    readonly forwardHeaders?: string[];
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#id NetworkServicesAuthzExtension#id}
    *
    * Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
    * If you experience problems setting this value it might not be settable. Please take a look at the provider documentation to ensure it should be settable.
    */
    readonly id?: string;
    /**
    * Set of labels associated with the AuthzExtension resource.
    *
    *
    * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
    * Please refer to the field 'effective_labels' for all of the labels present on the resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#labels NetworkServicesAuthzExtension#labels}
    */
    readonly labels?: {
        [key: string]: string;
    };
    /**
    * All backend services and forwarding rules referenced by this extension must share the same load balancing scheme.
    * For more information, refer to [Backend services overview](https://cloud.google.com/load-balancing/docs/backend-service). Possible values: ["INTERNAL_MANAGED", "EXTERNAL_MANAGED"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#load_balancing_scheme NetworkServicesAuthzExtension#load_balancing_scheme}
    */
    readonly loadBalancingScheme: string;
    /**
    * The location of the resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#location NetworkServicesAuthzExtension#location}
    */
    readonly location: string;
    /**
    * The metadata provided here is included as part of the metadata_context (of type google.protobuf.Struct) in the ProcessingRequest message sent to the extension server. The metadata is available under the namespace com.google.authz_extension.<resourceName>. The following variables are supported in the metadata Struct:
    *
    * {forwarding_rule_id} - substituted with the forwarding rule's fully qualified resource name.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#metadata NetworkServicesAuthzExtension#metadata}
    */
    readonly metadata?: {
        [key: string]: string;
    };
    /**
    * Identifier. Name of the AuthzExtension resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#name NetworkServicesAuthzExtension#name}
    */
    readonly name: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#project NetworkServicesAuthzExtension#project}
    */
    readonly project?: string;
    /**
    * The reference to the service that runs the extension.
    * To configure a callout extension, service must be a fully-qualified reference to a [backend service](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) in the format:
    * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/backendServices/{backendService} or https://www.googleapis.com/compute/v1/projects/{project}/global/backendServices/{backendService}.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#service NetworkServicesAuthzExtension#service}
    */
    readonly service: string;
    /**
    * Specifies the timeout for each individual message on the stream. The timeout must be between 10-10000 milliseconds.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#timeout NetworkServicesAuthzExtension#timeout}
    */
    readonly timeout: string;
    /**
    * The format of communication supported by the callout extension. Will be set to EXT_PROC_GRPC by the backend if no value is set. Possible values: ["WIRE_FORMAT_UNSPECIFIED", "EXT_PROC_GRPC"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#wire_format NetworkServicesAuthzExtension#wire_format}
    */
    readonly wireFormat?: string;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#timeouts NetworkServicesAuthzExtension#timeouts}
    */
    readonly timeouts?: NetworkServicesAuthzExtensionTimeouts;
}
export interface NetworkServicesAuthzExtensionTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#create NetworkServicesAuthzExtension#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#delete NetworkServicesAuthzExtension#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#update NetworkServicesAuthzExtension#update}
    */
    readonly update?: string;
}
export declare function networkServicesAuthzExtensionTimeoutsToTerraform(struct?: NetworkServicesAuthzExtensionTimeouts | cdktf.IResolvable): any;
export declare function networkServicesAuthzExtensionTimeoutsToHclTerraform(struct?: NetworkServicesAuthzExtensionTimeouts | cdktf.IResolvable): any;
export declare class NetworkServicesAuthzExtensionTimeoutsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): NetworkServicesAuthzExtensionTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: NetworkServicesAuthzExtensionTimeouts | cdktf.IResolvable | undefined);
    private _create?;
    get create(): string;
    set create(value: string);
    resetCreate(): void;
    get createInput(): string | undefined;
    private _delete?;
    get delete(): string;
    set delete(value: string);
    resetDelete(): void;
    get deleteInput(): string | undefined;
    private _update?;
    get update(): string;
    set update(value: string);
    resetUpdate(): void;
    get updateInput(): string | undefined;
}
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension google_network_services_authz_extension}
*/
export declare class NetworkServicesAuthzExtension extends cdktf.TerraformResource {
    static readonly tfResourceType = "google_network_services_authz_extension";
    /**
    * Generates CDKTF code for importing a NetworkServicesAuthzExtension resource upon running "cdktf plan <stack-name>"
    * @param scope The scope in which to define this construct
    * @param importToId The construct id used in the generated config for the NetworkServicesAuthzExtension to import
    * @param importFromId The id of the existing NetworkServicesAuthzExtension that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the NetworkServicesAuthzExtension to import is found
    */
    static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktf.TerraformProvider): cdktf.ImportableResource;
    /**
    * Create a new {@link https://registry.terraform.io/providers/hashicorp/google/6.29.0/docs/resources/network_services_authz_extension google_network_services_authz_extension} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options NetworkServicesAuthzExtensionConfig
    */
    constructor(scope: Construct, id: string, config: NetworkServicesAuthzExtensionConfig);
    private _authority?;
    get authority(): string;
    set authority(value: string);
    get authorityInput(): string | undefined;
    get createTime(): string;
    private _description?;
    get description(): string;
    set description(value: string);
    resetDescription(): void;
    get descriptionInput(): string | undefined;
    private _effectiveLabels;
    get effectiveLabels(): cdktf.StringMap;
    private _failOpen?;
    get failOpen(): boolean | cdktf.IResolvable;
    set failOpen(value: boolean | cdktf.IResolvable);
    resetFailOpen(): void;
    get failOpenInput(): boolean | cdktf.IResolvable | undefined;
    private _forwardHeaders?;
    get forwardHeaders(): string[];
    set forwardHeaders(value: string[]);
    resetForwardHeaders(): void;
    get forwardHeadersInput(): string[] | undefined;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    private _labels?;
    get labels(): {
        [key: string]: string;
    };
    set labels(value: {
        [key: string]: string;
    });
    resetLabels(): void;
    get labelsInput(): {
        [key: string]: string;
    } | undefined;
    private _loadBalancingScheme?;
    get loadBalancingScheme(): string;
    set loadBalancingScheme(value: string);
    get loadBalancingSchemeInput(): string | undefined;
    private _location?;
    get location(): string;
    set location(value: string);
    get locationInput(): string | undefined;
    private _metadata?;
    get metadata(): {
        [key: string]: string;
    };
    set metadata(value: {
        [key: string]: string;
    });
    resetMetadata(): void;
    get metadataInput(): {
        [key: string]: string;
    } | undefined;
    private _name?;
    get name(): string;
    set name(value: string);
    get nameInput(): string | undefined;
    private _project?;
    get project(): string;
    set project(value: string);
    resetProject(): void;
    get projectInput(): string | undefined;
    private _service?;
    get service(): string;
    set service(value: string);
    get serviceInput(): string | undefined;
    private _terraformLabels;
    get terraformLabels(): cdktf.StringMap;
    private _timeout?;
    get timeout(): string;
    set timeout(value: string);
    get timeoutInput(): string | undefined;
    get updateTime(): string;
    private _wireFormat?;
    get wireFormat(): string;
    set wireFormat(value: string);
    resetWireFormat(): void;
    get wireFormatInput(): string | undefined;
    private _timeouts;
    get timeouts(): NetworkServicesAuthzExtensionTimeoutsOutputReference;
    putTimeouts(value: NetworkServicesAuthzExtensionTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | NetworkServicesAuthzExtensionTimeouts | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
