/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface PubsubSubscriptionConfig extends cdktf.TerraformMetaArguments {
    /**
    * This value is the maximum time after a subscriber receives a message
    * before the subscriber should acknowledge the message. After message
    * delivery but before the ack deadline expires and before the message is
    * acknowledged, it is an outstanding message and will not be delivered
    * again during that time (on a best-effort basis).
    *
    * For pull subscriptions, this value is used as the initial value for
    * the ack deadline. To override this value for a given message, call
    * subscriptions.modifyAckDeadline with the corresponding ackId if using
    * pull. The minimum custom deadline you can specify is 10 seconds. The
    * maximum custom deadline you can specify is 600 seconds (10 minutes).
    * If this parameter is 0, a default value of 10 seconds is used.
    *
    * For push delivery, this value is also used to set the request timeout
    * for the call to the push endpoint.
    *
    * If the subscriber never acknowledges the message, the Pub/Sub system
    * will eventually redeliver the message.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#ack_deadline_seconds PubsubSubscription#ack_deadline_seconds}
    */
    readonly ackDeadlineSeconds?: number;
    /**
    * If 'true', Pub/Sub provides the following guarantees for the delivery
    * of a message with a given value of messageId on this Subscriptions':
    *
    * - The message sent to a subscriber is guaranteed not to be resent before the message's acknowledgement deadline expires.
    *
    * - An acknowledged message will not be resent to a subscriber.
    *
    * Note that subscribers may still receive multiple copies of a message when 'enable_exactly_once_delivery'
    * is true if the message was published multiple times by a publisher client. These copies are considered distinct by Pub/Sub and have distinct messageId values
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#enable_exactly_once_delivery PubsubSubscription#enable_exactly_once_delivery}
    */
    readonly enableExactlyOnceDelivery?: boolean | cdktf.IResolvable;
    /**
    * If 'true', messages published with the same orderingKey in PubsubMessage will be delivered to
    * the subscribers in the order in which they are received by the Pub/Sub system. Otherwise, they
    * may be delivered in any order.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#enable_message_ordering PubsubSubscription#enable_message_ordering}
    */
    readonly enableMessageOrdering?: boolean | cdktf.IResolvable;
    /**
    * The subscription only delivers the messages that match the filter.
    * Pub/Sub automatically acknowledges the messages that don't match the filter. You can filter messages
    * by their attributes. The maximum length of a filter is 256 bytes. After creating the subscription,
    * you can't modify the filter.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#filter PubsubSubscription#filter}
    */
    readonly filter?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#id PubsubSubscription#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;
    /**
    * A set of key/value label pairs to assign to this Subscription.
    *
    *
    * **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.35.0/docs/resources/pubsub_subscription#labels PubsubSubscription#labels}
    */
    readonly labels?: {
        [key: string]: string;
    };
    /**
    * How long to retain unacknowledged messages in the subscription's
    * backlog, from the moment a message is published. If
    * retain_acked_messages is true, then this also configures the retention
    * of acknowledged messages, and thus configures how far back in time a
    * subscriptions.seek can be done. Defaults to 7 days. Cannot be more
    * than 31 days ('"2678400s"') or less than 10 minutes ('"600s"').
    *
    * A duration in seconds with up to nine fractional digits, terminated
    * by 's'. Example: '"600.5s"'.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#message_retention_duration PubsubSubscription#message_retention_duration}
    */
    readonly messageRetentionDuration?: string;
    /**
    * Name of the subscription.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#name PubsubSubscription#name}
    */
    readonly name: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#project PubsubSubscription#project}
    */
    readonly project?: string;
    /**
    * Indicates whether to retain acknowledged messages. If 'true', then
    * messages are not expunged from the subscription's backlog, even if
    * they are acknowledged, until they fall out of the
    * messageRetentionDuration window.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#retain_acked_messages PubsubSubscription#retain_acked_messages}
    */
    readonly retainAckedMessages?: boolean | cdktf.IResolvable;
    /**
    * A reference to a Topic resource, of the form projects/{project}/topics/{{name}}
    * (as in the id property of a google_pubsub_topic), or just a topic name if
    * the topic is in the same project as the subscription.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#topic PubsubSubscription#topic}
    */
    readonly topic: string;
    /**
    * bigquery_config block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#bigquery_config PubsubSubscription#bigquery_config}
    */
    readonly bigqueryConfig?: PubsubSubscriptionBigqueryConfig;
    /**
    * cloud_storage_config block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#cloud_storage_config PubsubSubscription#cloud_storage_config}
    */
    readonly cloudStorageConfig?: PubsubSubscriptionCloudStorageConfig;
    /**
    * dead_letter_policy block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#dead_letter_policy PubsubSubscription#dead_letter_policy}
    */
    readonly deadLetterPolicy?: PubsubSubscriptionDeadLetterPolicy;
    /**
    * expiration_policy block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#expiration_policy PubsubSubscription#expiration_policy}
    */
    readonly expirationPolicy?: PubsubSubscriptionExpirationPolicy;
    /**
    * push_config block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#push_config PubsubSubscription#push_config}
    */
    readonly pushConfig?: PubsubSubscriptionPushConfig;
    /**
    * retry_policy block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#retry_policy PubsubSubscription#retry_policy}
    */
    readonly retryPolicy?: PubsubSubscriptionRetryPolicy;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#timeouts PubsubSubscription#timeouts}
    */
    readonly timeouts?: PubsubSubscriptionTimeouts;
}
export interface PubsubSubscriptionBigqueryConfig {
    /**
    * When true and use_topic_schema or use_table_schema is true, any fields that are a part of the topic schema or message schema that
    * are not part of the BigQuery table schema are dropped when writing to BigQuery. Otherwise, the schemas must be kept in sync
    * and any messages with extra fields are not written and remain in the subscription's backlog.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#drop_unknown_fields PubsubSubscription#drop_unknown_fields}
    */
    readonly dropUnknownFields?: boolean | cdktf.IResolvable;
    /**
    * The service account to use to write to BigQuery. If not specified, the Pub/Sub
    * [service agent](https://cloud.google.com/iam/docs/service-agents),
    * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#service_account_email PubsubSubscription#service_account_email}
    */
    readonly serviceAccountEmail?: string;
    /**
    * The name of the table to which to write data, of the form {projectId}.{datasetId}.{tableId}
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#table PubsubSubscription#table}
    */
    readonly table: string;
    /**
    * When true, use the BigQuery table's schema as the columns to write to in BigQuery. Messages
    * must be published in JSON format. Only one of use_topic_schema and use_table_schema can be set.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#use_table_schema PubsubSubscription#use_table_schema}
    */
    readonly useTableSchema?: boolean | cdktf.IResolvable;
    /**
    * When true, use the topic's schema as the columns to write to in BigQuery, if it exists.
    * Only one of use_topic_schema and use_table_schema can be set.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#use_topic_schema PubsubSubscription#use_topic_schema}
    */
    readonly useTopicSchema?: boolean | cdktf.IResolvable;
    /**
    * When true, write the subscription name, messageId, publishTime, attributes, and orderingKey to additional columns in the table.
    * The subscription name, messageId, and publishTime fields are put in their own columns while all other message properties (other than data) are written to a JSON object in the attributes column.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#write_metadata PubsubSubscription#write_metadata}
    */
    readonly writeMetadata?: boolean | cdktf.IResolvable;
}
export declare function pubsubSubscriptionBigqueryConfigToTerraform(struct?: PubsubSubscriptionBigqueryConfigOutputReference | PubsubSubscriptionBigqueryConfig): any;
export declare function pubsubSubscriptionBigqueryConfigToHclTerraform(struct?: PubsubSubscriptionBigqueryConfigOutputReference | PubsubSubscriptionBigqueryConfig): any;
export declare class PubsubSubscriptionBigqueryConfigOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionBigqueryConfig | undefined;
    set internalValue(value: PubsubSubscriptionBigqueryConfig | undefined);
    private _dropUnknownFields?;
    get dropUnknownFields(): boolean | cdktf.IResolvable;
    set dropUnknownFields(value: boolean | cdktf.IResolvable);
    resetDropUnknownFields(): void;
    get dropUnknownFieldsInput(): boolean | cdktf.IResolvable | undefined;
    private _serviceAccountEmail?;
    get serviceAccountEmail(): string;
    set serviceAccountEmail(value: string);
    resetServiceAccountEmail(): void;
    get serviceAccountEmailInput(): string | undefined;
    private _table?;
    get table(): string;
    set table(value: string);
    get tableInput(): string | undefined;
    private _useTableSchema?;
    get useTableSchema(): boolean | cdktf.IResolvable;
    set useTableSchema(value: boolean | cdktf.IResolvable);
    resetUseTableSchema(): void;
    get useTableSchemaInput(): boolean | cdktf.IResolvable | undefined;
    private _useTopicSchema?;
    get useTopicSchema(): boolean | cdktf.IResolvable;
    set useTopicSchema(value: boolean | cdktf.IResolvable);
    resetUseTopicSchema(): void;
    get useTopicSchemaInput(): boolean | cdktf.IResolvable | undefined;
    private _writeMetadata?;
    get writeMetadata(): boolean | cdktf.IResolvable;
    set writeMetadata(value: boolean | cdktf.IResolvable);
    resetWriteMetadata(): void;
    get writeMetadataInput(): boolean | cdktf.IResolvable | undefined;
}
export interface PubsubSubscriptionCloudStorageConfigAvroConfig {
    /**
    * When true, the output Cloud Storage file will be serialized using the topic schema, if it exists.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#use_topic_schema PubsubSubscription#use_topic_schema}
    */
    readonly useTopicSchema?: boolean | cdktf.IResolvable;
    /**
    * When true, write the subscription name, messageId, publishTime, attributes, and orderingKey as additional fields in the output.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#write_metadata PubsubSubscription#write_metadata}
    */
    readonly writeMetadata?: boolean | cdktf.IResolvable;
}
export declare function pubsubSubscriptionCloudStorageConfigAvroConfigToTerraform(struct?: PubsubSubscriptionCloudStorageConfigAvroConfigOutputReference | PubsubSubscriptionCloudStorageConfigAvroConfig): any;
export declare function pubsubSubscriptionCloudStorageConfigAvroConfigToHclTerraform(struct?: PubsubSubscriptionCloudStorageConfigAvroConfigOutputReference | PubsubSubscriptionCloudStorageConfigAvroConfig): any;
export declare class PubsubSubscriptionCloudStorageConfigAvroConfigOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionCloudStorageConfigAvroConfig | undefined;
    set internalValue(value: PubsubSubscriptionCloudStorageConfigAvroConfig | undefined);
    private _useTopicSchema?;
    get useTopicSchema(): boolean | cdktf.IResolvable;
    set useTopicSchema(value: boolean | cdktf.IResolvable);
    resetUseTopicSchema(): void;
    get useTopicSchemaInput(): boolean | cdktf.IResolvable | undefined;
    private _writeMetadata?;
    get writeMetadata(): boolean | cdktf.IResolvable;
    set writeMetadata(value: boolean | cdktf.IResolvable);
    resetWriteMetadata(): void;
    get writeMetadataInput(): boolean | cdktf.IResolvable | undefined;
}
export interface PubsubSubscriptionCloudStorageConfig {
    /**
    * User-provided name for the Cloud Storage bucket. The bucket must be created by the user. The bucket name must be without any prefix like "gs://".
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#bucket PubsubSubscription#bucket}
    */
    readonly bucket: string;
    /**
    * User-provided format string specifying how to represent datetimes in Cloud Storage filenames.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#filename_datetime_format PubsubSubscription#filename_datetime_format}
    */
    readonly filenameDatetimeFormat?: string;
    /**
    * User-provided prefix for Cloud Storage filename.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#filename_prefix PubsubSubscription#filename_prefix}
    */
    readonly filenamePrefix?: string;
    /**
    * User-provided suffix for Cloud Storage filename. Must not end in "/".
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#filename_suffix PubsubSubscription#filename_suffix}
    */
    readonly filenameSuffix?: string;
    /**
    * The maximum bytes that can be written to a Cloud Storage file before a new file is created. Min 1 KB, max 10 GiB.
    * The maxBytes limit may be exceeded in cases where messages are larger than the limit.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#max_bytes PubsubSubscription#max_bytes}
    */
    readonly maxBytes?: number;
    /**
    * The maximum duration that can elapse before a new Cloud Storage file is created. Min 1 minute, max 10 minutes, default 5 minutes.
    * May not exceed the subscription's acknowledgement deadline.
    * A duration in seconds with up to nine fractional digits, ending with 's'. Example: "3.5s".
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#max_duration PubsubSubscription#max_duration}
    */
    readonly maxDuration?: string;
    /**
    * The maximum messages that can be written to a Cloud Storage file before a new file is created. Min 1000 messages.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#max_messages PubsubSubscription#max_messages}
    */
    readonly maxMessages?: number;
    /**
    * The service account to use to write to Cloud Storage. If not specified, the Pub/Sub
    * [service agent](https://cloud.google.com/iam/docs/service-agents),
    * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#service_account_email PubsubSubscription#service_account_email}
    */
    readonly serviceAccountEmail?: string;
    /**
    * avro_config block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#avro_config PubsubSubscription#avro_config}
    */
    readonly avroConfig?: PubsubSubscriptionCloudStorageConfigAvroConfig;
}
export declare function pubsubSubscriptionCloudStorageConfigToTerraform(struct?: PubsubSubscriptionCloudStorageConfigOutputReference | PubsubSubscriptionCloudStorageConfig): any;
export declare function pubsubSubscriptionCloudStorageConfigToHclTerraform(struct?: PubsubSubscriptionCloudStorageConfigOutputReference | PubsubSubscriptionCloudStorageConfig): any;
export declare class PubsubSubscriptionCloudStorageConfigOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionCloudStorageConfig | undefined;
    set internalValue(value: PubsubSubscriptionCloudStorageConfig | undefined);
    private _bucket?;
    get bucket(): string;
    set bucket(value: string);
    get bucketInput(): string | undefined;
    private _filenameDatetimeFormat?;
    get filenameDatetimeFormat(): string;
    set filenameDatetimeFormat(value: string);
    resetFilenameDatetimeFormat(): void;
    get filenameDatetimeFormatInput(): string | undefined;
    private _filenamePrefix?;
    get filenamePrefix(): string;
    set filenamePrefix(value: string);
    resetFilenamePrefix(): void;
    get filenamePrefixInput(): string | undefined;
    private _filenameSuffix?;
    get filenameSuffix(): string;
    set filenameSuffix(value: string);
    resetFilenameSuffix(): void;
    get filenameSuffixInput(): string | undefined;
    private _maxBytes?;
    get maxBytes(): number;
    set maxBytes(value: number);
    resetMaxBytes(): void;
    get maxBytesInput(): number | undefined;
    private _maxDuration?;
    get maxDuration(): string;
    set maxDuration(value: string);
    resetMaxDuration(): void;
    get maxDurationInput(): string | undefined;
    private _maxMessages?;
    get maxMessages(): number;
    set maxMessages(value: number);
    resetMaxMessages(): void;
    get maxMessagesInput(): number | undefined;
    private _serviceAccountEmail?;
    get serviceAccountEmail(): string;
    set serviceAccountEmail(value: string);
    resetServiceAccountEmail(): void;
    get serviceAccountEmailInput(): string | undefined;
    get state(): string;
    private _avroConfig;
    get avroConfig(): PubsubSubscriptionCloudStorageConfigAvroConfigOutputReference;
    putAvroConfig(value: PubsubSubscriptionCloudStorageConfigAvroConfig): void;
    resetAvroConfig(): void;
    get avroConfigInput(): PubsubSubscriptionCloudStorageConfigAvroConfig | undefined;
}
export interface PubsubSubscriptionDeadLetterPolicy {
    /**
    * The name of the topic to which dead letter messages should be published.
    * Format is 'projects/{project}/topics/{topic}'.
    *
    * The Cloud Pub/Sub service account associated with the enclosing subscription's
    * parent project (i.e.,
    * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
    * permission to Publish() to this topic.
    *
    * The operation will fail if the topic does not exist.
    * Users should ensure that there is a subscription attached to this topic
    * since messages published to a topic with no subscriptions are lost.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#dead_letter_topic PubsubSubscription#dead_letter_topic}
    */
    readonly deadLetterTopic?: string;
    /**
    * The maximum number of delivery attempts for any message. The value must be
    * between 5 and 100.
    *
    * The number of delivery attempts is defined as 1 + (the sum of number of
    * NACKs and number of times the acknowledgement deadline has been exceeded for the message).
    *
    * A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that
    * client libraries may automatically extend ack_deadlines.
    *
    * This field will be honored on a best effort basis.
    *
    * If this parameter is 0, a default value of 5 is used.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#max_delivery_attempts PubsubSubscription#max_delivery_attempts}
    */
    readonly maxDeliveryAttempts?: number;
}
export declare function pubsubSubscriptionDeadLetterPolicyToTerraform(struct?: PubsubSubscriptionDeadLetterPolicyOutputReference | PubsubSubscriptionDeadLetterPolicy): any;
export declare function pubsubSubscriptionDeadLetterPolicyToHclTerraform(struct?: PubsubSubscriptionDeadLetterPolicyOutputReference | PubsubSubscriptionDeadLetterPolicy): any;
export declare class PubsubSubscriptionDeadLetterPolicyOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionDeadLetterPolicy | undefined;
    set internalValue(value: PubsubSubscriptionDeadLetterPolicy | undefined);
    private _deadLetterTopic?;
    get deadLetterTopic(): string;
    set deadLetterTopic(value: string);
    resetDeadLetterTopic(): void;
    get deadLetterTopicInput(): string | undefined;
    private _maxDeliveryAttempts?;
    get maxDeliveryAttempts(): number;
    set maxDeliveryAttempts(value: number);
    resetMaxDeliveryAttempts(): void;
    get maxDeliveryAttemptsInput(): number | undefined;
}
export interface PubsubSubscriptionExpirationPolicy {
    /**
    * Specifies the "time-to-live" duration for an associated resource. The
    * resource expires if it is not active for a period of ttl.
    * If ttl is set to "", the associated resource never expires.
    * A duration in seconds with up to nine fractional digits, terminated by 's'.
    * Example - "3.5s".
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#ttl PubsubSubscription#ttl}
    */
    readonly ttl: string;
}
export declare function pubsubSubscriptionExpirationPolicyToTerraform(struct?: PubsubSubscriptionExpirationPolicyOutputReference | PubsubSubscriptionExpirationPolicy): any;
export declare function pubsubSubscriptionExpirationPolicyToHclTerraform(struct?: PubsubSubscriptionExpirationPolicyOutputReference | PubsubSubscriptionExpirationPolicy): any;
export declare class PubsubSubscriptionExpirationPolicyOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionExpirationPolicy | undefined;
    set internalValue(value: PubsubSubscriptionExpirationPolicy | undefined);
    private _ttl?;
    get ttl(): string;
    set ttl(value: string);
    get ttlInput(): string | undefined;
}
export interface PubsubSubscriptionPushConfigNoWrapper {
    /**
    * When true, writes the Pub/Sub message metadata to
    * 'x-goog-pubsub-<KEY>:<VAL>' headers of the HTTP request. Writes the
    * Pub/Sub message attributes to '<KEY>:<VAL>' headers of the HTTP request.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#write_metadata PubsubSubscription#write_metadata}
    */
    readonly writeMetadata: boolean | cdktf.IResolvable;
}
export declare function pubsubSubscriptionPushConfigNoWrapperToTerraform(struct?: PubsubSubscriptionPushConfigNoWrapperOutputReference | PubsubSubscriptionPushConfigNoWrapper): any;
export declare function pubsubSubscriptionPushConfigNoWrapperToHclTerraform(struct?: PubsubSubscriptionPushConfigNoWrapperOutputReference | PubsubSubscriptionPushConfigNoWrapper): any;
export declare class PubsubSubscriptionPushConfigNoWrapperOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionPushConfigNoWrapper | undefined;
    set internalValue(value: PubsubSubscriptionPushConfigNoWrapper | undefined);
    private _writeMetadata?;
    get writeMetadata(): boolean | cdktf.IResolvable;
    set writeMetadata(value: boolean | cdktf.IResolvable);
    get writeMetadataInput(): boolean | cdktf.IResolvable | undefined;
}
export interface PubsubSubscriptionPushConfigOidcToken {
    /**
    * Audience to be used when generating OIDC token. The audience claim
    * identifies the recipients that the JWT is intended for. The audience
    * value is a single case-sensitive string. Having multiple values (array)
    * for the audience field is not supported. More info about the OIDC JWT
    * token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3
    * Note: if not specified, the Push endpoint URL will be used.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#audience PubsubSubscription#audience}
    */
    readonly audience?: string;
    /**
    * Service account email to be used for generating the OIDC token.
    * The caller (for subscriptions.create, subscriptions.patch, and
    * subscriptions.modifyPushConfig RPCs) must have the
    * iam.serviceAccounts.actAs permission for the service account.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#service_account_email PubsubSubscription#service_account_email}
    */
    readonly serviceAccountEmail: string;
}
export declare function pubsubSubscriptionPushConfigOidcTokenToTerraform(struct?: PubsubSubscriptionPushConfigOidcTokenOutputReference | PubsubSubscriptionPushConfigOidcToken): any;
export declare function pubsubSubscriptionPushConfigOidcTokenToHclTerraform(struct?: PubsubSubscriptionPushConfigOidcTokenOutputReference | PubsubSubscriptionPushConfigOidcToken): any;
export declare class PubsubSubscriptionPushConfigOidcTokenOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionPushConfigOidcToken | undefined;
    set internalValue(value: PubsubSubscriptionPushConfigOidcToken | undefined);
    private _audience?;
    get audience(): string;
    set audience(value: string);
    resetAudience(): void;
    get audienceInput(): string | undefined;
    private _serviceAccountEmail?;
    get serviceAccountEmail(): string;
    set serviceAccountEmail(value: string);
    get serviceAccountEmailInput(): string | undefined;
}
export interface PubsubSubscriptionPushConfig {
    /**
    * Endpoint configuration attributes.
    *
    * Every endpoint has a set of API supported attributes that can
    * be used to control different aspects of the message delivery.
    *
    * The currently supported attribute is x-goog-version, which you
    * can use to change the format of the pushed message. This
    * attribute indicates the version of the data expected by
    * the endpoint. This controls the shape of the pushed message
    * (i.e., its fields and metadata). The endpoint version is
    * based on the version of the Pub/Sub API.
    *
    * If not present during the subscriptions.create call,
    * it will default to the version of the API used to make
    * such call. If not present during a subscriptions.modifyPushConfig
    * call, its value will not be changed. subscriptions.get
    * calls will always return a valid version, even if the
    * subscription was created without this attribute.
    *
    * The possible values for this attribute are:
    *
    * - v1beta1: uses the push format defined in the v1beta1 Pub/Sub API.
    * - v1 or v1beta2: uses the push format defined in the v1 Pub/Sub API.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#attributes PubsubSubscription#attributes}
    */
    readonly attributes?: {
        [key: string]: string;
    };
    /**
    * A URL locating the endpoint to which messages should be pushed.
    * For example, a Webhook endpoint might use
    * "https://example.com/push".
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#push_endpoint PubsubSubscription#push_endpoint}
    */
    readonly pushEndpoint: string;
    /**
    * no_wrapper block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#no_wrapper PubsubSubscription#no_wrapper}
    */
    readonly noWrapper?: PubsubSubscriptionPushConfigNoWrapper;
    /**
    * oidc_token block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#oidc_token PubsubSubscription#oidc_token}
    */
    readonly oidcToken?: PubsubSubscriptionPushConfigOidcToken;
}
export declare function pubsubSubscriptionPushConfigToTerraform(struct?: PubsubSubscriptionPushConfigOutputReference | PubsubSubscriptionPushConfig): any;
export declare function pubsubSubscriptionPushConfigToHclTerraform(struct?: PubsubSubscriptionPushConfigOutputReference | PubsubSubscriptionPushConfig): any;
export declare class PubsubSubscriptionPushConfigOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionPushConfig | undefined;
    set internalValue(value: PubsubSubscriptionPushConfig | undefined);
    private _attributes?;
    get attributes(): {
        [key: string]: string;
    };
    set attributes(value: {
        [key: string]: string;
    });
    resetAttributes(): void;
    get attributesInput(): {
        [key: string]: string;
    } | undefined;
    private _pushEndpoint?;
    get pushEndpoint(): string;
    set pushEndpoint(value: string);
    get pushEndpointInput(): string | undefined;
    private _noWrapper;
    get noWrapper(): PubsubSubscriptionPushConfigNoWrapperOutputReference;
    putNoWrapper(value: PubsubSubscriptionPushConfigNoWrapper): void;
    resetNoWrapper(): void;
    get noWrapperInput(): PubsubSubscriptionPushConfigNoWrapper | undefined;
    private _oidcToken;
    get oidcToken(): PubsubSubscriptionPushConfigOidcTokenOutputReference;
    putOidcToken(value: PubsubSubscriptionPushConfigOidcToken): void;
    resetOidcToken(): void;
    get oidcTokenInput(): PubsubSubscriptionPushConfigOidcToken | undefined;
}
export interface PubsubSubscriptionRetryPolicy {
    /**
    * The maximum delay between consecutive deliveries of a given message. Value should be between 0 and 600 seconds. Defaults to 600 seconds.
    * A duration in seconds with up to nine fractional digits, terminated by 's'. Example: "3.5s".
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#maximum_backoff PubsubSubscription#maximum_backoff}
    */
    readonly maximumBackoff?: string;
    /**
    * The minimum delay between consecutive deliveries of a given message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
    * A duration in seconds with up to nine fractional digits, terminated by 's'. Example: "3.5s".
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#minimum_backoff PubsubSubscription#minimum_backoff}
    */
    readonly minimumBackoff?: string;
}
export declare function pubsubSubscriptionRetryPolicyToTerraform(struct?: PubsubSubscriptionRetryPolicyOutputReference | PubsubSubscriptionRetryPolicy): any;
export declare function pubsubSubscriptionRetryPolicyToHclTerraform(struct?: PubsubSubscriptionRetryPolicyOutputReference | PubsubSubscriptionRetryPolicy): any;
export declare class PubsubSubscriptionRetryPolicyOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @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(): PubsubSubscriptionRetryPolicy | undefined;
    set internalValue(value: PubsubSubscriptionRetryPolicy | undefined);
    private _maximumBackoff?;
    get maximumBackoff(): string;
    set maximumBackoff(value: string);
    resetMaximumBackoff(): void;
    get maximumBackoffInput(): string | undefined;
    private _minimumBackoff?;
    get minimumBackoff(): string;
    set minimumBackoff(value: string);
    resetMinimumBackoff(): void;
    get minimumBackoffInput(): string | undefined;
}
export interface PubsubSubscriptionTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#create PubsubSubscription#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#delete PubsubSubscription#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#update PubsubSubscription#update}
    */
    readonly update?: string;
}
export declare function pubsubSubscriptionTimeoutsToTerraform(struct?: PubsubSubscriptionTimeouts | cdktf.IResolvable): any;
export declare function pubsubSubscriptionTimeoutsToHclTerraform(struct?: PubsubSubscriptionTimeouts | cdktf.IResolvable): any;
export declare class PubsubSubscriptionTimeoutsOutputReference 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(): PubsubSubscriptionTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: PubsubSubscriptionTimeouts | 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.35.0/docs/resources/pubsub_subscription google_pubsub_subscription}
*/
export declare class PubsubSubscription extends cdktf.TerraformResource {
    static readonly tfResourceType = "google_pubsub_subscription";
    /**
    * Generates CDKTF code for importing a PubsubSubscription 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 PubsubSubscription to import
    * @param importFromId The id of the existing PubsubSubscription that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/pubsub_subscription#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the PubsubSubscription 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.35.0/docs/resources/pubsub_subscription google_pubsub_subscription} 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 PubsubSubscriptionConfig
    */
    constructor(scope: Construct, id: string, config: PubsubSubscriptionConfig);
    private _ackDeadlineSeconds?;
    get ackDeadlineSeconds(): number;
    set ackDeadlineSeconds(value: number);
    resetAckDeadlineSeconds(): void;
    get ackDeadlineSecondsInput(): number | undefined;
    private _effectiveLabels;
    get effectiveLabels(): cdktf.StringMap;
    private _enableExactlyOnceDelivery?;
    get enableExactlyOnceDelivery(): boolean | cdktf.IResolvable;
    set enableExactlyOnceDelivery(value: boolean | cdktf.IResolvable);
    resetEnableExactlyOnceDelivery(): void;
    get enableExactlyOnceDeliveryInput(): boolean | cdktf.IResolvable | undefined;
    private _enableMessageOrdering?;
    get enableMessageOrdering(): boolean | cdktf.IResolvable;
    set enableMessageOrdering(value: boolean | cdktf.IResolvable);
    resetEnableMessageOrdering(): void;
    get enableMessageOrderingInput(): boolean | cdktf.IResolvable | undefined;
    private _filter?;
    get filter(): string;
    set filter(value: string);
    resetFilter(): void;
    get filterInput(): 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 _messageRetentionDuration?;
    get messageRetentionDuration(): string;
    set messageRetentionDuration(value: string);
    resetMessageRetentionDuration(): void;
    get messageRetentionDurationInput(): 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 _retainAckedMessages?;
    get retainAckedMessages(): boolean | cdktf.IResolvable;
    set retainAckedMessages(value: boolean | cdktf.IResolvable);
    resetRetainAckedMessages(): void;
    get retainAckedMessagesInput(): boolean | cdktf.IResolvable | undefined;
    private _terraformLabels;
    get terraformLabels(): cdktf.StringMap;
    private _topic?;
    get topic(): string;
    set topic(value: string);
    get topicInput(): string | undefined;
    private _bigqueryConfig;
    get bigqueryConfig(): PubsubSubscriptionBigqueryConfigOutputReference;
    putBigqueryConfig(value: PubsubSubscriptionBigqueryConfig): void;
    resetBigqueryConfig(): void;
    get bigqueryConfigInput(): PubsubSubscriptionBigqueryConfig | undefined;
    private _cloudStorageConfig;
    get cloudStorageConfig(): PubsubSubscriptionCloudStorageConfigOutputReference;
    putCloudStorageConfig(value: PubsubSubscriptionCloudStorageConfig): void;
    resetCloudStorageConfig(): void;
    get cloudStorageConfigInput(): PubsubSubscriptionCloudStorageConfig | undefined;
    private _deadLetterPolicy;
    get deadLetterPolicy(): PubsubSubscriptionDeadLetterPolicyOutputReference;
    putDeadLetterPolicy(value: PubsubSubscriptionDeadLetterPolicy): void;
    resetDeadLetterPolicy(): void;
    get deadLetterPolicyInput(): PubsubSubscriptionDeadLetterPolicy | undefined;
    private _expirationPolicy;
    get expirationPolicy(): PubsubSubscriptionExpirationPolicyOutputReference;
    putExpirationPolicy(value: PubsubSubscriptionExpirationPolicy): void;
    resetExpirationPolicy(): void;
    get expirationPolicyInput(): PubsubSubscriptionExpirationPolicy | undefined;
    private _pushConfig;
    get pushConfig(): PubsubSubscriptionPushConfigOutputReference;
    putPushConfig(value: PubsubSubscriptionPushConfig): void;
    resetPushConfig(): void;
    get pushConfigInput(): PubsubSubscriptionPushConfig | undefined;
    private _retryPolicy;
    get retryPolicy(): PubsubSubscriptionRetryPolicyOutputReference;
    putRetryPolicy(value: PubsubSubscriptionRetryPolicy): void;
    resetRetryPolicy(): void;
    get retryPolicyInput(): PubsubSubscriptionRetryPolicy | undefined;
    private _timeouts;
    get timeouts(): PubsubSubscriptionTimeoutsOutputReference;
    putTimeouts(value: PubsubSubscriptionTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | PubsubSubscriptionTimeouts | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
