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

export interface UsernameConfigurationArgs extends core.SchemaArgs {
  caseSensitive: boolean | core.BooleanOut;
}

export class UsernameConfiguration extends core.Schema<UsernameConfigurationArgs> {
  @core.attr(Boolean)
  public caseSensitive!: boolean | core.BooleanOut;
}

export interface DeviceConfigurationArgs extends core.SchemaArgs {
  challengeRequiredOnNewDevice?: boolean | core.BooleanOut;

  deviceOnlyRememberedOnUserPrompt?: boolean | core.BooleanOut;
}

export class DeviceConfiguration extends core.Schema<DeviceConfigurationArgs> {
  @core.attr(Boolean)
  public challengeRequiredOnNewDevice?: boolean | core.BooleanOut;

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

export interface UserPoolAddOnsArgs extends core.SchemaArgs {
  advancedSecurityMode: string | core.StringOut;
}

export class UserPoolAddOns extends core.Schema<UserPoolAddOnsArgs> {
  @core.attr(String)
  public advancedSecurityMode!: string | core.StringOut;
}

export interface SmsConfigurationArgs extends core.SchemaArgs {
  externalId: string | core.StringOut;

  snsCallerArn: string | core.StringOut;
}

export class SmsConfiguration extends core.Schema<SmsConfigurationArgs> {
  @core.attr(String)
  public externalId!: string | core.StringOut;

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

export interface CustomEmailSenderArgs extends core.SchemaArgs {
  lambdaArn: string | core.StringOut;

  lambdaVersion: string | core.StringOut;
}

export class CustomEmailSender extends core.Schema<CustomEmailSenderArgs> {
  @core.attr(String)
  public lambdaArn!: string | core.StringOut;

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

export interface CustomSmsSenderArgs extends core.SchemaArgs {
  lambdaArn: string | core.StringOut;

  lambdaVersion: string | core.StringOut;
}

export class CustomSmsSender extends core.Schema<CustomSmsSenderArgs> {
  @core.attr(String)
  public lambdaArn!: string | core.StringOut;

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

export interface LambdaConfigArgs extends core.SchemaArgs {
  createAuthChallenge?: string | core.StringOut;

  customEmailSender?: CustomEmailSender;

  customMessage?: string | core.StringOut;

  customSmsSender?: CustomSmsSender;

  defineAuthChallenge?: string | core.StringOut;

  kmsKeyId?: string | core.StringOut;

  postAuthentication?: string | core.StringOut;

  postConfirmation?: string | core.StringOut;

  preAuthentication?: string | core.StringOut;

  preSignUp?: string | core.StringOut;

  preTokenGeneration?: string | core.StringOut;

  userMigration?: string | core.StringOut;

  verifyAuthChallengeResponse?: string | core.StringOut;
}

export class LambdaConfig extends core.Schema<LambdaConfigArgs> {
  @core.attr(String)
  public createAuthChallenge?: string | core.StringOut;

  @core.attr(CustomEmailSender, { computed: true })
  public customEmailSender?: CustomEmailSender;

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

  @core.attr(CustomSmsSender, { computed: true })
  public customSmsSender?: CustomSmsSender;

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

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

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

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

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

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

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

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

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

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

  priority: number | core.NumberOut;
}

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

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

export interface AccountRecoverySettingArgs extends core.SchemaArgs {
  recoveryMechanism:
    | core.Array<RecoveryMechanism>
    | core.ArrayOut<RecoveryMechanism>;
}

export class AccountRecoverySetting extends core.Schema<AccountRecoverySettingArgs> {
  @core.attr(RecoveryMechanism, { kind: "array" })
  public recoveryMechanism!:
    | core.Array<RecoveryMechanism>
    | core.ArrayOut<RecoveryMechanism>;
}

export interface NumberAttributeConstraintsArgs extends core.SchemaArgs {
  maxValue?: string | core.StringOut;

  minValue?: string | core.StringOut;
}

export class NumberAttributeConstraints extends core.Schema<NumberAttributeConstraintsArgs> {
  @core.attr(String)
  public maxValue?: string | core.StringOut;

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

export interface StringAttributeConstraintsArgs extends core.SchemaArgs {
  maxLength?: string | core.StringOut;

