import * as core from "@terrascript/core";

export interface GeoRestrictionArgs extends core.SchemaArgs {
  locations?: core.Array<string> | core.ArrayOut<core.StringOut>;

  restrictionType: string | core.StringOut;
}

export class GeoRestriction extends core.Schema<GeoRestrictionArgs> {
  @core.attr(String, { computed: true, kind: "array" })
  public locations?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public restrictionType!: string | core.StringOut;
}

export interface RestrictionsArgs extends core.SchemaArgs {
  geoRestriction: GeoRestriction;
}

export class Restrictions extends core.Schema<RestrictionsArgs> {
  @core.attr(GeoRestriction)
  public geoRestriction!: GeoRestriction;
}

export interface OriginShieldArgs extends core.SchemaArgs {
  enabled: boolean | core.BooleanOut;

  originShieldRegion: string | core.StringOut;
}

export class OriginShield extends core.Schema<OriginShieldArgs> {
  @core.attr(Boolean)
  public enabled!: boolean | core.BooleanOut;

  @core.attr(String)
  public originShieldRegion!: string | core.StringOut;
}

export interface S3OriginConfigArgs extends core.SchemaArgs {
  originAccessIdentity: string | core.StringOut;
}

export class S3OriginConfig extends core.Schema<S3OriginConfigArgs> {
  @core.attr(String)
  public originAccessIdentity!: string | core.StringOut;
}

export interface CustomOriginConfigArgs extends core.SchemaArgs {
  httpPort: number | core.NumberOut;

  httpsPort: number | core.NumberOut;

  originKeepaliveTimeout?: number | core.NumberOut;

  originProtocolPolicy: string | core.StringOut;

  originReadTimeout?: number | core.NumberOut;

  originSslProtocols: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class CustomOriginConfig extends core.Schema<CustomOriginConfigArgs> {
  @core.attr(Number)
  public httpPort!: number | core.NumberOut;

  @core.attr(Number)
  public httpsPort!: number | core.NumberOut;

  @core.attr(Number)
  public originKeepaliveTimeout?: number | core.NumberOut;

  @core.attr(String)
  public originProtocolPolicy!: string | core.StringOut;

  @core.attr(Number)
  public originReadTimeout?: number | core.NumberOut;

  @core.attr(String, { kind: "array" })
  public originSslProtocols!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;
}

export interface CustomHeaderArgs extends core.SchemaArgs {
  name: string | core.StringOut;

  value: string | core.StringOut;
}

export class CustomHeader extends core.Schema<CustomHeaderArgs> {
  @core.attr(String)
  public name!: string | core.StringOut;

  @core.attr(String)
  public value!: string | core.StringOut;
}

export interface OriginArgs extends core.SchemaArgs {
  connectionAttempts?: number | core.NumberOut;

  connectionTimeout?: number | core.NumberOut;

  customHeader?: core.Array<CustomHeader> | core.ArrayOut<CustomHeader>;

  customOriginConfig?: CustomOriginConfig;

  domainName: string | core.StringOut;

  originId: string | core.StringOut;

  originPath?: string | core.StringOut;

  originShield?: OriginShield;

  s3OriginConfig?: S3OriginConfig;
}

export class Origin extends core.Schema<OriginArgs> {
  @core.attr(Number)
  public connectionAttempts?: number | core.NumberOut;

  @core.attr(Number)
  public connectionTimeout?: number | core.NumberOut;

  @core.attr(CustomHeader, { kind: "array" })
  public customHeader?: core.Array<CustomHeader> | core.ArrayOut<CustomHeader>;

  @core.attr(CustomOriginConfig)
  public customOriginConfig?: CustomOriginConfig;

  @core.attr(String)
  public domainName!: string | core.StringOut;

  @core.attr(String)
  public originId!: string | core.StringOut;

  @core.attr(String)
  public originPath?: string | core.StringOut;

  @core.attr(OriginShield)
  public originShield?: OriginShield;

