{
  "typeName" : "AWS::CloudFormation::ModuleVersion",
  "description" : "A module that has been registered in the CloudFormation registry.",
  "sourceUrl" : "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation",
  "properties" : {
    "Arn" : {
      "description" : "The Amazon Resource Name (ARN) of the module.",
      "pattern" : "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/module/.+$",
      "type" : "string"
    },
    "Description" : {
      "description" : "The description of the registered module.",
      "maxLength" : 1024,
      "minLength" : 1,
      "type" : "string"
    },
    "DocumentationUrl" : {
      "description" : "The URL of a page providing detailed documentation for this module.",
      "maxLength" : 4096,
      "type" : "string"
    },
    "ModuleName" : {
      "description" : "The name of the module being registered.\n\nRecommended module naming pattern: company_or_organization::service::type::MODULE.",
      "pattern" : "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::MODULE",
      "type" : "string"
    },
    "ModulePackage" : {
      "description" : "The url to the S3 bucket containing the schema and template fragment for the module you want to register.",
      "type" : "string"
    },
    "IsDefaultVersion" : {
      "description" : "Indicator of whether this module version is the current default version",
      "type" : "boolean"
    },
    "Schema" : {
      "description" : "The schema defining input parameters to and resources generated by the module.",
      "maxLength" : 16777216,
      "minLength" : 1,
      "type" : "string"
    },
    "TimeCreated" : {
      "description" : "The time that the specified module version was registered.",
      "type" : "string"
    },
    "VersionId" : {
      "description" : "The version ID of the module represented by this module instance.",
      "pattern" : "^[0-9]{8}$",
      "type" : "string"
    },
    "Visibility" : {
      "description" : "The scope at which the type is visible and usable in CloudFormation operations.\n\nThe only allowed value at present is:\n\nPRIVATE: The type is only visible and usable within the account in which it is registered. Currently, AWS CloudFormation marks any types you register as PRIVATE.",
      "enum" : [ "PRIVATE" ],
      "type" : "string"
    }
  },
  "required" : [ "ModuleName", "ModulePackage" ],
  "createOnlyProperties" : [ "/properties/ModuleName", "/properties/ModulePackage" ],
  "readOnlyProperties" : [ "/properties/Arn", "/properties/Description", "/properties/DocumentationUrl", "/properties/IsDefaultVersion", "/properties/Schema", "/properties/TimeCreated", "/properties/VersionId", "/properties/Visibility" ],
  "writeOnlyProperties" : [ "/properties/ModulePackage" ],
  "primaryIdentifier" : [ "/properties/Arn" ],
  "handlers" : {
    "create" : {
      "permissions" : [ "cloudformation:DescribeType", "cloudformation:DescribeTypeRegistration", "cloudformation:ListTypeVersions", "cloudformation:RegisterType", "s3:GetObject", "s3:ListBucket" ]
    },
    "read" : {
      "permissions" : [ "cloudformation:DescribeType" ]
    },
    "delete" : {
      "permissions" : [ "cloudformation:DeregisterType", "cloudformation:DescribeType" ]
    },
    "list" : {
      "permissions" : [ "cloudformation:ListTypes", "cloudformation:ListTypeVersions" ]
    }
  },
  "additionalProperties" : false
}