  minLength?: string | core.StringOut;
}

export class StringAttributeConstraints extends core.Schema<StringAttributeConstraintsArgs> {
  @core.attr(String)
  public maxLength?: string | core.StringOut;

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

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

  developerOnlyAttribute?: boolean | core.BooleanOut;

  mutable?: boolean | core.BooleanOut;

  name: string | core.StringOut;

  numberAttributeConstraints?: NumberAttributeConstraints;

  required?: boolean | core.BooleanOut;

  stringAttributeConstraints?: StringAttributeConstraints;
}

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

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

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

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

  @core.attr(NumberAttributeConstraints)
  public numberAttributeConstraints?: NumberAttributeConstraints;

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

  @core.attr(StringAttributeConstraints)
  public stringAttributeConstraints?: StringAttributeConstraints;
}

export interface EmailConfigurationArgs extends core.SchemaArgs {
  configurationSet?: string | core.StringOut;

  emailSendingAccount?: string | core.StringOut;

  fromEmailAddress?: string | core.StringOut;

  replyToEmailAddress?: string | core.StringOut;

  sourceArn?: string | core.StringOut;
}

export class EmailConfiguration extends core.Schema<EmailConfigurationArgs> {
  @core.attr(String)
  public configurationSet?: string | core.StringOut;

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

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

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

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

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

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

export interface VerificationMessageTemplateArgs extends core.SchemaArgs {
  defaultEmailOption?: string | core.StringOut;

  emailMessage?: string | core.StringOut;

  emailMessageByLink?: string | core.StringOut;

  emailSubject?: string | core.StringOut;

  emailSubjectByLink?: string | core.StringOut;

  smsMessage?: string | core.StringOut;
}

export class VerificationMessageTemplate extends core.Schema<VerificationMessageTemplateArgs> {
  @core.attr(String)
  public defaultEmailOption?: string | core.StringOut;

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

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

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

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

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

export interface PasswordPolicyArgs extends core.SchemaArgs {
  minimumLength?: number | core.NumberOut;

  requireLowercase?: boolean | core.BooleanOut;

  requireNumbers?: boolean | core.BooleanOut;

  requireSymbols?: boolean | core.BooleanOut;

  requireUppercase?: boolean | core.BooleanOut;

  temporaryPasswordValidityDays?: number | core.NumberOut;
}

export class PasswordPolicy extends core.Schema<PasswordPolicyArgs> {
  @core.attr(Number)
  public minimumLength?: number | core.NumberOut;

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

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

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

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

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

export interface InviteMessageTemplateArgs extends core.SchemaArgs {
  emailMessage?: string | core.StringOut;

  emailSubject?: string | core.StringOut;

  smsMessage?: string | core.StringOut;
}

export class InviteMessageTemplate extends core.Schema<InviteMessageTemplateArgs> {
  @core.attr(String)
  public emailMessage?: string | core.StringOut;

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

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

export interface AdminCreateUserConfigArgs extends core.SchemaArgs {
  allowAdminCreateUserOnly?: boolean | core.BooleanOut;

  inviteMessageTemplate?: InviteMessageTemplate;
}

export class AdminCreateUserConfig extends core.Schema<AdminCreateUserConfigArgs> {
  @core.attr(Boolean)
  public allowAdminCreateUserOnly?: boolean | core.BooleanOut;

  @core.attr(InviteMessageTemplate)
  public inviteMessageTemplate?: InviteMessageTemplate;
}

export interface UserPoolArgs extends core.ResourceArgs {
  /**
   * (Optional) Configuration block to define which verified available method a user can use to recover t
   * heir forgotten password. [Detailed below](#account_recovery_setting).
   */
  accountRecoverySetting?: AccountRecoverySetting;

  /**
   * (Optional) Configuration block for creating a new user profile. [Detailed below](#admin_create_user_
   * config).
   */
  adminCreateUserConfig?: AdminCreateUserConfig;

  /**
   * (Optional) Attributes supported as an alias for this user pool. Valid values: `phone_number`, `email
   * , or `preferred_username`. Conflicts with `username_attributes`.
   */
  aliasAttributes?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Attributes to be auto-verified. Valid values: `email`, `phone_number`.
   */
  autoVerifiedAttributes?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Configuration block for the user pool's device tracking. [Detailed below](#device_configu
   * ration).
   */
  deviceConfiguration?: DeviceConfiguration;