  @core.attr(S3OriginConfig)
  public s3OriginConfig?: S3OriginConfig;
}

export interface OrderedCacheBehaviorForwardedValuesCookiesArgs
  extends core.SchemaArgs {
  forward: string | core.StringOut;

  whitelistedNames?: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class OrderedCacheBehaviorForwardedValuesCookies extends core.Schema<OrderedCacheBehaviorForwardedValuesCookiesArgs> {
  @core.attr(String)
  public forward!: string | core.StringOut;

  @core.attr(String, { kind: "array" })
  public whitelistedNames?: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export interface OrderedCacheBehaviorForwardedValuesArgs
  extends core.SchemaArgs {
  cookies: OrderedCacheBehaviorForwardedValuesCookies;

  headers?: core.Array<string> | core.ArrayOut<core.StringOut>;

  queryString: boolean | core.BooleanOut;

  queryStringCacheKeys?: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class OrderedCacheBehaviorForwardedValues extends core.Schema<OrderedCacheBehaviorForwardedValuesArgs> {
  @core.attr(OrderedCacheBehaviorForwardedValuesCookies)
  public cookies!: OrderedCacheBehaviorForwardedValuesCookies;

  @core.attr(String, { computed: true, kind: "array" })
  public headers?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(Boolean)
  public queryString!: boolean | core.BooleanOut;

  @core.attr(String, { computed: true, kind: "array" })
  public queryStringCacheKeys?:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;
}

export interface LambdaFunctionAssociationArgs extends core.SchemaArgs {
  eventType: string | core.StringOut;

  includeBody?: boolean | core.BooleanOut;

  lambdaArn: string | core.StringOut;
}

export class LambdaFunctionAssociation extends core.Schema<LambdaFunctionAssociationArgs> {
  @core.attr(String)
  public eventType!: string | core.StringOut;

  @core.attr(Boolean)
  public includeBody?: boolean | core.BooleanOut;

  @core.attr(String)
  public lambdaArn!: string | core.StringOut;
}

export interface FunctionAssociationArgs extends core.SchemaArgs {
  eventType: string | core.StringOut;

  functionArn: string | core.StringOut;
}

export class FunctionAssociation extends core.Schema<FunctionAssociationArgs> {
  @core.attr(String)
  public eventType!: string | core.StringOut;

  @core.attr(String)
  public functionArn!: string | core.StringOut;
}

export interface OrderedCacheBehaviorArgs extends core.SchemaArgs {
  allowedMethods: core.Array<string> | core.ArrayOut<core.StringOut>;

  cachePolicyId?: string | core.StringOut;

  cachedMethods: core.Array<string> | core.ArrayOut<core.StringOut>;

  compress?: boolean | core.BooleanOut;

  defaultTtl?: number | core.NumberOut;

  fieldLevelEncryptionId?: string | core.StringOut;

  forwardedValues?: OrderedCacheBehaviorForwardedValues;

  functionAssociation?:
    | core.Array<FunctionAssociation>
    | core.ArrayOut<FunctionAssociation>;

  lambdaFunctionAssociation?:
    | core.Array<LambdaFunctionAssociation>
    | core.ArrayOut<LambdaFunctionAssociation>;

  maxTtl?: number | core.NumberOut;

  minTtl?: number | core.NumberOut;

  originRequestPolicyId?: string | core.StringOut;

  pathPattern: string | core.StringOut;

  realtimeLogConfigArn?: string | core.StringOut;

  responseHeadersPolicyId?: string | core.StringOut;

  smoothStreaming?: boolean | core.BooleanOut;

  targetOriginId: string | core.StringOut;

  trustedKeyGroups?: core.Array<string> | core.ArrayOut<core.StringOut>;

  trustedSigners?: core.Array<string> | core.ArrayOut<core.StringOut>;

  viewerProtocolPolicy: string | core.StringOut;
}

export class OrderedCacheBehavior extends core.Schema<OrderedCacheBehaviorArgs> {
  @core.attr(String, { kind: "array" })
  public allowedMethods!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public cachePolicyId?: string | core.StringOut;

  @core.attr(String, { kind: "array" })
  public cachedMethods!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(Boolean)
  public compress?: boolean | core.BooleanOut;

  @core.attr(Number, { computed: true })
  public defaultTtl?: number | core.NumberOut;

  @core.attr(String)
  public fieldLevelEncryptionId?: string | core.StringOut;

  @core.attr(OrderedCacheBehaviorForwardedValues)
  public forwardedValues?: OrderedCacheBehaviorForwardedValues;

  @core.attr(FunctionAssociation, { kind: "array" })
  public functionAssociation?:
    | core.Array<FunctionAssociation>
    | core.ArrayOut<FunctionAssociation>;

  @core.attr(LambdaFunctionAssociation, { kind: "array" })
  public lambdaFunctionAssociation?:
    | core.Array<LambdaFunctionAssociation>
    | core.ArrayOut<LambdaFunctionAssociation>;

  @core.attr(Number, { computed: true })
  public maxTtl?: number | core.NumberOut;

  @core.attr(Number)
  public minTtl?: number | core.NumberOut;

  @core.attr(String)
  public originRequestPolicyId?: string | core.StringOut;

  @core.attr(String)
  public pathPattern!: string | core.StringOut;

  @core.attr(String)
  public realtimeLogConfigArn?: string | core.StringOut;

  @core.attr(String)
  public responseHeadersPolicyId?: string | core.StringOut;

  @core.attr(Boolean)
  public smoothStreaming?: boolean | core.BooleanOut;

  @core.attr(String)
  public targetOriginId!: string | core.StringOut;

  @core.attr(String, { kind: "array" })
  public trustedKeyGroups?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String, { kind: "array" })
  public trustedSigners?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public viewerProtocolPolicy!: string | core.StringOut;
}

export interface CustomErrorResponseArgs extends core.SchemaArgs {
  errorCachingMinTtl?: number | core.NumberOut;

  errorCode: number | core.NumberOut;

  responseCode?: number | core.NumberOut;

  responsePagePath?: string | core.StringOut;
}

export class CustomErrorResponse extends core.Schema<CustomErrorResponseArgs> {
  @core.attr(Number)
  public errorCachingMinTtl?: number | core.NumberOut;

  @core.attr(Number)
  public errorCode!: number | core.NumberOut;

  @core.attr(Number)
  public responseCode?: number | core.NumberOut;

  @core.attr(String)
  public responsePagePath?: string | core.StringOut;
}

export interface TrustedKeyGroupsItemsArgs extends core.SchemaArgs {
  keyGroupId: string | core.StringOut;

  keyPairIds: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class TrustedKeyGroupsItems extends core.Schema<TrustedKeyGroupsItemsArgs> {
  @core.attr(String, { computed: true })
  public keyGroupId!: string | core.StringOut;

  @core.attr(String, { computed: true, kind: "array" })
  public keyPairIds!: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export interface TrustedKeyGroupsArgs extends core.SchemaArgs {
  enabled: boolean | core.BooleanOut;

  items:
    | core.Array<TrustedKeyGroupsItems>
    | core.ArrayOut<TrustedKeyGroupsItems>;
}

export class TrustedKeyGroups extends core.Schema<TrustedKeyGroupsArgs> {
  @core.attr(Boolean, { computed: true })
  public enabled!: boolean | core.BooleanOut;

  @core.attr(TrustedKeyGroupsItems, { computed: true, kind: "array" })
  public items!:
    | core.Array<TrustedKeyGroupsItems>
    | core.ArrayOut<TrustedKeyGroupsItems>;
}

export interface FailoverCriteriaArgs extends core.SchemaArgs {
  statusCodes: core.Array<number> | core.ArrayOut<core.NumberOut>;
}

export class FailoverCriteria extends core.Schema<FailoverCriteriaArgs> {
  @core.attr(Number, { kind: "array" })
  public statusCodes!: core.Array<number> | core.ArrayOut<core.NumberOut>;
}

export interface MemberArgs extends core.SchemaArgs {
  originId: string | core.StringOut;
}

export class Member extends core.Schema<MemberArgs> {
  @core.attr(String)
  public originId!: string | core.StringOut;
}

export interface OriginGroupArgs extends core.SchemaArgs {
  failoverCriteria: FailoverCriteria;

  member: core.Array<Member> | core.ArrayOut<Member>;

  originId: string | core.StringOut;
}

export class OriginGroup extends core.Schema<OriginGroupArgs> {
  @core.attr(FailoverCriteria)
  public failoverCriteria!: FailoverCriteria;

  @core.attr(Member, { kind: "array" })
  public member!: core.Array<Member> | core.ArrayOut<Member>;

  @core.attr(String)
  public originId!: string | core.StringOut;
}

export interface TrustedSignersItemsArgs extends core.SchemaArgs {
  awsAccountNumber: string | core.StringOut;

  keyPairIds: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class TrustedSignersItems extends core.Schema<TrustedSignersItemsArgs> {
  @core.attr(String, { computed: true })
  public awsAccountNumber!: string | core.StringOut;

  @core.attr(String, { computed: true, kind: "array" })
  public keyPairIds!: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export interface TrustedSignersArgs extends core.SchemaArgs {
  enabled: boolean | core.BooleanOut;

  items: core.Array<TrustedSignersItems> | core.ArrayOut<TrustedSignersItems>;
}

export class TrustedSigners extends core.Schema<TrustedSignersArgs> {
  @core.attr(Boolean, { computed: true })
  public enabled!: boolean | core.BooleanOut;

  @core.attr(TrustedSignersItems, { computed: true, kind: "array" })
  public items!:
    | core.Array<TrustedSignersItems>
    | core.ArrayOut<TrustedSignersItems>;
}

export interface DefaultCacheBehaviorForwardedValuesCookiesArgs
  extends core.SchemaArgs {
  forward: string | core.StringOut;

  whitelistedNames?: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class DefaultCacheBehaviorForwardedValuesCookies extends core.Schema<DefaultCacheBehaviorForwardedValuesCookiesArgs> {
  @core.attr(String)
  public forward!: string | core.StringOut;

  @core.attr(String, { computed: true, kind: "array" })
  public whitelistedNames?: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export interface DefaultCacheBehaviorForwardedValuesArgs
  extends core.SchemaArgs {
  cookies: DefaultCacheBehaviorForwardedValuesCookies;

  headers?: core.Array<string> | core.ArrayOut<core.StringOut>;

  queryString: boolean | core.BooleanOut;

  queryStringCacheKeys?: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class DefaultCacheBehaviorForwardedValues extends core.Schema<DefaultCacheBehaviorForwardedValuesArgs> {
  @core.attr(DefaultCacheBehaviorForwardedValuesCookies)
  public cookies!: DefaultCacheBehaviorForwardedValuesCookies;

  @core.attr(String, { computed: true, kind: "array" })
  public headers?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(Boolean)
  public queryString!: boolean | core.BooleanOut;

  @core.attr(String, { computed: true, kind: "array" })
  public queryStringCacheKeys?:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;
}

export interface DefaultCacheBehaviorArgs extends core.SchemaArgs {
  allowedMethods: core.Array<string> | core.ArrayOut<core.StringOut>;

  cachePolicyId?: string | core.StringOut;

  cachedMethods: core.Array<string> | core.ArrayOut<core.StringOut>;

  compress?: boolean | core.BooleanOut;

  defaultTtl?: number | core.NumberOut;

  fieldLevelEncryptionId?: string | core.StringOut;

  forwardedValues?: DefaultCacheBehaviorForwardedValues;

  functionAssociation?:
    | core.Array<FunctionAssociation>
    | core.ArrayOut<FunctionAssociation>;

  lambdaFunctionAssociation?:
    | core.Array<LambdaFunctionAssociation>
    | core.ArrayOut<LambdaFunctionAssociation>;

  maxTtl?: number | core.NumberOut;

  minTtl?: number | core.NumberOut;

  originRequestPolicyId?: string | core.StringOut;

  realtimeLogConfigArn?: string | core.StringOut;

  responseHeadersPolicyId?: string | core.StringOut;

  smoothStreaming?: boolean | core.BooleanOut;

  targetOriginId: string | core.StringOut;

  trustedKeyGroups?: core.Array<string> | core.ArrayOut<core.StringOut>;

  trustedSigners?: core.Array<string> | core.ArrayOut<core.StringOut>;

  viewerProtocolPolicy: string | core.StringOut;
}

export class DefaultCacheBehavior extends core.Schema<DefaultCacheBehaviorArgs> {
  @core.attr(String, { kind: "array" })
  public allowedMethods!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public cachePolicyId?: string | core.StringOut;

  @core.attr(String, { kind: "array" })
  public cachedMethods!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(Boolean)
  public compress?: boolean | core.BooleanOut;

  @core.attr(Number, { computed: true })
  public defaultTtl?: number | core.NumberOut;

  @core.attr(String)
  public fieldLevelEncryptionId?: string | core.StringOut;

  @core.attr(DefaultCacheBehaviorForwardedValues)
  public forwardedValues?: DefaultCacheBehaviorForwardedValues;

  @core.attr(FunctionAssociation, { kind: "array" })
  public functionAssociation?:
    | core.Array<FunctionAssociation>
    | core.ArrayOut<FunctionAssociation>;

  @core.attr(LambdaFunctionAssociation, { kind: "array" })
  public lambdaFunctionAssociation?:
    | core.Array<LambdaFunctionAssociation>
    | core.ArrayOut<LambdaFunctionAssociation>;

  @core.attr(Number, { computed: true })
  public maxTtl?: number | core.NumberOut;

  @core.attr(Number)
  public minTtl?: number | core.NumberOut;

  @core.attr(String)
  public originRequestPolicyId?: string | core.StringOut;

  @core.attr(String)
  public realtimeLogConfigArn?: string | core.StringOut;

  @core.attr(String)
  public responseHeadersPolicyId?: string | core.StringOut;

  @core.attr(Boolean)
  public smoothStreaming?: boolean | core.BooleanOut;

  @core.attr(String)
  public targetOriginId!: string | core.StringOut;

  @core.attr(String, { computed: true, kind: "array" })
  public trustedKeyGroups?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String, { computed: true, kind: "array" })
  public trustedSigners?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public viewerProtocolPolicy!: string | core.StringOut;
}

export interface ViewerCertificateArgs extends core.SchemaArgs {
  acmCertificateArn?: string | core.StringOut;

  cloudfrontDefaultCertificate?: boolean | core.BooleanOut;

  iamCertificateId?: string | core.StringOut;

  minimumProtocolVersion?: string | core.StringOut;

  sslSupportMethod?: string | core.StringOut;
}

export class ViewerCertificate extends core.Schema<ViewerCertificateArgs> {
  @core.attr(String)
  public acmCertificateArn?: string | core.StringOut;

  @core.attr(Boolean)
  public cloudfrontDefaultCertificate?: boolean | core.BooleanOut;

  @core.attr(String)
  public iamCertificateId?: string | core.StringOut;

  @core.attr(String)
  public minimumProtocolVersion?: string | core.StringOut;

  @core.attr(String)
  public sslSupportMethod?: string | core.StringOut;
}

export interface LoggingConfigArgs extends core.SchemaArgs {
  bucket: string | core.StringOut;

  includeCookies?: boolean | core.BooleanOut;

  prefix?: string | core.StringOut;
}

export class LoggingConfig extends core.Schema<LoggingConfigArgs> {
  @core.attr(String)
  public bucket!: string | core.StringOut;

  @core.attr(Boolean)
  public includeCookies?: boolean | core.BooleanOut;

  @core.attr(String)
  public prefix?: string | core.StringOut;
}

export interface DistributionArgs extends core.ResourceArgs {
  aliases?: core.Array<string> | core.ArrayOut<core.StringOut>;

  comment?: string | core.StringOut;

  customErrorResponse?:
    | core.Array<CustomErrorResponse>
    | core.ArrayOut<CustomErrorResponse>;

  defaultCacheBehavior: DefaultCacheBehavior;

  defaultRootObject?: string | core.StringOut;

  enabled: boolean | core.BooleanOut;

  httpVersion?: string | core.StringOut;

  isIpv6Enabled?: boolean | core.BooleanOut;

  loggingConfig?: LoggingConfig;

  orderedCacheBehavior?:
    | core.Array<OrderedCacheBehavior>
    | core.ArrayOut<OrderedCacheBehavior>;

  origin: core.Array<Origin> | core.ArrayOut<Origin>;

  originGroup?: core.Array<OriginGroup> | core.ArrayOut<OriginGroup>;

  priceClass?: string | core.StringOut;

  restrictions: Restrictions;

  retainOnDelete?: boolean | core.BooleanOut;

  tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  viewerCertificate: ViewerCertificate;

  waitForDeployment?: boolean | core.BooleanOut;

  webAclId?: string | core.StringOut;
}

export class Distribution extends core.Resource<DistributionArgs> {
  @core.attr(String, { kind: "array" })
  public aliases?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String, { computed: true })
  public arn!: string | core.StringOut;

  @core.attr(String, { computed: true })
  public callerReference!: string | core.StringOut;

  @core.attr(String)
  public comment?: string | core.StringOut;

  @core.attr(CustomErrorResponse, { kind: "array" })
  public customErrorResponse?:
    | core.Array<CustomErrorResponse>
    | core.ArrayOut<CustomErrorResponse>;

  @core.attr(DefaultCacheBehavior)
  public defaultCacheBehavior!: DefaultCacheBehavior;

  @core.attr(String)
  public defaultRootObject?: string | core.StringOut;

  @core.attr(String, { computed: true })
  public domainName!: string | core.StringOut;

  @core.attr(Boolean)
  public enabled!: boolean | core.BooleanOut;

  @core.attr(String, { computed: true })
  public etag!: string | core.StringOut;

  @core.attr(String, { computed: true })
  public hostedZoneId!: string | core.StringOut;

  @core.attr(String)
  public httpVersion?: string | core.StringOut;

  @core.attr(String, { computed: true })
  public id!: string | core.StringOut;

  @core.attr(Number, { computed: true })
  public inProgressValidationBatches!: number | core.NumberOut;

  @core.attr(Boolean)
  public isIpv6Enabled?: boolean | core.BooleanOut;

  @core.attr(String, { computed: true })
  public lastModifiedTime!: string | core.StringOut;

  @core.attr(LoggingConfig)
  public loggingConfig?: LoggingConfig;

  @core.attr(OrderedCacheBehavior, { kind: "array" })
  public orderedCacheBehavior?:
    | core.Array<OrderedCacheBehavior>
    | core.ArrayOut<OrderedCacheBehavior>;

  @core.attr(Origin, { kind: "array" })
  public origin!: core.Array<Origin> | core.ArrayOut<Origin>;

  @core.attr(OriginGroup, { kind: "array" })
  public originGroup?: core.Array<OriginGroup> | core.ArrayOut<OriginGroup>;

  @core.attr(String)
  public priceClass?: string | core.StringOut;

  @core.attr(Restrictions)
  public restrictions!: Restrictions;

  @core.attr(Boolean)
  public retainOnDelete?: boolean | core.BooleanOut;

  @core.attr(String, { computed: true })
  public status!: string | core.StringOut;

  @core.attr(String, { kind: "map" })
  public tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  @core.attr(String, { computed: true, kind: "map" })
  public tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  @core.attr(TrustedKeyGroups, { computed: true, kind: "array" })
  public trustedKeyGroups!:
    | core.Array<TrustedKeyGroups>
    | core.ArrayOut<TrustedKeyGroups>;

  @core.attr(TrustedSigners, { computed: true, kind: "array" })
  public trustedSigners!:
    | core.Array<TrustedSigners>
    | core.ArrayOut<TrustedSigners>;

  @core.attr(ViewerCertificate)
  public viewerCertificate!: ViewerCertificate;

  @core.attr(Boolean)
  public waitForDeployment?: boolean | core.BooleanOut;

  @core.attr(String)
  public webAclId?: string | core.StringOut;

  constructor(name: string, args?: DistributionArgs) {
    super(name, "aws_cloudfront_distribution", args);
  }

  public override getNamespace(): string {
    return "aws_cloudfront";
  }
}