  /**
   * (Optional) Configuration block for configuring email. [Detailed below](#email_configuration).
   */
  emailConfiguration?: EmailConfiguration;

  /**
   * (Optional) String representing the email verification message. Conflicts with `verification_message_
   * template` configuration block `email_message` argument.
   */
  emailVerificationMessage?: string | core.StringOut;

  /**
   * (Optional) String representing the email verification subject. Conflicts with `verification_message_
   * template` configuration block `email_subject` argument.
   */
  emailVerificationSubject?: string | core.StringOut;

  /**
   * (Optional) Configuration block for the AWS Lambda triggers associated with the user pool. [Detailed
   * below](#lambda_config).
   */
  lambdaConfig?: LambdaConfig;

  /**
   * (Optional) Multi-Factor Authentication (MFA) configuration for the User Pool. Defaults of `OFF`. Val
   * id values are `OFF` (MFA Tokens are not required), `ON` (MFA is required for all users to sign in; r
   * equires at least one of `sms_configuration` or `software_token_mfa_configuration` to be configured),
   * or `OPTIONAL` (MFA Will be required only for individual users who have MFA Enabled; requires at lea
   * st one of `sms_configuration` or `software_token_mfa_configuration` to be configured).
   */
  mfaConfiguration?: string | core.StringOut;

  /**
   * (Required) Name of the user pool.
   */
  name: string | core.StringOut;

  /**
   * (Optional) Configuration blocked for information about the user pool password policy. [Detailed belo
   * w](#password_policy).
   */
  passwordPolicy?: PasswordPolicy;

  /**
   * (Optional) Configuration block for the schema attributes of a user pool. [Detailed below](#schema).
   * Schema attributes from the [standard attribute set](https://docs.aws.amazon.com/cognito/latest/devel
   * operguide/user-pool-settings-attributes.html#cognito-user-pools-standard-attributes) only need to be
   * specified if they are different from the default configuration. Attributes can be added, but not mo
   * dified or removed. Maximum of 50 attributes.
   */
  schema?: core.Array<Schema> | core.ArrayOut<Schema>;

  /**
   * (Optional) String representing the SMS authentication message. The Message must contain the `{####}`
   * placeholder, which will be replaced with the code.
   */
  smsAuthenticationMessage?: string | core.StringOut;

  /**
   * (Optional) Configuration block for Short Message Service (SMS) settings. [Detailed below](#sms_confi
   * guration). These settings apply to SMS user verification and SMS Multi-Factor Authentication (MFA).
   * Due to Cognito API restrictions, the SMS configuration cannot be removed without recreating the Cogn
   * ito User Pool. For user data safety, this resource will ignore the removal of this configuration by
   * disabling drift detection. To force resource recreation after this configuration has been applied, s
   * ee the [`taint` command](https://www.terraform.io/docs/commands/taint.html).
   */
  smsConfiguration?: SmsConfiguration;

  /**
   * (Optional) String representing the SMS verification message. Conflicts with `verification_message_te
   * mplate` configuration block `sms_message` argument.
   */
  smsVerificationMessage?: string | core.StringOut;

  /**
   * (Optional) Configuration block for software token Mult-Factor Authentication (MFA) settings. [Detail
   * ed below](#software_token_mfa_configuration).
   */
  softwareTokenMfaConfiguration?: SoftwareTokenMfaConfiguration;

  /**
   * (Optional) Map of tags to assign to the User Pool. If configured with a provider [`default_tags` con
   * figuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-con
   * figuration-block) present, tags with matching keys will overwrite those defined at the provider-leve
   * l.
   */
  tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  /**
   * A map of tags assigned to the resource, including those inherited from the provider [`default_tags`
   * configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-
   * configuration-block).
   */
  tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  /**
   * (Optional) Configuration block for user pool add-ons to enable user pool advanced security mode feat
   * ures. [Detailed below](#user_pool_add_ons).
   */
  userPoolAddOns?: UserPoolAddOns;

  /**
   * (Optional) Whether email addresses or phone numbers can be specified as usernames when a user signs
   * up. Conflicts with `alias_attributes`.
   */
  usernameAttributes?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Configuration block for username configuration. [Detailed below](#username_configuration)
   * .
   */
  usernameConfiguration?: UsernameConfiguration;

  /**
   * (Optional) Configuration block for verification message templates. [Detailed below](#verification_me
   * ssage_template).
   */
  verificationMessageTemplate?: VerificationMessageTemplate;
}

export class UserPool extends core.Resource<UserPoolArgs> {
  /**
   * (Optional) Configuration block to define which verified available method a user can use to recover t
   * heir forgotten password. [Detailed below](#account_recovery_setting).
   */
  @core.attr(AccountRecoverySetting)
  public accountRecoverySetting?: AccountRecoverySetting;

  /**
   * (Optional) Configuration block for creating a new user profile. [Detailed below](#admin_create_user_
   * config).
   */
  @core.attr(AdminCreateUserConfig, { computed: true })
  public adminCreateUserConfig?: AdminCreateUserConfig;

  /**
   * (Optional) Attributes supported as an alias for this user pool. Valid values: `phone_number`, `email
   * , or `preferred_username`. Conflicts with `username_attributes`.
   */
  @core.attr(String, { kind: "array" })
  public aliasAttributes?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * ARN of the user pool.
   */
  @core.attr(String, { computed: true })
  public arn!: string | core.StringOut;

  /**
   * (Optional) Attributes to be auto-verified. Valid values: `email`, `phone_number`.
   */
  @core.attr(String, { kind: "array" })
  public autoVerifiedAttributes?:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * Date the user pool was created.
   */
  @core.attr(String, { computed: true })
  public creationDate!: string | core.StringOut;

  /**
   * A custom domain name that you provide to Amazon Cognito. This parameter applies only if you use a cu
   * stom domain to host the sign-up and sign-in pages for your application. For example: `auth.example.c
   * om`.
   */
  @core.attr(String, { computed: true })
  public customDomain!: string | core.StringOut;

  /**
   * (Optional) Configuration block for the user pool's device tracking. [Detailed below](#device_configu
   * ration).
   */
  @core.attr(DeviceConfiguration)
  public deviceConfiguration?: DeviceConfiguration;

  /**
   * Holds the domain prefix if the user pool has a domain associated with it.
   */
  @core.attr(String, { computed: true })
  public domain!: string | core.StringOut;

  /**
   * (Optional) Configuration block for configuring email. [Detailed below](#email_configuration).
   */
  @core.attr(EmailConfiguration)
  public emailConfiguration?: EmailConfiguration;

  /**
   * (Optional) String representing the email verification message. Conflicts with `verification_message_
   * template` configuration block `email_message` argument.
   */
  @core.attr(String, { computed: true })
  public emailVerificationMessage?: string | core.StringOut;

  /**
   * (Optional) String representing the email verification subject. Conflicts with `verification_message_
   * template` configuration block `email_subject` argument.
   */
  @core.attr(String, { computed: true })
  public emailVerificationSubject?: string | core.StringOut;

  /**
   * Endpoint name of the user pool. Example format: `cognito-idp.REGION.amazonaws.com/xxxx_yyyyy`
   */
  @core.attr(String, { computed: true })
  public endpoint!: string | core.StringOut;

  /**
   * A number estimating the size of the user pool.
   */
  @core.attr(Number, { computed: true })
  public estimatedNumberOfUsers!: number | core.NumberOut;

  /**
   * ID of the user pool.
   */
  @core.attr(String, { computed: true })
  public id!: string | core.StringOut;

  /**
   * (Optional) Configuration block for the AWS Lambda triggers associated with the user pool. [Detailed
   * below](#lambda_config).
   */
  @core.attr(LambdaConfig)
  public lambdaConfig?: LambdaConfig;

  /**
   * Date the user pool was last modified.
   */
  @core.attr(String, { computed: true })
  public lastModifiedDate!: string | core.StringOut;

  /**
   * (Optional) Multi-Factor Authentication (MFA) configuration for the User Pool. Defaults of `OFF`. Val
   * id values are `OFF` (MFA Tokens are not required), `ON` (MFA is required for all users to sign in; r
   * equires at least one of `sms_configuration` or `software_token_mfa_configuration` to be configured),
   * or `OPTIONAL` (MFA Will be required only for individual users who have MFA Enabled; requires at lea
   * st one of `sms_configuration` or `software_token_mfa_configuration` to be configured).
   */
  @core.attr(String)
  public mfaConfiguration?: string | core.StringOut;

  /**
   * (Required) Name of the user pool.
   */
  @core.attr(String)
  public name!: string | core.StringOut;

  /**
   * (Optional) Configuration blocked for information about the user pool password policy. [Detailed belo
   * w](#password_policy).
   */
  @core.attr(PasswordPolicy, { computed: true })
  public passwordPolicy?: PasswordPolicy;

  /**
   * (Optional) Configuration block for the schema attributes of a user pool. [Detailed below](#schema).
   * Schema attributes from the [standard attribute set](https://docs.aws.amazon.com/cognito/latest/devel
   * operguide/user-pool-settings-attributes.html#cognito-user-pools-standard-attributes) only need to be
   * specified if they are different from the default configuration. Attributes can be added, but not mo
   * dified or removed. Maximum of 50 attributes.
   */
  @core.attr(Schema, { kind: "array" })
  public schema?: core.Array<Schema> | core.ArrayOut<Schema>;

  /**
   * (Optional) String representing the SMS authentication message. The Message must contain the `{####}`
   * placeholder, which will be replaced with the code.
   */
  @core.attr(String)
  public smsAuthenticationMessage?: string | core.StringOut;

  /**
   * (Optional) Configuration block for Short Message Service (SMS) settings. [Detailed below](#sms_confi
   * guration). These settings apply to SMS user verification and SMS Multi-Factor Authentication (MFA).
   * Due to Cognito API restrictions, the SMS configuration cannot be removed without recreating the Cogn
   * ito User Pool. For user data safety, this resource will ignore the removal of this configuration by
   * disabling drift detection. To force resource recreation after this configuration has been applied, s
   * ee the [`taint` command](https://www.terraform.io/docs/commands/taint.html).
   */
  @core.attr(SmsConfiguration, { computed: true })
  public smsConfiguration?: SmsConfiguration;

  /**
   * (Optional) String representing the SMS verification message. Conflicts with `verification_message_te
   * mplate` configuration block `sms_message` argument.
   */
  @core.attr(String, { computed: true })
  public smsVerificationMessage?: string | core.StringOut;

  /**
   * (Optional) Configuration block for software token Mult-Factor Authentication (MFA) settings. [Detail
   * ed below](#software_token_mfa_configuration).
   */
  @core.attr(SoftwareTokenMfaConfiguration)
  public softwareTokenMfaConfiguration?: SoftwareTokenMfaConfiguration;

  /**
   * (Optional) Map of tags to assign to the User Pool. If configured with a provider [`default_tags` con
   * figuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-con
   * figuration-block) present, tags with matching keys will overwrite those defined at the provider-leve
   * l.
   */
  @core.attr(String, { kind: "map" })
  public tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  /**
   * A map of tags assigned to the resource, including those inherited from the provider [`default_tags`
   * configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-
   * configuration-block).
   */
  @core.attr(String, { computed: true, kind: "map" })
  public tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  /**
   * (Optional) Configuration block for user pool add-ons to enable user pool advanced security mode feat
   * ures. [Detailed below](#user_pool_add_ons).
   */
  @core.attr(UserPoolAddOns)
  public userPoolAddOns?: UserPoolAddOns;

  /**
   * (Optional) Whether email addresses or phone numbers can be specified as usernames when a user signs
   * up. Conflicts with `alias_attributes`.
   */
  @core.attr(String, { kind: "array" })
  public usernameAttributes?:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Configuration block for username configuration. [Detailed below](#username_configuration)
   * .
   */
  @core.attr(UsernameConfiguration)
  public usernameConfiguration?: UsernameConfiguration;

  /**
   * (Optional) Configuration block for verification message templates. [Detailed below](#verification_me
   * ssage_template).
   */
  @core.attr(VerificationMessageTemplate, { computed: true })
  public verificationMessageTemplate?: VerificationMessageTemplate;

  constructor(name: string, args?: UserPoolArgs) {
    super(name, "aws_cognito_user_pool", args);
  }

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