diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon CodeArtifact SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-09-22@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-codeartifact)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.CodeArtifact](http://hackage.haskell.org/package/amazonka-codeartifact/docs/Amazonka-CodeArtifact.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-codeartifact` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-codeartifact.cabal b/amazonka-codeartifact.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-codeartifact.cabal
@@ -0,0 +1,151 @@
+cabal-version:      2.2
+name:               amazonka-codeartifact
+version:            2.0
+synopsis:           Amazon CodeArtifact SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2018-09-22@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.CodeArtifact.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.CodeArtifact" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-codeartifact
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.CodeArtifact
+    Amazonka.CodeArtifact.AssociateExternalConnection
+    Amazonka.CodeArtifact.CopyPackageVersions
+    Amazonka.CodeArtifact.CreateDomain
+    Amazonka.CodeArtifact.CreateRepository
+    Amazonka.CodeArtifact.DeleteDomain
+    Amazonka.CodeArtifact.DeleteDomainPermissionsPolicy
+    Amazonka.CodeArtifact.DeletePackageVersions
+    Amazonka.CodeArtifact.DeleteRepository
+    Amazonka.CodeArtifact.DeleteRepositoryPermissionsPolicy
+    Amazonka.CodeArtifact.DescribeDomain
+    Amazonka.CodeArtifact.DescribePackage
+    Amazonka.CodeArtifact.DescribePackageVersion
+    Amazonka.CodeArtifact.DescribeRepository
+    Amazonka.CodeArtifact.DisassociateExternalConnection
+    Amazonka.CodeArtifact.DisposePackageVersions
+    Amazonka.CodeArtifact.GetAuthorizationToken
+    Amazonka.CodeArtifact.GetDomainPermissionsPolicy
+    Amazonka.CodeArtifact.GetPackageVersionAsset
+    Amazonka.CodeArtifact.GetPackageVersionReadme
+    Amazonka.CodeArtifact.GetRepositoryEndpoint
+    Amazonka.CodeArtifact.GetRepositoryPermissionsPolicy
+    Amazonka.CodeArtifact.Lens
+    Amazonka.CodeArtifact.ListDomains
+    Amazonka.CodeArtifact.ListPackages
+    Amazonka.CodeArtifact.ListPackageVersionAssets
+    Amazonka.CodeArtifact.ListPackageVersionDependencies
+    Amazonka.CodeArtifact.ListPackageVersions
+    Amazonka.CodeArtifact.ListRepositories
+    Amazonka.CodeArtifact.ListRepositoriesInDomain
+    Amazonka.CodeArtifact.ListTagsForResource
+    Amazonka.CodeArtifact.PutDomainPermissionsPolicy
+    Amazonka.CodeArtifact.PutPackageOriginConfiguration
+    Amazonka.CodeArtifact.PutRepositoryPermissionsPolicy
+    Amazonka.CodeArtifact.TagResource
+    Amazonka.CodeArtifact.Types
+    Amazonka.CodeArtifact.Types.AllowPublish
+    Amazonka.CodeArtifact.Types.AllowUpstream
+    Amazonka.CodeArtifact.Types.AssetSummary
+    Amazonka.CodeArtifact.Types.DomainDescription
+    Amazonka.CodeArtifact.Types.DomainEntryPoint
+    Amazonka.CodeArtifact.Types.DomainStatus
+    Amazonka.CodeArtifact.Types.DomainSummary
+    Amazonka.CodeArtifact.Types.ExternalConnectionStatus
+    Amazonka.CodeArtifact.Types.HashAlgorithm
+    Amazonka.CodeArtifact.Types.LicenseInfo
+    Amazonka.CodeArtifact.Types.PackageDependency
+    Amazonka.CodeArtifact.Types.PackageDescription
+    Amazonka.CodeArtifact.Types.PackageFormat
+    Amazonka.CodeArtifact.Types.PackageOriginConfiguration
+    Amazonka.CodeArtifact.Types.PackageOriginRestrictions
+    Amazonka.CodeArtifact.Types.PackageSummary
+    Amazonka.CodeArtifact.Types.PackageVersionDescription
+    Amazonka.CodeArtifact.Types.PackageVersionError
+    Amazonka.CodeArtifact.Types.PackageVersionErrorCode
+    Amazonka.CodeArtifact.Types.PackageVersionOrigin
+    Amazonka.CodeArtifact.Types.PackageVersionOriginType
+    Amazonka.CodeArtifact.Types.PackageVersionSortType
+    Amazonka.CodeArtifact.Types.PackageVersionStatus
+    Amazonka.CodeArtifact.Types.PackageVersionSummary
+    Amazonka.CodeArtifact.Types.RepositoryDescription
+    Amazonka.CodeArtifact.Types.RepositoryExternalConnectionInfo
+    Amazonka.CodeArtifact.Types.RepositorySummary
+    Amazonka.CodeArtifact.Types.ResourcePolicy
+    Amazonka.CodeArtifact.Types.SuccessfulPackageVersionInfo
+    Amazonka.CodeArtifact.Types.Tag
+    Amazonka.CodeArtifact.Types.UpstreamRepository
+    Amazonka.CodeArtifact.Types.UpstreamRepositoryInfo
+    Amazonka.CodeArtifact.UntagResource
+    Amazonka.CodeArtifact.UpdatePackageVersionsStatus
+    Amazonka.CodeArtifact.UpdateRepository
+    Amazonka.CodeArtifact.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-codeartifact-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.CodeArtifact
+    Test.Amazonka.CodeArtifact.Internal
+    Test.Amazonka.Gen.CodeArtifact
+
+  build-depends:
+    , amazonka-codeartifact
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateExternalConnection.yaml b/fixture/AssociateExternalConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateExternalConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateExternalConnectionResponse.proto b/fixture/AssociateExternalConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateExternalConnectionResponse.proto
diff --git a/fixture/CopyPackageVersions.yaml b/fixture/CopyPackageVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CopyPackageVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CopyPackageVersionsResponse.proto b/fixture/CopyPackageVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CopyPackageVersionsResponse.proto
diff --git a/fixture/CreateDomain.yaml b/fixture/CreateDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDomainResponse.proto b/fixture/CreateDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomainResponse.proto
diff --git a/fixture/CreateRepository.yaml b/fixture/CreateRepository.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRepository.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateRepositoryResponse.proto b/fixture/CreateRepositoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRepositoryResponse.proto
diff --git a/fixture/DeleteDomain.yaml b/fixture/DeleteDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDomainPermissionsPolicy.yaml b/fixture/DeleteDomainPermissionsPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainPermissionsPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDomainPermissionsPolicyResponse.proto b/fixture/DeleteDomainPermissionsPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainPermissionsPolicyResponse.proto
diff --git a/fixture/DeleteDomainResponse.proto b/fixture/DeleteDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainResponse.proto
diff --git a/fixture/DeletePackageVersions.yaml b/fixture/DeletePackageVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePackageVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeletePackageVersionsResponse.proto b/fixture/DeletePackageVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePackageVersionsResponse.proto
diff --git a/fixture/DeleteRepository.yaml b/fixture/DeleteRepository.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRepository.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteRepositoryPermissionsPolicy.yaml b/fixture/DeleteRepositoryPermissionsPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRepositoryPermissionsPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteRepositoryPermissionsPolicyResponse.proto b/fixture/DeleteRepositoryPermissionsPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRepositoryPermissionsPolicyResponse.proto
diff --git a/fixture/DeleteRepositoryResponse.proto b/fixture/DeleteRepositoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRepositoryResponse.proto
diff --git a/fixture/DescribeDomain.yaml b/fixture/DescribeDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDomainResponse.proto b/fixture/DescribeDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDomainResponse.proto
diff --git a/fixture/DescribePackage.yaml b/fixture/DescribePackage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackage.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePackageResponse.proto b/fixture/DescribePackageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackageResponse.proto
diff --git a/fixture/DescribePackageVersion.yaml b/fixture/DescribePackageVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackageVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePackageVersionResponse.proto b/fixture/DescribePackageVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackageVersionResponse.proto
diff --git a/fixture/DescribeRepository.yaml b/fixture/DescribeRepository.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRepository.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeRepositoryResponse.proto b/fixture/DescribeRepositoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRepositoryResponse.proto
diff --git a/fixture/DisassociateExternalConnection.yaml b/fixture/DisassociateExternalConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateExternalConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateExternalConnectionResponse.proto b/fixture/DisassociateExternalConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateExternalConnectionResponse.proto
diff --git a/fixture/DisposePackageVersions.yaml b/fixture/DisposePackageVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisposePackageVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisposePackageVersionsResponse.proto b/fixture/DisposePackageVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisposePackageVersionsResponse.proto
diff --git a/fixture/GetAuthorizationToken.yaml b/fixture/GetAuthorizationToken.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAuthorizationToken.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAuthorizationTokenResponse.proto b/fixture/GetAuthorizationTokenResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAuthorizationTokenResponse.proto
diff --git a/fixture/GetDomainPermissionsPolicy.yaml b/fixture/GetDomainPermissionsPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainPermissionsPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDomainPermissionsPolicyResponse.proto b/fixture/GetDomainPermissionsPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainPermissionsPolicyResponse.proto
diff --git a/fixture/GetPackageVersionAsset.yaml b/fixture/GetPackageVersionAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPackageVersionAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetPackageVersionAssetResponse.proto b/fixture/GetPackageVersionAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPackageVersionAssetResponse.proto
diff --git a/fixture/GetPackageVersionReadme.yaml b/fixture/GetPackageVersionReadme.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPackageVersionReadme.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetPackageVersionReadmeResponse.proto b/fixture/GetPackageVersionReadmeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPackageVersionReadmeResponse.proto
diff --git a/fixture/GetRepositoryEndpoint.yaml b/fixture/GetRepositoryEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRepositoryEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetRepositoryEndpointResponse.proto b/fixture/GetRepositoryEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRepositoryEndpointResponse.proto
diff --git a/fixture/GetRepositoryPermissionsPolicy.yaml b/fixture/GetRepositoryPermissionsPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRepositoryPermissionsPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetRepositoryPermissionsPolicyResponse.proto b/fixture/GetRepositoryPermissionsPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRepositoryPermissionsPolicyResponse.proto
diff --git a/fixture/ListDomains.yaml b/fixture/ListDomains.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomains.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDomainsResponse.proto b/fixture/ListDomainsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomainsResponse.proto
diff --git a/fixture/ListPackageVersionAssets.yaml b/fixture/ListPackageVersionAssets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackageVersionAssets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListPackageVersionAssetsResponse.proto b/fixture/ListPackageVersionAssetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackageVersionAssetsResponse.proto
diff --git a/fixture/ListPackageVersionDependencies.yaml b/fixture/ListPackageVersionDependencies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackageVersionDependencies.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListPackageVersionDependenciesResponse.proto b/fixture/ListPackageVersionDependenciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackageVersionDependenciesResponse.proto
diff --git a/fixture/ListPackageVersions.yaml b/fixture/ListPackageVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackageVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListPackageVersionsResponse.proto b/fixture/ListPackageVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackageVersionsResponse.proto
diff --git a/fixture/ListPackages.yaml b/fixture/ListPackages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListPackagesResponse.proto b/fixture/ListPackagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackagesResponse.proto
diff --git a/fixture/ListRepositories.yaml b/fixture/ListRepositories.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRepositories.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListRepositoriesInDomain.yaml b/fixture/ListRepositoriesInDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRepositoriesInDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListRepositoriesInDomainResponse.proto b/fixture/ListRepositoriesInDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRepositoriesInDomainResponse.proto
diff --git a/fixture/ListRepositoriesResponse.proto b/fixture/ListRepositoriesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRepositoriesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/PutDomainPermissionsPolicy.yaml b/fixture/PutDomainPermissionsPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDomainPermissionsPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutDomainPermissionsPolicyResponse.proto b/fixture/PutDomainPermissionsPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDomainPermissionsPolicyResponse.proto
diff --git a/fixture/PutPackageOriginConfiguration.yaml b/fixture/PutPackageOriginConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutPackageOriginConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutPackageOriginConfigurationResponse.proto b/fixture/PutPackageOriginConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutPackageOriginConfigurationResponse.proto
diff --git a/fixture/PutRepositoryPermissionsPolicy.yaml b/fixture/PutRepositoryPermissionsPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutRepositoryPermissionsPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutRepositoryPermissionsPolicyResponse.proto b/fixture/PutRepositoryPermissionsPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutRepositoryPermissionsPolicyResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdatePackageVersionsStatus.yaml b/fixture/UpdatePackageVersionsStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePackageVersionsStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdatePackageVersionsStatusResponse.proto b/fixture/UpdatePackageVersionsStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePackageVersionsStatusResponse.proto
diff --git a/fixture/UpdateRepository.yaml b/fixture/UpdateRepository.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRepository.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/codeartifact/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  codeartifact.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateRepositoryResponse.proto b/fixture/UpdateRepositoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRepositoryResponse.proto
diff --git a/gen/Amazonka/CodeArtifact.hs b/gen/Amazonka/CodeArtifact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact.hs
@@ -0,0 +1,648 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.CodeArtifact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2018-09-22@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- CodeArtifact is a fully managed artifact repository compatible with
+-- language-native package managers and build tools such as npm, Apache
+-- Maven, pip, and dotnet. You can use CodeArtifact to share packages with
+-- development teams and pull packages. Packages can be pulled from both
+-- public and CodeArtifact repositories. You can also create an upstream
+-- relationship between a CodeArtifact repository and another repository,
+-- which effectively merges their contents from the point of view of a
+-- package manager client.
+--
+-- __CodeArtifact Components__
+--
+-- Use the information in this guide to help you work with the following
+-- CodeArtifact components:
+--
+-- -   __Repository__: A CodeArtifact repository contains a set of
+--     <https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html#welcome-concepts-package-version package versions>,
+--     each of which maps to a set of assets, or files. Repositories are
+--     polyglot, so a single repository can contain packages of any
+--     supported type. Each repository exposes endpoints for fetching and
+--     publishing packages using tools like the __@npm@__ CLI, the Maven
+--     CLI ( __@mvn@__ ), Python CLIs ( __@pip@__ and @twine@), and NuGet
+--     CLIs (@nuget@ and @dotnet@).
+--
+-- -   __Domain__: Repositories are aggregated into a higher-level entity
+--     known as a /domain/. All package assets and metadata are stored in
+--     the domain, but are consumed through repositories. A given package
+--     asset, such as a Maven JAR file, is stored once per domain, no
+--     matter how many repositories it\'s present in. All of the assets and
+--     metadata in a domain are encrypted with the same customer master key
+--     (CMK) stored in Key Management Service (KMS).
+--
+--     Each repository is a member of a single domain and can\'t be moved
+--     to a different domain.
+--
+--     The domain allows organizational policy to be applied across
+--     multiple repositories, such as which accounts can access
+--     repositories in the domain, and which public repositories can be
+--     used as sources of packages.
+--
+--     Although an organization can have multiple domains, we recommend a
+--     single production domain that contains all published artifacts so
+--     that teams can find and share packages across their organization.
+--
+-- -   __Package__: A /package/ is a bundle of software and the metadata
+--     required to resolve dependencies and install the software.
+--     CodeArtifact supports
+--     <https://docs.aws.amazon.com/codeartifact/latest/ug/using-npm.html npm>,
+--     <https://docs.aws.amazon.com/codeartifact/latest/ug/using-python.html PyPI>,
+--     <https://docs.aws.amazon.com/codeartifact/latest/ug/using-maven Maven>,
+--     and
+--     <https://docs.aws.amazon.com/codeartifact/latest/ug/using-nuget NuGet>
+--     package formats.
+--
+--     In CodeArtifact, a package consists of:
+--
+--     -   A /name/ (for example, @webpack@ is the name of a popular npm
+--         package)
+--
+--     -   An optional namespace (for example, @\@types@ in
+--         @\@types\/node@)
+--
+--     -   A set of versions (for example, @1.0.0@, @1.0.1@, @1.0.2@, etc.)
+--
+--     -   Package-level metadata (for example, npm tags)
+--
+-- -   __Package version__: A version of a package, such as
+--     @\@types\/node 12.6.9@. The version number format and semantics vary
+--     for different package formats. For example, npm package versions
+--     must conform to the
+--     <https://semver.org/ Semantic Versioning specification>. In
+--     CodeArtifact, a package version consists of the version identifier,
+--     metadata at the package version level, and a set of assets.
+--
+-- -   __Upstream repository__: One repository is /upstream/ of another
+--     when the package versions in it can be accessed from the repository
+--     endpoint of the downstream repository, effectively merging the
+--     contents of the two repositories from the point of view of a client.
+--     CodeArtifact allows creating an upstream relationship between two
+--     repositories.
+--
+-- -   __Asset__: An individual file stored in CodeArtifact associated with
+--     a package version, such as an npm @.tgz@ file or Maven POM and JAR
+--     files.
+--
+-- CodeArtifact supports these operations:
+--
+-- -   @AssociateExternalConnection@: Adds an existing external connection
+--     to a repository.
+--
+-- -   @CopyPackageVersions@: Copies package versions from one repository
+--     to another repository in the same domain.
+--
+-- -   @CreateDomain@: Creates a domain
+--
+-- -   @CreateRepository@: Creates a CodeArtifact repository in a domain.
+--
+-- -   @DeleteDomain@: Deletes a domain. You cannot delete a domain that
+--     contains repositories.
+--
+-- -   @DeleteDomainPermissionsPolicy@: Deletes the resource policy that is
+--     set on a domain.
+--
+-- -   @DeletePackageVersions@: Deletes versions of a package. After a
+--     package has been deleted, it can be republished, but its assets and
+--     metadata cannot be restored because they have been permanently
+--     removed from storage.
+--
+-- -   @DeleteRepository@: Deletes a repository.
+--
+-- -   @DeleteRepositoryPermissionsPolicy@: Deletes the resource policy
+--     that is set on a repository.
+--
+-- -   @DescribeDomain@: Returns a @DomainDescription@ object that contains
+--     information about the requested domain.
+--
+-- -   @DescribePackage@: Returns a
+--     <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDescription.html PackageDescription>
+--     object that contains details about a package.
+--
+-- -   @DescribePackageVersion@: Returns a
+--     <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionDescription.html PackageVersionDescription>
+--     object that contains details about a package version.
+--
+-- -   @DescribeRepository@: Returns a @RepositoryDescription@ object that
+--     contains detailed information about the requested repository.
+--
+-- -   @DisposePackageVersions@: Disposes versions of a package. A package
+--     version with the status @Disposed@ cannot be restored because they
+--     have been permanently removed from storage.
+--
+-- -   @DisassociateExternalConnection@: Removes an existing external
+--     connection from a repository.
+--
+-- -   @GetAuthorizationToken@: Generates a temporary authorization token
+--     for accessing repositories in the domain. The token expires the
+--     authorization period has passed. The default authorization period is
+--     12 hours and can be customized to any length with a maximum of 12
+--     hours.
+--
+-- -   @GetDomainPermissionsPolicy@: Returns the policy of a resource that
+--     is attached to the specified domain.
+--
+-- -   @GetPackageVersionAsset@: Returns the contents of an asset that is
+--     in a package version.
+--
+-- -   @GetPackageVersionReadme@: Gets the readme file or descriptive text
+--     for a package version.
+--
+-- -   @GetRepositoryEndpoint@: Returns the endpoint of a repository for a
+--     specific package format. A repository has one endpoint for each
+--     package format:
+--
+--     -   @maven@
+--
+--     -   @npm@
+--
+--     -   @nuget@
+--
+--     -   @pypi@
+--
+-- -   @GetRepositoryPermissionsPolicy@: Returns the resource policy that
+--     is set on a repository.
+--
+-- -   @ListDomains@: Returns a list of @DomainSummary@ objects. Each
+--     returned @DomainSummary@ object contains information about a domain.
+--
+-- -   @ListPackages@: Lists the packages in a repository.
+--
+-- -   @ListPackageVersionAssets@: Lists the assets for a given package
+--     version.
+--
+-- -   @ListPackageVersionDependencies@: Returns a list of the direct
+--     dependencies for a package version.
+--
+-- -   @ListPackageVersions@: Returns a list of package versions for a
+--     specified package in a repository.
+--
+-- -   @ListRepositories@: Returns a list of repositories owned by the
+--     Amazon Web Services account that called this method.
+--
+-- -   @ListRepositoriesInDomain@: Returns a list of the repositories in a
+--     domain.
+--
+-- -   @PutDomainPermissionsPolicy@: Attaches a resource policy to a
+--     domain.
+--
+-- -   @PutPackageOriginConfiguration@: Sets the package origin
+--     configuration for a package, which determine how new versions of the
+--     package can be added to a specific repository.
+--
+-- -   @PutRepositoryPermissionsPolicy@: Sets the resource policy on a
+--     repository that specifies permissions to access it.
+--
+-- -   @UpdatePackageVersionsStatus@: Updates the status of one or more
+--     versions of a package.
+--
+-- -   @UpdateRepository@: Updates the properties of a repository.
+module Amazonka.CodeArtifact
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateExternalConnection
+    AssociateExternalConnection (AssociateExternalConnection'),
+    newAssociateExternalConnection,
+    AssociateExternalConnectionResponse (AssociateExternalConnectionResponse'),
+    newAssociateExternalConnectionResponse,
+
+    -- ** CopyPackageVersions
+    CopyPackageVersions (CopyPackageVersions'),
+    newCopyPackageVersions,
+    CopyPackageVersionsResponse (CopyPackageVersionsResponse'),
+    newCopyPackageVersionsResponse,
+
+    -- ** CreateDomain
+    CreateDomain (CreateDomain'),
+    newCreateDomain,
+    CreateDomainResponse (CreateDomainResponse'),
+    newCreateDomainResponse,
+
+    -- ** CreateRepository
+    CreateRepository (CreateRepository'),
+    newCreateRepository,
+    CreateRepositoryResponse (CreateRepositoryResponse'),
+    newCreateRepositoryResponse,
+
+    -- ** DeleteDomain
+    DeleteDomain (DeleteDomain'),
+    newDeleteDomain,
+    DeleteDomainResponse (DeleteDomainResponse'),
+    newDeleteDomainResponse,
+
+    -- ** DeleteDomainPermissionsPolicy
+    DeleteDomainPermissionsPolicy (DeleteDomainPermissionsPolicy'),
+    newDeleteDomainPermissionsPolicy,
+    DeleteDomainPermissionsPolicyResponse (DeleteDomainPermissionsPolicyResponse'),
+    newDeleteDomainPermissionsPolicyResponse,
+
+    -- ** DeletePackageVersions
+    DeletePackageVersions (DeletePackageVersions'),
+    newDeletePackageVersions,
+    DeletePackageVersionsResponse (DeletePackageVersionsResponse'),
+    newDeletePackageVersionsResponse,
+
+    -- ** DeleteRepository
+    DeleteRepository (DeleteRepository'),
+    newDeleteRepository,
+    DeleteRepositoryResponse (DeleteRepositoryResponse'),
+    newDeleteRepositoryResponse,
+
+    -- ** DeleteRepositoryPermissionsPolicy
+    DeleteRepositoryPermissionsPolicy (DeleteRepositoryPermissionsPolicy'),
+    newDeleteRepositoryPermissionsPolicy,
+    DeleteRepositoryPermissionsPolicyResponse (DeleteRepositoryPermissionsPolicyResponse'),
+    newDeleteRepositoryPermissionsPolicyResponse,
+
+    -- ** DescribeDomain
+    DescribeDomain (DescribeDomain'),
+    newDescribeDomain,
+    DescribeDomainResponse (DescribeDomainResponse'),
+    newDescribeDomainResponse,
+
+    -- ** DescribePackage
+    DescribePackage (DescribePackage'),
+    newDescribePackage,
+    DescribePackageResponse (DescribePackageResponse'),
+    newDescribePackageResponse,
+
+    -- ** DescribePackageVersion
+    DescribePackageVersion (DescribePackageVersion'),
+    newDescribePackageVersion,
+    DescribePackageVersionResponse (DescribePackageVersionResponse'),
+    newDescribePackageVersionResponse,
+
+    -- ** DescribeRepository
+    DescribeRepository (DescribeRepository'),
+    newDescribeRepository,
+    DescribeRepositoryResponse (DescribeRepositoryResponse'),
+    newDescribeRepositoryResponse,
+
+    -- ** DisassociateExternalConnection
+    DisassociateExternalConnection (DisassociateExternalConnection'),
+    newDisassociateExternalConnection,
+    DisassociateExternalConnectionResponse (DisassociateExternalConnectionResponse'),
+    newDisassociateExternalConnectionResponse,
+
+    -- ** DisposePackageVersions
+    DisposePackageVersions (DisposePackageVersions'),
+    newDisposePackageVersions,
+    DisposePackageVersionsResponse (DisposePackageVersionsResponse'),
+    newDisposePackageVersionsResponse,
+
+    -- ** GetAuthorizationToken
+    GetAuthorizationToken (GetAuthorizationToken'),
+    newGetAuthorizationToken,
+    GetAuthorizationTokenResponse (GetAuthorizationTokenResponse'),
+    newGetAuthorizationTokenResponse,
+
+    -- ** GetDomainPermissionsPolicy
+    GetDomainPermissionsPolicy (GetDomainPermissionsPolicy'),
+    newGetDomainPermissionsPolicy,
+    GetDomainPermissionsPolicyResponse (GetDomainPermissionsPolicyResponse'),
+    newGetDomainPermissionsPolicyResponse,
+
+    -- ** GetPackageVersionAsset
+    GetPackageVersionAsset (GetPackageVersionAsset'),
+    newGetPackageVersionAsset,
+    GetPackageVersionAssetResponse (GetPackageVersionAssetResponse'),
+    newGetPackageVersionAssetResponse,
+
+    -- ** GetPackageVersionReadme
+    GetPackageVersionReadme (GetPackageVersionReadme'),
+    newGetPackageVersionReadme,
+    GetPackageVersionReadmeResponse (GetPackageVersionReadmeResponse'),
+    newGetPackageVersionReadmeResponse,
+
+    -- ** GetRepositoryEndpoint
+    GetRepositoryEndpoint (GetRepositoryEndpoint'),
+    newGetRepositoryEndpoint,
+    GetRepositoryEndpointResponse (GetRepositoryEndpointResponse'),
+    newGetRepositoryEndpointResponse,
+
+    -- ** GetRepositoryPermissionsPolicy
+    GetRepositoryPermissionsPolicy (GetRepositoryPermissionsPolicy'),
+    newGetRepositoryPermissionsPolicy,
+    GetRepositoryPermissionsPolicyResponse (GetRepositoryPermissionsPolicyResponse'),
+    newGetRepositoryPermissionsPolicyResponse,
+
+    -- ** ListDomains (Paginated)
+    ListDomains (ListDomains'),
+    newListDomains,
+    ListDomainsResponse (ListDomainsResponse'),
+    newListDomainsResponse,
+
+    -- ** ListPackageVersionAssets (Paginated)
+    ListPackageVersionAssets (ListPackageVersionAssets'),
+    newListPackageVersionAssets,
+    ListPackageVersionAssetsResponse (ListPackageVersionAssetsResponse'),
+    newListPackageVersionAssetsResponse,
+
+    -- ** ListPackageVersionDependencies
+    ListPackageVersionDependencies (ListPackageVersionDependencies'),
+    newListPackageVersionDependencies,
+    ListPackageVersionDependenciesResponse (ListPackageVersionDependenciesResponse'),
+    newListPackageVersionDependenciesResponse,
+
+    -- ** ListPackageVersions (Paginated)
+    ListPackageVersions (ListPackageVersions'),
+    newListPackageVersions,
+    ListPackageVersionsResponse (ListPackageVersionsResponse'),
+    newListPackageVersionsResponse,
+
+    -- ** ListPackages (Paginated)
+    ListPackages (ListPackages'),
+    newListPackages,
+    ListPackagesResponse (ListPackagesResponse'),
+    newListPackagesResponse,
+
+    -- ** ListRepositories (Paginated)
+    ListRepositories (ListRepositories'),
+    newListRepositories,
+    ListRepositoriesResponse (ListRepositoriesResponse'),
+    newListRepositoriesResponse,
+
+    -- ** ListRepositoriesInDomain (Paginated)
+    ListRepositoriesInDomain (ListRepositoriesInDomain'),
+    newListRepositoriesInDomain,
+    ListRepositoriesInDomainResponse (ListRepositoriesInDomainResponse'),
+    newListRepositoriesInDomainResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutDomainPermissionsPolicy
+    PutDomainPermissionsPolicy (PutDomainPermissionsPolicy'),
+    newPutDomainPermissionsPolicy,
+    PutDomainPermissionsPolicyResponse (PutDomainPermissionsPolicyResponse'),
+    newPutDomainPermissionsPolicyResponse,
+
+    -- ** PutPackageOriginConfiguration
+    PutPackageOriginConfiguration (PutPackageOriginConfiguration'),
+    newPutPackageOriginConfiguration,
+    PutPackageOriginConfigurationResponse (PutPackageOriginConfigurationResponse'),
+    newPutPackageOriginConfigurationResponse,
+
+    -- ** PutRepositoryPermissionsPolicy
+    PutRepositoryPermissionsPolicy (PutRepositoryPermissionsPolicy'),
+    newPutRepositoryPermissionsPolicy,
+    PutRepositoryPermissionsPolicyResponse (PutRepositoryPermissionsPolicyResponse'),
+    newPutRepositoryPermissionsPolicyResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdatePackageVersionsStatus
+    UpdatePackageVersionsStatus (UpdatePackageVersionsStatus'),
+    newUpdatePackageVersionsStatus,
+    UpdatePackageVersionsStatusResponse (UpdatePackageVersionsStatusResponse'),
+    newUpdatePackageVersionsStatusResponse,
+
+    -- ** UpdateRepository
+    UpdateRepository (UpdateRepository'),
+    newUpdateRepository,
+    UpdateRepositoryResponse (UpdateRepositoryResponse'),
+    newUpdateRepositoryResponse,
+
+    -- * Types
+
+    -- ** AllowPublish
+    AllowPublish (..),
+
+    -- ** AllowUpstream
+    AllowUpstream (..),
+
+    -- ** DomainStatus
+    DomainStatus (..),
+
+    -- ** ExternalConnectionStatus
+    ExternalConnectionStatus (..),
+
+    -- ** HashAlgorithm
+    HashAlgorithm (..),
+
+    -- ** PackageFormat
+    PackageFormat (..),
+
+    -- ** PackageVersionErrorCode
+    PackageVersionErrorCode (..),
+
+    -- ** PackageVersionOriginType
+    PackageVersionOriginType (..),
+
+    -- ** PackageVersionSortType
+    PackageVersionSortType (..),
+
+    -- ** PackageVersionStatus
+    PackageVersionStatus (..),
+
+    -- ** AssetSummary
+    AssetSummary (AssetSummary'),
+    newAssetSummary,
+
+    -- ** DomainDescription
+    DomainDescription (DomainDescription'),
+    newDomainDescription,
+
+    -- ** DomainEntryPoint
+    DomainEntryPoint (DomainEntryPoint'),
+    newDomainEntryPoint,
+
+    -- ** DomainSummary
+    DomainSummary (DomainSummary'),
+    newDomainSummary,
+
+    -- ** LicenseInfo
+    LicenseInfo (LicenseInfo'),
+    newLicenseInfo,
+
+    -- ** PackageDependency
+    PackageDependency (PackageDependency'),
+    newPackageDependency,
+
+    -- ** PackageDescription
+    PackageDescription (PackageDescription'),
+    newPackageDescription,
+
+    -- ** PackageOriginConfiguration
+    PackageOriginConfiguration (PackageOriginConfiguration'),
+    newPackageOriginConfiguration,
+
+    -- ** PackageOriginRestrictions
+    PackageOriginRestrictions (PackageOriginRestrictions'),
+    newPackageOriginRestrictions,
+
+    -- ** PackageSummary
+    PackageSummary (PackageSummary'),
+    newPackageSummary,
+
+    -- ** PackageVersionDescription
+    PackageVersionDescription (PackageVersionDescription'),
+    newPackageVersionDescription,
+
+    -- ** PackageVersionError
+    PackageVersionError (PackageVersionError'),
+    newPackageVersionError,
+
+    -- ** PackageVersionOrigin
+    PackageVersionOrigin (PackageVersionOrigin'),
+    newPackageVersionOrigin,
+
+    -- ** PackageVersionSummary
+    PackageVersionSummary (PackageVersionSummary'),
+    newPackageVersionSummary,
+
+    -- ** RepositoryDescription
+    RepositoryDescription (RepositoryDescription'),
+    newRepositoryDescription,
+
+    -- ** RepositoryExternalConnectionInfo
+    RepositoryExternalConnectionInfo (RepositoryExternalConnectionInfo'),
+    newRepositoryExternalConnectionInfo,
+
+    -- ** RepositorySummary
+    RepositorySummary (RepositorySummary'),
+    newRepositorySummary,
+
+    -- ** ResourcePolicy
+    ResourcePolicy (ResourcePolicy'),
+    newResourcePolicy,
+
+    -- ** SuccessfulPackageVersionInfo
+    SuccessfulPackageVersionInfo (SuccessfulPackageVersionInfo'),
+    newSuccessfulPackageVersionInfo,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** UpstreamRepository
+    UpstreamRepository (UpstreamRepository'),
+    newUpstreamRepository,
+
+    -- ** UpstreamRepositoryInfo
+    UpstreamRepositoryInfo (UpstreamRepositoryInfo'),
+    newUpstreamRepositoryInfo,
+  )
+where
+
+import Amazonka.CodeArtifact.AssociateExternalConnection
+import Amazonka.CodeArtifact.CopyPackageVersions
+import Amazonka.CodeArtifact.CreateDomain
+import Amazonka.CodeArtifact.CreateRepository
+import Amazonka.CodeArtifact.DeleteDomain
+import Amazonka.CodeArtifact.DeleteDomainPermissionsPolicy
+import Amazonka.CodeArtifact.DeletePackageVersions
+import Amazonka.CodeArtifact.DeleteRepository
+import Amazonka.CodeArtifact.DeleteRepositoryPermissionsPolicy
+import Amazonka.CodeArtifact.DescribeDomain
+import Amazonka.CodeArtifact.DescribePackage
+import Amazonka.CodeArtifact.DescribePackageVersion
+import Amazonka.CodeArtifact.DescribeRepository
+import Amazonka.CodeArtifact.DisassociateExternalConnection
+import Amazonka.CodeArtifact.DisposePackageVersions
+import Amazonka.CodeArtifact.GetAuthorizationToken
+import Amazonka.CodeArtifact.GetDomainPermissionsPolicy
+import Amazonka.CodeArtifact.GetPackageVersionAsset
+import Amazonka.CodeArtifact.GetPackageVersionReadme
+import Amazonka.CodeArtifact.GetRepositoryEndpoint
+import Amazonka.CodeArtifact.GetRepositoryPermissionsPolicy
+import Amazonka.CodeArtifact.Lens
+import Amazonka.CodeArtifact.ListDomains
+import Amazonka.CodeArtifact.ListPackageVersionAssets
+import Amazonka.CodeArtifact.ListPackageVersionDependencies
+import Amazonka.CodeArtifact.ListPackageVersions
+import Amazonka.CodeArtifact.ListPackages
+import Amazonka.CodeArtifact.ListRepositories
+import Amazonka.CodeArtifact.ListRepositoriesInDomain
+import Amazonka.CodeArtifact.ListTagsForResource
+import Amazonka.CodeArtifact.PutDomainPermissionsPolicy
+import Amazonka.CodeArtifact.PutPackageOriginConfiguration
+import Amazonka.CodeArtifact.PutRepositoryPermissionsPolicy
+import Amazonka.CodeArtifact.TagResource
+import Amazonka.CodeArtifact.Types
+import Amazonka.CodeArtifact.UntagResource
+import Amazonka.CodeArtifact.UpdatePackageVersionsStatus
+import Amazonka.CodeArtifact.UpdateRepository
+import Amazonka.CodeArtifact.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'CodeArtifact'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/CodeArtifact/AssociateExternalConnection.hs b/gen/Amazonka/CodeArtifact/AssociateExternalConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/AssociateExternalConnection.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.AssociateExternalConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds an existing external connection to a repository. One external
+-- connection is allowed per repository.
+--
+-- A repository can have one or more upstream repositories, or an external
+-- connection.
+module Amazonka.CodeArtifact.AssociateExternalConnection
+  ( -- * Creating a Request
+    AssociateExternalConnection (..),
+    newAssociateExternalConnection,
+
+    -- * Request Lenses
+    associateExternalConnection_domainOwner,
+    associateExternalConnection_domain,
+    associateExternalConnection_repository,
+    associateExternalConnection_externalConnection,
+
+    -- * Destructuring the Response
+    AssociateExternalConnectionResponse (..),
+    newAssociateExternalConnectionResponse,
+
+    -- * Response Lenses
+    associateExternalConnectionResponse_repository,
+    associateExternalConnectionResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateExternalConnection' smart constructor.
+data AssociateExternalConnection = AssociateExternalConnection'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository.
+    domain :: Prelude.Text,
+    -- | The name of the repository to which the external connection is added.
+    repository :: Prelude.Text,
+    -- | The name of the external connection to add to the repository. The
+    -- following values are supported:
+    --
+    -- -   @public:npmjs@ - for the npm public repository.
+    --
+    -- -   @public:pypi@ - for the Python Package Index.
+    --
+    -- -   @public:maven-central@ - for Maven Central.
+    --
+    -- -   @public:maven-googleandroid@ - for the Google Android repository.
+    --
+    -- -   @public:maven-gradleplugins@ - for the Gradle plugins repository.
+    --
+    -- -   @public:maven-commonsware@ - for the CommonsWare Android repository.
+    externalConnection :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateExternalConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'associateExternalConnection_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'associateExternalConnection_domain' - The name of the domain that contains the repository.
+--
+-- 'repository', 'associateExternalConnection_repository' - The name of the repository to which the external connection is added.
+--
+-- 'externalConnection', 'associateExternalConnection_externalConnection' - The name of the external connection to add to the repository. The
+-- following values are supported:
+--
+-- -   @public:npmjs@ - for the npm public repository.
+--
+-- -   @public:pypi@ - for the Python Package Index.
+--
+-- -   @public:maven-central@ - for Maven Central.
+--
+-- -   @public:maven-googleandroid@ - for the Google Android repository.
+--
+-- -   @public:maven-gradleplugins@ - for the Gradle plugins repository.
+--
+-- -   @public:maven-commonsware@ - for the CommonsWare Android repository.
+newAssociateExternalConnection ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'externalConnection'
+  Prelude.Text ->
+  AssociateExternalConnection
+newAssociateExternalConnection
+  pDomain_
+  pRepository_
+  pExternalConnection_ =
+    AssociateExternalConnection'
+      { domainOwner =
+          Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        externalConnection = pExternalConnection_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+associateExternalConnection_domainOwner :: Lens.Lens' AssociateExternalConnection (Prelude.Maybe Prelude.Text)
+associateExternalConnection_domainOwner = Lens.lens (\AssociateExternalConnection' {domainOwner} -> domainOwner) (\s@AssociateExternalConnection' {} a -> s {domainOwner = a} :: AssociateExternalConnection)
+
+-- | The name of the domain that contains the repository.
+associateExternalConnection_domain :: Lens.Lens' AssociateExternalConnection Prelude.Text
+associateExternalConnection_domain = Lens.lens (\AssociateExternalConnection' {domain} -> domain) (\s@AssociateExternalConnection' {} a -> s {domain = a} :: AssociateExternalConnection)
+
+-- | The name of the repository to which the external connection is added.
+associateExternalConnection_repository :: Lens.Lens' AssociateExternalConnection Prelude.Text
+associateExternalConnection_repository = Lens.lens (\AssociateExternalConnection' {repository} -> repository) (\s@AssociateExternalConnection' {} a -> s {repository = a} :: AssociateExternalConnection)
+
+-- | The name of the external connection to add to the repository. The
+-- following values are supported:
+--
+-- -   @public:npmjs@ - for the npm public repository.
+--
+-- -   @public:pypi@ - for the Python Package Index.
+--
+-- -   @public:maven-central@ - for Maven Central.
+--
+-- -   @public:maven-googleandroid@ - for the Google Android repository.
+--
+-- -   @public:maven-gradleplugins@ - for the Gradle plugins repository.
+--
+-- -   @public:maven-commonsware@ - for the CommonsWare Android repository.
+associateExternalConnection_externalConnection :: Lens.Lens' AssociateExternalConnection Prelude.Text
+associateExternalConnection_externalConnection = Lens.lens (\AssociateExternalConnection' {externalConnection} -> externalConnection) (\s@AssociateExternalConnection' {} a -> s {externalConnection = a} :: AssociateExternalConnection)
+
+instance Core.AWSRequest AssociateExternalConnection where
+  type
+    AWSResponse AssociateExternalConnection =
+      AssociateExternalConnectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateExternalConnectionResponse'
+            Prelude.<$> (x Data..?> "repository")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateExternalConnection where
+  hashWithSalt _salt AssociateExternalConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` externalConnection
+
+instance Prelude.NFData AssociateExternalConnection where
+  rnf AssociateExternalConnection' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf externalConnection
+
+instance Data.ToHeaders AssociateExternalConnection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateExternalConnection where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath AssociateExternalConnection where
+  toPath =
+    Prelude.const "/v1/repository/external-connection"
+
+instance Data.ToQuery AssociateExternalConnection where
+  toQuery AssociateExternalConnection' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "external-connection" Data.=: externalConnection
+      ]
+
+-- | /See:/ 'newAssociateExternalConnectionResponse' smart constructor.
+data AssociateExternalConnectionResponse = AssociateExternalConnectionResponse'
+  { -- | Information about the connected repository after processing the request.
+    repository :: Prelude.Maybe RepositoryDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateExternalConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repository', 'associateExternalConnectionResponse_repository' - Information about the connected repository after processing the request.
+--
+-- 'httpStatus', 'associateExternalConnectionResponse_httpStatus' - The response's http status code.
+newAssociateExternalConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateExternalConnectionResponse
+newAssociateExternalConnectionResponse pHttpStatus_ =
+  AssociateExternalConnectionResponse'
+    { repository =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the connected repository after processing the request.
+associateExternalConnectionResponse_repository :: Lens.Lens' AssociateExternalConnectionResponse (Prelude.Maybe RepositoryDescription)
+associateExternalConnectionResponse_repository = Lens.lens (\AssociateExternalConnectionResponse' {repository} -> repository) (\s@AssociateExternalConnectionResponse' {} a -> s {repository = a} :: AssociateExternalConnectionResponse)
+
+-- | The response's http status code.
+associateExternalConnectionResponse_httpStatus :: Lens.Lens' AssociateExternalConnectionResponse Prelude.Int
+associateExternalConnectionResponse_httpStatus = Lens.lens (\AssociateExternalConnectionResponse' {httpStatus} -> httpStatus) (\s@AssociateExternalConnectionResponse' {} a -> s {httpStatus = a} :: AssociateExternalConnectionResponse)
+
+instance
+  Prelude.NFData
+    AssociateExternalConnectionResponse
+  where
+  rnf AssociateExternalConnectionResponse' {..} =
+    Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/CopyPackageVersions.hs b/gen/Amazonka/CodeArtifact/CopyPackageVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/CopyPackageVersions.hs
@@ -0,0 +1,470 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.CopyPackageVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Copies package versions from one repository to another repository in the
+-- same domain.
+--
+-- You must specify @versions@ or @versionRevisions@. You cannot specify
+-- both.
+module Amazonka.CodeArtifact.CopyPackageVersions
+  ( -- * Creating a Request
+    CopyPackageVersions (..),
+    newCopyPackageVersions,
+
+    -- * Request Lenses
+    copyPackageVersions_allowOverwrite,
+    copyPackageVersions_domainOwner,
+    copyPackageVersions_includeFromUpstream,
+    copyPackageVersions_namespace,
+    copyPackageVersions_versionRevisions,
+    copyPackageVersions_versions,
+    copyPackageVersions_domain,
+    copyPackageVersions_sourceRepository,
+    copyPackageVersions_destinationRepository,
+    copyPackageVersions_format,
+    copyPackageVersions_package,
+
+    -- * Destructuring the Response
+    CopyPackageVersionsResponse (..),
+    newCopyPackageVersionsResponse,
+
+    -- * Response Lenses
+    copyPackageVersionsResponse_failedVersions,
+    copyPackageVersionsResponse_successfulVersions,
+    copyPackageVersionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCopyPackageVersions' smart constructor.
+data CopyPackageVersions = CopyPackageVersions'
+  { -- | Set to true to overwrite a package version that already exists in the
+    -- destination repository. If set to false and the package version already
+    -- exists in the destination repository, the package version is returned in
+    -- the @failedVersions@ field of the response with an @ALREADY_EXISTS@
+    -- error code.
+    allowOverwrite :: Prelude.Maybe Prelude.Bool,
+    -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | Set to true to copy packages from repositories that are upstream from
+    -- the source repository to the destination repository. The default setting
+    -- is false. For more information, see
+    -- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+    includeFromUpstream :: Prelude.Maybe Prelude.Bool,
+    -- | The namespace of the package versions to be copied. The package version
+    -- component that specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@. The
+    --     namespace is required when copying Maven package versions.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | A list of key-value pairs. The keys are package versions and the values
+    -- are package version revisions. A @CopyPackageVersion@ operation succeeds
+    -- if the specified versions in the source repository match the specified
+    -- package version revision.
+    --
+    -- You must specify @versions@ or @versionRevisions@. You cannot specify
+    -- both.
+    versionRevisions :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The versions of the package to be copied.
+    --
+    -- You must specify @versions@ or @versionRevisions@. You cannot specify
+    -- both.
+    versions :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the domain that contains the source and destination
+    -- repositories.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the package versions to be
+    -- copied.
+    sourceRepository :: Prelude.Text,
+    -- | The name of the repository into which package versions are copied.
+    destinationRepository :: Prelude.Text,
+    -- | The format of the package versions to be copied.
+    format :: PackageFormat,
+    -- | The name of the package that contains the versions to be copied.
+    package :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyPackageVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowOverwrite', 'copyPackageVersions_allowOverwrite' - Set to true to overwrite a package version that already exists in the
+-- destination repository. If set to false and the package version already
+-- exists in the destination repository, the package version is returned in
+-- the @failedVersions@ field of the response with an @ALREADY_EXISTS@
+-- error code.
+--
+-- 'domainOwner', 'copyPackageVersions_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'includeFromUpstream', 'copyPackageVersions_includeFromUpstream' - Set to true to copy packages from repositories that are upstream from
+-- the source repository to the destination repository. The default setting
+-- is false. For more information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+--
+-- 'namespace', 'copyPackageVersions_namespace' - The namespace of the package versions to be copied. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@. The
+--     namespace is required when copying Maven package versions.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'versionRevisions', 'copyPackageVersions_versionRevisions' - A list of key-value pairs. The keys are package versions and the values
+-- are package version revisions. A @CopyPackageVersion@ operation succeeds
+-- if the specified versions in the source repository match the specified
+-- package version revision.
+--
+-- You must specify @versions@ or @versionRevisions@. You cannot specify
+-- both.
+--
+-- 'versions', 'copyPackageVersions_versions' - The versions of the package to be copied.
+--
+-- You must specify @versions@ or @versionRevisions@. You cannot specify
+-- both.
+--
+-- 'domain', 'copyPackageVersions_domain' - The name of the domain that contains the source and destination
+-- repositories.
+--
+-- 'sourceRepository', 'copyPackageVersions_sourceRepository' - The name of the repository that contains the package versions to be
+-- copied.
+--
+-- 'destinationRepository', 'copyPackageVersions_destinationRepository' - The name of the repository into which package versions are copied.
+--
+-- 'format', 'copyPackageVersions_format' - The format of the package versions to be copied.
+--
+-- 'package', 'copyPackageVersions_package' - The name of the package that contains the versions to be copied.
+newCopyPackageVersions ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'sourceRepository'
+  Prelude.Text ->
+  -- | 'destinationRepository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  CopyPackageVersions
+newCopyPackageVersions
+  pDomain_
+  pSourceRepository_
+  pDestinationRepository_
+  pFormat_
+  pPackage_ =
+    CopyPackageVersions'
+      { allowOverwrite =
+          Prelude.Nothing,
+        domainOwner = Prelude.Nothing,
+        includeFromUpstream = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        versionRevisions = Prelude.Nothing,
+        versions = Prelude.Nothing,
+        domain = pDomain_,
+        sourceRepository = pSourceRepository_,
+        destinationRepository = pDestinationRepository_,
+        format = pFormat_,
+        package = pPackage_
+      }
+
+-- | Set to true to overwrite a package version that already exists in the
+-- destination repository. If set to false and the package version already
+-- exists in the destination repository, the package version is returned in
+-- the @failedVersions@ field of the response with an @ALREADY_EXISTS@
+-- error code.
+copyPackageVersions_allowOverwrite :: Lens.Lens' CopyPackageVersions (Prelude.Maybe Prelude.Bool)
+copyPackageVersions_allowOverwrite = Lens.lens (\CopyPackageVersions' {allowOverwrite} -> allowOverwrite) (\s@CopyPackageVersions' {} a -> s {allowOverwrite = a} :: CopyPackageVersions)
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+copyPackageVersions_domainOwner :: Lens.Lens' CopyPackageVersions (Prelude.Maybe Prelude.Text)
+copyPackageVersions_domainOwner = Lens.lens (\CopyPackageVersions' {domainOwner} -> domainOwner) (\s@CopyPackageVersions' {} a -> s {domainOwner = a} :: CopyPackageVersions)
+
+-- | Set to true to copy packages from repositories that are upstream from
+-- the source repository to the destination repository. The default setting
+-- is false. For more information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+copyPackageVersions_includeFromUpstream :: Lens.Lens' CopyPackageVersions (Prelude.Maybe Prelude.Bool)
+copyPackageVersions_includeFromUpstream = Lens.lens (\CopyPackageVersions' {includeFromUpstream} -> includeFromUpstream) (\s@CopyPackageVersions' {} a -> s {includeFromUpstream = a} :: CopyPackageVersions)
+
+-- | The namespace of the package versions to be copied. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@. The
+--     namespace is required when copying Maven package versions.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+copyPackageVersions_namespace :: Lens.Lens' CopyPackageVersions (Prelude.Maybe Prelude.Text)
+copyPackageVersions_namespace = Lens.lens (\CopyPackageVersions' {namespace} -> namespace) (\s@CopyPackageVersions' {} a -> s {namespace = a} :: CopyPackageVersions)
+
+-- | A list of key-value pairs. The keys are package versions and the values
+-- are package version revisions. A @CopyPackageVersion@ operation succeeds
+-- if the specified versions in the source repository match the specified
+-- package version revision.
+--
+-- You must specify @versions@ or @versionRevisions@. You cannot specify
+-- both.
+copyPackageVersions_versionRevisions :: Lens.Lens' CopyPackageVersions (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+copyPackageVersions_versionRevisions = Lens.lens (\CopyPackageVersions' {versionRevisions} -> versionRevisions) (\s@CopyPackageVersions' {} a -> s {versionRevisions = a} :: CopyPackageVersions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The versions of the package to be copied.
+--
+-- You must specify @versions@ or @versionRevisions@. You cannot specify
+-- both.
+copyPackageVersions_versions :: Lens.Lens' CopyPackageVersions (Prelude.Maybe [Prelude.Text])
+copyPackageVersions_versions = Lens.lens (\CopyPackageVersions' {versions} -> versions) (\s@CopyPackageVersions' {} a -> s {versions = a} :: CopyPackageVersions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the domain that contains the source and destination
+-- repositories.
+copyPackageVersions_domain :: Lens.Lens' CopyPackageVersions Prelude.Text
+copyPackageVersions_domain = Lens.lens (\CopyPackageVersions' {domain} -> domain) (\s@CopyPackageVersions' {} a -> s {domain = a} :: CopyPackageVersions)
+
+-- | The name of the repository that contains the package versions to be
+-- copied.
+copyPackageVersions_sourceRepository :: Lens.Lens' CopyPackageVersions Prelude.Text
+copyPackageVersions_sourceRepository = Lens.lens (\CopyPackageVersions' {sourceRepository} -> sourceRepository) (\s@CopyPackageVersions' {} a -> s {sourceRepository = a} :: CopyPackageVersions)
+
+-- | The name of the repository into which package versions are copied.
+copyPackageVersions_destinationRepository :: Lens.Lens' CopyPackageVersions Prelude.Text
+copyPackageVersions_destinationRepository = Lens.lens (\CopyPackageVersions' {destinationRepository} -> destinationRepository) (\s@CopyPackageVersions' {} a -> s {destinationRepository = a} :: CopyPackageVersions)
+
+-- | The format of the package versions to be copied.
+copyPackageVersions_format :: Lens.Lens' CopyPackageVersions PackageFormat
+copyPackageVersions_format = Lens.lens (\CopyPackageVersions' {format} -> format) (\s@CopyPackageVersions' {} a -> s {format = a} :: CopyPackageVersions)
+
+-- | The name of the package that contains the versions to be copied.
+copyPackageVersions_package :: Lens.Lens' CopyPackageVersions Prelude.Text
+copyPackageVersions_package = Lens.lens (\CopyPackageVersions' {package} -> package) (\s@CopyPackageVersions' {} a -> s {package = a} :: CopyPackageVersions)
+
+instance Core.AWSRequest CopyPackageVersions where
+  type
+    AWSResponse CopyPackageVersions =
+      CopyPackageVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CopyPackageVersionsResponse'
+            Prelude.<$> (x Data..?> "failedVersions" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "successfulVersions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CopyPackageVersions where
+  hashWithSalt _salt CopyPackageVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowOverwrite
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` includeFromUpstream
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` versionRevisions
+      `Prelude.hashWithSalt` versions
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` sourceRepository
+      `Prelude.hashWithSalt` destinationRepository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+
+instance Prelude.NFData CopyPackageVersions where
+  rnf CopyPackageVersions' {..} =
+    Prelude.rnf allowOverwrite
+      `Prelude.seq` Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf includeFromUpstream
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf versionRevisions
+      `Prelude.seq` Prelude.rnf versions
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf sourceRepository
+      `Prelude.seq` Prelude.rnf destinationRepository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+
+instance Data.ToHeaders CopyPackageVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CopyPackageVersions where
+  toJSON CopyPackageVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowOverwrite" Data..=)
+              Prelude.<$> allowOverwrite,
+            ("includeFromUpstream" Data..=)
+              Prelude.<$> includeFromUpstream,
+            ("versionRevisions" Data..=)
+              Prelude.<$> versionRevisions,
+            ("versions" Data..=) Prelude.<$> versions
+          ]
+      )
+
+instance Data.ToPath CopyPackageVersions where
+  toPath = Prelude.const "/v1/package/versions/copy"
+
+instance Data.ToQuery CopyPackageVersions where
+  toQuery CopyPackageVersions' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "source-repository" Data.=: sourceRepository,
+        "destination-repository"
+          Data.=: destinationRepository,
+        "format" Data.=: format,
+        "package" Data.=: package
+      ]
+
+-- | /See:/ 'newCopyPackageVersionsResponse' smart constructor.
+data CopyPackageVersionsResponse = CopyPackageVersionsResponse'
+  { -- | A map of package versions that failed to copy and their error codes. The
+    -- possible error codes are in the @PackageVersionError@ data type. They
+    -- are:
+    --
+    -- -   @ALREADY_EXISTS@
+    --
+    -- -   @MISMATCHED_REVISION@
+    --
+    -- -   @MISMATCHED_STATUS@
+    --
+    -- -   @NOT_ALLOWED@
+    --
+    -- -   @NOT_FOUND@
+    --
+    -- -   @SKIPPED@
+    failedVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError),
+    -- | A list of the package versions that were successfully copied to your
+    -- repository.
+    successfulVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyPackageVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedVersions', 'copyPackageVersionsResponse_failedVersions' - A map of package versions that failed to copy and their error codes. The
+-- possible error codes are in the @PackageVersionError@ data type. They
+-- are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+--
+-- 'successfulVersions', 'copyPackageVersionsResponse_successfulVersions' - A list of the package versions that were successfully copied to your
+-- repository.
+--
+-- 'httpStatus', 'copyPackageVersionsResponse_httpStatus' - The response's http status code.
+newCopyPackageVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CopyPackageVersionsResponse
+newCopyPackageVersionsResponse pHttpStatus_ =
+  CopyPackageVersionsResponse'
+    { failedVersions =
+        Prelude.Nothing,
+      successfulVersions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A map of package versions that failed to copy and their error codes. The
+-- possible error codes are in the @PackageVersionError@ data type. They
+-- are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+copyPackageVersionsResponse_failedVersions :: Lens.Lens' CopyPackageVersionsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError))
+copyPackageVersionsResponse_failedVersions = Lens.lens (\CopyPackageVersionsResponse' {failedVersions} -> failedVersions) (\s@CopyPackageVersionsResponse' {} a -> s {failedVersions = a} :: CopyPackageVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of the package versions that were successfully copied to your
+-- repository.
+copyPackageVersionsResponse_successfulVersions :: Lens.Lens' CopyPackageVersionsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo))
+copyPackageVersionsResponse_successfulVersions = Lens.lens (\CopyPackageVersionsResponse' {successfulVersions} -> successfulVersions) (\s@CopyPackageVersionsResponse' {} a -> s {successfulVersions = a} :: CopyPackageVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+copyPackageVersionsResponse_httpStatus :: Lens.Lens' CopyPackageVersionsResponse Prelude.Int
+copyPackageVersionsResponse_httpStatus = Lens.lens (\CopyPackageVersionsResponse' {httpStatus} -> httpStatus) (\s@CopyPackageVersionsResponse' {} a -> s {httpStatus = a} :: CopyPackageVersionsResponse)
+
+instance Prelude.NFData CopyPackageVersionsResponse where
+  rnf CopyPackageVersionsResponse' {..} =
+    Prelude.rnf failedVersions
+      `Prelude.seq` Prelude.rnf successfulVersions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/CreateDomain.hs b/gen/Amazonka/CodeArtifact/CreateDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/CreateDomain.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.CreateDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a domain. CodeArtifact /domains/ make it easier to manage
+-- multiple repositories across an organization. You can use a domain to
+-- apply permissions across many repositories owned by different Amazon Web
+-- Services accounts. An asset is stored only once in a domain, even if
+-- it\'s in multiple repositories.
+--
+-- Although you can have multiple domains, we recommend a single production
+-- domain that contains all published artifacts so that your development
+-- teams can find and share packages. You can use a second pre-production
+-- domain to test changes to the production domain configuration.
+module Amazonka.CodeArtifact.CreateDomain
+  ( -- * Creating a Request
+    CreateDomain (..),
+    newCreateDomain,
+
+    -- * Request Lenses
+    createDomain_encryptionKey,
+    createDomain_tags,
+    createDomain_domain,
+
+    -- * Destructuring the Response
+    CreateDomainResponse (..),
+    newCreateDomainResponse,
+
+    -- * Response Lenses
+    createDomainResponse_domain,
+    createDomainResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDomain' smart constructor.
+data CreateDomain = CreateDomain'
+  { -- | The encryption key for the domain. This is used to encrypt content
+    -- stored in a domain. An encryption key can be a key ID, a key Amazon
+    -- Resource Name (ARN), a key alias, or a key alias ARN. To specify an
+    -- @encryptionKey@, your IAM role must have @kms:DescribeKey@ and
+    -- @kms:CreateGrant@ permissions on the encryption key that is used. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestSyntax DescribeKey>
+    -- in the /Key Management Service API Reference/ and
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html Key Management Service API Permissions Reference>
+    -- in the /Key Management Service Developer Guide/.
+    --
+    -- CodeArtifact supports only symmetric CMKs. Do not associate an
+    -- asymmetric CMK with your domain. For more information, see
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using symmetric and asymmetric keys>
+    -- in the /Key Management Service Developer Guide/.
+    encryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | One or more tag key-value pairs for the domain.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the domain to create. All domain names in an Amazon Web
+    -- Services Region that are in the same Amazon Web Services account must be
+    -- unique. The domain name is used as the prefix in DNS hostnames. Do not
+    -- use sensitive information in a domain name because it is publicly
+    -- discoverable.
+    domain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryptionKey', 'createDomain_encryptionKey' - The encryption key for the domain. This is used to encrypt content
+-- stored in a domain. An encryption key can be a key ID, a key Amazon
+-- Resource Name (ARN), a key alias, or a key alias ARN. To specify an
+-- @encryptionKey@, your IAM role must have @kms:DescribeKey@ and
+-- @kms:CreateGrant@ permissions on the encryption key that is used. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestSyntax DescribeKey>
+-- in the /Key Management Service API Reference/ and
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html Key Management Service API Permissions Reference>
+-- in the /Key Management Service Developer Guide/.
+--
+-- CodeArtifact supports only symmetric CMKs. Do not associate an
+-- asymmetric CMK with your domain. For more information, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using symmetric and asymmetric keys>
+-- in the /Key Management Service Developer Guide/.
+--
+-- 'tags', 'createDomain_tags' - One or more tag key-value pairs for the domain.
+--
+-- 'domain', 'createDomain_domain' - The name of the domain to create. All domain names in an Amazon Web
+-- Services Region that are in the same Amazon Web Services account must be
+-- unique. The domain name is used as the prefix in DNS hostnames. Do not
+-- use sensitive information in a domain name because it is publicly
+-- discoverable.
+newCreateDomain ::
+  -- | 'domain'
+  Prelude.Text ->
+  CreateDomain
+newCreateDomain pDomain_ =
+  CreateDomain'
+    { encryptionKey = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      domain = pDomain_
+    }
+
+-- | The encryption key for the domain. This is used to encrypt content
+-- stored in a domain. An encryption key can be a key ID, a key Amazon
+-- Resource Name (ARN), a key alias, or a key alias ARN. To specify an
+-- @encryptionKey@, your IAM role must have @kms:DescribeKey@ and
+-- @kms:CreateGrant@ permissions on the encryption key that is used. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestSyntax DescribeKey>
+-- in the /Key Management Service API Reference/ and
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html Key Management Service API Permissions Reference>
+-- in the /Key Management Service Developer Guide/.
+--
+-- CodeArtifact supports only symmetric CMKs. Do not associate an
+-- asymmetric CMK with your domain. For more information, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using symmetric and asymmetric keys>
+-- in the /Key Management Service Developer Guide/.
+createDomain_encryptionKey :: Lens.Lens' CreateDomain (Prelude.Maybe Prelude.Text)
+createDomain_encryptionKey = Lens.lens (\CreateDomain' {encryptionKey} -> encryptionKey) (\s@CreateDomain' {} a -> s {encryptionKey = a} :: CreateDomain)
+
+-- | One or more tag key-value pairs for the domain.
+createDomain_tags :: Lens.Lens' CreateDomain (Prelude.Maybe [Tag])
+createDomain_tags = Lens.lens (\CreateDomain' {tags} -> tags) (\s@CreateDomain' {} a -> s {tags = a} :: CreateDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the domain to create. All domain names in an Amazon Web
+-- Services Region that are in the same Amazon Web Services account must be
+-- unique. The domain name is used as the prefix in DNS hostnames. Do not
+-- use sensitive information in a domain name because it is publicly
+-- discoverable.
+createDomain_domain :: Lens.Lens' CreateDomain Prelude.Text
+createDomain_domain = Lens.lens (\CreateDomain' {domain} -> domain) (\s@CreateDomain' {} a -> s {domain = a} :: CreateDomain)
+
+instance Core.AWSRequest CreateDomain where
+  type AWSResponse CreateDomain = CreateDomainResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDomainResponse'
+            Prelude.<$> (x Data..?> "domain")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDomain where
+  hashWithSalt _salt CreateDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionKey
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData CreateDomain where
+  rnf CreateDomain' {..} =
+    Prelude.rnf encryptionKey
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders CreateDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDomain where
+  toJSON CreateDomain' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryptionKey" Data..=) Prelude.<$> encryptionKey,
+            ("tags" Data..=) Prelude.<$> tags
+          ]
+      )
+
+instance Data.ToPath CreateDomain where
+  toPath = Prelude.const "/v1/domain"
+
+instance Data.ToQuery CreateDomain where
+  toQuery CreateDomain' {..} =
+    Prelude.mconcat ["domain" Data.=: domain]
+
+-- | /See:/ 'newCreateDomainResponse' smart constructor.
+data CreateDomainResponse = CreateDomainResponse'
+  { -- | Contains information about the created domain after processing the
+    -- request.
+    domain :: Prelude.Maybe DomainDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'createDomainResponse_domain' - Contains information about the created domain after processing the
+-- request.
+--
+-- 'httpStatus', 'createDomainResponse_httpStatus' - The response's http status code.
+newCreateDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDomainResponse
+newCreateDomainResponse pHttpStatus_ =
+  CreateDomainResponse'
+    { domain = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains information about the created domain after processing the
+-- request.
+createDomainResponse_domain :: Lens.Lens' CreateDomainResponse (Prelude.Maybe DomainDescription)
+createDomainResponse_domain = Lens.lens (\CreateDomainResponse' {domain} -> domain) (\s@CreateDomainResponse' {} a -> s {domain = a} :: CreateDomainResponse)
+
+-- | The response's http status code.
+createDomainResponse_httpStatus :: Lens.Lens' CreateDomainResponse Prelude.Int
+createDomainResponse_httpStatus = Lens.lens (\CreateDomainResponse' {httpStatus} -> httpStatus) (\s@CreateDomainResponse' {} a -> s {httpStatus = a} :: CreateDomainResponse)
+
+instance Prelude.NFData CreateDomainResponse where
+  rnf CreateDomainResponse' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/CreateRepository.hs b/gen/Amazonka/CodeArtifact/CreateRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/CreateRepository.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.CreateRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a repository.
+module Amazonka.CodeArtifact.CreateRepository
+  ( -- * Creating a Request
+    CreateRepository (..),
+    newCreateRepository,
+
+    -- * Request Lenses
+    createRepository_description,
+    createRepository_domainOwner,
+    createRepository_tags,
+    createRepository_upstreams,
+    createRepository_domain,
+    createRepository_repository,
+
+    -- * Destructuring the Response
+    CreateRepositoryResponse (..),
+    newCreateRepositoryResponse,
+
+    -- * Response Lenses
+    createRepositoryResponse_repository,
+    createRepositoryResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRepository' smart constructor.
+data CreateRepository = CreateRepository'
+  { -- | A description of the created repository.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | One or more tag key-value pairs for the repository.
+    tags :: Prelude.Maybe [Tag],
+    -- | A list of upstream repositories to associate with the repository. The
+    -- order of the upstream repositories in the list determines their priority
+    -- order when CodeArtifact looks for a requested package version. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+    upstreams :: Prelude.Maybe [UpstreamRepository],
+    -- | The name of the domain that contains the created repository.
+    domain :: Prelude.Text,
+    -- | The name of the repository to create.
+    repository :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createRepository_description' - A description of the created repository.
+--
+-- 'domainOwner', 'createRepository_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'tags', 'createRepository_tags' - One or more tag key-value pairs for the repository.
+--
+-- 'upstreams', 'createRepository_upstreams' - A list of upstream repositories to associate with the repository. The
+-- order of the upstream repositories in the list determines their priority
+-- order when CodeArtifact looks for a requested package version. For more
+-- information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+--
+-- 'domain', 'createRepository_domain' - The name of the domain that contains the created repository.
+--
+-- 'repository', 'createRepository_repository' - The name of the repository to create.
+newCreateRepository ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  CreateRepository
+newCreateRepository pDomain_ pRepository_ =
+  CreateRepository'
+    { description = Prelude.Nothing,
+      domainOwner = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      upstreams = Prelude.Nothing,
+      domain = pDomain_,
+      repository = pRepository_
+    }
+
+-- | A description of the created repository.
+createRepository_description :: Lens.Lens' CreateRepository (Prelude.Maybe Prelude.Text)
+createRepository_description = Lens.lens (\CreateRepository' {description} -> description) (\s@CreateRepository' {} a -> s {description = a} :: CreateRepository)
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+createRepository_domainOwner :: Lens.Lens' CreateRepository (Prelude.Maybe Prelude.Text)
+createRepository_domainOwner = Lens.lens (\CreateRepository' {domainOwner} -> domainOwner) (\s@CreateRepository' {} a -> s {domainOwner = a} :: CreateRepository)
+
+-- | One or more tag key-value pairs for the repository.
+createRepository_tags :: Lens.Lens' CreateRepository (Prelude.Maybe [Tag])
+createRepository_tags = Lens.lens (\CreateRepository' {tags} -> tags) (\s@CreateRepository' {} a -> s {tags = a} :: CreateRepository) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of upstream repositories to associate with the repository. The
+-- order of the upstream repositories in the list determines their priority
+-- order when CodeArtifact looks for a requested package version. For more
+-- information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+createRepository_upstreams :: Lens.Lens' CreateRepository (Prelude.Maybe [UpstreamRepository])
+createRepository_upstreams = Lens.lens (\CreateRepository' {upstreams} -> upstreams) (\s@CreateRepository' {} a -> s {upstreams = a} :: CreateRepository) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the domain that contains the created repository.
+createRepository_domain :: Lens.Lens' CreateRepository Prelude.Text
+createRepository_domain = Lens.lens (\CreateRepository' {domain} -> domain) (\s@CreateRepository' {} a -> s {domain = a} :: CreateRepository)
+
+-- | The name of the repository to create.
+createRepository_repository :: Lens.Lens' CreateRepository Prelude.Text
+createRepository_repository = Lens.lens (\CreateRepository' {repository} -> repository) (\s@CreateRepository' {} a -> s {repository = a} :: CreateRepository)
+
+instance Core.AWSRequest CreateRepository where
+  type
+    AWSResponse CreateRepository =
+      CreateRepositoryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRepositoryResponse'
+            Prelude.<$> (x Data..?> "repository")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRepository where
+  hashWithSalt _salt CreateRepository' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` upstreams
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+
+instance Prelude.NFData CreateRepository where
+  rnf CreateRepository' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf upstreams
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+
+instance Data.ToHeaders CreateRepository where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRepository where
+  toJSON CreateRepository' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("upstreams" Data..=) Prelude.<$> upstreams
+          ]
+      )
+
+instance Data.ToPath CreateRepository where
+  toPath = Prelude.const "/v1/repository"
+
+instance Data.ToQuery CreateRepository where
+  toQuery CreateRepository' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newCreateRepositoryResponse' smart constructor.
+data CreateRepositoryResponse = CreateRepositoryResponse'
+  { -- | Information about the created repository after processing the request.
+    repository :: Prelude.Maybe RepositoryDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRepositoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repository', 'createRepositoryResponse_repository' - Information about the created repository after processing the request.
+--
+-- 'httpStatus', 'createRepositoryResponse_httpStatus' - The response's http status code.
+newCreateRepositoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRepositoryResponse
+newCreateRepositoryResponse pHttpStatus_ =
+  CreateRepositoryResponse'
+    { repository =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the created repository after processing the request.
+createRepositoryResponse_repository :: Lens.Lens' CreateRepositoryResponse (Prelude.Maybe RepositoryDescription)
+createRepositoryResponse_repository = Lens.lens (\CreateRepositoryResponse' {repository} -> repository) (\s@CreateRepositoryResponse' {} a -> s {repository = a} :: CreateRepositoryResponse)
+
+-- | The response's http status code.
+createRepositoryResponse_httpStatus :: Lens.Lens' CreateRepositoryResponse Prelude.Int
+createRepositoryResponse_httpStatus = Lens.lens (\CreateRepositoryResponse' {httpStatus} -> httpStatus) (\s@CreateRepositoryResponse' {} a -> s {httpStatus = a} :: CreateRepositoryResponse)
+
+instance Prelude.NFData CreateRepositoryResponse where
+  rnf CreateRepositoryResponse' {..} =
+    Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DeleteDomain.hs b/gen/Amazonka/CodeArtifact/DeleteDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DeleteDomain.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DeleteDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a domain. You cannot delete a domain that contains repositories.
+-- If you want to delete a domain with repositories, first delete its
+-- repositories.
+module Amazonka.CodeArtifact.DeleteDomain
+  ( -- * Creating a Request
+    DeleteDomain (..),
+    newDeleteDomain,
+
+    -- * Request Lenses
+    deleteDomain_domainOwner,
+    deleteDomain_domain,
+
+    -- * Destructuring the Response
+    DeleteDomainResponse (..),
+    newDeleteDomainResponse,
+
+    -- * Response Lenses
+    deleteDomainResponse_domain,
+    deleteDomainResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDomain' smart constructor.
+data DeleteDomain = DeleteDomain'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain to delete.
+    domain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'deleteDomain_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'deleteDomain_domain' - The name of the domain to delete.
+newDeleteDomain ::
+  -- | 'domain'
+  Prelude.Text ->
+  DeleteDomain
+newDeleteDomain pDomain_ =
+  DeleteDomain'
+    { domainOwner = Prelude.Nothing,
+      domain = pDomain_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+deleteDomain_domainOwner :: Lens.Lens' DeleteDomain (Prelude.Maybe Prelude.Text)
+deleteDomain_domainOwner = Lens.lens (\DeleteDomain' {domainOwner} -> domainOwner) (\s@DeleteDomain' {} a -> s {domainOwner = a} :: DeleteDomain)
+
+-- | The name of the domain to delete.
+deleteDomain_domain :: Lens.Lens' DeleteDomain Prelude.Text
+deleteDomain_domain = Lens.lens (\DeleteDomain' {domain} -> domain) (\s@DeleteDomain' {} a -> s {domain = a} :: DeleteDomain)
+
+instance Core.AWSRequest DeleteDomain where
+  type AWSResponse DeleteDomain = DeleteDomainResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteDomainResponse'
+            Prelude.<$> (x Data..?> "domain")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDomain where
+  hashWithSalt _salt DeleteDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData DeleteDomain where
+  rnf DeleteDomain' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders DeleteDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDomain where
+  toPath = Prelude.const "/v1/domain"
+
+instance Data.ToQuery DeleteDomain where
+  toQuery DeleteDomain' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain
+      ]
+
+-- | /See:/ 'newDeleteDomainResponse' smart constructor.
+data DeleteDomainResponse = DeleteDomainResponse'
+  { -- | Contains information about the deleted domain after processing the
+    -- request.
+    domain :: Prelude.Maybe DomainDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'deleteDomainResponse_domain' - Contains information about the deleted domain after processing the
+-- request.
+--
+-- 'httpStatus', 'deleteDomainResponse_httpStatus' - The response's http status code.
+newDeleteDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDomainResponse
+newDeleteDomainResponse pHttpStatus_ =
+  DeleteDomainResponse'
+    { domain = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains information about the deleted domain after processing the
+-- request.
+deleteDomainResponse_domain :: Lens.Lens' DeleteDomainResponse (Prelude.Maybe DomainDescription)
+deleteDomainResponse_domain = Lens.lens (\DeleteDomainResponse' {domain} -> domain) (\s@DeleteDomainResponse' {} a -> s {domain = a} :: DeleteDomainResponse)
+
+-- | The response's http status code.
+deleteDomainResponse_httpStatus :: Lens.Lens' DeleteDomainResponse Prelude.Int
+deleteDomainResponse_httpStatus = Lens.lens (\DeleteDomainResponse' {httpStatus} -> httpStatus) (\s@DeleteDomainResponse' {} a -> s {httpStatus = a} :: DeleteDomainResponse)
+
+instance Prelude.NFData DeleteDomainResponse where
+  rnf DeleteDomainResponse' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DeleteDomainPermissionsPolicy.hs b/gen/Amazonka/CodeArtifact/DeleteDomainPermissionsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DeleteDomainPermissionsPolicy.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DeleteDomainPermissionsPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the resource policy set on a domain.
+module Amazonka.CodeArtifact.DeleteDomainPermissionsPolicy
+  ( -- * Creating a Request
+    DeleteDomainPermissionsPolicy (..),
+    newDeleteDomainPermissionsPolicy,
+
+    -- * Request Lenses
+    deleteDomainPermissionsPolicy_domainOwner,
+    deleteDomainPermissionsPolicy_policyRevision,
+    deleteDomainPermissionsPolicy_domain,
+
+    -- * Destructuring the Response
+    DeleteDomainPermissionsPolicyResponse (..),
+    newDeleteDomainPermissionsPolicyResponse,
+
+    -- * Response Lenses
+    deleteDomainPermissionsPolicyResponse_policy,
+    deleteDomainPermissionsPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDomainPermissionsPolicy' smart constructor.
+data DeleteDomainPermissionsPolicy = DeleteDomainPermissionsPolicy'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy to be deleted. This revision
+    -- is used for optimistic locking, which prevents others from overwriting
+    -- your changes to the domain\'s resource policy.
+    policyRevision :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain associated with the resource policy to be
+    -- deleted.
+    domain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainPermissionsPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'deleteDomainPermissionsPolicy_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'policyRevision', 'deleteDomainPermissionsPolicy_policyRevision' - The current revision of the resource policy to be deleted. This revision
+-- is used for optimistic locking, which prevents others from overwriting
+-- your changes to the domain\'s resource policy.
+--
+-- 'domain', 'deleteDomainPermissionsPolicy_domain' - The name of the domain associated with the resource policy to be
+-- deleted.
+newDeleteDomainPermissionsPolicy ::
+  -- | 'domain'
+  Prelude.Text ->
+  DeleteDomainPermissionsPolicy
+newDeleteDomainPermissionsPolicy pDomain_ =
+  DeleteDomainPermissionsPolicy'
+    { domainOwner =
+        Prelude.Nothing,
+      policyRevision = Prelude.Nothing,
+      domain = pDomain_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+deleteDomainPermissionsPolicy_domainOwner :: Lens.Lens' DeleteDomainPermissionsPolicy (Prelude.Maybe Prelude.Text)
+deleteDomainPermissionsPolicy_domainOwner = Lens.lens (\DeleteDomainPermissionsPolicy' {domainOwner} -> domainOwner) (\s@DeleteDomainPermissionsPolicy' {} a -> s {domainOwner = a} :: DeleteDomainPermissionsPolicy)
+
+-- | The current revision of the resource policy to be deleted. This revision
+-- is used for optimistic locking, which prevents others from overwriting
+-- your changes to the domain\'s resource policy.
+deleteDomainPermissionsPolicy_policyRevision :: Lens.Lens' DeleteDomainPermissionsPolicy (Prelude.Maybe Prelude.Text)
+deleteDomainPermissionsPolicy_policyRevision = Lens.lens (\DeleteDomainPermissionsPolicy' {policyRevision} -> policyRevision) (\s@DeleteDomainPermissionsPolicy' {} a -> s {policyRevision = a} :: DeleteDomainPermissionsPolicy)
+
+-- | The name of the domain associated with the resource policy to be
+-- deleted.
+deleteDomainPermissionsPolicy_domain :: Lens.Lens' DeleteDomainPermissionsPolicy Prelude.Text
+deleteDomainPermissionsPolicy_domain = Lens.lens (\DeleteDomainPermissionsPolicy' {domain} -> domain) (\s@DeleteDomainPermissionsPolicy' {} a -> s {domain = a} :: DeleteDomainPermissionsPolicy)
+
+instance
+  Core.AWSRequest
+    DeleteDomainPermissionsPolicy
+  where
+  type
+    AWSResponse DeleteDomainPermissionsPolicy =
+      DeleteDomainPermissionsPolicyResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteDomainPermissionsPolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteDomainPermissionsPolicy
+  where
+  hashWithSalt _salt DeleteDomainPermissionsPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` policyRevision
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData DeleteDomainPermissionsPolicy where
+  rnf DeleteDomainPermissionsPolicy' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf policyRevision
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders DeleteDomainPermissionsPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDomainPermissionsPolicy where
+  toPath =
+    Prelude.const "/v1/domain/permissions/policy"
+
+instance Data.ToQuery DeleteDomainPermissionsPolicy where
+  toQuery DeleteDomainPermissionsPolicy' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "policy-revision" Data.=: policyRevision,
+        "domain" Data.=: domain
+      ]
+
+-- | /See:/ 'newDeleteDomainPermissionsPolicyResponse' smart constructor.
+data DeleteDomainPermissionsPolicyResponse = DeleteDomainPermissionsPolicyResponse'
+  { -- | Information about the deleted resource policy after processing the
+    -- request.
+    policy :: Prelude.Maybe ResourcePolicy,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainPermissionsPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'deleteDomainPermissionsPolicyResponse_policy' - Information about the deleted resource policy after processing the
+-- request.
+--
+-- 'httpStatus', 'deleteDomainPermissionsPolicyResponse_httpStatus' - The response's http status code.
+newDeleteDomainPermissionsPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDomainPermissionsPolicyResponse
+newDeleteDomainPermissionsPolicyResponse pHttpStatus_ =
+  DeleteDomainPermissionsPolicyResponse'
+    { policy =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the deleted resource policy after processing the
+-- request.
+deleteDomainPermissionsPolicyResponse_policy :: Lens.Lens' DeleteDomainPermissionsPolicyResponse (Prelude.Maybe ResourcePolicy)
+deleteDomainPermissionsPolicyResponse_policy = Lens.lens (\DeleteDomainPermissionsPolicyResponse' {policy} -> policy) (\s@DeleteDomainPermissionsPolicyResponse' {} a -> s {policy = a} :: DeleteDomainPermissionsPolicyResponse)
+
+-- | The response's http status code.
+deleteDomainPermissionsPolicyResponse_httpStatus :: Lens.Lens' DeleteDomainPermissionsPolicyResponse Prelude.Int
+deleteDomainPermissionsPolicyResponse_httpStatus = Lens.lens (\DeleteDomainPermissionsPolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteDomainPermissionsPolicyResponse' {} a -> s {httpStatus = a} :: DeleteDomainPermissionsPolicyResponse)
+
+instance
+  Prelude.NFData
+    DeleteDomainPermissionsPolicyResponse
+  where
+  rnf DeleteDomainPermissionsPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DeletePackageVersions.hs b/gen/Amazonka/CodeArtifact/DeletePackageVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DeletePackageVersions.hs
@@ -0,0 +1,371 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DeletePackageVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more versions of a package. A deleted package version
+-- cannot be restored in your repository. If you want to remove a package
+-- version from your repository and be able to restore it later, set its
+-- status to @Archived@. Archived packages cannot be downloaded from a
+-- repository and don\'t show up with list package APIs (for example,
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersions.html ListackageVersions>),
+-- but you can restore them using
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html UpdatePackageVersionsStatus>.
+module Amazonka.CodeArtifact.DeletePackageVersions
+  ( -- * Creating a Request
+    DeletePackageVersions (..),
+    newDeletePackageVersions,
+
+    -- * Request Lenses
+    deletePackageVersions_domainOwner,
+    deletePackageVersions_expectedStatus,
+    deletePackageVersions_namespace,
+    deletePackageVersions_domain,
+    deletePackageVersions_repository,
+    deletePackageVersions_format,
+    deletePackageVersions_package,
+    deletePackageVersions_versions,
+
+    -- * Destructuring the Response
+    DeletePackageVersionsResponse (..),
+    newDeletePackageVersionsResponse,
+
+    -- * Response Lenses
+    deletePackageVersionsResponse_failedVersions,
+    deletePackageVersionsResponse_successfulVersions,
+    deletePackageVersionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePackageVersions' smart constructor.
+data DeletePackageVersions = DeletePackageVersions'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The expected status of the package version to delete.
+    expectedStatus :: Prelude.Maybe PackageVersionStatus,
+    -- | The namespace of the package versions to be deleted. The package version
+    -- component that specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@. The
+    --     namespace is required when deleting Maven package versions.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the package to delete.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the package versions to delete.
+    repository :: Prelude.Text,
+    -- | The format of the package versions to delete.
+    format :: PackageFormat,
+    -- | The name of the package with the versions to delete.
+    package :: Prelude.Text,
+    -- | An array of strings that specify the versions of the package to delete.
+    versions :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePackageVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'deletePackageVersions_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'expectedStatus', 'deletePackageVersions_expectedStatus' - The expected status of the package version to delete.
+--
+-- 'namespace', 'deletePackageVersions_namespace' - The namespace of the package versions to be deleted. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@. The
+--     namespace is required when deleting Maven package versions.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'domain', 'deletePackageVersions_domain' - The name of the domain that contains the package to delete.
+--
+-- 'repository', 'deletePackageVersions_repository' - The name of the repository that contains the package versions to delete.
+--
+-- 'format', 'deletePackageVersions_format' - The format of the package versions to delete.
+--
+-- 'package', 'deletePackageVersions_package' - The name of the package with the versions to delete.
+--
+-- 'versions', 'deletePackageVersions_versions' - An array of strings that specify the versions of the package to delete.
+newDeletePackageVersions ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  DeletePackageVersions
+newDeletePackageVersions
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_ =
+    DeletePackageVersions'
+      { domainOwner =
+          Prelude.Nothing,
+        expectedStatus = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        versions = Prelude.mempty
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+deletePackageVersions_domainOwner :: Lens.Lens' DeletePackageVersions (Prelude.Maybe Prelude.Text)
+deletePackageVersions_domainOwner = Lens.lens (\DeletePackageVersions' {domainOwner} -> domainOwner) (\s@DeletePackageVersions' {} a -> s {domainOwner = a} :: DeletePackageVersions)
+
+-- | The expected status of the package version to delete.
+deletePackageVersions_expectedStatus :: Lens.Lens' DeletePackageVersions (Prelude.Maybe PackageVersionStatus)
+deletePackageVersions_expectedStatus = Lens.lens (\DeletePackageVersions' {expectedStatus} -> expectedStatus) (\s@DeletePackageVersions' {} a -> s {expectedStatus = a} :: DeletePackageVersions)
+
+-- | The namespace of the package versions to be deleted. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@. The
+--     namespace is required when deleting Maven package versions.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+deletePackageVersions_namespace :: Lens.Lens' DeletePackageVersions (Prelude.Maybe Prelude.Text)
+deletePackageVersions_namespace = Lens.lens (\DeletePackageVersions' {namespace} -> namespace) (\s@DeletePackageVersions' {} a -> s {namespace = a} :: DeletePackageVersions)
+
+-- | The name of the domain that contains the package to delete.
+deletePackageVersions_domain :: Lens.Lens' DeletePackageVersions Prelude.Text
+deletePackageVersions_domain = Lens.lens (\DeletePackageVersions' {domain} -> domain) (\s@DeletePackageVersions' {} a -> s {domain = a} :: DeletePackageVersions)
+
+-- | The name of the repository that contains the package versions to delete.
+deletePackageVersions_repository :: Lens.Lens' DeletePackageVersions Prelude.Text
+deletePackageVersions_repository = Lens.lens (\DeletePackageVersions' {repository} -> repository) (\s@DeletePackageVersions' {} a -> s {repository = a} :: DeletePackageVersions)
+
+-- | The format of the package versions to delete.
+deletePackageVersions_format :: Lens.Lens' DeletePackageVersions PackageFormat
+deletePackageVersions_format = Lens.lens (\DeletePackageVersions' {format} -> format) (\s@DeletePackageVersions' {} a -> s {format = a} :: DeletePackageVersions)
+
+-- | The name of the package with the versions to delete.
+deletePackageVersions_package :: Lens.Lens' DeletePackageVersions Prelude.Text
+deletePackageVersions_package = Lens.lens (\DeletePackageVersions' {package} -> package) (\s@DeletePackageVersions' {} a -> s {package = a} :: DeletePackageVersions)
+
+-- | An array of strings that specify the versions of the package to delete.
+deletePackageVersions_versions :: Lens.Lens' DeletePackageVersions [Prelude.Text]
+deletePackageVersions_versions = Lens.lens (\DeletePackageVersions' {versions} -> versions) (\s@DeletePackageVersions' {} a -> s {versions = a} :: DeletePackageVersions) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeletePackageVersions where
+  type
+    AWSResponse DeletePackageVersions =
+      DeletePackageVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeletePackageVersionsResponse'
+            Prelude.<$> (x Data..?> "failedVersions" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "successfulVersions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeletePackageVersions where
+  hashWithSalt _salt DeletePackageVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` expectedStatus
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` versions
+
+instance Prelude.NFData DeletePackageVersions where
+  rnf DeletePackageVersions' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf expectedStatus
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf versions
+
+instance Data.ToHeaders DeletePackageVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeletePackageVersions where
+  toJSON DeletePackageVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("expectedStatus" Data..=)
+              Prelude.<$> expectedStatus,
+            Prelude.Just ("versions" Data..= versions)
+          ]
+      )
+
+instance Data.ToPath DeletePackageVersions where
+  toPath = Prelude.const "/v1/package/versions/delete"
+
+instance Data.ToQuery DeletePackageVersions where
+  toQuery DeletePackageVersions' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package
+      ]
+
+-- | /See:/ 'newDeletePackageVersionsResponse' smart constructor.
+data DeletePackageVersionsResponse = DeletePackageVersionsResponse'
+  { -- | A @PackageVersionError@ object that contains a map of errors codes for
+    -- the deleted package that failed. The possible error codes are:
+    --
+    -- -   @ALREADY_EXISTS@
+    --
+    -- -   @MISMATCHED_REVISION@
+    --
+    -- -   @MISMATCHED_STATUS@
+    --
+    -- -   @NOT_ALLOWED@
+    --
+    -- -   @NOT_FOUND@
+    --
+    -- -   @SKIPPED@
+    failedVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError),
+    -- | A list of the package versions that were successfully deleted. The
+    -- status of every successful version will be @Deleted@.
+    successfulVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePackageVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedVersions', 'deletePackageVersionsResponse_failedVersions' - A @PackageVersionError@ object that contains a map of errors codes for
+-- the deleted package that failed. The possible error codes are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+--
+-- 'successfulVersions', 'deletePackageVersionsResponse_successfulVersions' - A list of the package versions that were successfully deleted. The
+-- status of every successful version will be @Deleted@.
+--
+-- 'httpStatus', 'deletePackageVersionsResponse_httpStatus' - The response's http status code.
+newDeletePackageVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeletePackageVersionsResponse
+newDeletePackageVersionsResponse pHttpStatus_ =
+  DeletePackageVersionsResponse'
+    { failedVersions =
+        Prelude.Nothing,
+      successfulVersions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A @PackageVersionError@ object that contains a map of errors codes for
+-- the deleted package that failed. The possible error codes are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+deletePackageVersionsResponse_failedVersions :: Lens.Lens' DeletePackageVersionsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError))
+deletePackageVersionsResponse_failedVersions = Lens.lens (\DeletePackageVersionsResponse' {failedVersions} -> failedVersions) (\s@DeletePackageVersionsResponse' {} a -> s {failedVersions = a} :: DeletePackageVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of the package versions that were successfully deleted. The
+-- status of every successful version will be @Deleted@.
+deletePackageVersionsResponse_successfulVersions :: Lens.Lens' DeletePackageVersionsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo))
+deletePackageVersionsResponse_successfulVersions = Lens.lens (\DeletePackageVersionsResponse' {successfulVersions} -> successfulVersions) (\s@DeletePackageVersionsResponse' {} a -> s {successfulVersions = a} :: DeletePackageVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deletePackageVersionsResponse_httpStatus :: Lens.Lens' DeletePackageVersionsResponse Prelude.Int
+deletePackageVersionsResponse_httpStatus = Lens.lens (\DeletePackageVersionsResponse' {httpStatus} -> httpStatus) (\s@DeletePackageVersionsResponse' {} a -> s {httpStatus = a} :: DeletePackageVersionsResponse)
+
+instance Prelude.NFData DeletePackageVersionsResponse where
+  rnf DeletePackageVersionsResponse' {..} =
+    Prelude.rnf failedVersions
+      `Prelude.seq` Prelude.rnf successfulVersions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DeleteRepository.hs b/gen/Amazonka/CodeArtifact/DeleteRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DeleteRepository.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DeleteRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a repository.
+module Amazonka.CodeArtifact.DeleteRepository
+  ( -- * Creating a Request
+    DeleteRepository (..),
+    newDeleteRepository,
+
+    -- * Request Lenses
+    deleteRepository_domainOwner,
+    deleteRepository_domain,
+    deleteRepository_repository,
+
+    -- * Destructuring the Response
+    DeleteRepositoryResponse (..),
+    newDeleteRepositoryResponse,
+
+    -- * Response Lenses
+    deleteRepositoryResponse_repository,
+    deleteRepositoryResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRepository' smart constructor.
+data DeleteRepository = DeleteRepository'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository to delete.
+    domain :: Prelude.Text,
+    -- | The name of the repository to delete.
+    repository :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'deleteRepository_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'deleteRepository_domain' - The name of the domain that contains the repository to delete.
+--
+-- 'repository', 'deleteRepository_repository' - The name of the repository to delete.
+newDeleteRepository ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  DeleteRepository
+newDeleteRepository pDomain_ pRepository_ =
+  DeleteRepository'
+    { domainOwner = Prelude.Nothing,
+      domain = pDomain_,
+      repository = pRepository_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+deleteRepository_domainOwner :: Lens.Lens' DeleteRepository (Prelude.Maybe Prelude.Text)
+deleteRepository_domainOwner = Lens.lens (\DeleteRepository' {domainOwner} -> domainOwner) (\s@DeleteRepository' {} a -> s {domainOwner = a} :: DeleteRepository)
+
+-- | The name of the domain that contains the repository to delete.
+deleteRepository_domain :: Lens.Lens' DeleteRepository Prelude.Text
+deleteRepository_domain = Lens.lens (\DeleteRepository' {domain} -> domain) (\s@DeleteRepository' {} a -> s {domain = a} :: DeleteRepository)
+
+-- | The name of the repository to delete.
+deleteRepository_repository :: Lens.Lens' DeleteRepository Prelude.Text
+deleteRepository_repository = Lens.lens (\DeleteRepository' {repository} -> repository) (\s@DeleteRepository' {} a -> s {repository = a} :: DeleteRepository)
+
+instance Core.AWSRequest DeleteRepository where
+  type
+    AWSResponse DeleteRepository =
+      DeleteRepositoryResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteRepositoryResponse'
+            Prelude.<$> (x Data..?> "repository")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteRepository where
+  hashWithSalt _salt DeleteRepository' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+
+instance Prelude.NFData DeleteRepository where
+  rnf DeleteRepository' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+
+instance Data.ToHeaders DeleteRepository where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRepository where
+  toPath = Prelude.const "/v1/repository"
+
+instance Data.ToQuery DeleteRepository where
+  toQuery DeleteRepository' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newDeleteRepositoryResponse' smart constructor.
+data DeleteRepositoryResponse = DeleteRepositoryResponse'
+  { -- | Information about the deleted repository after processing the request.
+    repository :: Prelude.Maybe RepositoryDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRepositoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repository', 'deleteRepositoryResponse_repository' - Information about the deleted repository after processing the request.
+--
+-- 'httpStatus', 'deleteRepositoryResponse_httpStatus' - The response's http status code.
+newDeleteRepositoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteRepositoryResponse
+newDeleteRepositoryResponse pHttpStatus_ =
+  DeleteRepositoryResponse'
+    { repository =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the deleted repository after processing the request.
+deleteRepositoryResponse_repository :: Lens.Lens' DeleteRepositoryResponse (Prelude.Maybe RepositoryDescription)
+deleteRepositoryResponse_repository = Lens.lens (\DeleteRepositoryResponse' {repository} -> repository) (\s@DeleteRepositoryResponse' {} a -> s {repository = a} :: DeleteRepositoryResponse)
+
+-- | The response's http status code.
+deleteRepositoryResponse_httpStatus :: Lens.Lens' DeleteRepositoryResponse Prelude.Int
+deleteRepositoryResponse_httpStatus = Lens.lens (\DeleteRepositoryResponse' {httpStatus} -> httpStatus) (\s@DeleteRepositoryResponse' {} a -> s {httpStatus = a} :: DeleteRepositoryResponse)
+
+instance Prelude.NFData DeleteRepositoryResponse where
+  rnf DeleteRepositoryResponse' {..} =
+    Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DeleteRepositoryPermissionsPolicy.hs b/gen/Amazonka/CodeArtifact/DeleteRepositoryPermissionsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DeleteRepositoryPermissionsPolicy.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DeleteRepositoryPermissionsPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the resource policy that is set on a repository. After a
+-- resource policy is deleted, the permissions allowed and denied by the
+-- deleted policy are removed. The effect of deleting a resource policy
+-- might not be immediate.
+--
+-- Use @DeleteRepositoryPermissionsPolicy@ with caution. After a policy is
+-- deleted, Amazon Web Services users, roles, and accounts lose permissions
+-- to perform the repository actions granted by the deleted policy.
+module Amazonka.CodeArtifact.DeleteRepositoryPermissionsPolicy
+  ( -- * Creating a Request
+    DeleteRepositoryPermissionsPolicy (..),
+    newDeleteRepositoryPermissionsPolicy,
+
+    -- * Request Lenses
+    deleteRepositoryPermissionsPolicy_domainOwner,
+    deleteRepositoryPermissionsPolicy_policyRevision,
+    deleteRepositoryPermissionsPolicy_domain,
+    deleteRepositoryPermissionsPolicy_repository,
+
+    -- * Destructuring the Response
+    DeleteRepositoryPermissionsPolicyResponse (..),
+    newDeleteRepositoryPermissionsPolicyResponse,
+
+    -- * Response Lenses
+    deleteRepositoryPermissionsPolicyResponse_policy,
+    deleteRepositoryPermissionsPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRepositoryPermissionsPolicy' smart constructor.
+data DeleteRepositoryPermissionsPolicy = DeleteRepositoryPermissionsPolicy'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The revision of the repository\'s resource policy to be deleted. This
+    -- revision is used for optimistic locking, which prevents others from
+    -- accidentally overwriting your changes to the repository\'s resource
+    -- policy.
+    policyRevision :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository associated with the
+    -- resource policy to be deleted.
+    domain :: Prelude.Text,
+    -- | The name of the repository that is associated with the resource policy
+    -- to be deleted
+    repository :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRepositoryPermissionsPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'deleteRepositoryPermissionsPolicy_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'policyRevision', 'deleteRepositoryPermissionsPolicy_policyRevision' - The revision of the repository\'s resource policy to be deleted. This
+-- revision is used for optimistic locking, which prevents others from
+-- accidentally overwriting your changes to the repository\'s resource
+-- policy.
+--
+-- 'domain', 'deleteRepositoryPermissionsPolicy_domain' - The name of the domain that contains the repository associated with the
+-- resource policy to be deleted.
+--
+-- 'repository', 'deleteRepositoryPermissionsPolicy_repository' - The name of the repository that is associated with the resource policy
+-- to be deleted
+newDeleteRepositoryPermissionsPolicy ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  DeleteRepositoryPermissionsPolicy
+newDeleteRepositoryPermissionsPolicy
+  pDomain_
+  pRepository_ =
+    DeleteRepositoryPermissionsPolicy'
+      { domainOwner =
+          Prelude.Nothing,
+        policyRevision = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+deleteRepositoryPermissionsPolicy_domainOwner :: Lens.Lens' DeleteRepositoryPermissionsPolicy (Prelude.Maybe Prelude.Text)
+deleteRepositoryPermissionsPolicy_domainOwner = Lens.lens (\DeleteRepositoryPermissionsPolicy' {domainOwner} -> domainOwner) (\s@DeleteRepositoryPermissionsPolicy' {} a -> s {domainOwner = a} :: DeleteRepositoryPermissionsPolicy)
+
+-- | The revision of the repository\'s resource policy to be deleted. This
+-- revision is used for optimistic locking, which prevents others from
+-- accidentally overwriting your changes to the repository\'s resource
+-- policy.
+deleteRepositoryPermissionsPolicy_policyRevision :: Lens.Lens' DeleteRepositoryPermissionsPolicy (Prelude.Maybe Prelude.Text)
+deleteRepositoryPermissionsPolicy_policyRevision = Lens.lens (\DeleteRepositoryPermissionsPolicy' {policyRevision} -> policyRevision) (\s@DeleteRepositoryPermissionsPolicy' {} a -> s {policyRevision = a} :: DeleteRepositoryPermissionsPolicy)
+
+-- | The name of the domain that contains the repository associated with the
+-- resource policy to be deleted.
+deleteRepositoryPermissionsPolicy_domain :: Lens.Lens' DeleteRepositoryPermissionsPolicy Prelude.Text
+deleteRepositoryPermissionsPolicy_domain = Lens.lens (\DeleteRepositoryPermissionsPolicy' {domain} -> domain) (\s@DeleteRepositoryPermissionsPolicy' {} a -> s {domain = a} :: DeleteRepositoryPermissionsPolicy)
+
+-- | The name of the repository that is associated with the resource policy
+-- to be deleted
+deleteRepositoryPermissionsPolicy_repository :: Lens.Lens' DeleteRepositoryPermissionsPolicy Prelude.Text
+deleteRepositoryPermissionsPolicy_repository = Lens.lens (\DeleteRepositoryPermissionsPolicy' {repository} -> repository) (\s@DeleteRepositoryPermissionsPolicy' {} a -> s {repository = a} :: DeleteRepositoryPermissionsPolicy)
+
+instance
+  Core.AWSRequest
+    DeleteRepositoryPermissionsPolicy
+  where
+  type
+    AWSResponse DeleteRepositoryPermissionsPolicy =
+      DeleteRepositoryPermissionsPolicyResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteRepositoryPermissionsPolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteRepositoryPermissionsPolicy
+  where
+  hashWithSalt
+    _salt
+    DeleteRepositoryPermissionsPolicy' {..} =
+      _salt
+        `Prelude.hashWithSalt` domainOwner
+        `Prelude.hashWithSalt` policyRevision
+        `Prelude.hashWithSalt` domain
+        `Prelude.hashWithSalt` repository
+
+instance
+  Prelude.NFData
+    DeleteRepositoryPermissionsPolicy
+  where
+  rnf DeleteRepositoryPermissionsPolicy' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf policyRevision
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+
+instance
+  Data.ToHeaders
+    DeleteRepositoryPermissionsPolicy
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DeleteRepositoryPermissionsPolicy
+  where
+  toPath =
+    Prelude.const "/v1/repository/permissions/policies"
+
+instance
+  Data.ToQuery
+    DeleteRepositoryPermissionsPolicy
+  where
+  toQuery DeleteRepositoryPermissionsPolicy' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "policy-revision" Data.=: policyRevision,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newDeleteRepositoryPermissionsPolicyResponse' smart constructor.
+data DeleteRepositoryPermissionsPolicyResponse = DeleteRepositoryPermissionsPolicyResponse'
+  { -- | Information about the deleted policy after processing the request.
+    policy :: Prelude.Maybe ResourcePolicy,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRepositoryPermissionsPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'deleteRepositoryPermissionsPolicyResponse_policy' - Information about the deleted policy after processing the request.
+--
+-- 'httpStatus', 'deleteRepositoryPermissionsPolicyResponse_httpStatus' - The response's http status code.
+newDeleteRepositoryPermissionsPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteRepositoryPermissionsPolicyResponse
+newDeleteRepositoryPermissionsPolicyResponse
+  pHttpStatus_ =
+    DeleteRepositoryPermissionsPolicyResponse'
+      { policy =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the deleted policy after processing the request.
+deleteRepositoryPermissionsPolicyResponse_policy :: Lens.Lens' DeleteRepositoryPermissionsPolicyResponse (Prelude.Maybe ResourcePolicy)
+deleteRepositoryPermissionsPolicyResponse_policy = Lens.lens (\DeleteRepositoryPermissionsPolicyResponse' {policy} -> policy) (\s@DeleteRepositoryPermissionsPolicyResponse' {} a -> s {policy = a} :: DeleteRepositoryPermissionsPolicyResponse)
+
+-- | The response's http status code.
+deleteRepositoryPermissionsPolicyResponse_httpStatus :: Lens.Lens' DeleteRepositoryPermissionsPolicyResponse Prelude.Int
+deleteRepositoryPermissionsPolicyResponse_httpStatus = Lens.lens (\DeleteRepositoryPermissionsPolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteRepositoryPermissionsPolicyResponse' {} a -> s {httpStatus = a} :: DeleteRepositoryPermissionsPolicyResponse)
+
+instance
+  Prelude.NFData
+    DeleteRepositoryPermissionsPolicyResponse
+  where
+  rnf DeleteRepositoryPermissionsPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DescribeDomain.hs b/gen/Amazonka/CodeArtifact/DescribeDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DescribeDomain.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DescribeDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DomainDescription.html DomainDescription>
+-- object that contains information about the requested domain.
+module Amazonka.CodeArtifact.DescribeDomain
+  ( -- * Creating a Request
+    DescribeDomain (..),
+    newDescribeDomain,
+
+    -- * Request Lenses
+    describeDomain_domainOwner,
+    describeDomain_domain,
+
+    -- * Destructuring the Response
+    DescribeDomainResponse (..),
+    newDescribeDomainResponse,
+
+    -- * Response Lenses
+    describeDomainResponse_domain,
+    describeDomainResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDomain' smart constructor.
+data DescribeDomain = DescribeDomain'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | A string that specifies the name of the requested domain.
+    domain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'describeDomain_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'describeDomain_domain' - A string that specifies the name of the requested domain.
+newDescribeDomain ::
+  -- | 'domain'
+  Prelude.Text ->
+  DescribeDomain
+newDescribeDomain pDomain_ =
+  DescribeDomain'
+    { domainOwner = Prelude.Nothing,
+      domain = pDomain_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+describeDomain_domainOwner :: Lens.Lens' DescribeDomain (Prelude.Maybe Prelude.Text)
+describeDomain_domainOwner = Lens.lens (\DescribeDomain' {domainOwner} -> domainOwner) (\s@DescribeDomain' {} a -> s {domainOwner = a} :: DescribeDomain)
+
+-- | A string that specifies the name of the requested domain.
+describeDomain_domain :: Lens.Lens' DescribeDomain Prelude.Text
+describeDomain_domain = Lens.lens (\DescribeDomain' {domain} -> domain) (\s@DescribeDomain' {} a -> s {domain = a} :: DescribeDomain)
+
+instance Core.AWSRequest DescribeDomain where
+  type
+    AWSResponse DescribeDomain =
+      DescribeDomainResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDomainResponse'
+            Prelude.<$> (x Data..?> "domain")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDomain where
+  hashWithSalt _salt DescribeDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData DescribeDomain where
+  rnf DescribeDomain' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders DescribeDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeDomain where
+  toPath = Prelude.const "/v1/domain"
+
+instance Data.ToQuery DescribeDomain where
+  toQuery DescribeDomain' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain
+      ]
+
+-- | /See:/ 'newDescribeDomainResponse' smart constructor.
+data DescribeDomainResponse = DescribeDomainResponse'
+  { domain :: Prelude.Maybe DomainDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'describeDomainResponse_domain' - Undocumented member.
+--
+-- 'httpStatus', 'describeDomainResponse_httpStatus' - The response's http status code.
+newDescribeDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDomainResponse
+newDescribeDomainResponse pHttpStatus_ =
+  DescribeDomainResponse'
+    { domain = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeDomainResponse_domain :: Lens.Lens' DescribeDomainResponse (Prelude.Maybe DomainDescription)
+describeDomainResponse_domain = Lens.lens (\DescribeDomainResponse' {domain} -> domain) (\s@DescribeDomainResponse' {} a -> s {domain = a} :: DescribeDomainResponse)
+
+-- | The response's http status code.
+describeDomainResponse_httpStatus :: Lens.Lens' DescribeDomainResponse Prelude.Int
+describeDomainResponse_httpStatus = Lens.lens (\DescribeDomainResponse' {httpStatus} -> httpStatus) (\s@DescribeDomainResponse' {} a -> s {httpStatus = a} :: DescribeDomainResponse)
+
+instance Prelude.NFData DescribeDomainResponse where
+  rnf DescribeDomainResponse' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DescribePackage.hs b/gen/Amazonka/CodeArtifact/DescribePackage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DescribePackage.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DescribePackage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDescription.html PackageDescription>
+-- object that contains information about the requested package.
+module Amazonka.CodeArtifact.DescribePackage
+  ( -- * Creating a Request
+    DescribePackage (..),
+    newDescribePackage,
+
+    -- * Request Lenses
+    describePackage_domainOwner,
+    describePackage_namespace,
+    describePackage_domain,
+    describePackage_repository,
+    describePackage_format,
+    describePackage_package,
+
+    -- * Destructuring the Response
+    DescribePackageResponse (..),
+    newDescribePackageResponse,
+
+    -- * Response Lenses
+    describePackageResponse_httpStatus,
+    describePackageResponse_package,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePackage' smart constructor.
+data DescribePackage = DescribePackage'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the requested package. The package component that
+    -- specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@. The namespace is
+    --     required when requesting Maven packages.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository that contains the
+    -- package.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the requested package.
+    repository :: Prelude.Text,
+    -- | A format that specifies the type of the requested package.
+    format :: PackageFormat,
+    -- | The name of the requested package.
+    package :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePackage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'describePackage_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'namespace', 'describePackage_namespace' - The namespace of the requested package. The package component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@. The namespace is
+--     required when requesting Maven packages.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'domain', 'describePackage_domain' - The name of the domain that contains the repository that contains the
+-- package.
+--
+-- 'repository', 'describePackage_repository' - The name of the repository that contains the requested package.
+--
+-- 'format', 'describePackage_format' - A format that specifies the type of the requested package.
+--
+-- 'package', 'describePackage_package' - The name of the requested package.
+newDescribePackage ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  DescribePackage
+newDescribePackage
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_ =
+    DescribePackage'
+      { domainOwner = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+describePackage_domainOwner :: Lens.Lens' DescribePackage (Prelude.Maybe Prelude.Text)
+describePackage_domainOwner = Lens.lens (\DescribePackage' {domainOwner} -> domainOwner) (\s@DescribePackage' {} a -> s {domainOwner = a} :: DescribePackage)
+
+-- | The namespace of the requested package. The package component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@. The namespace is
+--     required when requesting Maven packages.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+describePackage_namespace :: Lens.Lens' DescribePackage (Prelude.Maybe Prelude.Text)
+describePackage_namespace = Lens.lens (\DescribePackage' {namespace} -> namespace) (\s@DescribePackage' {} a -> s {namespace = a} :: DescribePackage)
+
+-- | The name of the domain that contains the repository that contains the
+-- package.
+describePackage_domain :: Lens.Lens' DescribePackage Prelude.Text
+describePackage_domain = Lens.lens (\DescribePackage' {domain} -> domain) (\s@DescribePackage' {} a -> s {domain = a} :: DescribePackage)
+
+-- | The name of the repository that contains the requested package.
+describePackage_repository :: Lens.Lens' DescribePackage Prelude.Text
+describePackage_repository = Lens.lens (\DescribePackage' {repository} -> repository) (\s@DescribePackage' {} a -> s {repository = a} :: DescribePackage)
+
+-- | A format that specifies the type of the requested package.
+describePackage_format :: Lens.Lens' DescribePackage PackageFormat
+describePackage_format = Lens.lens (\DescribePackage' {format} -> format) (\s@DescribePackage' {} a -> s {format = a} :: DescribePackage)
+
+-- | The name of the requested package.
+describePackage_package :: Lens.Lens' DescribePackage Prelude.Text
+describePackage_package = Lens.lens (\DescribePackage' {package} -> package) (\s@DescribePackage' {} a -> s {package = a} :: DescribePackage)
+
+instance Core.AWSRequest DescribePackage where
+  type
+    AWSResponse DescribePackage =
+      DescribePackageResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePackageResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "package")
+      )
+
+instance Prelude.Hashable DescribePackage where
+  hashWithSalt _salt DescribePackage' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+
+instance Prelude.NFData DescribePackage where
+  rnf DescribePackage' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+
+instance Data.ToHeaders DescribePackage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribePackage where
+  toPath = Prelude.const "/v1/package"
+
+instance Data.ToQuery DescribePackage where
+  toQuery DescribePackage' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package
+      ]
+
+-- | /See:/ 'newDescribePackageResponse' smart constructor.
+data DescribePackageResponse = DescribePackageResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDescription.html PackageDescription>
+    -- object that contains information about the requested package.
+    package :: PackageDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePackageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'describePackageResponse_httpStatus' - The response's http status code.
+--
+-- 'package', 'describePackageResponse_package' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDescription.html PackageDescription>
+-- object that contains information about the requested package.
+newDescribePackageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'package'
+  PackageDescription ->
+  DescribePackageResponse
+newDescribePackageResponse pHttpStatus_ pPackage_ =
+  DescribePackageResponse'
+    { httpStatus = pHttpStatus_,
+      package = pPackage_
+    }
+
+-- | The response's http status code.
+describePackageResponse_httpStatus :: Lens.Lens' DescribePackageResponse Prelude.Int
+describePackageResponse_httpStatus = Lens.lens (\DescribePackageResponse' {httpStatus} -> httpStatus) (\s@DescribePackageResponse' {} a -> s {httpStatus = a} :: DescribePackageResponse)
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDescription.html PackageDescription>
+-- object that contains information about the requested package.
+describePackageResponse_package :: Lens.Lens' DescribePackageResponse PackageDescription
+describePackageResponse_package = Lens.lens (\DescribePackageResponse' {package} -> package) (\s@DescribePackageResponse' {} a -> s {package = a} :: DescribePackageResponse)
+
+instance Prelude.NFData DescribePackageResponse where
+  rnf DescribePackageResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf package
diff --git a/gen/Amazonka/CodeArtifact/DescribePackageVersion.hs b/gen/Amazonka/CodeArtifact/DescribePackageVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DescribePackageVersion.hs
@@ -0,0 +1,304 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DescribePackageVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionDescription.html PackageVersionDescription>
+-- object that contains information about the requested package version.
+module Amazonka.CodeArtifact.DescribePackageVersion
+  ( -- * Creating a Request
+    DescribePackageVersion (..),
+    newDescribePackageVersion,
+
+    -- * Request Lenses
+    describePackageVersion_domainOwner,
+    describePackageVersion_namespace,
+    describePackageVersion_domain,
+    describePackageVersion_repository,
+    describePackageVersion_format,
+    describePackageVersion_package,
+    describePackageVersion_packageVersion,
+
+    -- * Destructuring the Response
+    DescribePackageVersionResponse (..),
+    newDescribePackageVersionResponse,
+
+    -- * Response Lenses
+    describePackageVersionResponse_httpStatus,
+    describePackageVersionResponse_packageVersion,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePackageVersion' smart constructor.
+data DescribePackageVersion = DescribePackageVersion'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the requested package version. The package version
+    -- component that specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository that contains the
+    -- package version.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the package version.
+    repository :: Prelude.Text,
+    -- | A format that specifies the type of the requested package version.
+    format :: PackageFormat,
+    -- | The name of the requested package version.
+    package :: Prelude.Text,
+    -- | A string that contains the package version (for example, @3.5.2@).
+    packageVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePackageVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'describePackageVersion_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'namespace', 'describePackageVersion_namespace' - The namespace of the requested package version. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'domain', 'describePackageVersion_domain' - The name of the domain that contains the repository that contains the
+-- package version.
+--
+-- 'repository', 'describePackageVersion_repository' - The name of the repository that contains the package version.
+--
+-- 'format', 'describePackageVersion_format' - A format that specifies the type of the requested package version.
+--
+-- 'package', 'describePackageVersion_package' - The name of the requested package version.
+--
+-- 'packageVersion', 'describePackageVersion_packageVersion' - A string that contains the package version (for example, @3.5.2@).
+newDescribePackageVersion ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  -- | 'packageVersion'
+  Prelude.Text ->
+  DescribePackageVersion
+newDescribePackageVersion
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_
+  pPackageVersion_ =
+    DescribePackageVersion'
+      { domainOwner =
+          Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        packageVersion = pPackageVersion_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+describePackageVersion_domainOwner :: Lens.Lens' DescribePackageVersion (Prelude.Maybe Prelude.Text)
+describePackageVersion_domainOwner = Lens.lens (\DescribePackageVersion' {domainOwner} -> domainOwner) (\s@DescribePackageVersion' {} a -> s {domainOwner = a} :: DescribePackageVersion)
+
+-- | The namespace of the requested package version. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+describePackageVersion_namespace :: Lens.Lens' DescribePackageVersion (Prelude.Maybe Prelude.Text)
+describePackageVersion_namespace = Lens.lens (\DescribePackageVersion' {namespace} -> namespace) (\s@DescribePackageVersion' {} a -> s {namespace = a} :: DescribePackageVersion)
+
+-- | The name of the domain that contains the repository that contains the
+-- package version.
+describePackageVersion_domain :: Lens.Lens' DescribePackageVersion Prelude.Text
+describePackageVersion_domain = Lens.lens (\DescribePackageVersion' {domain} -> domain) (\s@DescribePackageVersion' {} a -> s {domain = a} :: DescribePackageVersion)
+
+-- | The name of the repository that contains the package version.
+describePackageVersion_repository :: Lens.Lens' DescribePackageVersion Prelude.Text
+describePackageVersion_repository = Lens.lens (\DescribePackageVersion' {repository} -> repository) (\s@DescribePackageVersion' {} a -> s {repository = a} :: DescribePackageVersion)
+
+-- | A format that specifies the type of the requested package version.
+describePackageVersion_format :: Lens.Lens' DescribePackageVersion PackageFormat
+describePackageVersion_format = Lens.lens (\DescribePackageVersion' {format} -> format) (\s@DescribePackageVersion' {} a -> s {format = a} :: DescribePackageVersion)
+
+-- | The name of the requested package version.
+describePackageVersion_package :: Lens.Lens' DescribePackageVersion Prelude.Text
+describePackageVersion_package = Lens.lens (\DescribePackageVersion' {package} -> package) (\s@DescribePackageVersion' {} a -> s {package = a} :: DescribePackageVersion)
+
+-- | A string that contains the package version (for example, @3.5.2@).
+describePackageVersion_packageVersion :: Lens.Lens' DescribePackageVersion Prelude.Text
+describePackageVersion_packageVersion = Lens.lens (\DescribePackageVersion' {packageVersion} -> packageVersion) (\s@DescribePackageVersion' {} a -> s {packageVersion = a} :: DescribePackageVersion)
+
+instance Core.AWSRequest DescribePackageVersion where
+  type
+    AWSResponse DescribePackageVersion =
+      DescribePackageVersionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePackageVersionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "packageVersion")
+      )
+
+instance Prelude.Hashable DescribePackageVersion where
+  hashWithSalt _salt DescribePackageVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` packageVersion
+
+instance Prelude.NFData DescribePackageVersion where
+  rnf DescribePackageVersion' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf packageVersion
+
+instance Data.ToHeaders DescribePackageVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribePackageVersion where
+  toPath = Prelude.const "/v1/package/version"
+
+instance Data.ToQuery DescribePackageVersion where
+  toQuery DescribePackageVersion' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package,
+        "version" Data.=: packageVersion
+      ]
+
+-- | /See:/ 'newDescribePackageVersionResponse' smart constructor.
+data DescribePackageVersionResponse = DescribePackageVersionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionDescription.html PackageVersionDescription>
+    -- object that contains information about the requested package version.
+    packageVersion :: PackageVersionDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePackageVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'describePackageVersionResponse_httpStatus' - The response's http status code.
+--
+-- 'packageVersion', 'describePackageVersionResponse_packageVersion' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionDescription.html PackageVersionDescription>
+-- object that contains information about the requested package version.
+newDescribePackageVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'packageVersion'
+  PackageVersionDescription ->
+  DescribePackageVersionResponse
+newDescribePackageVersionResponse
+  pHttpStatus_
+  pPackageVersion_ =
+    DescribePackageVersionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        packageVersion = pPackageVersion_
+      }
+
+-- | The response's http status code.
+describePackageVersionResponse_httpStatus :: Lens.Lens' DescribePackageVersionResponse Prelude.Int
+describePackageVersionResponse_httpStatus = Lens.lens (\DescribePackageVersionResponse' {httpStatus} -> httpStatus) (\s@DescribePackageVersionResponse' {} a -> s {httpStatus = a} :: DescribePackageVersionResponse)
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionDescription.html PackageVersionDescription>
+-- object that contains information about the requested package version.
+describePackageVersionResponse_packageVersion :: Lens.Lens' DescribePackageVersionResponse PackageVersionDescription
+describePackageVersionResponse_packageVersion = Lens.lens (\DescribePackageVersionResponse' {packageVersion} -> packageVersion) (\s@DescribePackageVersionResponse' {} a -> s {packageVersion = a} :: DescribePackageVersionResponse)
+
+instance
+  Prelude.NFData
+    DescribePackageVersionResponse
+  where
+  rnf DescribePackageVersionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf packageVersion
diff --git a/gen/Amazonka/CodeArtifact/DescribeRepository.hs b/gen/Amazonka/CodeArtifact/DescribeRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DescribeRepository.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DescribeRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a @RepositoryDescription@ object that contains detailed
+-- information about the requested repository.
+module Amazonka.CodeArtifact.DescribeRepository
+  ( -- * Creating a Request
+    DescribeRepository (..),
+    newDescribeRepository,
+
+    -- * Request Lenses
+    describeRepository_domainOwner,
+    describeRepository_domain,
+    describeRepository_repository,
+
+    -- * Destructuring the Response
+    DescribeRepositoryResponse (..),
+    newDescribeRepositoryResponse,
+
+    -- * Response Lenses
+    describeRepositoryResponse_repository,
+    describeRepositoryResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRepository' smart constructor.
+data DescribeRepository = DescribeRepository'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository to describe.
+    domain :: Prelude.Text,
+    -- | A string that specifies the name of the requested repository.
+    repository :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'describeRepository_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'describeRepository_domain' - The name of the domain that contains the repository to describe.
+--
+-- 'repository', 'describeRepository_repository' - A string that specifies the name of the requested repository.
+newDescribeRepository ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  DescribeRepository
+newDescribeRepository pDomain_ pRepository_ =
+  DescribeRepository'
+    { domainOwner = Prelude.Nothing,
+      domain = pDomain_,
+      repository = pRepository_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+describeRepository_domainOwner :: Lens.Lens' DescribeRepository (Prelude.Maybe Prelude.Text)
+describeRepository_domainOwner = Lens.lens (\DescribeRepository' {domainOwner} -> domainOwner) (\s@DescribeRepository' {} a -> s {domainOwner = a} :: DescribeRepository)
+
+-- | The name of the domain that contains the repository to describe.
+describeRepository_domain :: Lens.Lens' DescribeRepository Prelude.Text
+describeRepository_domain = Lens.lens (\DescribeRepository' {domain} -> domain) (\s@DescribeRepository' {} a -> s {domain = a} :: DescribeRepository)
+
+-- | A string that specifies the name of the requested repository.
+describeRepository_repository :: Lens.Lens' DescribeRepository Prelude.Text
+describeRepository_repository = Lens.lens (\DescribeRepository' {repository} -> repository) (\s@DescribeRepository' {} a -> s {repository = a} :: DescribeRepository)
+
+instance Core.AWSRequest DescribeRepository where
+  type
+    AWSResponse DescribeRepository =
+      DescribeRepositoryResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRepositoryResponse'
+            Prelude.<$> (x Data..?> "repository")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeRepository where
+  hashWithSalt _salt DescribeRepository' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+
+instance Prelude.NFData DescribeRepository where
+  rnf DescribeRepository' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+
+instance Data.ToHeaders DescribeRepository where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeRepository where
+  toPath = Prelude.const "/v1/repository"
+
+instance Data.ToQuery DescribeRepository where
+  toQuery DescribeRepository' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newDescribeRepositoryResponse' smart constructor.
+data DescribeRepositoryResponse = DescribeRepositoryResponse'
+  { -- | A @RepositoryDescription@ object that contains the requested repository
+    -- information.
+    repository :: Prelude.Maybe RepositoryDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRepositoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repository', 'describeRepositoryResponse_repository' - A @RepositoryDescription@ object that contains the requested repository
+-- information.
+--
+-- 'httpStatus', 'describeRepositoryResponse_httpStatus' - The response's http status code.
+newDescribeRepositoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeRepositoryResponse
+newDescribeRepositoryResponse pHttpStatus_ =
+  DescribeRepositoryResponse'
+    { repository =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A @RepositoryDescription@ object that contains the requested repository
+-- information.
+describeRepositoryResponse_repository :: Lens.Lens' DescribeRepositoryResponse (Prelude.Maybe RepositoryDescription)
+describeRepositoryResponse_repository = Lens.lens (\DescribeRepositoryResponse' {repository} -> repository) (\s@DescribeRepositoryResponse' {} a -> s {repository = a} :: DescribeRepositoryResponse)
+
+-- | The response's http status code.
+describeRepositoryResponse_httpStatus :: Lens.Lens' DescribeRepositoryResponse Prelude.Int
+describeRepositoryResponse_httpStatus = Lens.lens (\DescribeRepositoryResponse' {httpStatus} -> httpStatus) (\s@DescribeRepositoryResponse' {} a -> s {httpStatus = a} :: DescribeRepositoryResponse)
+
+instance Prelude.NFData DescribeRepositoryResponse where
+  rnf DescribeRepositoryResponse' {..} =
+    Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DisassociateExternalConnection.hs b/gen/Amazonka/CodeArtifact/DisassociateExternalConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DisassociateExternalConnection.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DisassociateExternalConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes an existing external connection from a repository.
+module Amazonka.CodeArtifact.DisassociateExternalConnection
+  ( -- * Creating a Request
+    DisassociateExternalConnection (..),
+    newDisassociateExternalConnection,
+
+    -- * Request Lenses
+    disassociateExternalConnection_domainOwner,
+    disassociateExternalConnection_domain,
+    disassociateExternalConnection_repository,
+    disassociateExternalConnection_externalConnection,
+
+    -- * Destructuring the Response
+    DisassociateExternalConnectionResponse (..),
+    newDisassociateExternalConnectionResponse,
+
+    -- * Response Lenses
+    disassociateExternalConnectionResponse_repository,
+    disassociateExternalConnectionResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateExternalConnection' smart constructor.
+data DisassociateExternalConnection = DisassociateExternalConnection'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository from which to remove
+    -- the external repository.
+    domain :: Prelude.Text,
+    -- | The name of the repository from which the external connection will be
+    -- removed.
+    repository :: Prelude.Text,
+    -- | The name of the external connection to be removed from the repository.
+    externalConnection :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateExternalConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'disassociateExternalConnection_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'disassociateExternalConnection_domain' - The name of the domain that contains the repository from which to remove
+-- the external repository.
+--
+-- 'repository', 'disassociateExternalConnection_repository' - The name of the repository from which the external connection will be
+-- removed.
+--
+-- 'externalConnection', 'disassociateExternalConnection_externalConnection' - The name of the external connection to be removed from the repository.
+newDisassociateExternalConnection ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'externalConnection'
+  Prelude.Text ->
+  DisassociateExternalConnection
+newDisassociateExternalConnection
+  pDomain_
+  pRepository_
+  pExternalConnection_ =
+    DisassociateExternalConnection'
+      { domainOwner =
+          Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        externalConnection = pExternalConnection_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+disassociateExternalConnection_domainOwner :: Lens.Lens' DisassociateExternalConnection (Prelude.Maybe Prelude.Text)
+disassociateExternalConnection_domainOwner = Lens.lens (\DisassociateExternalConnection' {domainOwner} -> domainOwner) (\s@DisassociateExternalConnection' {} a -> s {domainOwner = a} :: DisassociateExternalConnection)
+
+-- | The name of the domain that contains the repository from which to remove
+-- the external repository.
+disassociateExternalConnection_domain :: Lens.Lens' DisassociateExternalConnection Prelude.Text
+disassociateExternalConnection_domain = Lens.lens (\DisassociateExternalConnection' {domain} -> domain) (\s@DisassociateExternalConnection' {} a -> s {domain = a} :: DisassociateExternalConnection)
+
+-- | The name of the repository from which the external connection will be
+-- removed.
+disassociateExternalConnection_repository :: Lens.Lens' DisassociateExternalConnection Prelude.Text
+disassociateExternalConnection_repository = Lens.lens (\DisassociateExternalConnection' {repository} -> repository) (\s@DisassociateExternalConnection' {} a -> s {repository = a} :: DisassociateExternalConnection)
+
+-- | The name of the external connection to be removed from the repository.
+disassociateExternalConnection_externalConnection :: Lens.Lens' DisassociateExternalConnection Prelude.Text
+disassociateExternalConnection_externalConnection = Lens.lens (\DisassociateExternalConnection' {externalConnection} -> externalConnection) (\s@DisassociateExternalConnection' {} a -> s {externalConnection = a} :: DisassociateExternalConnection)
+
+instance
+  Core.AWSRequest
+    DisassociateExternalConnection
+  where
+  type
+    AWSResponse DisassociateExternalConnection =
+      DisassociateExternalConnectionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisassociateExternalConnectionResponse'
+            Prelude.<$> (x Data..?> "repository")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateExternalConnection
+  where
+  hashWithSalt
+    _salt
+    DisassociateExternalConnection' {..} =
+      _salt
+        `Prelude.hashWithSalt` domainOwner
+        `Prelude.hashWithSalt` domain
+        `Prelude.hashWithSalt` repository
+        `Prelude.hashWithSalt` externalConnection
+
+instance
+  Prelude.NFData
+    DisassociateExternalConnection
+  where
+  rnf DisassociateExternalConnection' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf externalConnection
+
+instance
+  Data.ToHeaders
+    DisassociateExternalConnection
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DisassociateExternalConnection where
+  toPath =
+    Prelude.const "/v1/repository/external-connection"
+
+instance Data.ToQuery DisassociateExternalConnection where
+  toQuery DisassociateExternalConnection' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "external-connection" Data.=: externalConnection
+      ]
+
+-- | /See:/ 'newDisassociateExternalConnectionResponse' smart constructor.
+data DisassociateExternalConnectionResponse = DisassociateExternalConnectionResponse'
+  { -- | The repository associated with the removed external connection.
+    repository :: Prelude.Maybe RepositoryDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateExternalConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repository', 'disassociateExternalConnectionResponse_repository' - The repository associated with the removed external connection.
+--
+-- 'httpStatus', 'disassociateExternalConnectionResponse_httpStatus' - The response's http status code.
+newDisassociateExternalConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateExternalConnectionResponse
+newDisassociateExternalConnectionResponse
+  pHttpStatus_ =
+    DisassociateExternalConnectionResponse'
+      { repository =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The repository associated with the removed external connection.
+disassociateExternalConnectionResponse_repository :: Lens.Lens' DisassociateExternalConnectionResponse (Prelude.Maybe RepositoryDescription)
+disassociateExternalConnectionResponse_repository = Lens.lens (\DisassociateExternalConnectionResponse' {repository} -> repository) (\s@DisassociateExternalConnectionResponse' {} a -> s {repository = a} :: DisassociateExternalConnectionResponse)
+
+-- | The response's http status code.
+disassociateExternalConnectionResponse_httpStatus :: Lens.Lens' DisassociateExternalConnectionResponse Prelude.Int
+disassociateExternalConnectionResponse_httpStatus = Lens.lens (\DisassociateExternalConnectionResponse' {httpStatus} -> httpStatus) (\s@DisassociateExternalConnectionResponse' {} a -> s {httpStatus = a} :: DisassociateExternalConnectionResponse)
+
+instance
+  Prelude.NFData
+    DisassociateExternalConnectionResponse
+  where
+  rnf DisassociateExternalConnectionResponse' {..} =
+    Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/DisposePackageVersions.hs b/gen/Amazonka/CodeArtifact/DisposePackageVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/DisposePackageVersions.hs
@@ -0,0 +1,395 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.DisposePackageVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the assets in package versions and sets the package versions\'
+-- status to @Disposed@. A disposed package version cannot be restored in
+-- your repository because its assets are deleted.
+--
+-- To view all disposed package versions in a repository, use
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersions.html ListPackageVersions>
+-- and set the
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersions.html#API_ListPackageVersions_RequestSyntax status>
+-- parameter to @Disposed@.
+--
+-- To view information about a disposed package version, use
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DescribePackageVersion.html DescribePackageVersion>.
+module Amazonka.CodeArtifact.DisposePackageVersions
+  ( -- * Creating a Request
+    DisposePackageVersions (..),
+    newDisposePackageVersions,
+
+    -- * Request Lenses
+    disposePackageVersions_domainOwner,
+    disposePackageVersions_expectedStatus,
+    disposePackageVersions_namespace,
+    disposePackageVersions_versionRevisions,
+    disposePackageVersions_domain,
+    disposePackageVersions_repository,
+    disposePackageVersions_format,
+    disposePackageVersions_package,
+    disposePackageVersions_versions,
+
+    -- * Destructuring the Response
+    DisposePackageVersionsResponse (..),
+    newDisposePackageVersionsResponse,
+
+    -- * Response Lenses
+    disposePackageVersionsResponse_failedVersions,
+    disposePackageVersionsResponse_successfulVersions,
+    disposePackageVersionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisposePackageVersions' smart constructor.
+data DisposePackageVersions = DisposePackageVersions'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The expected status of the package version to dispose.
+    expectedStatus :: Prelude.Maybe PackageVersionStatus,
+    -- | The namespace of the package versions to be disposed. The package
+    -- version component that specifies its namespace depends on its type. For
+    -- example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The revisions of the package versions you want to dispose.
+    versionRevisions :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the domain that contains the repository you want to dispose.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the package versions you want
+    -- to dispose.
+    repository :: Prelude.Text,
+    -- | A format that specifies the type of package versions you want to
+    -- dispose.
+    format :: PackageFormat,
+    -- | The name of the package with the versions you want to dispose.
+    package :: Prelude.Text,
+    -- | The versions of the package you want to dispose.
+    versions :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisposePackageVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'disposePackageVersions_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'expectedStatus', 'disposePackageVersions_expectedStatus' - The expected status of the package version to dispose.
+--
+-- 'namespace', 'disposePackageVersions_namespace' - The namespace of the package versions to be disposed. The package
+-- version component that specifies its namespace depends on its type. For
+-- example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'versionRevisions', 'disposePackageVersions_versionRevisions' - The revisions of the package versions you want to dispose.
+--
+-- 'domain', 'disposePackageVersions_domain' - The name of the domain that contains the repository you want to dispose.
+--
+-- 'repository', 'disposePackageVersions_repository' - The name of the repository that contains the package versions you want
+-- to dispose.
+--
+-- 'format', 'disposePackageVersions_format' - A format that specifies the type of package versions you want to
+-- dispose.
+--
+-- 'package', 'disposePackageVersions_package' - The name of the package with the versions you want to dispose.
+--
+-- 'versions', 'disposePackageVersions_versions' - The versions of the package you want to dispose.
+newDisposePackageVersions ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  DisposePackageVersions
+newDisposePackageVersions
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_ =
+    DisposePackageVersions'
+      { domainOwner =
+          Prelude.Nothing,
+        expectedStatus = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        versionRevisions = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        versions = Prelude.mempty
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+disposePackageVersions_domainOwner :: Lens.Lens' DisposePackageVersions (Prelude.Maybe Prelude.Text)
+disposePackageVersions_domainOwner = Lens.lens (\DisposePackageVersions' {domainOwner} -> domainOwner) (\s@DisposePackageVersions' {} a -> s {domainOwner = a} :: DisposePackageVersions)
+
+-- | The expected status of the package version to dispose.
+disposePackageVersions_expectedStatus :: Lens.Lens' DisposePackageVersions (Prelude.Maybe PackageVersionStatus)
+disposePackageVersions_expectedStatus = Lens.lens (\DisposePackageVersions' {expectedStatus} -> expectedStatus) (\s@DisposePackageVersions' {} a -> s {expectedStatus = a} :: DisposePackageVersions)
+
+-- | The namespace of the package versions to be disposed. The package
+-- version component that specifies its namespace depends on its type. For
+-- example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+disposePackageVersions_namespace :: Lens.Lens' DisposePackageVersions (Prelude.Maybe Prelude.Text)
+disposePackageVersions_namespace = Lens.lens (\DisposePackageVersions' {namespace} -> namespace) (\s@DisposePackageVersions' {} a -> s {namespace = a} :: DisposePackageVersions)
+
+-- | The revisions of the package versions you want to dispose.
+disposePackageVersions_versionRevisions :: Lens.Lens' DisposePackageVersions (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+disposePackageVersions_versionRevisions = Lens.lens (\DisposePackageVersions' {versionRevisions} -> versionRevisions) (\s@DisposePackageVersions' {} a -> s {versionRevisions = a} :: DisposePackageVersions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the domain that contains the repository you want to dispose.
+disposePackageVersions_domain :: Lens.Lens' DisposePackageVersions Prelude.Text
+disposePackageVersions_domain = Lens.lens (\DisposePackageVersions' {domain} -> domain) (\s@DisposePackageVersions' {} a -> s {domain = a} :: DisposePackageVersions)
+
+-- | The name of the repository that contains the package versions you want
+-- to dispose.
+disposePackageVersions_repository :: Lens.Lens' DisposePackageVersions Prelude.Text
+disposePackageVersions_repository = Lens.lens (\DisposePackageVersions' {repository} -> repository) (\s@DisposePackageVersions' {} a -> s {repository = a} :: DisposePackageVersions)
+
+-- | A format that specifies the type of package versions you want to
+-- dispose.
+disposePackageVersions_format :: Lens.Lens' DisposePackageVersions PackageFormat
+disposePackageVersions_format = Lens.lens (\DisposePackageVersions' {format} -> format) (\s@DisposePackageVersions' {} a -> s {format = a} :: DisposePackageVersions)
+
+-- | The name of the package with the versions you want to dispose.
+disposePackageVersions_package :: Lens.Lens' DisposePackageVersions Prelude.Text
+disposePackageVersions_package = Lens.lens (\DisposePackageVersions' {package} -> package) (\s@DisposePackageVersions' {} a -> s {package = a} :: DisposePackageVersions)
+
+-- | The versions of the package you want to dispose.
+disposePackageVersions_versions :: Lens.Lens' DisposePackageVersions [Prelude.Text]
+disposePackageVersions_versions = Lens.lens (\DisposePackageVersions' {versions} -> versions) (\s@DisposePackageVersions' {} a -> s {versions = a} :: DisposePackageVersions) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DisposePackageVersions where
+  type
+    AWSResponse DisposePackageVersions =
+      DisposePackageVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisposePackageVersionsResponse'
+            Prelude.<$> (x Data..?> "failedVersions" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "successfulVersions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisposePackageVersions where
+  hashWithSalt _salt DisposePackageVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` expectedStatus
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` versionRevisions
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` versions
+
+instance Prelude.NFData DisposePackageVersions where
+  rnf DisposePackageVersions' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf expectedStatus
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf versionRevisions
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf versions
+
+instance Data.ToHeaders DisposePackageVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisposePackageVersions where
+  toJSON DisposePackageVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("expectedStatus" Data..=)
+              Prelude.<$> expectedStatus,
+            ("versionRevisions" Data..=)
+              Prelude.<$> versionRevisions,
+            Prelude.Just ("versions" Data..= versions)
+          ]
+      )
+
+instance Data.ToPath DisposePackageVersions where
+  toPath = Prelude.const "/v1/package/versions/dispose"
+
+instance Data.ToQuery DisposePackageVersions where
+  toQuery DisposePackageVersions' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package
+      ]
+
+-- | /See:/ 'newDisposePackageVersionsResponse' smart constructor.
+data DisposePackageVersionsResponse = DisposePackageVersionsResponse'
+  { -- | A @PackageVersionError@ object that contains a map of errors codes for
+    -- the disposed package versions that failed. The possible error codes are:
+    --
+    -- -   @ALREADY_EXISTS@
+    --
+    -- -   @MISMATCHED_REVISION@
+    --
+    -- -   @MISMATCHED_STATUS@
+    --
+    -- -   @NOT_ALLOWED@
+    --
+    -- -   @NOT_FOUND@
+    --
+    -- -   @SKIPPED@
+    failedVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError),
+    -- | A list of the package versions that were successfully disposed.
+    successfulVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisposePackageVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedVersions', 'disposePackageVersionsResponse_failedVersions' - A @PackageVersionError@ object that contains a map of errors codes for
+-- the disposed package versions that failed. The possible error codes are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+--
+-- 'successfulVersions', 'disposePackageVersionsResponse_successfulVersions' - A list of the package versions that were successfully disposed.
+--
+-- 'httpStatus', 'disposePackageVersionsResponse_httpStatus' - The response's http status code.
+newDisposePackageVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisposePackageVersionsResponse
+newDisposePackageVersionsResponse pHttpStatus_ =
+  DisposePackageVersionsResponse'
+    { failedVersions =
+        Prelude.Nothing,
+      successfulVersions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A @PackageVersionError@ object that contains a map of errors codes for
+-- the disposed package versions that failed. The possible error codes are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+disposePackageVersionsResponse_failedVersions :: Lens.Lens' DisposePackageVersionsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError))
+disposePackageVersionsResponse_failedVersions = Lens.lens (\DisposePackageVersionsResponse' {failedVersions} -> failedVersions) (\s@DisposePackageVersionsResponse' {} a -> s {failedVersions = a} :: DisposePackageVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of the package versions that were successfully disposed.
+disposePackageVersionsResponse_successfulVersions :: Lens.Lens' DisposePackageVersionsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo))
+disposePackageVersionsResponse_successfulVersions = Lens.lens (\DisposePackageVersionsResponse' {successfulVersions} -> successfulVersions) (\s@DisposePackageVersionsResponse' {} a -> s {successfulVersions = a} :: DisposePackageVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+disposePackageVersionsResponse_httpStatus :: Lens.Lens' DisposePackageVersionsResponse Prelude.Int
+disposePackageVersionsResponse_httpStatus = Lens.lens (\DisposePackageVersionsResponse' {httpStatus} -> httpStatus) (\s@DisposePackageVersionsResponse' {} a -> s {httpStatus = a} :: DisposePackageVersionsResponse)
+
+instance
+  Prelude.NFData
+    DisposePackageVersionsResponse
+  where
+  rnf DisposePackageVersionsResponse' {..} =
+    Prelude.rnf failedVersions
+      `Prelude.seq` Prelude.rnf successfulVersions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/GetAuthorizationToken.hs b/gen/Amazonka/CodeArtifact/GetAuthorizationToken.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/GetAuthorizationToken.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.GetAuthorizationToken
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates a temporary authorization token for accessing repositories in
+-- the domain. This API requires the @codeartifact:GetAuthorizationToken@
+-- and @sts:GetServiceBearerToken@ permissions. For more information about
+-- authorization tokens, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/tokens-authentication.html CodeArtifact authentication and tokens>.
+--
+-- CodeArtifact authorization tokens are valid for a period of 12 hours
+-- when created with the @login@ command. You can call @login@ periodically
+-- to refresh the token. When you create an authorization token with the
+-- @GetAuthorizationToken@ API, you can set a custom authorization period,
+-- up to a maximum of 12 hours, with the @durationSeconds@ parameter.
+--
+-- The authorization period begins after @login@ or @GetAuthorizationToken@
+-- is called. If @login@ or @GetAuthorizationToken@ is called while
+-- assuming a role, the token lifetime is independent of the maximum
+-- session duration of the role. For example, if you call @sts assume-role@
+-- and specify a session duration of 15 minutes, then generate a
+-- CodeArtifact authorization token, the token will be valid for the full
+-- authorization period even though this is longer than the 15-minute
+-- session duration.
+--
+-- See
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html Using IAM Roles>
+-- for more information on controlling session duration.
+module Amazonka.CodeArtifact.GetAuthorizationToken
+  ( -- * Creating a Request
+    GetAuthorizationToken (..),
+    newGetAuthorizationToken,
+
+    -- * Request Lenses
+    getAuthorizationToken_domainOwner,
+    getAuthorizationToken_durationSeconds,
+    getAuthorizationToken_domain,
+
+    -- * Destructuring the Response
+    GetAuthorizationTokenResponse (..),
+    newGetAuthorizationTokenResponse,
+
+    -- * Response Lenses
+    getAuthorizationTokenResponse_authorizationToken,
+    getAuthorizationTokenResponse_expiration,
+    getAuthorizationTokenResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAuthorizationToken' smart constructor.
+data GetAuthorizationToken = GetAuthorizationToken'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The time, in seconds, that the generated authorization token is valid.
+    -- Valid values are @0@ and any number between @900@ (15 minutes) and
+    -- @43200@ (12 hours). A value of @0@ will set the expiration of the
+    -- authorization token to the same expiration of the user\'s role\'s
+    -- temporary credentials.
+    durationSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the domain that is in scope for the generated authorization
+    -- token.
+    domain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAuthorizationToken' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'getAuthorizationToken_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'durationSeconds', 'getAuthorizationToken_durationSeconds' - The time, in seconds, that the generated authorization token is valid.
+-- Valid values are @0@ and any number between @900@ (15 minutes) and
+-- @43200@ (12 hours). A value of @0@ will set the expiration of the
+-- authorization token to the same expiration of the user\'s role\'s
+-- temporary credentials.
+--
+-- 'domain', 'getAuthorizationToken_domain' - The name of the domain that is in scope for the generated authorization
+-- token.
+newGetAuthorizationToken ::
+  -- | 'domain'
+  Prelude.Text ->
+  GetAuthorizationToken
+newGetAuthorizationToken pDomain_ =
+  GetAuthorizationToken'
+    { domainOwner =
+        Prelude.Nothing,
+      durationSeconds = Prelude.Nothing,
+      domain = pDomain_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+getAuthorizationToken_domainOwner :: Lens.Lens' GetAuthorizationToken (Prelude.Maybe Prelude.Text)
+getAuthorizationToken_domainOwner = Lens.lens (\GetAuthorizationToken' {domainOwner} -> domainOwner) (\s@GetAuthorizationToken' {} a -> s {domainOwner = a} :: GetAuthorizationToken)
+
+-- | The time, in seconds, that the generated authorization token is valid.
+-- Valid values are @0@ and any number between @900@ (15 minutes) and
+-- @43200@ (12 hours). A value of @0@ will set the expiration of the
+-- authorization token to the same expiration of the user\'s role\'s
+-- temporary credentials.
+getAuthorizationToken_durationSeconds :: Lens.Lens' GetAuthorizationToken (Prelude.Maybe Prelude.Natural)
+getAuthorizationToken_durationSeconds = Lens.lens (\GetAuthorizationToken' {durationSeconds} -> durationSeconds) (\s@GetAuthorizationToken' {} a -> s {durationSeconds = a} :: GetAuthorizationToken)
+
+-- | The name of the domain that is in scope for the generated authorization
+-- token.
+getAuthorizationToken_domain :: Lens.Lens' GetAuthorizationToken Prelude.Text
+getAuthorizationToken_domain = Lens.lens (\GetAuthorizationToken' {domain} -> domain) (\s@GetAuthorizationToken' {} a -> s {domain = a} :: GetAuthorizationToken)
+
+instance Core.AWSRequest GetAuthorizationToken where
+  type
+    AWSResponse GetAuthorizationToken =
+      GetAuthorizationTokenResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAuthorizationTokenResponse'
+            Prelude.<$> (x Data..?> "authorizationToken")
+            Prelude.<*> (x Data..?> "expiration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAuthorizationToken where
+  hashWithSalt _salt GetAuthorizationToken' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` durationSeconds
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData GetAuthorizationToken where
+  rnf GetAuthorizationToken' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf durationSeconds
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders GetAuthorizationToken where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAuthorizationToken where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetAuthorizationToken where
+  toPath = Prelude.const "/v1/authorization-token"
+
+instance Data.ToQuery GetAuthorizationToken where
+  toQuery GetAuthorizationToken' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "duration" Data.=: durationSeconds,
+        "domain" Data.=: domain
+      ]
+
+-- | /See:/ 'newGetAuthorizationTokenResponse' smart constructor.
+data GetAuthorizationTokenResponse = GetAuthorizationTokenResponse'
+  { -- | The returned authentication token.
+    authorizationToken :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp that specifies the date and time the authorization token
+    -- expires.
+    expiration :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAuthorizationTokenResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizationToken', 'getAuthorizationTokenResponse_authorizationToken' - The returned authentication token.
+--
+-- 'expiration', 'getAuthorizationTokenResponse_expiration' - A timestamp that specifies the date and time the authorization token
+-- expires.
+--
+-- 'httpStatus', 'getAuthorizationTokenResponse_httpStatus' - The response's http status code.
+newGetAuthorizationTokenResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAuthorizationTokenResponse
+newGetAuthorizationTokenResponse pHttpStatus_ =
+  GetAuthorizationTokenResponse'
+    { authorizationToken =
+        Prelude.Nothing,
+      expiration = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The returned authentication token.
+getAuthorizationTokenResponse_authorizationToken :: Lens.Lens' GetAuthorizationTokenResponse (Prelude.Maybe Prelude.Text)
+getAuthorizationTokenResponse_authorizationToken = Lens.lens (\GetAuthorizationTokenResponse' {authorizationToken} -> authorizationToken) (\s@GetAuthorizationTokenResponse' {} a -> s {authorizationToken = a} :: GetAuthorizationTokenResponse)
+
+-- | A timestamp that specifies the date and time the authorization token
+-- expires.
+getAuthorizationTokenResponse_expiration :: Lens.Lens' GetAuthorizationTokenResponse (Prelude.Maybe Prelude.UTCTime)
+getAuthorizationTokenResponse_expiration = Lens.lens (\GetAuthorizationTokenResponse' {expiration} -> expiration) (\s@GetAuthorizationTokenResponse' {} a -> s {expiration = a} :: GetAuthorizationTokenResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getAuthorizationTokenResponse_httpStatus :: Lens.Lens' GetAuthorizationTokenResponse Prelude.Int
+getAuthorizationTokenResponse_httpStatus = Lens.lens (\GetAuthorizationTokenResponse' {httpStatus} -> httpStatus) (\s@GetAuthorizationTokenResponse' {} a -> s {httpStatus = a} :: GetAuthorizationTokenResponse)
+
+instance Prelude.NFData GetAuthorizationTokenResponse where
+  rnf GetAuthorizationTokenResponse' {..} =
+    Prelude.rnf authorizationToken
+      `Prelude.seq` Prelude.rnf expiration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/GetDomainPermissionsPolicy.hs b/gen/Amazonka/CodeArtifact/GetDomainPermissionsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/GetDomainPermissionsPolicy.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.GetDomainPermissionsPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the resource policy attached to the specified domain.
+--
+-- The policy is a resource-based policy, not an identity-based policy. For
+-- more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html Identity-based policies and resource-based policies>
+-- in the /IAM User Guide/.
+module Amazonka.CodeArtifact.GetDomainPermissionsPolicy
+  ( -- * Creating a Request
+    GetDomainPermissionsPolicy (..),
+    newGetDomainPermissionsPolicy,
+
+    -- * Request Lenses
+    getDomainPermissionsPolicy_domainOwner,
+    getDomainPermissionsPolicy_domain,
+
+    -- * Destructuring the Response
+    GetDomainPermissionsPolicyResponse (..),
+    newGetDomainPermissionsPolicyResponse,
+
+    -- * Response Lenses
+    getDomainPermissionsPolicyResponse_policy,
+    getDomainPermissionsPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDomainPermissionsPolicy' smart constructor.
+data GetDomainPermissionsPolicy = GetDomainPermissionsPolicy'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain to which the resource policy is attached.
+    domain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainPermissionsPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'getDomainPermissionsPolicy_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'getDomainPermissionsPolicy_domain' - The name of the domain to which the resource policy is attached.
+newGetDomainPermissionsPolicy ::
+  -- | 'domain'
+  Prelude.Text ->
+  GetDomainPermissionsPolicy
+newGetDomainPermissionsPolicy pDomain_ =
+  GetDomainPermissionsPolicy'
+    { domainOwner =
+        Prelude.Nothing,
+      domain = pDomain_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+getDomainPermissionsPolicy_domainOwner :: Lens.Lens' GetDomainPermissionsPolicy (Prelude.Maybe Prelude.Text)
+getDomainPermissionsPolicy_domainOwner = Lens.lens (\GetDomainPermissionsPolicy' {domainOwner} -> domainOwner) (\s@GetDomainPermissionsPolicy' {} a -> s {domainOwner = a} :: GetDomainPermissionsPolicy)
+
+-- | The name of the domain to which the resource policy is attached.
+getDomainPermissionsPolicy_domain :: Lens.Lens' GetDomainPermissionsPolicy Prelude.Text
+getDomainPermissionsPolicy_domain = Lens.lens (\GetDomainPermissionsPolicy' {domain} -> domain) (\s@GetDomainPermissionsPolicy' {} a -> s {domain = a} :: GetDomainPermissionsPolicy)
+
+instance Core.AWSRequest GetDomainPermissionsPolicy where
+  type
+    AWSResponse GetDomainPermissionsPolicy =
+      GetDomainPermissionsPolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainPermissionsPolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDomainPermissionsPolicy where
+  hashWithSalt _salt GetDomainPermissionsPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData GetDomainPermissionsPolicy where
+  rnf GetDomainPermissionsPolicy' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders GetDomainPermissionsPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDomainPermissionsPolicy where
+  toPath =
+    Prelude.const "/v1/domain/permissions/policy"
+
+instance Data.ToQuery GetDomainPermissionsPolicy where
+  toQuery GetDomainPermissionsPolicy' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain
+      ]
+
+-- | /See:/ 'newGetDomainPermissionsPolicyResponse' smart constructor.
+data GetDomainPermissionsPolicyResponse = GetDomainPermissionsPolicyResponse'
+  { -- | The returned resource policy.
+    policy :: Prelude.Maybe ResourcePolicy,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainPermissionsPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'getDomainPermissionsPolicyResponse_policy' - The returned resource policy.
+--
+-- 'httpStatus', 'getDomainPermissionsPolicyResponse_httpStatus' - The response's http status code.
+newGetDomainPermissionsPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDomainPermissionsPolicyResponse
+newGetDomainPermissionsPolicyResponse pHttpStatus_ =
+  GetDomainPermissionsPolicyResponse'
+    { policy =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The returned resource policy.
+getDomainPermissionsPolicyResponse_policy :: Lens.Lens' GetDomainPermissionsPolicyResponse (Prelude.Maybe ResourcePolicy)
+getDomainPermissionsPolicyResponse_policy = Lens.lens (\GetDomainPermissionsPolicyResponse' {policy} -> policy) (\s@GetDomainPermissionsPolicyResponse' {} a -> s {policy = a} :: GetDomainPermissionsPolicyResponse)
+
+-- | The response's http status code.
+getDomainPermissionsPolicyResponse_httpStatus :: Lens.Lens' GetDomainPermissionsPolicyResponse Prelude.Int
+getDomainPermissionsPolicyResponse_httpStatus = Lens.lens (\GetDomainPermissionsPolicyResponse' {httpStatus} -> httpStatus) (\s@GetDomainPermissionsPolicyResponse' {} a -> s {httpStatus = a} :: GetDomainPermissionsPolicyResponse)
+
+instance
+  Prelude.NFData
+    GetDomainPermissionsPolicyResponse
+  where
+  rnf GetDomainPermissionsPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/GetPackageVersionAsset.hs b/gen/Amazonka/CodeArtifact/GetPackageVersionAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/GetPackageVersionAsset.hs
@@ -0,0 +1,367 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.GetPackageVersionAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an asset (or file) that is in a package. For example, for a
+-- Maven package version, use @GetPackageVersionAsset@ to download a @JAR@
+-- file, a @POM@ file, or any other assets in the package version.
+module Amazonka.CodeArtifact.GetPackageVersionAsset
+  ( -- * Creating a Request
+    GetPackageVersionAsset (..),
+    newGetPackageVersionAsset,
+
+    -- * Request Lenses
+    getPackageVersionAsset_domainOwner,
+    getPackageVersionAsset_namespace,
+    getPackageVersionAsset_packageVersionRevision,
+    getPackageVersionAsset_domain,
+    getPackageVersionAsset_repository,
+    getPackageVersionAsset_format,
+    getPackageVersionAsset_package,
+    getPackageVersionAsset_packageVersion,
+    getPackageVersionAsset_asset,
+
+    -- * Destructuring the Response
+    GetPackageVersionAssetResponse (..),
+    newGetPackageVersionAssetResponse,
+
+    -- * Response Lenses
+    getPackageVersionAssetResponse_assetName,
+    getPackageVersionAssetResponse_packageVersion,
+    getPackageVersionAssetResponse_packageVersionRevision,
+    getPackageVersionAssetResponse_httpStatus,
+    getPackageVersionAssetResponse_asset,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPackageVersionAsset' smart constructor.
+data GetPackageVersionAsset = GetPackageVersionAsset'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the package version with the requested asset file. The
+    -- package version component that specifies its namespace depends on its
+    -- type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the package version revision that contains the requested
+    -- asset.
+    packageVersionRevision :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository that contains the
+    -- package version with the requested asset.
+    domain :: Prelude.Text,
+    -- | The repository that contains the package version with the requested
+    -- asset.
+    repository :: Prelude.Text,
+    -- | A format that specifies the type of the package version with the
+    -- requested asset file.
+    format :: PackageFormat,
+    -- | The name of the package that contains the requested asset.
+    package :: Prelude.Text,
+    -- | A string that contains the package version (for example, @3.5.2@).
+    packageVersion :: Prelude.Text,
+    -- | The name of the requested asset.
+    asset :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPackageVersionAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'getPackageVersionAsset_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'namespace', 'getPackageVersionAsset_namespace' - The namespace of the package version with the requested asset file. The
+-- package version component that specifies its namespace depends on its
+-- type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'packageVersionRevision', 'getPackageVersionAsset_packageVersionRevision' - The name of the package version revision that contains the requested
+-- asset.
+--
+-- 'domain', 'getPackageVersionAsset_domain' - The name of the domain that contains the repository that contains the
+-- package version with the requested asset.
+--
+-- 'repository', 'getPackageVersionAsset_repository' - The repository that contains the package version with the requested
+-- asset.
+--
+-- 'format', 'getPackageVersionAsset_format' - A format that specifies the type of the package version with the
+-- requested asset file.
+--
+-- 'package', 'getPackageVersionAsset_package' - The name of the package that contains the requested asset.
+--
+-- 'packageVersion', 'getPackageVersionAsset_packageVersion' - A string that contains the package version (for example, @3.5.2@).
+--
+-- 'asset', 'getPackageVersionAsset_asset' - The name of the requested asset.
+newGetPackageVersionAsset ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  -- | 'packageVersion'
+  Prelude.Text ->
+  -- | 'asset'
+  Prelude.Text ->
+  GetPackageVersionAsset
+newGetPackageVersionAsset
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_
+  pPackageVersion_
+  pAsset_ =
+    GetPackageVersionAsset'
+      { domainOwner =
+          Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        packageVersionRevision = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        packageVersion = pPackageVersion_,
+        asset = pAsset_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+getPackageVersionAsset_domainOwner :: Lens.Lens' GetPackageVersionAsset (Prelude.Maybe Prelude.Text)
+getPackageVersionAsset_domainOwner = Lens.lens (\GetPackageVersionAsset' {domainOwner} -> domainOwner) (\s@GetPackageVersionAsset' {} a -> s {domainOwner = a} :: GetPackageVersionAsset)
+
+-- | The namespace of the package version with the requested asset file. The
+-- package version component that specifies its namespace depends on its
+-- type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+getPackageVersionAsset_namespace :: Lens.Lens' GetPackageVersionAsset (Prelude.Maybe Prelude.Text)
+getPackageVersionAsset_namespace = Lens.lens (\GetPackageVersionAsset' {namespace} -> namespace) (\s@GetPackageVersionAsset' {} a -> s {namespace = a} :: GetPackageVersionAsset)
+
+-- | The name of the package version revision that contains the requested
+-- asset.
+getPackageVersionAsset_packageVersionRevision :: Lens.Lens' GetPackageVersionAsset (Prelude.Maybe Prelude.Text)
+getPackageVersionAsset_packageVersionRevision = Lens.lens (\GetPackageVersionAsset' {packageVersionRevision} -> packageVersionRevision) (\s@GetPackageVersionAsset' {} a -> s {packageVersionRevision = a} :: GetPackageVersionAsset)
+
+-- | The name of the domain that contains the repository that contains the
+-- package version with the requested asset.
+getPackageVersionAsset_domain :: Lens.Lens' GetPackageVersionAsset Prelude.Text
+getPackageVersionAsset_domain = Lens.lens (\GetPackageVersionAsset' {domain} -> domain) (\s@GetPackageVersionAsset' {} a -> s {domain = a} :: GetPackageVersionAsset)
+
+-- | The repository that contains the package version with the requested
+-- asset.
+getPackageVersionAsset_repository :: Lens.Lens' GetPackageVersionAsset Prelude.Text
+getPackageVersionAsset_repository = Lens.lens (\GetPackageVersionAsset' {repository} -> repository) (\s@GetPackageVersionAsset' {} a -> s {repository = a} :: GetPackageVersionAsset)
+
+-- | A format that specifies the type of the package version with the
+-- requested asset file.
+getPackageVersionAsset_format :: Lens.Lens' GetPackageVersionAsset PackageFormat
+getPackageVersionAsset_format = Lens.lens (\GetPackageVersionAsset' {format} -> format) (\s@GetPackageVersionAsset' {} a -> s {format = a} :: GetPackageVersionAsset)
+
+-- | The name of the package that contains the requested asset.
+getPackageVersionAsset_package :: Lens.Lens' GetPackageVersionAsset Prelude.Text
+getPackageVersionAsset_package = Lens.lens (\GetPackageVersionAsset' {package} -> package) (\s@GetPackageVersionAsset' {} a -> s {package = a} :: GetPackageVersionAsset)
+
+-- | A string that contains the package version (for example, @3.5.2@).
+getPackageVersionAsset_packageVersion :: Lens.Lens' GetPackageVersionAsset Prelude.Text
+getPackageVersionAsset_packageVersion = Lens.lens (\GetPackageVersionAsset' {packageVersion} -> packageVersion) (\s@GetPackageVersionAsset' {} a -> s {packageVersion = a} :: GetPackageVersionAsset)
+
+-- | The name of the requested asset.
+getPackageVersionAsset_asset :: Lens.Lens' GetPackageVersionAsset Prelude.Text
+getPackageVersionAsset_asset = Lens.lens (\GetPackageVersionAsset' {asset} -> asset) (\s@GetPackageVersionAsset' {} a -> s {asset = a} :: GetPackageVersionAsset)
+
+instance Core.AWSRequest GetPackageVersionAsset where
+  type
+    AWSResponse GetPackageVersionAsset =
+      GetPackageVersionAssetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBody
+      ( \s h x ->
+          GetPackageVersionAssetResponse'
+            Prelude.<$> (h Data..#? "X-AssetName")
+            Prelude.<*> (h Data..#? "X-PackageVersion")
+            Prelude.<*> (h Data..#? "X-PackageVersionRevision")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (Prelude.pure x)
+      )
+
+instance Prelude.Hashable GetPackageVersionAsset where
+  hashWithSalt _salt GetPackageVersionAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` packageVersionRevision
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` packageVersion
+      `Prelude.hashWithSalt` asset
+
+instance Prelude.NFData GetPackageVersionAsset where
+  rnf GetPackageVersionAsset' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf packageVersionRevision
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf packageVersion
+      `Prelude.seq` Prelude.rnf asset
+
+instance Data.ToHeaders GetPackageVersionAsset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetPackageVersionAsset where
+  toPath = Prelude.const "/v1/package/version/asset"
+
+instance Data.ToQuery GetPackageVersionAsset where
+  toQuery GetPackageVersionAsset' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "revision" Data.=: packageVersionRevision,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package,
+        "version" Data.=: packageVersion,
+        "asset" Data.=: asset
+      ]
+
+-- | /See:/ 'newGetPackageVersionAssetResponse' smart constructor.
+data GetPackageVersionAssetResponse = GetPackageVersionAssetResponse'
+  { -- | The name of the asset that is downloaded.
+    assetName :: Prelude.Maybe Prelude.Text,
+    -- | A string that contains the package version (for example, @3.5.2@).
+    packageVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the package version revision that contains the downloaded
+    -- asset.
+    packageVersionRevision :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The binary file, or asset, that is downloaded.
+    asset :: Data.ResponseBody
+  }
+  deriving (Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPackageVersionAssetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetName', 'getPackageVersionAssetResponse_assetName' - The name of the asset that is downloaded.
+--
+-- 'packageVersion', 'getPackageVersionAssetResponse_packageVersion' - A string that contains the package version (for example, @3.5.2@).
+--
+-- 'packageVersionRevision', 'getPackageVersionAssetResponse_packageVersionRevision' - The name of the package version revision that contains the downloaded
+-- asset.
+--
+-- 'httpStatus', 'getPackageVersionAssetResponse_httpStatus' - The response's http status code.
+--
+-- 'asset', 'getPackageVersionAssetResponse_asset' - The binary file, or asset, that is downloaded.
+newGetPackageVersionAssetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'asset'
+  Data.ResponseBody ->
+  GetPackageVersionAssetResponse
+newGetPackageVersionAssetResponse
+  pHttpStatus_
+  pAsset_ =
+    GetPackageVersionAssetResponse'
+      { assetName =
+          Prelude.Nothing,
+        packageVersion = Prelude.Nothing,
+        packageVersionRevision = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        asset = pAsset_
+      }
+
+-- | The name of the asset that is downloaded.
+getPackageVersionAssetResponse_assetName :: Lens.Lens' GetPackageVersionAssetResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionAssetResponse_assetName = Lens.lens (\GetPackageVersionAssetResponse' {assetName} -> assetName) (\s@GetPackageVersionAssetResponse' {} a -> s {assetName = a} :: GetPackageVersionAssetResponse)
+
+-- | A string that contains the package version (for example, @3.5.2@).
+getPackageVersionAssetResponse_packageVersion :: Lens.Lens' GetPackageVersionAssetResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionAssetResponse_packageVersion = Lens.lens (\GetPackageVersionAssetResponse' {packageVersion} -> packageVersion) (\s@GetPackageVersionAssetResponse' {} a -> s {packageVersion = a} :: GetPackageVersionAssetResponse)
+
+-- | The name of the package version revision that contains the downloaded
+-- asset.
+getPackageVersionAssetResponse_packageVersionRevision :: Lens.Lens' GetPackageVersionAssetResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionAssetResponse_packageVersionRevision = Lens.lens (\GetPackageVersionAssetResponse' {packageVersionRevision} -> packageVersionRevision) (\s@GetPackageVersionAssetResponse' {} a -> s {packageVersionRevision = a} :: GetPackageVersionAssetResponse)
+
+-- | The response's http status code.
+getPackageVersionAssetResponse_httpStatus :: Lens.Lens' GetPackageVersionAssetResponse Prelude.Int
+getPackageVersionAssetResponse_httpStatus = Lens.lens (\GetPackageVersionAssetResponse' {httpStatus} -> httpStatus) (\s@GetPackageVersionAssetResponse' {} a -> s {httpStatus = a} :: GetPackageVersionAssetResponse)
+
+-- | The binary file, or asset, that is downloaded.
+getPackageVersionAssetResponse_asset :: Lens.Lens' GetPackageVersionAssetResponse Data.ResponseBody
+getPackageVersionAssetResponse_asset = Lens.lens (\GetPackageVersionAssetResponse' {asset} -> asset) (\s@GetPackageVersionAssetResponse' {} a -> s {asset = a} :: GetPackageVersionAssetResponse)
diff --git a/gen/Amazonka/CodeArtifact/GetPackageVersionReadme.hs b/gen/Amazonka/CodeArtifact/GetPackageVersionReadme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/GetPackageVersionReadme.hs
@@ -0,0 +1,394 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.GetPackageVersionReadme
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the readme file or descriptive text for a package version. For
+-- packages that do not contain a readme file, CodeArtifact extracts a
+-- description from a metadata file. For example, from the @\<description>@
+-- element in the @pom.xml@ file of a Maven package.
+--
+-- The returned text might contain formatting. For example, it might
+-- contain formatting for Markdown or reStructuredText.
+module Amazonka.CodeArtifact.GetPackageVersionReadme
+  ( -- * Creating a Request
+    GetPackageVersionReadme (..),
+    newGetPackageVersionReadme,
+
+    -- * Request Lenses
+    getPackageVersionReadme_domainOwner,
+    getPackageVersionReadme_namespace,
+    getPackageVersionReadme_domain,
+    getPackageVersionReadme_repository,
+    getPackageVersionReadme_format,
+    getPackageVersionReadme_package,
+    getPackageVersionReadme_packageVersion,
+
+    -- * Destructuring the Response
+    GetPackageVersionReadmeResponse (..),
+    newGetPackageVersionReadmeResponse,
+
+    -- * Response Lenses
+    getPackageVersionReadmeResponse_format,
+    getPackageVersionReadmeResponse_namespace,
+    getPackageVersionReadmeResponse_package,
+    getPackageVersionReadmeResponse_readme,
+    getPackageVersionReadmeResponse_version,
+    getPackageVersionReadmeResponse_versionRevision,
+    getPackageVersionReadmeResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPackageVersionReadme' smart constructor.
+data GetPackageVersionReadme = GetPackageVersionReadme'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the package version with the requested readme file. The
+    -- package version component that specifies its namespace depends on its
+    -- type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository that contains the
+    -- package version with the requested readme file.
+    domain :: Prelude.Text,
+    -- | The repository that contains the package with the requested readme file.
+    repository :: Prelude.Text,
+    -- | A format that specifies the type of the package version with the
+    -- requested readme file.
+    format :: PackageFormat,
+    -- | The name of the package version that contains the requested readme file.
+    package :: Prelude.Text,
+    -- | A string that contains the package version (for example, @3.5.2@).
+    packageVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPackageVersionReadme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'getPackageVersionReadme_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'namespace', 'getPackageVersionReadme_namespace' - The namespace of the package version with the requested readme file. The
+-- package version component that specifies its namespace depends on its
+-- type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'domain', 'getPackageVersionReadme_domain' - The name of the domain that contains the repository that contains the
+-- package version with the requested readme file.
+--
+-- 'repository', 'getPackageVersionReadme_repository' - The repository that contains the package with the requested readme file.
+--
+-- 'format', 'getPackageVersionReadme_format' - A format that specifies the type of the package version with the
+-- requested readme file.
+--
+-- 'package', 'getPackageVersionReadme_package' - The name of the package version that contains the requested readme file.
+--
+-- 'packageVersion', 'getPackageVersionReadme_packageVersion' - A string that contains the package version (for example, @3.5.2@).
+newGetPackageVersionReadme ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  -- | 'packageVersion'
+  Prelude.Text ->
+  GetPackageVersionReadme
+newGetPackageVersionReadme
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_
+  pPackageVersion_ =
+    GetPackageVersionReadme'
+      { domainOwner =
+          Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        packageVersion = pPackageVersion_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+getPackageVersionReadme_domainOwner :: Lens.Lens' GetPackageVersionReadme (Prelude.Maybe Prelude.Text)
+getPackageVersionReadme_domainOwner = Lens.lens (\GetPackageVersionReadme' {domainOwner} -> domainOwner) (\s@GetPackageVersionReadme' {} a -> s {domainOwner = a} :: GetPackageVersionReadme)
+
+-- | The namespace of the package version with the requested readme file. The
+-- package version component that specifies its namespace depends on its
+-- type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+getPackageVersionReadme_namespace :: Lens.Lens' GetPackageVersionReadme (Prelude.Maybe Prelude.Text)
+getPackageVersionReadme_namespace = Lens.lens (\GetPackageVersionReadme' {namespace} -> namespace) (\s@GetPackageVersionReadme' {} a -> s {namespace = a} :: GetPackageVersionReadme)
+
+-- | The name of the domain that contains the repository that contains the
+-- package version with the requested readme file.
+getPackageVersionReadme_domain :: Lens.Lens' GetPackageVersionReadme Prelude.Text
+getPackageVersionReadme_domain = Lens.lens (\GetPackageVersionReadme' {domain} -> domain) (\s@GetPackageVersionReadme' {} a -> s {domain = a} :: GetPackageVersionReadme)
+
+-- | The repository that contains the package with the requested readme file.
+getPackageVersionReadme_repository :: Lens.Lens' GetPackageVersionReadme Prelude.Text
+getPackageVersionReadme_repository = Lens.lens (\GetPackageVersionReadme' {repository} -> repository) (\s@GetPackageVersionReadme' {} a -> s {repository = a} :: GetPackageVersionReadme)
+
+-- | A format that specifies the type of the package version with the
+-- requested readme file.
+getPackageVersionReadme_format :: Lens.Lens' GetPackageVersionReadme PackageFormat
+getPackageVersionReadme_format = Lens.lens (\GetPackageVersionReadme' {format} -> format) (\s@GetPackageVersionReadme' {} a -> s {format = a} :: GetPackageVersionReadme)
+
+-- | The name of the package version that contains the requested readme file.
+getPackageVersionReadme_package :: Lens.Lens' GetPackageVersionReadme Prelude.Text
+getPackageVersionReadme_package = Lens.lens (\GetPackageVersionReadme' {package} -> package) (\s@GetPackageVersionReadme' {} a -> s {package = a} :: GetPackageVersionReadme)
+
+-- | A string that contains the package version (for example, @3.5.2@).
+getPackageVersionReadme_packageVersion :: Lens.Lens' GetPackageVersionReadme Prelude.Text
+getPackageVersionReadme_packageVersion = Lens.lens (\GetPackageVersionReadme' {packageVersion} -> packageVersion) (\s@GetPackageVersionReadme' {} a -> s {packageVersion = a} :: GetPackageVersionReadme)
+
+instance Core.AWSRequest GetPackageVersionReadme where
+  type
+    AWSResponse GetPackageVersionReadme =
+      GetPackageVersionReadmeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPackageVersionReadmeResponse'
+            Prelude.<$> (x Data..?> "format")
+            Prelude.<*> (x Data..?> "namespace")
+            Prelude.<*> (x Data..?> "package")
+            Prelude.<*> (x Data..?> "readme")
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "versionRevision")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPackageVersionReadme where
+  hashWithSalt _salt GetPackageVersionReadme' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` packageVersion
+
+instance Prelude.NFData GetPackageVersionReadme where
+  rnf GetPackageVersionReadme' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf packageVersion
+
+instance Data.ToHeaders GetPackageVersionReadme where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetPackageVersionReadme where
+  toPath = Prelude.const "/v1/package/version/readme"
+
+instance Data.ToQuery GetPackageVersionReadme where
+  toQuery GetPackageVersionReadme' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package,
+        "version" Data.=: packageVersion
+      ]
+
+-- | /See:/ 'newGetPackageVersionReadmeResponse' smart constructor.
+data GetPackageVersionReadmeResponse = GetPackageVersionReadmeResponse'
+  { -- | The format of the package with the requested readme file.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The namespace of the package version with the requested readme file. The
+    -- package version component that specifies its namespace depends on its
+    -- type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the package that contains the returned readme file.
+    package :: Prelude.Maybe Prelude.Text,
+    -- | The text of the returned readme file.
+    readme :: Prelude.Maybe Prelude.Text,
+    -- | The version of the package with the requested readme file.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The current revision associated with the package version.
+    versionRevision :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPackageVersionReadmeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'getPackageVersionReadmeResponse_format' - The format of the package with the requested readme file.
+--
+-- 'namespace', 'getPackageVersionReadmeResponse_namespace' - The namespace of the package version with the requested readme file. The
+-- package version component that specifies its namespace depends on its
+-- type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'package', 'getPackageVersionReadmeResponse_package' - The name of the package that contains the returned readme file.
+--
+-- 'readme', 'getPackageVersionReadmeResponse_readme' - The text of the returned readme file.
+--
+-- 'version', 'getPackageVersionReadmeResponse_version' - The version of the package with the requested readme file.
+--
+-- 'versionRevision', 'getPackageVersionReadmeResponse_versionRevision' - The current revision associated with the package version.
+--
+-- 'httpStatus', 'getPackageVersionReadmeResponse_httpStatus' - The response's http status code.
+newGetPackageVersionReadmeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPackageVersionReadmeResponse
+newGetPackageVersionReadmeResponse pHttpStatus_ =
+  GetPackageVersionReadmeResponse'
+    { format =
+        Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      package = Prelude.Nothing,
+      readme = Prelude.Nothing,
+      version = Prelude.Nothing,
+      versionRevision = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The format of the package with the requested readme file.
+getPackageVersionReadmeResponse_format :: Lens.Lens' GetPackageVersionReadmeResponse (Prelude.Maybe PackageFormat)
+getPackageVersionReadmeResponse_format = Lens.lens (\GetPackageVersionReadmeResponse' {format} -> format) (\s@GetPackageVersionReadmeResponse' {} a -> s {format = a} :: GetPackageVersionReadmeResponse)
+
+-- | The namespace of the package version with the requested readme file. The
+-- package version component that specifies its namespace depends on its
+-- type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+getPackageVersionReadmeResponse_namespace :: Lens.Lens' GetPackageVersionReadmeResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionReadmeResponse_namespace = Lens.lens (\GetPackageVersionReadmeResponse' {namespace} -> namespace) (\s@GetPackageVersionReadmeResponse' {} a -> s {namespace = a} :: GetPackageVersionReadmeResponse)
+
+-- | The name of the package that contains the returned readme file.
+getPackageVersionReadmeResponse_package :: Lens.Lens' GetPackageVersionReadmeResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionReadmeResponse_package = Lens.lens (\GetPackageVersionReadmeResponse' {package} -> package) (\s@GetPackageVersionReadmeResponse' {} a -> s {package = a} :: GetPackageVersionReadmeResponse)
+
+-- | The text of the returned readme file.
+getPackageVersionReadmeResponse_readme :: Lens.Lens' GetPackageVersionReadmeResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionReadmeResponse_readme = Lens.lens (\GetPackageVersionReadmeResponse' {readme} -> readme) (\s@GetPackageVersionReadmeResponse' {} a -> s {readme = a} :: GetPackageVersionReadmeResponse)
+
+-- | The version of the package with the requested readme file.
+getPackageVersionReadmeResponse_version :: Lens.Lens' GetPackageVersionReadmeResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionReadmeResponse_version = Lens.lens (\GetPackageVersionReadmeResponse' {version} -> version) (\s@GetPackageVersionReadmeResponse' {} a -> s {version = a} :: GetPackageVersionReadmeResponse)
+
+-- | The current revision associated with the package version.
+getPackageVersionReadmeResponse_versionRevision :: Lens.Lens' GetPackageVersionReadmeResponse (Prelude.Maybe Prelude.Text)
+getPackageVersionReadmeResponse_versionRevision = Lens.lens (\GetPackageVersionReadmeResponse' {versionRevision} -> versionRevision) (\s@GetPackageVersionReadmeResponse' {} a -> s {versionRevision = a} :: GetPackageVersionReadmeResponse)
+
+-- | The response's http status code.
+getPackageVersionReadmeResponse_httpStatus :: Lens.Lens' GetPackageVersionReadmeResponse Prelude.Int
+getPackageVersionReadmeResponse_httpStatus = Lens.lens (\GetPackageVersionReadmeResponse' {httpStatus} -> httpStatus) (\s@GetPackageVersionReadmeResponse' {} a -> s {httpStatus = a} :: GetPackageVersionReadmeResponse)
+
+instance
+  Prelude.NFData
+    GetPackageVersionReadmeResponse
+  where
+  rnf GetPackageVersionReadmeResponse' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf readme
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf versionRevision
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/GetRepositoryEndpoint.hs b/gen/Amazonka/CodeArtifact/GetRepositoryEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/GetRepositoryEndpoint.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.GetRepositoryEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the endpoint of a repository for a specific package format. A
+-- repository has one endpoint for each package format:
+--
+-- -   @maven@
+--
+-- -   @npm@
+--
+-- -   @nuget@
+--
+-- -   @pypi@
+module Amazonka.CodeArtifact.GetRepositoryEndpoint
+  ( -- * Creating a Request
+    GetRepositoryEndpoint (..),
+    newGetRepositoryEndpoint,
+
+    -- * Request Lenses
+    getRepositoryEndpoint_domainOwner,
+    getRepositoryEndpoint_domain,
+    getRepositoryEndpoint_repository,
+    getRepositoryEndpoint_format,
+
+    -- * Destructuring the Response
+    GetRepositoryEndpointResponse (..),
+    newGetRepositoryEndpointResponse,
+
+    -- * Response Lenses
+    getRepositoryEndpointResponse_repositoryEndpoint,
+    getRepositoryEndpointResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRepositoryEndpoint' smart constructor.
+data GetRepositoryEndpoint = GetRepositoryEndpoint'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain that contains the repository. It does not include dashes or
+    -- spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository.
+    domain :: Prelude.Text,
+    -- | The name of the repository.
+    repository :: Prelude.Text,
+    -- | Returns which endpoint of a repository to return. A repository has one
+    -- endpoint for each package format.
+    format :: PackageFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRepositoryEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'getRepositoryEndpoint_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain that contains the repository. It does not include dashes or
+-- spaces.
+--
+-- 'domain', 'getRepositoryEndpoint_domain' - The name of the domain that contains the repository.
+--
+-- 'repository', 'getRepositoryEndpoint_repository' - The name of the repository.
+--
+-- 'format', 'getRepositoryEndpoint_format' - Returns which endpoint of a repository to return. A repository has one
+-- endpoint for each package format.
+newGetRepositoryEndpoint ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  GetRepositoryEndpoint
+newGetRepositoryEndpoint
+  pDomain_
+  pRepository_
+  pFormat_ =
+    GetRepositoryEndpoint'
+      { domainOwner =
+          Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain that contains the repository. It does not include dashes or
+-- spaces.
+getRepositoryEndpoint_domainOwner :: Lens.Lens' GetRepositoryEndpoint (Prelude.Maybe Prelude.Text)
+getRepositoryEndpoint_domainOwner = Lens.lens (\GetRepositoryEndpoint' {domainOwner} -> domainOwner) (\s@GetRepositoryEndpoint' {} a -> s {domainOwner = a} :: GetRepositoryEndpoint)
+
+-- | The name of the domain that contains the repository.
+getRepositoryEndpoint_domain :: Lens.Lens' GetRepositoryEndpoint Prelude.Text
+getRepositoryEndpoint_domain = Lens.lens (\GetRepositoryEndpoint' {domain} -> domain) (\s@GetRepositoryEndpoint' {} a -> s {domain = a} :: GetRepositoryEndpoint)
+
+-- | The name of the repository.
+getRepositoryEndpoint_repository :: Lens.Lens' GetRepositoryEndpoint Prelude.Text
+getRepositoryEndpoint_repository = Lens.lens (\GetRepositoryEndpoint' {repository} -> repository) (\s@GetRepositoryEndpoint' {} a -> s {repository = a} :: GetRepositoryEndpoint)
+
+-- | Returns which endpoint of a repository to return. A repository has one
+-- endpoint for each package format.
+getRepositoryEndpoint_format :: Lens.Lens' GetRepositoryEndpoint PackageFormat
+getRepositoryEndpoint_format = Lens.lens (\GetRepositoryEndpoint' {format} -> format) (\s@GetRepositoryEndpoint' {} a -> s {format = a} :: GetRepositoryEndpoint)
+
+instance Core.AWSRequest GetRepositoryEndpoint where
+  type
+    AWSResponse GetRepositoryEndpoint =
+      GetRepositoryEndpointResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRepositoryEndpointResponse'
+            Prelude.<$> (x Data..?> "repositoryEndpoint")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRepositoryEndpoint where
+  hashWithSalt _salt GetRepositoryEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+
+instance Prelude.NFData GetRepositoryEndpoint where
+  rnf GetRepositoryEndpoint' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+
+instance Data.ToHeaders GetRepositoryEndpoint where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRepositoryEndpoint where
+  toPath = Prelude.const "/v1/repository/endpoint"
+
+instance Data.ToQuery GetRepositoryEndpoint where
+  toQuery GetRepositoryEndpoint' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format
+      ]
+
+-- | /See:/ 'newGetRepositoryEndpointResponse' smart constructor.
+data GetRepositoryEndpointResponse = GetRepositoryEndpointResponse'
+  { -- | A string that specifies the URL of the returned endpoint.
+    repositoryEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRepositoryEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repositoryEndpoint', 'getRepositoryEndpointResponse_repositoryEndpoint' - A string that specifies the URL of the returned endpoint.
+--
+-- 'httpStatus', 'getRepositoryEndpointResponse_httpStatus' - The response's http status code.
+newGetRepositoryEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRepositoryEndpointResponse
+newGetRepositoryEndpointResponse pHttpStatus_ =
+  GetRepositoryEndpointResponse'
+    { repositoryEndpoint =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A string that specifies the URL of the returned endpoint.
+getRepositoryEndpointResponse_repositoryEndpoint :: Lens.Lens' GetRepositoryEndpointResponse (Prelude.Maybe Prelude.Text)
+getRepositoryEndpointResponse_repositoryEndpoint = Lens.lens (\GetRepositoryEndpointResponse' {repositoryEndpoint} -> repositoryEndpoint) (\s@GetRepositoryEndpointResponse' {} a -> s {repositoryEndpoint = a} :: GetRepositoryEndpointResponse)
+
+-- | The response's http status code.
+getRepositoryEndpointResponse_httpStatus :: Lens.Lens' GetRepositoryEndpointResponse Prelude.Int
+getRepositoryEndpointResponse_httpStatus = Lens.lens (\GetRepositoryEndpointResponse' {httpStatus} -> httpStatus) (\s@GetRepositoryEndpointResponse' {} a -> s {httpStatus = a} :: GetRepositoryEndpointResponse)
+
+instance Prelude.NFData GetRepositoryEndpointResponse where
+  rnf GetRepositoryEndpointResponse' {..} =
+    Prelude.rnf repositoryEndpoint
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/GetRepositoryPermissionsPolicy.hs b/gen/Amazonka/CodeArtifact/GetRepositoryPermissionsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/GetRepositoryPermissionsPolicy.hs
@@ -0,0 +1,223 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.GetRepositoryPermissionsPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the resource policy that is set on a repository.
+module Amazonka.CodeArtifact.GetRepositoryPermissionsPolicy
+  ( -- * Creating a Request
+    GetRepositoryPermissionsPolicy (..),
+    newGetRepositoryPermissionsPolicy,
+
+    -- * Request Lenses
+    getRepositoryPermissionsPolicy_domainOwner,
+    getRepositoryPermissionsPolicy_domain,
+    getRepositoryPermissionsPolicy_repository,
+
+    -- * Destructuring the Response
+    GetRepositoryPermissionsPolicyResponse (..),
+    newGetRepositoryPermissionsPolicyResponse,
+
+    -- * Response Lenses
+    getRepositoryPermissionsPolicyResponse_policy,
+    getRepositoryPermissionsPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRepositoryPermissionsPolicy' smart constructor.
+data GetRepositoryPermissionsPolicy = GetRepositoryPermissionsPolicy'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain containing the repository whose associated
+    -- resource policy is to be retrieved.
+    domain :: Prelude.Text,
+    -- | The name of the repository whose associated resource policy is to be
+    -- retrieved.
+    repository :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRepositoryPermissionsPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'getRepositoryPermissionsPolicy_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'domain', 'getRepositoryPermissionsPolicy_domain' - The name of the domain containing the repository whose associated
+-- resource policy is to be retrieved.
+--
+-- 'repository', 'getRepositoryPermissionsPolicy_repository' - The name of the repository whose associated resource policy is to be
+-- retrieved.
+newGetRepositoryPermissionsPolicy ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  GetRepositoryPermissionsPolicy
+newGetRepositoryPermissionsPolicy
+  pDomain_
+  pRepository_ =
+    GetRepositoryPermissionsPolicy'
+      { domainOwner =
+          Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+getRepositoryPermissionsPolicy_domainOwner :: Lens.Lens' GetRepositoryPermissionsPolicy (Prelude.Maybe Prelude.Text)
+getRepositoryPermissionsPolicy_domainOwner = Lens.lens (\GetRepositoryPermissionsPolicy' {domainOwner} -> domainOwner) (\s@GetRepositoryPermissionsPolicy' {} a -> s {domainOwner = a} :: GetRepositoryPermissionsPolicy)
+
+-- | The name of the domain containing the repository whose associated
+-- resource policy is to be retrieved.
+getRepositoryPermissionsPolicy_domain :: Lens.Lens' GetRepositoryPermissionsPolicy Prelude.Text
+getRepositoryPermissionsPolicy_domain = Lens.lens (\GetRepositoryPermissionsPolicy' {domain} -> domain) (\s@GetRepositoryPermissionsPolicy' {} a -> s {domain = a} :: GetRepositoryPermissionsPolicy)
+
+-- | The name of the repository whose associated resource policy is to be
+-- retrieved.
+getRepositoryPermissionsPolicy_repository :: Lens.Lens' GetRepositoryPermissionsPolicy Prelude.Text
+getRepositoryPermissionsPolicy_repository = Lens.lens (\GetRepositoryPermissionsPolicy' {repository} -> repository) (\s@GetRepositoryPermissionsPolicy' {} a -> s {repository = a} :: GetRepositoryPermissionsPolicy)
+
+instance
+  Core.AWSRequest
+    GetRepositoryPermissionsPolicy
+  where
+  type
+    AWSResponse GetRepositoryPermissionsPolicy =
+      GetRepositoryPermissionsPolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRepositoryPermissionsPolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetRepositoryPermissionsPolicy
+  where
+  hashWithSalt
+    _salt
+    GetRepositoryPermissionsPolicy' {..} =
+      _salt
+        `Prelude.hashWithSalt` domainOwner
+        `Prelude.hashWithSalt` domain
+        `Prelude.hashWithSalt` repository
+
+instance
+  Prelude.NFData
+    GetRepositoryPermissionsPolicy
+  where
+  rnf GetRepositoryPermissionsPolicy' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+
+instance
+  Data.ToHeaders
+    GetRepositoryPermissionsPolicy
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRepositoryPermissionsPolicy where
+  toPath =
+    Prelude.const "/v1/repository/permissions/policy"
+
+instance Data.ToQuery GetRepositoryPermissionsPolicy where
+  toQuery GetRepositoryPermissionsPolicy' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newGetRepositoryPermissionsPolicyResponse' smart constructor.
+data GetRepositoryPermissionsPolicyResponse = GetRepositoryPermissionsPolicyResponse'
+  { -- | The returned resource policy.
+    policy :: Prelude.Maybe ResourcePolicy,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRepositoryPermissionsPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'getRepositoryPermissionsPolicyResponse_policy' - The returned resource policy.
+--
+-- 'httpStatus', 'getRepositoryPermissionsPolicyResponse_httpStatus' - The response's http status code.
+newGetRepositoryPermissionsPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRepositoryPermissionsPolicyResponse
+newGetRepositoryPermissionsPolicyResponse
+  pHttpStatus_ =
+    GetRepositoryPermissionsPolicyResponse'
+      { policy =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The returned resource policy.
+getRepositoryPermissionsPolicyResponse_policy :: Lens.Lens' GetRepositoryPermissionsPolicyResponse (Prelude.Maybe ResourcePolicy)
+getRepositoryPermissionsPolicyResponse_policy = Lens.lens (\GetRepositoryPermissionsPolicyResponse' {policy} -> policy) (\s@GetRepositoryPermissionsPolicyResponse' {} a -> s {policy = a} :: GetRepositoryPermissionsPolicyResponse)
+
+-- | The response's http status code.
+getRepositoryPermissionsPolicyResponse_httpStatus :: Lens.Lens' GetRepositoryPermissionsPolicyResponse Prelude.Int
+getRepositoryPermissionsPolicyResponse_httpStatus = Lens.lens (\GetRepositoryPermissionsPolicyResponse' {httpStatus} -> httpStatus) (\s@GetRepositoryPermissionsPolicyResponse' {} a -> s {httpStatus = a} :: GetRepositoryPermissionsPolicyResponse)
+
+instance
+  Prelude.NFData
+    GetRepositoryPermissionsPolicyResponse
+  where
+  rnf GetRepositoryPermissionsPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/Lens.hs b/gen/Amazonka/CodeArtifact/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Lens.hs
@@ -0,0 +1,570 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Lens
+  ( -- * Operations
+
+    -- ** AssociateExternalConnection
+    associateExternalConnection_domainOwner,
+    associateExternalConnection_domain,
+    associateExternalConnection_repository,
+    associateExternalConnection_externalConnection,
+    associateExternalConnectionResponse_repository,
+    associateExternalConnectionResponse_httpStatus,
+
+    -- ** CopyPackageVersions
+    copyPackageVersions_allowOverwrite,
+    copyPackageVersions_domainOwner,
+    copyPackageVersions_includeFromUpstream,
+    copyPackageVersions_namespace,
+    copyPackageVersions_versionRevisions,
+    copyPackageVersions_versions,
+    copyPackageVersions_domain,
+    copyPackageVersions_sourceRepository,
+    copyPackageVersions_destinationRepository,
+    copyPackageVersions_format,
+    copyPackageVersions_package,
+    copyPackageVersionsResponse_failedVersions,
+    copyPackageVersionsResponse_successfulVersions,
+    copyPackageVersionsResponse_httpStatus,
+
+    -- ** CreateDomain
+    createDomain_encryptionKey,
+    createDomain_tags,
+    createDomain_domain,
+    createDomainResponse_domain,
+    createDomainResponse_httpStatus,
+
+    -- ** CreateRepository
+    createRepository_description,
+    createRepository_domainOwner,
+    createRepository_tags,
+    createRepository_upstreams,
+    createRepository_domain,
+    createRepository_repository,
+    createRepositoryResponse_repository,
+    createRepositoryResponse_httpStatus,
+
+    -- ** DeleteDomain
+    deleteDomain_domainOwner,
+    deleteDomain_domain,
+    deleteDomainResponse_domain,
+    deleteDomainResponse_httpStatus,
+
+    -- ** DeleteDomainPermissionsPolicy
+    deleteDomainPermissionsPolicy_domainOwner,
+    deleteDomainPermissionsPolicy_policyRevision,
+    deleteDomainPermissionsPolicy_domain,
+    deleteDomainPermissionsPolicyResponse_policy,
+    deleteDomainPermissionsPolicyResponse_httpStatus,
+
+    -- ** DeletePackageVersions
+    deletePackageVersions_domainOwner,
+    deletePackageVersions_expectedStatus,
+    deletePackageVersions_namespace,
+    deletePackageVersions_domain,
+    deletePackageVersions_repository,
+    deletePackageVersions_format,
+    deletePackageVersions_package,
+    deletePackageVersions_versions,
+    deletePackageVersionsResponse_failedVersions,
+    deletePackageVersionsResponse_successfulVersions,
+    deletePackageVersionsResponse_httpStatus,
+
+    -- ** DeleteRepository
+    deleteRepository_domainOwner,
+    deleteRepository_domain,
+    deleteRepository_repository,
+    deleteRepositoryResponse_repository,
+    deleteRepositoryResponse_httpStatus,
+
+    -- ** DeleteRepositoryPermissionsPolicy
+    deleteRepositoryPermissionsPolicy_domainOwner,
+    deleteRepositoryPermissionsPolicy_policyRevision,
+    deleteRepositoryPermissionsPolicy_domain,
+    deleteRepositoryPermissionsPolicy_repository,
+    deleteRepositoryPermissionsPolicyResponse_policy,
+    deleteRepositoryPermissionsPolicyResponse_httpStatus,
+
+    -- ** DescribeDomain
+    describeDomain_domainOwner,
+    describeDomain_domain,
+    describeDomainResponse_domain,
+    describeDomainResponse_httpStatus,
+
+    -- ** DescribePackage
+    describePackage_domainOwner,
+    describePackage_namespace,
+    describePackage_domain,
+    describePackage_repository,
+    describePackage_format,
+    describePackage_package,
+    describePackageResponse_httpStatus,
+    describePackageResponse_package,
+
+    -- ** DescribePackageVersion
+    describePackageVersion_domainOwner,
+    describePackageVersion_namespace,
+    describePackageVersion_domain,
+    describePackageVersion_repository,
+    describePackageVersion_format,
+    describePackageVersion_package,
+    describePackageVersion_packageVersion,
+    describePackageVersionResponse_httpStatus,
+    describePackageVersionResponse_packageVersion,
+
+    -- ** DescribeRepository
+    describeRepository_domainOwner,
+    describeRepository_domain,
+    describeRepository_repository,
+    describeRepositoryResponse_repository,
+    describeRepositoryResponse_httpStatus,
+
+    -- ** DisassociateExternalConnection
+    disassociateExternalConnection_domainOwner,
+    disassociateExternalConnection_domain,
+    disassociateExternalConnection_repository,
+    disassociateExternalConnection_externalConnection,
+    disassociateExternalConnectionResponse_repository,
+    disassociateExternalConnectionResponse_httpStatus,
+
+    -- ** DisposePackageVersions
+    disposePackageVersions_domainOwner,
+    disposePackageVersions_expectedStatus,
+    disposePackageVersions_namespace,
+    disposePackageVersions_versionRevisions,
+    disposePackageVersions_domain,
+    disposePackageVersions_repository,
+    disposePackageVersions_format,
+    disposePackageVersions_package,
+    disposePackageVersions_versions,
+    disposePackageVersionsResponse_failedVersions,
+    disposePackageVersionsResponse_successfulVersions,
+    disposePackageVersionsResponse_httpStatus,
+
+    -- ** GetAuthorizationToken
+    getAuthorizationToken_domainOwner,
+    getAuthorizationToken_durationSeconds,
+    getAuthorizationToken_domain,
+    getAuthorizationTokenResponse_authorizationToken,
+    getAuthorizationTokenResponse_expiration,
+    getAuthorizationTokenResponse_httpStatus,
+
+    -- ** GetDomainPermissionsPolicy
+    getDomainPermissionsPolicy_domainOwner,
+    getDomainPermissionsPolicy_domain,
+    getDomainPermissionsPolicyResponse_policy,
+    getDomainPermissionsPolicyResponse_httpStatus,
+
+    -- ** GetPackageVersionAsset
+    getPackageVersionAsset_domainOwner,
+    getPackageVersionAsset_namespace,
+    getPackageVersionAsset_packageVersionRevision,
+    getPackageVersionAsset_domain,
+    getPackageVersionAsset_repository,
+    getPackageVersionAsset_format,
+    getPackageVersionAsset_package,
+    getPackageVersionAsset_packageVersion,
+    getPackageVersionAsset_asset,
+    getPackageVersionAssetResponse_assetName,
+    getPackageVersionAssetResponse_packageVersion,
+    getPackageVersionAssetResponse_packageVersionRevision,
+    getPackageVersionAssetResponse_httpStatus,
+    getPackageVersionAssetResponse_asset,
+
+    -- ** GetPackageVersionReadme
+    getPackageVersionReadme_domainOwner,
+    getPackageVersionReadme_namespace,
+    getPackageVersionReadme_domain,
+    getPackageVersionReadme_repository,
+    getPackageVersionReadme_format,
+    getPackageVersionReadme_package,
+    getPackageVersionReadme_packageVersion,
+    getPackageVersionReadmeResponse_format,
+    getPackageVersionReadmeResponse_namespace,
+    getPackageVersionReadmeResponse_package,
+    getPackageVersionReadmeResponse_readme,
+    getPackageVersionReadmeResponse_version,
+    getPackageVersionReadmeResponse_versionRevision,
+    getPackageVersionReadmeResponse_httpStatus,
+
+    -- ** GetRepositoryEndpoint
+    getRepositoryEndpoint_domainOwner,
+    getRepositoryEndpoint_domain,
+    getRepositoryEndpoint_repository,
+    getRepositoryEndpoint_format,
+    getRepositoryEndpointResponse_repositoryEndpoint,
+    getRepositoryEndpointResponse_httpStatus,
+
+    -- ** GetRepositoryPermissionsPolicy
+    getRepositoryPermissionsPolicy_domainOwner,
+    getRepositoryPermissionsPolicy_domain,
+    getRepositoryPermissionsPolicy_repository,
+    getRepositoryPermissionsPolicyResponse_policy,
+    getRepositoryPermissionsPolicyResponse_httpStatus,
+
+    -- ** ListDomains
+    listDomains_maxResults,
+    listDomains_nextToken,
+    listDomainsResponse_domains,
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+
+    -- ** ListPackageVersionAssets
+    listPackageVersionAssets_domainOwner,
+    listPackageVersionAssets_maxResults,
+    listPackageVersionAssets_namespace,
+    listPackageVersionAssets_nextToken,
+    listPackageVersionAssets_domain,
+    listPackageVersionAssets_repository,
+    listPackageVersionAssets_format,
+    listPackageVersionAssets_package,
+    listPackageVersionAssets_packageVersion,
+    listPackageVersionAssetsResponse_assets,
+    listPackageVersionAssetsResponse_format,
+    listPackageVersionAssetsResponse_namespace,
+    listPackageVersionAssetsResponse_nextToken,
+    listPackageVersionAssetsResponse_package,
+    listPackageVersionAssetsResponse_version,
+    listPackageVersionAssetsResponse_versionRevision,
+    listPackageVersionAssetsResponse_httpStatus,
+
+    -- ** ListPackageVersionDependencies
+    listPackageVersionDependencies_domainOwner,
+    listPackageVersionDependencies_namespace,
+    listPackageVersionDependencies_nextToken,
+    listPackageVersionDependencies_domain,
+    listPackageVersionDependencies_repository,
+    listPackageVersionDependencies_format,
+    listPackageVersionDependencies_package,
+    listPackageVersionDependencies_packageVersion,
+    listPackageVersionDependenciesResponse_dependencies,
+    listPackageVersionDependenciesResponse_format,
+    listPackageVersionDependenciesResponse_namespace,
+    listPackageVersionDependenciesResponse_nextToken,
+    listPackageVersionDependenciesResponse_package,
+    listPackageVersionDependenciesResponse_version,
+    listPackageVersionDependenciesResponse_versionRevision,
+    listPackageVersionDependenciesResponse_httpStatus,
+
+    -- ** ListPackageVersions
+    listPackageVersions_domainOwner,
+    listPackageVersions_maxResults,
+    listPackageVersions_namespace,
+    listPackageVersions_nextToken,
+    listPackageVersions_originType,
+    listPackageVersions_sortBy,
+    listPackageVersions_status,
+    listPackageVersions_domain,
+    listPackageVersions_repository,
+    listPackageVersions_format,
+    listPackageVersions_package,
+    listPackageVersionsResponse_defaultDisplayVersion,
+    listPackageVersionsResponse_format,
+    listPackageVersionsResponse_namespace,
+    listPackageVersionsResponse_nextToken,
+    listPackageVersionsResponse_package,
+    listPackageVersionsResponse_versions,
+    listPackageVersionsResponse_httpStatus,
+
+    -- ** ListPackages
+    listPackages_domainOwner,
+    listPackages_format,
+    listPackages_maxResults,
+    listPackages_namespace,
+    listPackages_nextToken,
+    listPackages_packagePrefix,
+    listPackages_publish,
+    listPackages_upstream,
+    listPackages_domain,
+    listPackages_repository,
+    listPackagesResponse_nextToken,
+    listPackagesResponse_packages,
+    listPackagesResponse_httpStatus,
+
+    -- ** ListRepositories
+    listRepositories_maxResults,
+    listRepositories_nextToken,
+    listRepositories_repositoryPrefix,
+    listRepositoriesResponse_nextToken,
+    listRepositoriesResponse_repositories,
+    listRepositoriesResponse_httpStatus,
+
+    -- ** ListRepositoriesInDomain
+    listRepositoriesInDomain_administratorAccount,
+    listRepositoriesInDomain_domainOwner,
+    listRepositoriesInDomain_maxResults,
+    listRepositoriesInDomain_nextToken,
+    listRepositoriesInDomain_repositoryPrefix,
+    listRepositoriesInDomain_domain,
+    listRepositoriesInDomainResponse_nextToken,
+    listRepositoriesInDomainResponse_repositories,
+    listRepositoriesInDomainResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutDomainPermissionsPolicy
+    putDomainPermissionsPolicy_domainOwner,
+    putDomainPermissionsPolicy_policyRevision,
+    putDomainPermissionsPolicy_domain,
+    putDomainPermissionsPolicy_policyDocument,
+    putDomainPermissionsPolicyResponse_policy,
+    putDomainPermissionsPolicyResponse_httpStatus,
+
+    -- ** PutPackageOriginConfiguration
+    putPackageOriginConfiguration_domainOwner,
+    putPackageOriginConfiguration_namespace,
+    putPackageOriginConfiguration_domain,
+    putPackageOriginConfiguration_repository,
+    putPackageOriginConfiguration_format,
+    putPackageOriginConfiguration_package,
+    putPackageOriginConfiguration_restrictions,
+    putPackageOriginConfigurationResponse_originConfiguration,
+    putPackageOriginConfigurationResponse_httpStatus,
+
+    -- ** PutRepositoryPermissionsPolicy
+    putRepositoryPermissionsPolicy_domainOwner,
+    putRepositoryPermissionsPolicy_policyRevision,
+    putRepositoryPermissionsPolicy_domain,
+    putRepositoryPermissionsPolicy_repository,
+    putRepositoryPermissionsPolicy_policyDocument,
+    putRepositoryPermissionsPolicyResponse_policy,
+    putRepositoryPermissionsPolicyResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdatePackageVersionsStatus
+    updatePackageVersionsStatus_domainOwner,
+    updatePackageVersionsStatus_expectedStatus,
+    updatePackageVersionsStatus_namespace,
+    updatePackageVersionsStatus_versionRevisions,
+    updatePackageVersionsStatus_domain,
+    updatePackageVersionsStatus_repository,
+    updatePackageVersionsStatus_format,
+    updatePackageVersionsStatus_package,
+    updatePackageVersionsStatus_versions,
+    updatePackageVersionsStatus_targetStatus,
+    updatePackageVersionsStatusResponse_failedVersions,
+    updatePackageVersionsStatusResponse_successfulVersions,
+    updatePackageVersionsStatusResponse_httpStatus,
+
+    -- ** UpdateRepository
+    updateRepository_description,
+    updateRepository_domainOwner,
+    updateRepository_upstreams,
+    updateRepository_domain,
+    updateRepository_repository,
+    updateRepositoryResponse_repository,
+    updateRepositoryResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AssetSummary
+    assetSummary_hashes,
+    assetSummary_size,
+    assetSummary_name,
+
+    -- ** DomainDescription
+    domainDescription_arn,
+    domainDescription_assetSizeBytes,
+    domainDescription_createdTime,
+    domainDescription_encryptionKey,
+    domainDescription_name,
+    domainDescription_owner,
+    domainDescription_repositoryCount,
+    domainDescription_s3BucketArn,
+    domainDescription_status,
+
+    -- ** DomainEntryPoint
+    domainEntryPoint_externalConnectionName,
+    domainEntryPoint_repositoryName,
+
+    -- ** DomainSummary
+    domainSummary_arn,
+    domainSummary_createdTime,
+    domainSummary_encryptionKey,
+    domainSummary_name,
+    domainSummary_owner,
+    domainSummary_status,
+
+    -- ** LicenseInfo
+    licenseInfo_name,
+    licenseInfo_url,
+
+    -- ** PackageDependency
+    packageDependency_dependencyType,
+    packageDependency_namespace,
+    packageDependency_package,
+    packageDependency_versionRequirement,
+
+    -- ** PackageDescription
+    packageDescription_format,
+    packageDescription_name,
+    packageDescription_namespace,
+    packageDescription_originConfiguration,
+
+    -- ** PackageOriginConfiguration
+    packageOriginConfiguration_restrictions,
+
+    -- ** PackageOriginRestrictions
+    packageOriginRestrictions_publish,
+    packageOriginRestrictions_upstream,
+
+    -- ** PackageSummary
+    packageSummary_format,
+    packageSummary_namespace,
+    packageSummary_originConfiguration,
+    packageSummary_package,
+
+    -- ** PackageVersionDescription
+    packageVersionDescription_displayName,
+    packageVersionDescription_format,
+    packageVersionDescription_homePage,
+    packageVersionDescription_licenses,
+    packageVersionDescription_namespace,
+    packageVersionDescription_origin,
+    packageVersionDescription_packageName,
+    packageVersionDescription_publishedTime,
+    packageVersionDescription_revision,
+    packageVersionDescription_sourceCodeRepository,
+    packageVersionDescription_status,
+    packageVersionDescription_summary,
+    packageVersionDescription_version,
+
+    -- ** PackageVersionError
+    packageVersionError_errorCode,
+    packageVersionError_errorMessage,
+
+    -- ** PackageVersionOrigin
+    packageVersionOrigin_domainEntryPoint,
+    packageVersionOrigin_originType,
+
+    -- ** PackageVersionSummary
+    packageVersionSummary_origin,
+    packageVersionSummary_revision,
+    packageVersionSummary_version,
+    packageVersionSummary_status,
+
+    -- ** RepositoryDescription
+    repositoryDescription_administratorAccount,
+    repositoryDescription_arn,
+    repositoryDescription_description,
+    repositoryDescription_domainName,
+    repositoryDescription_domainOwner,
+    repositoryDescription_externalConnections,
+    repositoryDescription_name,
+    repositoryDescription_upstreams,
+
+    -- ** RepositoryExternalConnectionInfo
+    repositoryExternalConnectionInfo_externalConnectionName,
+    repositoryExternalConnectionInfo_packageFormat,
+    repositoryExternalConnectionInfo_status,
+
+    -- ** RepositorySummary
+    repositorySummary_administratorAccount,
+    repositorySummary_arn,
+    repositorySummary_description,
+    repositorySummary_domainName,
+    repositorySummary_domainOwner,
+    repositorySummary_name,
+
+    -- ** ResourcePolicy
+    resourcePolicy_document,
+    resourcePolicy_resourceArn,
+    resourcePolicy_revision,
+
+    -- ** SuccessfulPackageVersionInfo
+    successfulPackageVersionInfo_revision,
+    successfulPackageVersionInfo_status,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** UpstreamRepository
+    upstreamRepository_repositoryName,
+
+    -- ** UpstreamRepositoryInfo
+    upstreamRepositoryInfo_repositoryName,
+  )
+where
+
+import Amazonka.CodeArtifact.AssociateExternalConnection
+import Amazonka.CodeArtifact.CopyPackageVersions
+import Amazonka.CodeArtifact.CreateDomain
+import Amazonka.CodeArtifact.CreateRepository
+import Amazonka.CodeArtifact.DeleteDomain
+import Amazonka.CodeArtifact.DeleteDomainPermissionsPolicy
+import Amazonka.CodeArtifact.DeletePackageVersions
+import Amazonka.CodeArtifact.DeleteRepository
+import Amazonka.CodeArtifact.DeleteRepositoryPermissionsPolicy
+import Amazonka.CodeArtifact.DescribeDomain
+import Amazonka.CodeArtifact.DescribePackage
+import Amazonka.CodeArtifact.DescribePackageVersion
+import Amazonka.CodeArtifact.DescribeRepository
+import Amazonka.CodeArtifact.DisassociateExternalConnection
+import Amazonka.CodeArtifact.DisposePackageVersions
+import Amazonka.CodeArtifact.GetAuthorizationToken
+import Amazonka.CodeArtifact.GetDomainPermissionsPolicy
+import Amazonka.CodeArtifact.GetPackageVersionAsset
+import Amazonka.CodeArtifact.GetPackageVersionReadme
+import Amazonka.CodeArtifact.GetRepositoryEndpoint
+import Amazonka.CodeArtifact.GetRepositoryPermissionsPolicy
+import Amazonka.CodeArtifact.ListDomains
+import Amazonka.CodeArtifact.ListPackageVersionAssets
+import Amazonka.CodeArtifact.ListPackageVersionDependencies
+import Amazonka.CodeArtifact.ListPackageVersions
+import Amazonka.CodeArtifact.ListPackages
+import Amazonka.CodeArtifact.ListRepositories
+import Amazonka.CodeArtifact.ListRepositoriesInDomain
+import Amazonka.CodeArtifact.ListTagsForResource
+import Amazonka.CodeArtifact.PutDomainPermissionsPolicy
+import Amazonka.CodeArtifact.PutPackageOriginConfiguration
+import Amazonka.CodeArtifact.PutRepositoryPermissionsPolicy
+import Amazonka.CodeArtifact.TagResource
+import Amazonka.CodeArtifact.Types.AssetSummary
+import Amazonka.CodeArtifact.Types.DomainDescription
+import Amazonka.CodeArtifact.Types.DomainEntryPoint
+import Amazonka.CodeArtifact.Types.DomainSummary
+import Amazonka.CodeArtifact.Types.LicenseInfo
+import Amazonka.CodeArtifact.Types.PackageDependency
+import Amazonka.CodeArtifact.Types.PackageDescription
+import Amazonka.CodeArtifact.Types.PackageOriginConfiguration
+import Amazonka.CodeArtifact.Types.PackageOriginRestrictions
+import Amazonka.CodeArtifact.Types.PackageSummary
+import Amazonka.CodeArtifact.Types.PackageVersionDescription
+import Amazonka.CodeArtifact.Types.PackageVersionError
+import Amazonka.CodeArtifact.Types.PackageVersionOrigin
+import Amazonka.CodeArtifact.Types.PackageVersionSummary
+import Amazonka.CodeArtifact.Types.RepositoryDescription
+import Amazonka.CodeArtifact.Types.RepositoryExternalConnectionInfo
+import Amazonka.CodeArtifact.Types.RepositorySummary
+import Amazonka.CodeArtifact.Types.ResourcePolicy
+import Amazonka.CodeArtifact.Types.SuccessfulPackageVersionInfo
+import Amazonka.CodeArtifact.Types.Tag
+import Amazonka.CodeArtifact.Types.UpstreamRepository
+import Amazonka.CodeArtifact.Types.UpstreamRepositoryInfo
+import Amazonka.CodeArtifact.UntagResource
+import Amazonka.CodeArtifact.UpdatePackageVersionsStatus
+import Amazonka.CodeArtifact.UpdateRepository
diff --git a/gen/Amazonka/CodeArtifact/ListDomains.hs b/gen/Amazonka/CodeArtifact/ListDomains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListDomains.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListDomains
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionDescription.html DomainSummary>
+-- objects for all domains owned by the Amazon Web Services account that
+-- makes this call. Each returned @DomainSummary@ object contains
+-- information about a domain.
+--
+-- This operation returns paginated results.
+module Amazonka.CodeArtifact.ListDomains
+  ( -- * Creating a Request
+    ListDomains (..),
+    newListDomains,
+
+    -- * Request Lenses
+    listDomains_maxResults,
+    listDomains_nextToken,
+
+    -- * Destructuring the Response
+    ListDomainsResponse (..),
+    newListDomainsResponse,
+
+    -- * Response Lenses
+    listDomainsResponse_domains,
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDomains' smart constructor.
+data ListDomains = ListDomains'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomains' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listDomains_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listDomains_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+newListDomains ::
+  ListDomains
+newListDomains =
+  ListDomains'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per page.
+listDomains_maxResults :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Natural)
+listDomains_maxResults = Lens.lens (\ListDomains' {maxResults} -> maxResults) (\s@ListDomains' {} a -> s {maxResults = a} :: ListDomains)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listDomains_nextToken :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Text)
+listDomains_nextToken = Lens.lens (\ListDomains' {nextToken} -> nextToken) (\s@ListDomains' {} a -> s {nextToken = a} :: ListDomains)
+
+instance Core.AWSPager ListDomains where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDomainsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDomainsResponse_domains
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDomains_nextToken
+          Lens..~ rs
+          Lens.^? listDomainsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDomains where
+  type AWSResponse ListDomains = ListDomainsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDomainsResponse'
+            Prelude.<$> (x Data..?> "domains" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDomains where
+  hashWithSalt _salt ListDomains' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDomains where
+  rnf ListDomains' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDomains where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDomains where
+  toJSON ListDomains' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListDomains where
+  toPath = Prelude.const "/v1/domains"
+
+instance Data.ToQuery ListDomains where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDomainsResponse' smart constructor.
+data ListDomainsResponse = ListDomainsResponse'
+  { -- | The returned list of
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DomainSummary.html DomainSummary>
+    -- objects.
+    domains :: Prelude.Maybe [DomainSummary],
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomainsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domains', 'listDomainsResponse_domains' - The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DomainSummary.html DomainSummary>
+-- objects.
+--
+-- 'nextToken', 'listDomainsResponse_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'httpStatus', 'listDomainsResponse_httpStatus' - The response's http status code.
+newListDomainsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDomainsResponse
+newListDomainsResponse pHttpStatus_ =
+  ListDomainsResponse'
+    { domains = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DomainSummary.html DomainSummary>
+-- objects.
+listDomainsResponse_domains :: Lens.Lens' ListDomainsResponse (Prelude.Maybe [DomainSummary])
+listDomainsResponse_domains = Lens.lens (\ListDomainsResponse' {domains} -> domains) (\s@ListDomainsResponse' {} a -> s {domains = a} :: ListDomainsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listDomainsResponse_nextToken :: Lens.Lens' ListDomainsResponse (Prelude.Maybe Prelude.Text)
+listDomainsResponse_nextToken = Lens.lens (\ListDomainsResponse' {nextToken} -> nextToken) (\s@ListDomainsResponse' {} a -> s {nextToken = a} :: ListDomainsResponse)
+
+-- | The response's http status code.
+listDomainsResponse_httpStatus :: Lens.Lens' ListDomainsResponse Prelude.Int
+listDomainsResponse_httpStatus = Lens.lens (\ListDomainsResponse' {httpStatus} -> httpStatus) (\s@ListDomainsResponse' {} a -> s {httpStatus = a} :: ListDomainsResponse)
+
+instance Prelude.NFData ListDomainsResponse where
+  rnf ListDomainsResponse' {..} =
+    Prelude.rnf domains
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/ListPackageVersionAssets.hs b/gen/Amazonka/CodeArtifact/ListPackageVersionAssets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListPackageVersionAssets.hs
@@ -0,0 +1,482 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListPackageVersionAssets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_AssetSummary.html AssetSummary>
+-- objects for assets in a package version.
+--
+-- This operation returns paginated results.
+module Amazonka.CodeArtifact.ListPackageVersionAssets
+  ( -- * Creating a Request
+    ListPackageVersionAssets (..),
+    newListPackageVersionAssets,
+
+    -- * Request Lenses
+    listPackageVersionAssets_domainOwner,
+    listPackageVersionAssets_maxResults,
+    listPackageVersionAssets_namespace,
+    listPackageVersionAssets_nextToken,
+    listPackageVersionAssets_domain,
+    listPackageVersionAssets_repository,
+    listPackageVersionAssets_format,
+    listPackageVersionAssets_package,
+    listPackageVersionAssets_packageVersion,
+
+    -- * Destructuring the Response
+    ListPackageVersionAssetsResponse (..),
+    newListPackageVersionAssetsResponse,
+
+    -- * Response Lenses
+    listPackageVersionAssetsResponse_assets,
+    listPackageVersionAssetsResponse_format,
+    listPackageVersionAssetsResponse_namespace,
+    listPackageVersionAssetsResponse_nextToken,
+    listPackageVersionAssetsResponse_package,
+    listPackageVersionAssetsResponse_version,
+    listPackageVersionAssetsResponse_versionRevision,
+    listPackageVersionAssetsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPackageVersionAssets' smart constructor.
+data ListPackageVersionAssets = ListPackageVersionAssets'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The namespace of the package version that contains the requested package
+    -- version assets. The package version component that specifies its
+    -- namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository associated with the
+    -- package version assets.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the package that contains the
+    -- requested package version assets.
+    repository :: Prelude.Text,
+    -- | The format of the package that contains the requested package version
+    -- assets.
+    format :: PackageFormat,
+    -- | The name of the package that contains the requested package version
+    -- assets.
+    package :: Prelude.Text,
+    -- | A string that contains the package version (for example, @3.5.2@).
+    packageVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackageVersionAssets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'listPackageVersionAssets_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'maxResults', 'listPackageVersionAssets_maxResults' - The maximum number of results to return per page.
+--
+-- 'namespace', 'listPackageVersionAssets_namespace' - The namespace of the package version that contains the requested package
+-- version assets. The package version component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'nextToken', 'listPackageVersionAssets_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'domain', 'listPackageVersionAssets_domain' - The name of the domain that contains the repository associated with the
+-- package version assets.
+--
+-- 'repository', 'listPackageVersionAssets_repository' - The name of the repository that contains the package that contains the
+-- requested package version assets.
+--
+-- 'format', 'listPackageVersionAssets_format' - The format of the package that contains the requested package version
+-- assets.
+--
+-- 'package', 'listPackageVersionAssets_package' - The name of the package that contains the requested package version
+-- assets.
+--
+-- 'packageVersion', 'listPackageVersionAssets_packageVersion' - A string that contains the package version (for example, @3.5.2@).
+newListPackageVersionAssets ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  -- | 'packageVersion'
+  Prelude.Text ->
+  ListPackageVersionAssets
+newListPackageVersionAssets
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_
+  pPackageVersion_ =
+    ListPackageVersionAssets'
+      { domainOwner =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        packageVersion = pPackageVersion_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+listPackageVersionAssets_domainOwner :: Lens.Lens' ListPackageVersionAssets (Prelude.Maybe Prelude.Text)
+listPackageVersionAssets_domainOwner = Lens.lens (\ListPackageVersionAssets' {domainOwner} -> domainOwner) (\s@ListPackageVersionAssets' {} a -> s {domainOwner = a} :: ListPackageVersionAssets)
+
+-- | The maximum number of results to return per page.
+listPackageVersionAssets_maxResults :: Lens.Lens' ListPackageVersionAssets (Prelude.Maybe Prelude.Natural)
+listPackageVersionAssets_maxResults = Lens.lens (\ListPackageVersionAssets' {maxResults} -> maxResults) (\s@ListPackageVersionAssets' {} a -> s {maxResults = a} :: ListPackageVersionAssets)
+
+-- | The namespace of the package version that contains the requested package
+-- version assets. The package version component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+listPackageVersionAssets_namespace :: Lens.Lens' ListPackageVersionAssets (Prelude.Maybe Prelude.Text)
+listPackageVersionAssets_namespace = Lens.lens (\ListPackageVersionAssets' {namespace} -> namespace) (\s@ListPackageVersionAssets' {} a -> s {namespace = a} :: ListPackageVersionAssets)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listPackageVersionAssets_nextToken :: Lens.Lens' ListPackageVersionAssets (Prelude.Maybe Prelude.Text)
+listPackageVersionAssets_nextToken = Lens.lens (\ListPackageVersionAssets' {nextToken} -> nextToken) (\s@ListPackageVersionAssets' {} a -> s {nextToken = a} :: ListPackageVersionAssets)
+
+-- | The name of the domain that contains the repository associated with the
+-- package version assets.
+listPackageVersionAssets_domain :: Lens.Lens' ListPackageVersionAssets Prelude.Text
+listPackageVersionAssets_domain = Lens.lens (\ListPackageVersionAssets' {domain} -> domain) (\s@ListPackageVersionAssets' {} a -> s {domain = a} :: ListPackageVersionAssets)
+
+-- | The name of the repository that contains the package that contains the
+-- requested package version assets.
+listPackageVersionAssets_repository :: Lens.Lens' ListPackageVersionAssets Prelude.Text
+listPackageVersionAssets_repository = Lens.lens (\ListPackageVersionAssets' {repository} -> repository) (\s@ListPackageVersionAssets' {} a -> s {repository = a} :: ListPackageVersionAssets)
+
+-- | The format of the package that contains the requested package version
+-- assets.
+listPackageVersionAssets_format :: Lens.Lens' ListPackageVersionAssets PackageFormat
+listPackageVersionAssets_format = Lens.lens (\ListPackageVersionAssets' {format} -> format) (\s@ListPackageVersionAssets' {} a -> s {format = a} :: ListPackageVersionAssets)
+
+-- | The name of the package that contains the requested package version
+-- assets.
+listPackageVersionAssets_package :: Lens.Lens' ListPackageVersionAssets Prelude.Text
+listPackageVersionAssets_package = Lens.lens (\ListPackageVersionAssets' {package} -> package) (\s@ListPackageVersionAssets' {} a -> s {package = a} :: ListPackageVersionAssets)
+
+-- | A string that contains the package version (for example, @3.5.2@).
+listPackageVersionAssets_packageVersion :: Lens.Lens' ListPackageVersionAssets Prelude.Text
+listPackageVersionAssets_packageVersion = Lens.lens (\ListPackageVersionAssets' {packageVersion} -> packageVersion) (\s@ListPackageVersionAssets' {} a -> s {packageVersion = a} :: ListPackageVersionAssets)
+
+instance Core.AWSPager ListPackageVersionAssets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPackageVersionAssetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPackageVersionAssetsResponse_assets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPackageVersionAssets_nextToken
+          Lens..~ rs
+          Lens.^? listPackageVersionAssetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPackageVersionAssets where
+  type
+    AWSResponse ListPackageVersionAssets =
+      ListPackageVersionAssetsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPackageVersionAssetsResponse'
+            Prelude.<$> (x Data..?> "assets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "format")
+            Prelude.<*> (x Data..?> "namespace")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "package")
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "versionRevision")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPackageVersionAssets where
+  hashWithSalt _salt ListPackageVersionAssets' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` packageVersion
+
+instance Prelude.NFData ListPackageVersionAssets where
+  rnf ListPackageVersionAssets' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf packageVersion
+
+instance Data.ToHeaders ListPackageVersionAssets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPackageVersionAssets where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListPackageVersionAssets where
+  toPath = Prelude.const "/v1/package/version/assets"
+
+instance Data.ToQuery ListPackageVersionAssets where
+  toQuery ListPackageVersionAssets' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "max-results" Data.=: maxResults,
+        "namespace" Data.=: namespace,
+        "next-token" Data.=: nextToken,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package,
+        "version" Data.=: packageVersion
+      ]
+
+-- | /See:/ 'newListPackageVersionAssetsResponse' smart constructor.
+data ListPackageVersionAssetsResponse = ListPackageVersionAssetsResponse'
+  { -- | The returned list of
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_AssetSummary.html AssetSummary>
+    -- objects.
+    assets :: Prelude.Maybe [AssetSummary],
+    -- | The format of the package that contains the requested package version
+    -- assets.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The namespace of the package version that contains the requested package
+    -- version assets. The package version component that specifies its
+    -- namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the package that contains the requested package version
+    -- assets.
+    package :: Prelude.Maybe Prelude.Text,
+    -- | The version of the package associated with the requested assets.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The current revision associated with the package version.
+    versionRevision :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackageVersionAssetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assets', 'listPackageVersionAssetsResponse_assets' - The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_AssetSummary.html AssetSummary>
+-- objects.
+--
+-- 'format', 'listPackageVersionAssetsResponse_format' - The format of the package that contains the requested package version
+-- assets.
+--
+-- 'namespace', 'listPackageVersionAssetsResponse_namespace' - The namespace of the package version that contains the requested package
+-- version assets. The package version component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'nextToken', 'listPackageVersionAssetsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'package', 'listPackageVersionAssetsResponse_package' - The name of the package that contains the requested package version
+-- assets.
+--
+-- 'version', 'listPackageVersionAssetsResponse_version' - The version of the package associated with the requested assets.
+--
+-- 'versionRevision', 'listPackageVersionAssetsResponse_versionRevision' - The current revision associated with the package version.
+--
+-- 'httpStatus', 'listPackageVersionAssetsResponse_httpStatus' - The response's http status code.
+newListPackageVersionAssetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPackageVersionAssetsResponse
+newListPackageVersionAssetsResponse pHttpStatus_ =
+  ListPackageVersionAssetsResponse'
+    { assets =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      package = Prelude.Nothing,
+      version = Prelude.Nothing,
+      versionRevision = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_AssetSummary.html AssetSummary>
+-- objects.
+listPackageVersionAssetsResponse_assets :: Lens.Lens' ListPackageVersionAssetsResponse (Prelude.Maybe [AssetSummary])
+listPackageVersionAssetsResponse_assets = Lens.lens (\ListPackageVersionAssetsResponse' {assets} -> assets) (\s@ListPackageVersionAssetsResponse' {} a -> s {assets = a} :: ListPackageVersionAssetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The format of the package that contains the requested package version
+-- assets.
+listPackageVersionAssetsResponse_format :: Lens.Lens' ListPackageVersionAssetsResponse (Prelude.Maybe PackageFormat)
+listPackageVersionAssetsResponse_format = Lens.lens (\ListPackageVersionAssetsResponse' {format} -> format) (\s@ListPackageVersionAssetsResponse' {} a -> s {format = a} :: ListPackageVersionAssetsResponse)
+
+-- | The namespace of the package version that contains the requested package
+-- version assets. The package version component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+listPackageVersionAssetsResponse_namespace :: Lens.Lens' ListPackageVersionAssetsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionAssetsResponse_namespace = Lens.lens (\ListPackageVersionAssetsResponse' {namespace} -> namespace) (\s@ListPackageVersionAssetsResponse' {} a -> s {namespace = a} :: ListPackageVersionAssetsResponse)
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listPackageVersionAssetsResponse_nextToken :: Lens.Lens' ListPackageVersionAssetsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionAssetsResponse_nextToken = Lens.lens (\ListPackageVersionAssetsResponse' {nextToken} -> nextToken) (\s@ListPackageVersionAssetsResponse' {} a -> s {nextToken = a} :: ListPackageVersionAssetsResponse)
+
+-- | The name of the package that contains the requested package version
+-- assets.
+listPackageVersionAssetsResponse_package :: Lens.Lens' ListPackageVersionAssetsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionAssetsResponse_package = Lens.lens (\ListPackageVersionAssetsResponse' {package} -> package) (\s@ListPackageVersionAssetsResponse' {} a -> s {package = a} :: ListPackageVersionAssetsResponse)
+
+-- | The version of the package associated with the requested assets.
+listPackageVersionAssetsResponse_version :: Lens.Lens' ListPackageVersionAssetsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionAssetsResponse_version = Lens.lens (\ListPackageVersionAssetsResponse' {version} -> version) (\s@ListPackageVersionAssetsResponse' {} a -> s {version = a} :: ListPackageVersionAssetsResponse)
+
+-- | The current revision associated with the package version.
+listPackageVersionAssetsResponse_versionRevision :: Lens.Lens' ListPackageVersionAssetsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionAssetsResponse_versionRevision = Lens.lens (\ListPackageVersionAssetsResponse' {versionRevision} -> versionRevision) (\s@ListPackageVersionAssetsResponse' {} a -> s {versionRevision = a} :: ListPackageVersionAssetsResponse)
+
+-- | The response's http status code.
+listPackageVersionAssetsResponse_httpStatus :: Lens.Lens' ListPackageVersionAssetsResponse Prelude.Int
+listPackageVersionAssetsResponse_httpStatus = Lens.lens (\ListPackageVersionAssetsResponse' {httpStatus} -> httpStatus) (\s@ListPackageVersionAssetsResponse' {} a -> s {httpStatus = a} :: ListPackageVersionAssetsResponse)
+
+instance
+  Prelude.NFData
+    ListPackageVersionAssetsResponse
+  where
+  rnf ListPackageVersionAssetsResponse' {..} =
+    Prelude.rnf assets
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf versionRevision
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/ListPackageVersionDependencies.hs b/gen/Amazonka/CodeArtifact/ListPackageVersionDependencies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListPackageVersionDependencies.hs
@@ -0,0 +1,460 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListPackageVersionDependencies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the direct dependencies for a package version. The dependencies
+-- are returned as
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDependency.html PackageDependency>
+-- objects. CodeArtifact extracts the dependencies for a package version
+-- from the metadata file for the package format (for example, the
+-- @package.json@ file for npm packages and the @pom.xml@ file for Maven).
+-- Any package version dependencies that are not listed in the
+-- configuration file are not returned.
+module Amazonka.CodeArtifact.ListPackageVersionDependencies
+  ( -- * Creating a Request
+    ListPackageVersionDependencies (..),
+    newListPackageVersionDependencies,
+
+    -- * Request Lenses
+    listPackageVersionDependencies_domainOwner,
+    listPackageVersionDependencies_namespace,
+    listPackageVersionDependencies_nextToken,
+    listPackageVersionDependencies_domain,
+    listPackageVersionDependencies_repository,
+    listPackageVersionDependencies_format,
+    listPackageVersionDependencies_package,
+    listPackageVersionDependencies_packageVersion,
+
+    -- * Destructuring the Response
+    ListPackageVersionDependenciesResponse (..),
+    newListPackageVersionDependenciesResponse,
+
+    -- * Response Lenses
+    listPackageVersionDependenciesResponse_dependencies,
+    listPackageVersionDependenciesResponse_format,
+    listPackageVersionDependenciesResponse_namespace,
+    listPackageVersionDependenciesResponse_nextToken,
+    listPackageVersionDependenciesResponse_package,
+    listPackageVersionDependenciesResponse_version,
+    listPackageVersionDependenciesResponse_versionRevision,
+    listPackageVersionDependenciesResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPackageVersionDependencies' smart constructor.
+data ListPackageVersionDependencies = ListPackageVersionDependencies'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the package version with the requested dependencies.
+    -- The package version component that specifies its namespace depends on
+    -- its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository that contains the
+    -- requested package version dependencies.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the requested package version.
+    repository :: Prelude.Text,
+    -- | The format of the package with the requested dependencies.
+    format :: PackageFormat,
+    -- | The name of the package versions\' package.
+    package :: Prelude.Text,
+    -- | A string that contains the package version (for example, @3.5.2@).
+    packageVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackageVersionDependencies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'listPackageVersionDependencies_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'namespace', 'listPackageVersionDependencies_namespace' - The namespace of the package version with the requested dependencies.
+-- The package version component that specifies its namespace depends on
+-- its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'nextToken', 'listPackageVersionDependencies_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'domain', 'listPackageVersionDependencies_domain' - The name of the domain that contains the repository that contains the
+-- requested package version dependencies.
+--
+-- 'repository', 'listPackageVersionDependencies_repository' - The name of the repository that contains the requested package version.
+--
+-- 'format', 'listPackageVersionDependencies_format' - The format of the package with the requested dependencies.
+--
+-- 'package', 'listPackageVersionDependencies_package' - The name of the package versions\' package.
+--
+-- 'packageVersion', 'listPackageVersionDependencies_packageVersion' - A string that contains the package version (for example, @3.5.2@).
+newListPackageVersionDependencies ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  -- | 'packageVersion'
+  Prelude.Text ->
+  ListPackageVersionDependencies
+newListPackageVersionDependencies
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_
+  pPackageVersion_ =
+    ListPackageVersionDependencies'
+      { domainOwner =
+          Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        packageVersion = pPackageVersion_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+listPackageVersionDependencies_domainOwner :: Lens.Lens' ListPackageVersionDependencies (Prelude.Maybe Prelude.Text)
+listPackageVersionDependencies_domainOwner = Lens.lens (\ListPackageVersionDependencies' {domainOwner} -> domainOwner) (\s@ListPackageVersionDependencies' {} a -> s {domainOwner = a} :: ListPackageVersionDependencies)
+
+-- | The namespace of the package version with the requested dependencies.
+-- The package version component that specifies its namespace depends on
+-- its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+listPackageVersionDependencies_namespace :: Lens.Lens' ListPackageVersionDependencies (Prelude.Maybe Prelude.Text)
+listPackageVersionDependencies_namespace = Lens.lens (\ListPackageVersionDependencies' {namespace} -> namespace) (\s@ListPackageVersionDependencies' {} a -> s {namespace = a} :: ListPackageVersionDependencies)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listPackageVersionDependencies_nextToken :: Lens.Lens' ListPackageVersionDependencies (Prelude.Maybe Prelude.Text)
+listPackageVersionDependencies_nextToken = Lens.lens (\ListPackageVersionDependencies' {nextToken} -> nextToken) (\s@ListPackageVersionDependencies' {} a -> s {nextToken = a} :: ListPackageVersionDependencies)
+
+-- | The name of the domain that contains the repository that contains the
+-- requested package version dependencies.
+listPackageVersionDependencies_domain :: Lens.Lens' ListPackageVersionDependencies Prelude.Text
+listPackageVersionDependencies_domain = Lens.lens (\ListPackageVersionDependencies' {domain} -> domain) (\s@ListPackageVersionDependencies' {} a -> s {domain = a} :: ListPackageVersionDependencies)
+
+-- | The name of the repository that contains the requested package version.
+listPackageVersionDependencies_repository :: Lens.Lens' ListPackageVersionDependencies Prelude.Text
+listPackageVersionDependencies_repository = Lens.lens (\ListPackageVersionDependencies' {repository} -> repository) (\s@ListPackageVersionDependencies' {} a -> s {repository = a} :: ListPackageVersionDependencies)
+
+-- | The format of the package with the requested dependencies.
+listPackageVersionDependencies_format :: Lens.Lens' ListPackageVersionDependencies PackageFormat
+listPackageVersionDependencies_format = Lens.lens (\ListPackageVersionDependencies' {format} -> format) (\s@ListPackageVersionDependencies' {} a -> s {format = a} :: ListPackageVersionDependencies)
+
+-- | The name of the package versions\' package.
+listPackageVersionDependencies_package :: Lens.Lens' ListPackageVersionDependencies Prelude.Text
+listPackageVersionDependencies_package = Lens.lens (\ListPackageVersionDependencies' {package} -> package) (\s@ListPackageVersionDependencies' {} a -> s {package = a} :: ListPackageVersionDependencies)
+
+-- | A string that contains the package version (for example, @3.5.2@).
+listPackageVersionDependencies_packageVersion :: Lens.Lens' ListPackageVersionDependencies Prelude.Text
+listPackageVersionDependencies_packageVersion = Lens.lens (\ListPackageVersionDependencies' {packageVersion} -> packageVersion) (\s@ListPackageVersionDependencies' {} a -> s {packageVersion = a} :: ListPackageVersionDependencies)
+
+instance
+  Core.AWSRequest
+    ListPackageVersionDependencies
+  where
+  type
+    AWSResponse ListPackageVersionDependencies =
+      ListPackageVersionDependenciesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPackageVersionDependenciesResponse'
+            Prelude.<$> (x Data..?> "dependencies" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "format")
+            Prelude.<*> (x Data..?> "namespace")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "package")
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "versionRevision")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListPackageVersionDependencies
+  where
+  hashWithSalt
+    _salt
+    ListPackageVersionDependencies' {..} =
+      _salt
+        `Prelude.hashWithSalt` domainOwner
+        `Prelude.hashWithSalt` namespace
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` domain
+        `Prelude.hashWithSalt` repository
+        `Prelude.hashWithSalt` format
+        `Prelude.hashWithSalt` package
+        `Prelude.hashWithSalt` packageVersion
+
+instance
+  Prelude.NFData
+    ListPackageVersionDependencies
+  where
+  rnf ListPackageVersionDependencies' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf packageVersion
+
+instance
+  Data.ToHeaders
+    ListPackageVersionDependencies
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPackageVersionDependencies where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListPackageVersionDependencies where
+  toPath =
+    Prelude.const "/v1/package/version/dependencies"
+
+instance Data.ToQuery ListPackageVersionDependencies where
+  toQuery ListPackageVersionDependencies' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "next-token" Data.=: nextToken,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package,
+        "version" Data.=: packageVersion
+      ]
+
+-- | /See:/ 'newListPackageVersionDependenciesResponse' smart constructor.
+data ListPackageVersionDependenciesResponse = ListPackageVersionDependenciesResponse'
+  { -- | The returned list of
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDependency.html PackageDependency>
+    -- objects.
+    dependencies :: Prelude.Maybe [PackageDependency],
+    -- | A format that specifies the type of the package that contains the
+    -- returned dependencies.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The namespace of the package version that contains the returned
+    -- dependencies. The package version component that specifies its namespace
+    -- depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the package that contains the returned package versions
+    -- dependencies.
+    package :: Prelude.Maybe Prelude.Text,
+    -- | The version of the package that is specified in the request.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The current revision associated with the package version.
+    versionRevision :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackageVersionDependenciesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dependencies', 'listPackageVersionDependenciesResponse_dependencies' - The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDependency.html PackageDependency>
+-- objects.
+--
+-- 'format', 'listPackageVersionDependenciesResponse_format' - A format that specifies the type of the package that contains the
+-- returned dependencies.
+--
+-- 'namespace', 'listPackageVersionDependenciesResponse_namespace' - The namespace of the package version that contains the returned
+-- dependencies. The package version component that specifies its namespace
+-- depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'nextToken', 'listPackageVersionDependenciesResponse_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'package', 'listPackageVersionDependenciesResponse_package' - The name of the package that contains the returned package versions
+-- dependencies.
+--
+-- 'version', 'listPackageVersionDependenciesResponse_version' - The version of the package that is specified in the request.
+--
+-- 'versionRevision', 'listPackageVersionDependenciesResponse_versionRevision' - The current revision associated with the package version.
+--
+-- 'httpStatus', 'listPackageVersionDependenciesResponse_httpStatus' - The response's http status code.
+newListPackageVersionDependenciesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPackageVersionDependenciesResponse
+newListPackageVersionDependenciesResponse
+  pHttpStatus_ =
+    ListPackageVersionDependenciesResponse'
+      { dependencies =
+          Prelude.Nothing,
+        format = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        package = Prelude.Nothing,
+        version = Prelude.Nothing,
+        versionRevision = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDependency.html PackageDependency>
+-- objects.
+listPackageVersionDependenciesResponse_dependencies :: Lens.Lens' ListPackageVersionDependenciesResponse (Prelude.Maybe [PackageDependency])
+listPackageVersionDependenciesResponse_dependencies = Lens.lens (\ListPackageVersionDependenciesResponse' {dependencies} -> dependencies) (\s@ListPackageVersionDependenciesResponse' {} a -> s {dependencies = a} :: ListPackageVersionDependenciesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A format that specifies the type of the package that contains the
+-- returned dependencies.
+listPackageVersionDependenciesResponse_format :: Lens.Lens' ListPackageVersionDependenciesResponse (Prelude.Maybe PackageFormat)
+listPackageVersionDependenciesResponse_format = Lens.lens (\ListPackageVersionDependenciesResponse' {format} -> format) (\s@ListPackageVersionDependenciesResponse' {} a -> s {format = a} :: ListPackageVersionDependenciesResponse)
+
+-- | The namespace of the package version that contains the returned
+-- dependencies. The package version component that specifies its namespace
+-- depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+listPackageVersionDependenciesResponse_namespace :: Lens.Lens' ListPackageVersionDependenciesResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionDependenciesResponse_namespace = Lens.lens (\ListPackageVersionDependenciesResponse' {namespace} -> namespace) (\s@ListPackageVersionDependenciesResponse' {} a -> s {namespace = a} :: ListPackageVersionDependenciesResponse)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listPackageVersionDependenciesResponse_nextToken :: Lens.Lens' ListPackageVersionDependenciesResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionDependenciesResponse_nextToken = Lens.lens (\ListPackageVersionDependenciesResponse' {nextToken} -> nextToken) (\s@ListPackageVersionDependenciesResponse' {} a -> s {nextToken = a} :: ListPackageVersionDependenciesResponse)
+
+-- | The name of the package that contains the returned package versions
+-- dependencies.
+listPackageVersionDependenciesResponse_package :: Lens.Lens' ListPackageVersionDependenciesResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionDependenciesResponse_package = Lens.lens (\ListPackageVersionDependenciesResponse' {package} -> package) (\s@ListPackageVersionDependenciesResponse' {} a -> s {package = a} :: ListPackageVersionDependenciesResponse)
+
+-- | The version of the package that is specified in the request.
+listPackageVersionDependenciesResponse_version :: Lens.Lens' ListPackageVersionDependenciesResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionDependenciesResponse_version = Lens.lens (\ListPackageVersionDependenciesResponse' {version} -> version) (\s@ListPackageVersionDependenciesResponse' {} a -> s {version = a} :: ListPackageVersionDependenciesResponse)
+
+-- | The current revision associated with the package version.
+listPackageVersionDependenciesResponse_versionRevision :: Lens.Lens' ListPackageVersionDependenciesResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionDependenciesResponse_versionRevision = Lens.lens (\ListPackageVersionDependenciesResponse' {versionRevision} -> versionRevision) (\s@ListPackageVersionDependenciesResponse' {} a -> s {versionRevision = a} :: ListPackageVersionDependenciesResponse)
+
+-- | The response's http status code.
+listPackageVersionDependenciesResponse_httpStatus :: Lens.Lens' ListPackageVersionDependenciesResponse Prelude.Int
+listPackageVersionDependenciesResponse_httpStatus = Lens.lens (\ListPackageVersionDependenciesResponse' {httpStatus} -> httpStatus) (\s@ListPackageVersionDependenciesResponse' {} a -> s {httpStatus = a} :: ListPackageVersionDependenciesResponse)
+
+instance
+  Prelude.NFData
+    ListPackageVersionDependenciesResponse
+  where
+  rnf ListPackageVersionDependenciesResponse' {..} =
+    Prelude.rnf dependencies
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf versionRevision
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/ListPackageVersions.hs b/gen/Amazonka/CodeArtifact/ListPackageVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListPackageVersions.hs
@@ -0,0 +1,496 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListPackageVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionSummary.html PackageVersionSummary>
+-- objects for package versions in a repository that match the request
+-- parameters.
+--
+-- This operation returns paginated results.
+module Amazonka.CodeArtifact.ListPackageVersions
+  ( -- * Creating a Request
+    ListPackageVersions (..),
+    newListPackageVersions,
+
+    -- * Request Lenses
+    listPackageVersions_domainOwner,
+    listPackageVersions_maxResults,
+    listPackageVersions_namespace,
+    listPackageVersions_nextToken,
+    listPackageVersions_originType,
+    listPackageVersions_sortBy,
+    listPackageVersions_status,
+    listPackageVersions_domain,
+    listPackageVersions_repository,
+    listPackageVersions_format,
+    listPackageVersions_package,
+
+    -- * Destructuring the Response
+    ListPackageVersionsResponse (..),
+    newListPackageVersionsResponse,
+
+    -- * Response Lenses
+    listPackageVersionsResponse_defaultDisplayVersion,
+    listPackageVersionsResponse_format,
+    listPackageVersionsResponse_namespace,
+    listPackageVersionsResponse_nextToken,
+    listPackageVersionsResponse_package,
+    listPackageVersionsResponse_versions,
+    listPackageVersionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPackageVersions' smart constructor.
+data ListPackageVersions = ListPackageVersions'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The namespace of the package that contains the requested package
+    -- versions. The package component that specifies its namespace depends on
+    -- its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The @originType@ used to filter package versions. Only package versions
+    -- with the provided @originType@ will be returned.
+    originType :: Prelude.Maybe PackageVersionOriginType,
+    -- | How to sort the requested list of package versions.
+    sortBy :: Prelude.Maybe PackageVersionSortType,
+    -- | A string that filters the requested package versions by status.
+    status :: Prelude.Maybe PackageVersionStatus,
+    -- | The name of the domain that contains the repository that contains the
+    -- requested package versions.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the requested package versions.
+    repository :: Prelude.Text,
+    -- | The format of the returned package versions.
+    format :: PackageFormat,
+    -- | The name of the package for which you want to request package versions.
+    package :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackageVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'listPackageVersions_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'maxResults', 'listPackageVersions_maxResults' - The maximum number of results to return per page.
+--
+-- 'namespace', 'listPackageVersions_namespace' - The namespace of the package that contains the requested package
+-- versions. The package component that specifies its namespace depends on
+-- its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'nextToken', 'listPackageVersions_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'originType', 'listPackageVersions_originType' - The @originType@ used to filter package versions. Only package versions
+-- with the provided @originType@ will be returned.
+--
+-- 'sortBy', 'listPackageVersions_sortBy' - How to sort the requested list of package versions.
+--
+-- 'status', 'listPackageVersions_status' - A string that filters the requested package versions by status.
+--
+-- 'domain', 'listPackageVersions_domain' - The name of the domain that contains the repository that contains the
+-- requested package versions.
+--
+-- 'repository', 'listPackageVersions_repository' - The name of the repository that contains the requested package versions.
+--
+-- 'format', 'listPackageVersions_format' - The format of the returned package versions.
+--
+-- 'package', 'listPackageVersions_package' - The name of the package for which you want to request package versions.
+newListPackageVersions ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  ListPackageVersions
+newListPackageVersions
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_ =
+    ListPackageVersions'
+      { domainOwner = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        originType = Prelude.Nothing,
+        sortBy = Prelude.Nothing,
+        status = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+listPackageVersions_domainOwner :: Lens.Lens' ListPackageVersions (Prelude.Maybe Prelude.Text)
+listPackageVersions_domainOwner = Lens.lens (\ListPackageVersions' {domainOwner} -> domainOwner) (\s@ListPackageVersions' {} a -> s {domainOwner = a} :: ListPackageVersions)
+
+-- | The maximum number of results to return per page.
+listPackageVersions_maxResults :: Lens.Lens' ListPackageVersions (Prelude.Maybe Prelude.Natural)
+listPackageVersions_maxResults = Lens.lens (\ListPackageVersions' {maxResults} -> maxResults) (\s@ListPackageVersions' {} a -> s {maxResults = a} :: ListPackageVersions)
+
+-- | The namespace of the package that contains the requested package
+-- versions. The package component that specifies its namespace depends on
+-- its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+listPackageVersions_namespace :: Lens.Lens' ListPackageVersions (Prelude.Maybe Prelude.Text)
+listPackageVersions_namespace = Lens.lens (\ListPackageVersions' {namespace} -> namespace) (\s@ListPackageVersions' {} a -> s {namespace = a} :: ListPackageVersions)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listPackageVersions_nextToken :: Lens.Lens' ListPackageVersions (Prelude.Maybe Prelude.Text)
+listPackageVersions_nextToken = Lens.lens (\ListPackageVersions' {nextToken} -> nextToken) (\s@ListPackageVersions' {} a -> s {nextToken = a} :: ListPackageVersions)
+
+-- | The @originType@ used to filter package versions. Only package versions
+-- with the provided @originType@ will be returned.
+listPackageVersions_originType :: Lens.Lens' ListPackageVersions (Prelude.Maybe PackageVersionOriginType)
+listPackageVersions_originType = Lens.lens (\ListPackageVersions' {originType} -> originType) (\s@ListPackageVersions' {} a -> s {originType = a} :: ListPackageVersions)
+
+-- | How to sort the requested list of package versions.
+listPackageVersions_sortBy :: Lens.Lens' ListPackageVersions (Prelude.Maybe PackageVersionSortType)
+listPackageVersions_sortBy = Lens.lens (\ListPackageVersions' {sortBy} -> sortBy) (\s@ListPackageVersions' {} a -> s {sortBy = a} :: ListPackageVersions)
+
+-- | A string that filters the requested package versions by status.
+listPackageVersions_status :: Lens.Lens' ListPackageVersions (Prelude.Maybe PackageVersionStatus)
+listPackageVersions_status = Lens.lens (\ListPackageVersions' {status} -> status) (\s@ListPackageVersions' {} a -> s {status = a} :: ListPackageVersions)
+
+-- | The name of the domain that contains the repository that contains the
+-- requested package versions.
+listPackageVersions_domain :: Lens.Lens' ListPackageVersions Prelude.Text
+listPackageVersions_domain = Lens.lens (\ListPackageVersions' {domain} -> domain) (\s@ListPackageVersions' {} a -> s {domain = a} :: ListPackageVersions)
+
+-- | The name of the repository that contains the requested package versions.
+listPackageVersions_repository :: Lens.Lens' ListPackageVersions Prelude.Text
+listPackageVersions_repository = Lens.lens (\ListPackageVersions' {repository} -> repository) (\s@ListPackageVersions' {} a -> s {repository = a} :: ListPackageVersions)
+
+-- | The format of the returned package versions.
+listPackageVersions_format :: Lens.Lens' ListPackageVersions PackageFormat
+listPackageVersions_format = Lens.lens (\ListPackageVersions' {format} -> format) (\s@ListPackageVersions' {} a -> s {format = a} :: ListPackageVersions)
+
+-- | The name of the package for which you want to request package versions.
+listPackageVersions_package :: Lens.Lens' ListPackageVersions Prelude.Text
+listPackageVersions_package = Lens.lens (\ListPackageVersions' {package} -> package) (\s@ListPackageVersions' {} a -> s {package = a} :: ListPackageVersions)
+
+instance Core.AWSPager ListPackageVersions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPackageVersionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPackageVersionsResponse_versions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPackageVersions_nextToken
+          Lens..~ rs
+          Lens.^? listPackageVersionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPackageVersions where
+  type
+    AWSResponse ListPackageVersions =
+      ListPackageVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPackageVersionsResponse'
+            Prelude.<$> (x Data..?> "defaultDisplayVersion")
+            Prelude.<*> (x Data..?> "format")
+            Prelude.<*> (x Data..?> "namespace")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "package")
+            Prelude.<*> (x Data..?> "versions" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPackageVersions where
+  hashWithSalt _salt ListPackageVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` originType
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+
+instance Prelude.NFData ListPackageVersions where
+  rnf ListPackageVersions' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf originType
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+
+instance Data.ToHeaders ListPackageVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPackageVersions where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListPackageVersions where
+  toPath = Prelude.const "/v1/package/versions"
+
+instance Data.ToQuery ListPackageVersions where
+  toQuery ListPackageVersions' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "max-results" Data.=: maxResults,
+        "namespace" Data.=: namespace,
+        "next-token" Data.=: nextToken,
+        "originType" Data.=: originType,
+        "sortBy" Data.=: sortBy,
+        "status" Data.=: status,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package
+      ]
+
+-- | /See:/ 'newListPackageVersionsResponse' smart constructor.
+data ListPackageVersionsResponse = ListPackageVersionsResponse'
+  { -- | The default package version to display. This depends on the package
+    -- format:
+    --
+    -- -   For Maven and PyPI packages, it\'s the most recently published
+    --     package version.
+    --
+    -- -   For npm packages, it\'s the version referenced by the @latest@ tag.
+    --     If the @latest@ tag is not set, it\'s the most recently published
+    --     package version.
+    defaultDisplayVersion :: Prelude.Maybe Prelude.Text,
+    -- | A format of the package.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The namespace of the package that contains the requested package
+    -- versions. The package component that specifies its namespace depends on
+    -- its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the package.
+    package :: Prelude.Maybe Prelude.Text,
+    -- | The returned list of
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionSummary.html PackageVersionSummary>
+    -- objects.
+    versions :: Prelude.Maybe [PackageVersionSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackageVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultDisplayVersion', 'listPackageVersionsResponse_defaultDisplayVersion' - The default package version to display. This depends on the package
+-- format:
+--
+-- -   For Maven and PyPI packages, it\'s the most recently published
+--     package version.
+--
+-- -   For npm packages, it\'s the version referenced by the @latest@ tag.
+--     If the @latest@ tag is not set, it\'s the most recently published
+--     package version.
+--
+-- 'format', 'listPackageVersionsResponse_format' - A format of the package.
+--
+-- 'namespace', 'listPackageVersionsResponse_namespace' - The namespace of the package that contains the requested package
+-- versions. The package component that specifies its namespace depends on
+-- its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'nextToken', 'listPackageVersionsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'package', 'listPackageVersionsResponse_package' - The name of the package.
+--
+-- 'versions', 'listPackageVersionsResponse_versions' - The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionSummary.html PackageVersionSummary>
+-- objects.
+--
+-- 'httpStatus', 'listPackageVersionsResponse_httpStatus' - The response's http status code.
+newListPackageVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPackageVersionsResponse
+newListPackageVersionsResponse pHttpStatus_ =
+  ListPackageVersionsResponse'
+    { defaultDisplayVersion =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      package = Prelude.Nothing,
+      versions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The default package version to display. This depends on the package
+-- format:
+--
+-- -   For Maven and PyPI packages, it\'s the most recently published
+--     package version.
+--
+-- -   For npm packages, it\'s the version referenced by the @latest@ tag.
+--     If the @latest@ tag is not set, it\'s the most recently published
+--     package version.
+listPackageVersionsResponse_defaultDisplayVersion :: Lens.Lens' ListPackageVersionsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionsResponse_defaultDisplayVersion = Lens.lens (\ListPackageVersionsResponse' {defaultDisplayVersion} -> defaultDisplayVersion) (\s@ListPackageVersionsResponse' {} a -> s {defaultDisplayVersion = a} :: ListPackageVersionsResponse)
+
+-- | A format of the package.
+listPackageVersionsResponse_format :: Lens.Lens' ListPackageVersionsResponse (Prelude.Maybe PackageFormat)
+listPackageVersionsResponse_format = Lens.lens (\ListPackageVersionsResponse' {format} -> format) (\s@ListPackageVersionsResponse' {} a -> s {format = a} :: ListPackageVersionsResponse)
+
+-- | The namespace of the package that contains the requested package
+-- versions. The package component that specifies its namespace depends on
+-- its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+listPackageVersionsResponse_namespace :: Lens.Lens' ListPackageVersionsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionsResponse_namespace = Lens.lens (\ListPackageVersionsResponse' {namespace} -> namespace) (\s@ListPackageVersionsResponse' {} a -> s {namespace = a} :: ListPackageVersionsResponse)
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listPackageVersionsResponse_nextToken :: Lens.Lens' ListPackageVersionsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionsResponse_nextToken = Lens.lens (\ListPackageVersionsResponse' {nextToken} -> nextToken) (\s@ListPackageVersionsResponse' {} a -> s {nextToken = a} :: ListPackageVersionsResponse)
+
+-- | The name of the package.
+listPackageVersionsResponse_package :: Lens.Lens' ListPackageVersionsResponse (Prelude.Maybe Prelude.Text)
+listPackageVersionsResponse_package = Lens.lens (\ListPackageVersionsResponse' {package} -> package) (\s@ListPackageVersionsResponse' {} a -> s {package = a} :: ListPackageVersionsResponse)
+
+-- | The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionSummary.html PackageVersionSummary>
+-- objects.
+listPackageVersionsResponse_versions :: Lens.Lens' ListPackageVersionsResponse (Prelude.Maybe [PackageVersionSummary])
+listPackageVersionsResponse_versions = Lens.lens (\ListPackageVersionsResponse' {versions} -> versions) (\s@ListPackageVersionsResponse' {} a -> s {versions = a} :: ListPackageVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPackageVersionsResponse_httpStatus :: Lens.Lens' ListPackageVersionsResponse Prelude.Int
+listPackageVersionsResponse_httpStatus = Lens.lens (\ListPackageVersionsResponse' {httpStatus} -> httpStatus) (\s@ListPackageVersionsResponse' {} a -> s {httpStatus = a} :: ListPackageVersionsResponse)
+
+instance Prelude.NFData ListPackageVersionsResponse where
+  rnf ListPackageVersionsResponse' {..} =
+    Prelude.rnf defaultDisplayVersion
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf versions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/ListPackages.hs b/gen/Amazonka/CodeArtifact/ListPackages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListPackages.hs
@@ -0,0 +1,393 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListPackages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageSummary.html PackageSummary>
+-- objects for packages in a repository that match the request parameters.
+--
+-- This operation returns paginated results.
+module Amazonka.CodeArtifact.ListPackages
+  ( -- * Creating a Request
+    ListPackages (..),
+    newListPackages,
+
+    -- * Request Lenses
+    listPackages_domainOwner,
+    listPackages_format,
+    listPackages_maxResults,
+    listPackages_namespace,
+    listPackages_nextToken,
+    listPackages_packagePrefix,
+    listPackages_publish,
+    listPackages_upstream,
+    listPackages_domain,
+    listPackages_repository,
+
+    -- * Destructuring the Response
+    ListPackagesResponse (..),
+    newListPackagesResponse,
+
+    -- * Response Lenses
+    listPackagesResponse_nextToken,
+    listPackagesResponse_packages,
+    listPackagesResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPackages' smart constructor.
+data ListPackages = ListPackages'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The format used to filter requested packages. Only packages from the
+    -- provided format will be returned.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The namespace used to filter requested packages. Only packages with the
+    -- provided namespace will be returned. The package component that
+    -- specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A prefix used to filter requested packages. Only packages with names
+    -- that start with @packagePrefix@ are returned.
+    packagePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The value of the @Publish@ package origin control restriction used to
+    -- filter requested packages. Only packages with the provided restriction
+    -- are returned. For more information, see
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>.
+    publish :: Prelude.Maybe AllowPublish,
+    -- | The value of the @Upstream@ package origin control restriction used to
+    -- filter requested packages. Only packages with the provided restriction
+    -- are returned. For more information, see
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>.
+    upstream :: Prelude.Maybe AllowUpstream,
+    -- | The name of the domain that contains the repository that contains the
+    -- requested packages.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the requested packages.
+    repository :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'listPackages_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'format', 'listPackages_format' - The format used to filter requested packages. Only packages from the
+-- provided format will be returned.
+--
+-- 'maxResults', 'listPackages_maxResults' - The maximum number of results to return per page.
+--
+-- 'namespace', 'listPackages_namespace' - The namespace used to filter requested packages. Only packages with the
+-- provided namespace will be returned. The package component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'nextToken', 'listPackages_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'packagePrefix', 'listPackages_packagePrefix' - A prefix used to filter requested packages. Only packages with names
+-- that start with @packagePrefix@ are returned.
+--
+-- 'publish', 'listPackages_publish' - The value of the @Publish@ package origin control restriction used to
+-- filter requested packages. Only packages with the provided restriction
+-- are returned. For more information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>.
+--
+-- 'upstream', 'listPackages_upstream' - The value of the @Upstream@ package origin control restriction used to
+-- filter requested packages. Only packages with the provided restriction
+-- are returned. For more information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>.
+--
+-- 'domain', 'listPackages_domain' - The name of the domain that contains the repository that contains the
+-- requested packages.
+--
+-- 'repository', 'listPackages_repository' - The name of the repository that contains the requested packages.
+newListPackages ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  ListPackages
+newListPackages pDomain_ pRepository_ =
+  ListPackages'
+    { domainOwner = Prelude.Nothing,
+      format = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      packagePrefix = Prelude.Nothing,
+      publish = Prelude.Nothing,
+      upstream = Prelude.Nothing,
+      domain = pDomain_,
+      repository = pRepository_
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+listPackages_domainOwner :: Lens.Lens' ListPackages (Prelude.Maybe Prelude.Text)
+listPackages_domainOwner = Lens.lens (\ListPackages' {domainOwner} -> domainOwner) (\s@ListPackages' {} a -> s {domainOwner = a} :: ListPackages)
+
+-- | The format used to filter requested packages. Only packages from the
+-- provided format will be returned.
+listPackages_format :: Lens.Lens' ListPackages (Prelude.Maybe PackageFormat)
+listPackages_format = Lens.lens (\ListPackages' {format} -> format) (\s@ListPackages' {} a -> s {format = a} :: ListPackages)
+
+-- | The maximum number of results to return per page.
+listPackages_maxResults :: Lens.Lens' ListPackages (Prelude.Maybe Prelude.Natural)
+listPackages_maxResults = Lens.lens (\ListPackages' {maxResults} -> maxResults) (\s@ListPackages' {} a -> s {maxResults = a} :: ListPackages)
+
+-- | The namespace used to filter requested packages. Only packages with the
+-- provided namespace will be returned. The package component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+listPackages_namespace :: Lens.Lens' ListPackages (Prelude.Maybe Prelude.Text)
+listPackages_namespace = Lens.lens (\ListPackages' {namespace} -> namespace) (\s@ListPackages' {} a -> s {namespace = a} :: ListPackages)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listPackages_nextToken :: Lens.Lens' ListPackages (Prelude.Maybe Prelude.Text)
+listPackages_nextToken = Lens.lens (\ListPackages' {nextToken} -> nextToken) (\s@ListPackages' {} a -> s {nextToken = a} :: ListPackages)
+
+-- | A prefix used to filter requested packages. Only packages with names
+-- that start with @packagePrefix@ are returned.
+listPackages_packagePrefix :: Lens.Lens' ListPackages (Prelude.Maybe Prelude.Text)
+listPackages_packagePrefix = Lens.lens (\ListPackages' {packagePrefix} -> packagePrefix) (\s@ListPackages' {} a -> s {packagePrefix = a} :: ListPackages)
+
+-- | The value of the @Publish@ package origin control restriction used to
+-- filter requested packages. Only packages with the provided restriction
+-- are returned. For more information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>.
+listPackages_publish :: Lens.Lens' ListPackages (Prelude.Maybe AllowPublish)
+listPackages_publish = Lens.lens (\ListPackages' {publish} -> publish) (\s@ListPackages' {} a -> s {publish = a} :: ListPackages)
+
+-- | The value of the @Upstream@ package origin control restriction used to
+-- filter requested packages. Only packages with the provided restriction
+-- are returned. For more information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>.
+listPackages_upstream :: Lens.Lens' ListPackages (Prelude.Maybe AllowUpstream)
+listPackages_upstream = Lens.lens (\ListPackages' {upstream} -> upstream) (\s@ListPackages' {} a -> s {upstream = a} :: ListPackages)
+
+-- | The name of the domain that contains the repository that contains the
+-- requested packages.
+listPackages_domain :: Lens.Lens' ListPackages Prelude.Text
+listPackages_domain = Lens.lens (\ListPackages' {domain} -> domain) (\s@ListPackages' {} a -> s {domain = a} :: ListPackages)
+
+-- | The name of the repository that contains the requested packages.
+listPackages_repository :: Lens.Lens' ListPackages Prelude.Text
+listPackages_repository = Lens.lens (\ListPackages' {repository} -> repository) (\s@ListPackages' {} a -> s {repository = a} :: ListPackages)
+
+instance Core.AWSPager ListPackages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPackagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPackagesResponse_packages
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPackages_nextToken
+          Lens..~ rs
+          Lens.^? listPackagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPackages where
+  type AWSResponse ListPackages = ListPackagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPackagesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "packages" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPackages where
+  hashWithSalt _salt ListPackages' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` packagePrefix
+      `Prelude.hashWithSalt` publish
+      `Prelude.hashWithSalt` upstream
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+
+instance Prelude.NFData ListPackages where
+  rnf ListPackages' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf packagePrefix
+      `Prelude.seq` Prelude.rnf publish
+      `Prelude.seq` Prelude.rnf upstream
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+
+instance Data.ToHeaders ListPackages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPackages where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListPackages where
+  toPath = Prelude.const "/v1/packages"
+
+instance Data.ToQuery ListPackages where
+  toQuery ListPackages' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "format" Data.=: format,
+        "max-results" Data.=: maxResults,
+        "namespace" Data.=: namespace,
+        "next-token" Data.=: nextToken,
+        "package-prefix" Data.=: packagePrefix,
+        "publish" Data.=: publish,
+        "upstream" Data.=: upstream,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newListPackagesResponse' smart constructor.
+data ListPackagesResponse = ListPackagesResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of returned
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageSummary.html PackageSummary>
+    -- objects.
+    packages :: Prelude.Maybe [PackageSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listPackagesResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'packages', 'listPackagesResponse_packages' - The list of returned
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageSummary.html PackageSummary>
+-- objects.
+--
+-- 'httpStatus', 'listPackagesResponse_httpStatus' - The response's http status code.
+newListPackagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPackagesResponse
+newListPackagesResponse pHttpStatus_ =
+  ListPackagesResponse'
+    { nextToken = Prelude.Nothing,
+      packages = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listPackagesResponse_nextToken :: Lens.Lens' ListPackagesResponse (Prelude.Maybe Prelude.Text)
+listPackagesResponse_nextToken = Lens.lens (\ListPackagesResponse' {nextToken} -> nextToken) (\s@ListPackagesResponse' {} a -> s {nextToken = a} :: ListPackagesResponse)
+
+-- | The list of returned
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageSummary.html PackageSummary>
+-- objects.
+listPackagesResponse_packages :: Lens.Lens' ListPackagesResponse (Prelude.Maybe [PackageSummary])
+listPackagesResponse_packages = Lens.lens (\ListPackagesResponse' {packages} -> packages) (\s@ListPackagesResponse' {} a -> s {packages = a} :: ListPackagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPackagesResponse_httpStatus :: Lens.Lens' ListPackagesResponse Prelude.Int
+listPackagesResponse_httpStatus = Lens.lens (\ListPackagesResponse' {httpStatus} -> httpStatus) (\s@ListPackagesResponse' {} a -> s {httpStatus = a} :: ListPackagesResponse)
+
+instance Prelude.NFData ListPackagesResponse where
+  rnf ListPackagesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf packages
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/ListRepositories.hs b/gen/Amazonka/CodeArtifact/ListRepositories.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListRepositories.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListRepositories
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_RepositorySummary.html RepositorySummary>
+-- objects. Each @RepositorySummary@ contains information about a
+-- repository in the specified Amazon Web Services account and that matches
+-- the input parameters.
+--
+-- This operation returns paginated results.
+module Amazonka.CodeArtifact.ListRepositories
+  ( -- * Creating a Request
+    ListRepositories (..),
+    newListRepositories,
+
+    -- * Request Lenses
+    listRepositories_maxResults,
+    listRepositories_nextToken,
+    listRepositories_repositoryPrefix,
+
+    -- * Destructuring the Response
+    ListRepositoriesResponse (..),
+    newListRepositoriesResponse,
+
+    -- * Response Lenses
+    listRepositoriesResponse_nextToken,
+    listRepositoriesResponse_repositories,
+    listRepositoriesResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRepositories' smart constructor.
+data ListRepositories = ListRepositories'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A prefix used to filter returned repositories. Only repositories with
+    -- names that start with @repositoryPrefix@ are returned.
+    repositoryPrefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRepositories' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listRepositories_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listRepositories_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'repositoryPrefix', 'listRepositories_repositoryPrefix' - A prefix used to filter returned repositories. Only repositories with
+-- names that start with @repositoryPrefix@ are returned.
+newListRepositories ::
+  ListRepositories
+newListRepositories =
+  ListRepositories'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      repositoryPrefix = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per page.
+listRepositories_maxResults :: Lens.Lens' ListRepositories (Prelude.Maybe Prelude.Natural)
+listRepositories_maxResults = Lens.lens (\ListRepositories' {maxResults} -> maxResults) (\s@ListRepositories' {} a -> s {maxResults = a} :: ListRepositories)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listRepositories_nextToken :: Lens.Lens' ListRepositories (Prelude.Maybe Prelude.Text)
+listRepositories_nextToken = Lens.lens (\ListRepositories' {nextToken} -> nextToken) (\s@ListRepositories' {} a -> s {nextToken = a} :: ListRepositories)
+
+-- | A prefix used to filter returned repositories. Only repositories with
+-- names that start with @repositoryPrefix@ are returned.
+listRepositories_repositoryPrefix :: Lens.Lens' ListRepositories (Prelude.Maybe Prelude.Text)
+listRepositories_repositoryPrefix = Lens.lens (\ListRepositories' {repositoryPrefix} -> repositoryPrefix) (\s@ListRepositories' {} a -> s {repositoryPrefix = a} :: ListRepositories)
+
+instance Core.AWSPager ListRepositories where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRepositoriesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listRepositoriesResponse_repositories
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRepositories_nextToken
+          Lens..~ rs
+          Lens.^? listRepositoriesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRepositories where
+  type
+    AWSResponse ListRepositories =
+      ListRepositoriesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRepositoriesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "repositories" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRepositories where
+  hashWithSalt _salt ListRepositories' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` repositoryPrefix
+
+instance Prelude.NFData ListRepositories where
+  rnf ListRepositories' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf repositoryPrefix
+
+instance Data.ToHeaders ListRepositories where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRepositories where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListRepositories where
+  toPath = Prelude.const "/v1/repositories"
+
+instance Data.ToQuery ListRepositories where
+  toQuery ListRepositories' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken,
+        "repository-prefix" Data.=: repositoryPrefix
+      ]
+
+-- | /See:/ 'newListRepositoriesResponse' smart constructor.
+data ListRepositoriesResponse = ListRepositoriesResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The returned list of
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_RepositorySummary.html RepositorySummary>
+    -- objects.
+    repositories :: Prelude.Maybe [RepositorySummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRepositoriesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listRepositoriesResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'repositories', 'listRepositoriesResponse_repositories' - The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_RepositorySummary.html RepositorySummary>
+-- objects.
+--
+-- 'httpStatus', 'listRepositoriesResponse_httpStatus' - The response's http status code.
+newListRepositoriesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRepositoriesResponse
+newListRepositoriesResponse pHttpStatus_ =
+  ListRepositoriesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      repositories = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listRepositoriesResponse_nextToken :: Lens.Lens' ListRepositoriesResponse (Prelude.Maybe Prelude.Text)
+listRepositoriesResponse_nextToken = Lens.lens (\ListRepositoriesResponse' {nextToken} -> nextToken) (\s@ListRepositoriesResponse' {} a -> s {nextToken = a} :: ListRepositoriesResponse)
+
+-- | The returned list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_RepositorySummary.html RepositorySummary>
+-- objects.
+listRepositoriesResponse_repositories :: Lens.Lens' ListRepositoriesResponse (Prelude.Maybe [RepositorySummary])
+listRepositoriesResponse_repositories = Lens.lens (\ListRepositoriesResponse' {repositories} -> repositories) (\s@ListRepositoriesResponse' {} a -> s {repositories = a} :: ListRepositoriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRepositoriesResponse_httpStatus :: Lens.Lens' ListRepositoriesResponse Prelude.Int
+listRepositoriesResponse_httpStatus = Lens.lens (\ListRepositoriesResponse' {httpStatus} -> httpStatus) (\s@ListRepositoriesResponse' {} a -> s {httpStatus = a} :: ListRepositoriesResponse)
+
+instance Prelude.NFData ListRepositoriesResponse where
+  rnf ListRepositoriesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf repositories
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/ListRepositoriesInDomain.hs b/gen/Amazonka/CodeArtifact/ListRepositoriesInDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListRepositoriesInDomain.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListRepositoriesInDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_RepositorySummary.html RepositorySummary>
+-- objects. Each @RepositorySummary@ contains information about a
+-- repository in the specified domain and that matches the input
+-- parameters.
+--
+-- This operation returns paginated results.
+module Amazonka.CodeArtifact.ListRepositoriesInDomain
+  ( -- * Creating a Request
+    ListRepositoriesInDomain (..),
+    newListRepositoriesInDomain,
+
+    -- * Request Lenses
+    listRepositoriesInDomain_administratorAccount,
+    listRepositoriesInDomain_domainOwner,
+    listRepositoriesInDomain_maxResults,
+    listRepositoriesInDomain_nextToken,
+    listRepositoriesInDomain_repositoryPrefix,
+    listRepositoriesInDomain_domain,
+
+    -- * Destructuring the Response
+    ListRepositoriesInDomainResponse (..),
+    newListRepositoriesInDomainResponse,
+
+    -- * Response Lenses
+    listRepositoriesInDomainResponse_nextToken,
+    listRepositoriesInDomainResponse_repositories,
+    listRepositoriesInDomainResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRepositoriesInDomain' smart constructor.
+data ListRepositoriesInDomain = ListRepositoriesInDomain'
+  { -- | Filter the list of repositories to only include those that are managed
+    -- by the Amazon Web Services account ID.
+    administratorAccount :: Prelude.Maybe Prelude.Text,
+    -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A prefix used to filter returned repositories. Only repositories with
+    -- names that start with @repositoryPrefix@ are returned.
+    repositoryPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the returned list of repositories.
+    domain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRepositoriesInDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'administratorAccount', 'listRepositoriesInDomain_administratorAccount' - Filter the list of repositories to only include those that are managed
+-- by the Amazon Web Services account ID.
+--
+-- 'domainOwner', 'listRepositoriesInDomain_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'maxResults', 'listRepositoriesInDomain_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listRepositoriesInDomain_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'repositoryPrefix', 'listRepositoriesInDomain_repositoryPrefix' - A prefix used to filter returned repositories. Only repositories with
+-- names that start with @repositoryPrefix@ are returned.
+--
+-- 'domain', 'listRepositoriesInDomain_domain' - The name of the domain that contains the returned list of repositories.
+newListRepositoriesInDomain ::
+  -- | 'domain'
+  Prelude.Text ->
+  ListRepositoriesInDomain
+newListRepositoriesInDomain pDomain_ =
+  ListRepositoriesInDomain'
+    { administratorAccount =
+        Prelude.Nothing,
+      domainOwner = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      repositoryPrefix = Prelude.Nothing,
+      domain = pDomain_
+    }
+
+-- | Filter the list of repositories to only include those that are managed
+-- by the Amazon Web Services account ID.
+listRepositoriesInDomain_administratorAccount :: Lens.Lens' ListRepositoriesInDomain (Prelude.Maybe Prelude.Text)
+listRepositoriesInDomain_administratorAccount = Lens.lens (\ListRepositoriesInDomain' {administratorAccount} -> administratorAccount) (\s@ListRepositoriesInDomain' {} a -> s {administratorAccount = a} :: ListRepositoriesInDomain)
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+listRepositoriesInDomain_domainOwner :: Lens.Lens' ListRepositoriesInDomain (Prelude.Maybe Prelude.Text)
+listRepositoriesInDomain_domainOwner = Lens.lens (\ListRepositoriesInDomain' {domainOwner} -> domainOwner) (\s@ListRepositoriesInDomain' {} a -> s {domainOwner = a} :: ListRepositoriesInDomain)
+
+-- | The maximum number of results to return per page.
+listRepositoriesInDomain_maxResults :: Lens.Lens' ListRepositoriesInDomain (Prelude.Maybe Prelude.Natural)
+listRepositoriesInDomain_maxResults = Lens.lens (\ListRepositoriesInDomain' {maxResults} -> maxResults) (\s@ListRepositoriesInDomain' {} a -> s {maxResults = a} :: ListRepositoriesInDomain)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listRepositoriesInDomain_nextToken :: Lens.Lens' ListRepositoriesInDomain (Prelude.Maybe Prelude.Text)
+listRepositoriesInDomain_nextToken = Lens.lens (\ListRepositoriesInDomain' {nextToken} -> nextToken) (\s@ListRepositoriesInDomain' {} a -> s {nextToken = a} :: ListRepositoriesInDomain)
+
+-- | A prefix used to filter returned repositories. Only repositories with
+-- names that start with @repositoryPrefix@ are returned.
+listRepositoriesInDomain_repositoryPrefix :: Lens.Lens' ListRepositoriesInDomain (Prelude.Maybe Prelude.Text)
+listRepositoriesInDomain_repositoryPrefix = Lens.lens (\ListRepositoriesInDomain' {repositoryPrefix} -> repositoryPrefix) (\s@ListRepositoriesInDomain' {} a -> s {repositoryPrefix = a} :: ListRepositoriesInDomain)
+
+-- | The name of the domain that contains the returned list of repositories.
+listRepositoriesInDomain_domain :: Lens.Lens' ListRepositoriesInDomain Prelude.Text
+listRepositoriesInDomain_domain = Lens.lens (\ListRepositoriesInDomain' {domain} -> domain) (\s@ListRepositoriesInDomain' {} a -> s {domain = a} :: ListRepositoriesInDomain)
+
+instance Core.AWSPager ListRepositoriesInDomain where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRepositoriesInDomainResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listRepositoriesInDomainResponse_repositories
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRepositoriesInDomain_nextToken
+          Lens..~ rs
+          Lens.^? listRepositoriesInDomainResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRepositoriesInDomain where
+  type
+    AWSResponse ListRepositoriesInDomain =
+      ListRepositoriesInDomainResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRepositoriesInDomainResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "repositories" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRepositoriesInDomain where
+  hashWithSalt _salt ListRepositoriesInDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` administratorAccount
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` repositoryPrefix
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData ListRepositoriesInDomain where
+  rnf ListRepositoriesInDomain' {..} =
+    Prelude.rnf administratorAccount
+      `Prelude.seq` Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf repositoryPrefix
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders ListRepositoriesInDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRepositoriesInDomain where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListRepositoriesInDomain where
+  toPath = Prelude.const "/v1/domain/repositories"
+
+instance Data.ToQuery ListRepositoriesInDomain where
+  toQuery ListRepositoriesInDomain' {..} =
+    Prelude.mconcat
+      [ "administrator-account"
+          Data.=: administratorAccount,
+        "domain-owner" Data.=: domainOwner,
+        "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken,
+        "repository-prefix" Data.=: repositoryPrefix,
+        "domain" Data.=: domain
+      ]
+
+-- | /See:/ 'newListRepositoriesInDomainResponse' smart constructor.
+data ListRepositoriesInDomainResponse = ListRepositoriesInDomainResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The returned list of repositories.
+    repositories :: Prelude.Maybe [RepositorySummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRepositoriesInDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listRepositoriesInDomainResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'repositories', 'listRepositoriesInDomainResponse_repositories' - The returned list of repositories.
+--
+-- 'httpStatus', 'listRepositoriesInDomainResponse_httpStatus' - The response's http status code.
+newListRepositoriesInDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRepositoriesInDomainResponse
+newListRepositoriesInDomainResponse pHttpStatus_ =
+  ListRepositoriesInDomainResponse'
+    { nextToken =
+        Prelude.Nothing,
+      repositories = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listRepositoriesInDomainResponse_nextToken :: Lens.Lens' ListRepositoriesInDomainResponse (Prelude.Maybe Prelude.Text)
+listRepositoriesInDomainResponse_nextToken = Lens.lens (\ListRepositoriesInDomainResponse' {nextToken} -> nextToken) (\s@ListRepositoriesInDomainResponse' {} a -> s {nextToken = a} :: ListRepositoriesInDomainResponse)
+
+-- | The returned list of repositories.
+listRepositoriesInDomainResponse_repositories :: Lens.Lens' ListRepositoriesInDomainResponse (Prelude.Maybe [RepositorySummary])
+listRepositoriesInDomainResponse_repositories = Lens.lens (\ListRepositoriesInDomainResponse' {repositories} -> repositories) (\s@ListRepositoriesInDomainResponse' {} a -> s {repositories = a} :: ListRepositoriesInDomainResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRepositoriesInDomainResponse_httpStatus :: Lens.Lens' ListRepositoriesInDomainResponse Prelude.Int
+listRepositoriesInDomainResponse_httpStatus = Lens.lens (\ListRepositoriesInDomainResponse' {httpStatus} -> httpStatus) (\s@ListRepositoriesInDomainResponse' {} a -> s {httpStatus = a} :: ListRepositoriesInDomainResponse)
+
+instance
+  Prelude.NFData
+    ListRepositoriesInDomainResponse
+  where
+  rnf ListRepositoriesInDomainResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf repositories
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/ListTagsForResource.hs b/gen/Amazonka/CodeArtifact/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/ListTagsForResource.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about Amazon Web Services tags for a specified Amazon
+-- Resource Name (ARN) in CodeArtifact.
+module Amazonka.CodeArtifact.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to get tags for.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource to get tags for.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource to get tags for.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/v1/tags"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery ListTagsForResource' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A list of tag key and value pairs associated with the specified
+    -- resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A list of tag key and value pairs associated with the specified
+-- resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of tag key and value pairs associated with the specified
+-- resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/PutDomainPermissionsPolicy.hs b/gen/Amazonka/CodeArtifact/PutDomainPermissionsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/PutDomainPermissionsPolicy.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.PutDomainPermissionsPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets a resource policy on a domain that specifies permissions to access
+-- it.
+--
+-- When you call @PutDomainPermissionsPolicy@, the resource policy on the
+-- domain is ignored when evaluting permissions. This ensures that the
+-- owner of a domain cannot lock themselves out of the domain, which would
+-- prevent them from being able to update the resource policy.
+module Amazonka.CodeArtifact.PutDomainPermissionsPolicy
+  ( -- * Creating a Request
+    PutDomainPermissionsPolicy (..),
+    newPutDomainPermissionsPolicy,
+
+    -- * Request Lenses
+    putDomainPermissionsPolicy_domainOwner,
+    putDomainPermissionsPolicy_policyRevision,
+    putDomainPermissionsPolicy_domain,
+    putDomainPermissionsPolicy_policyDocument,
+
+    -- * Destructuring the Response
+    PutDomainPermissionsPolicyResponse (..),
+    newPutDomainPermissionsPolicyResponse,
+
+    -- * Response Lenses
+    putDomainPermissionsPolicyResponse_policy,
+    putDomainPermissionsPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutDomainPermissionsPolicy' smart constructor.
+data PutDomainPermissionsPolicy = PutDomainPermissionsPolicy'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy to be set. This revision is
+    -- used for optimistic locking, which prevents others from overwriting your
+    -- changes to the domain\'s resource policy.
+    policyRevision :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain on which to set the resource policy.
+    domain :: Prelude.Text,
+    -- | A valid displayable JSON Aspen policy string to be set as the access
+    -- control resource policy on the provided domain.
+    policyDocument :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDomainPermissionsPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'putDomainPermissionsPolicy_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'policyRevision', 'putDomainPermissionsPolicy_policyRevision' - The current revision of the resource policy to be set. This revision is
+-- used for optimistic locking, which prevents others from overwriting your
+-- changes to the domain\'s resource policy.
+--
+-- 'domain', 'putDomainPermissionsPolicy_domain' - The name of the domain on which to set the resource policy.
+--
+-- 'policyDocument', 'putDomainPermissionsPolicy_policyDocument' - A valid displayable JSON Aspen policy string to be set as the access
+-- control resource policy on the provided domain.
+newPutDomainPermissionsPolicy ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'policyDocument'
+  Prelude.Text ->
+  PutDomainPermissionsPolicy
+newPutDomainPermissionsPolicy
+  pDomain_
+  pPolicyDocument_ =
+    PutDomainPermissionsPolicy'
+      { domainOwner =
+          Prelude.Nothing,
+        policyRevision = Prelude.Nothing,
+        domain = pDomain_,
+        policyDocument = pPolicyDocument_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+putDomainPermissionsPolicy_domainOwner :: Lens.Lens' PutDomainPermissionsPolicy (Prelude.Maybe Prelude.Text)
+putDomainPermissionsPolicy_domainOwner = Lens.lens (\PutDomainPermissionsPolicy' {domainOwner} -> domainOwner) (\s@PutDomainPermissionsPolicy' {} a -> s {domainOwner = a} :: PutDomainPermissionsPolicy)
+
+-- | The current revision of the resource policy to be set. This revision is
+-- used for optimistic locking, which prevents others from overwriting your
+-- changes to the domain\'s resource policy.
+putDomainPermissionsPolicy_policyRevision :: Lens.Lens' PutDomainPermissionsPolicy (Prelude.Maybe Prelude.Text)
+putDomainPermissionsPolicy_policyRevision = Lens.lens (\PutDomainPermissionsPolicy' {policyRevision} -> policyRevision) (\s@PutDomainPermissionsPolicy' {} a -> s {policyRevision = a} :: PutDomainPermissionsPolicy)
+
+-- | The name of the domain on which to set the resource policy.
+putDomainPermissionsPolicy_domain :: Lens.Lens' PutDomainPermissionsPolicy Prelude.Text
+putDomainPermissionsPolicy_domain = Lens.lens (\PutDomainPermissionsPolicy' {domain} -> domain) (\s@PutDomainPermissionsPolicy' {} a -> s {domain = a} :: PutDomainPermissionsPolicy)
+
+-- | A valid displayable JSON Aspen policy string to be set as the access
+-- control resource policy on the provided domain.
+putDomainPermissionsPolicy_policyDocument :: Lens.Lens' PutDomainPermissionsPolicy Prelude.Text
+putDomainPermissionsPolicy_policyDocument = Lens.lens (\PutDomainPermissionsPolicy' {policyDocument} -> policyDocument) (\s@PutDomainPermissionsPolicy' {} a -> s {policyDocument = a} :: PutDomainPermissionsPolicy)
+
+instance Core.AWSRequest PutDomainPermissionsPolicy where
+  type
+    AWSResponse PutDomainPermissionsPolicy =
+      PutDomainPermissionsPolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutDomainPermissionsPolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutDomainPermissionsPolicy where
+  hashWithSalt _salt PutDomainPermissionsPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` policyRevision
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` policyDocument
+
+instance Prelude.NFData PutDomainPermissionsPolicy where
+  rnf PutDomainPermissionsPolicy' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf policyRevision
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf policyDocument
+
+instance Data.ToHeaders PutDomainPermissionsPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDomainPermissionsPolicy where
+  toJSON PutDomainPermissionsPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("domainOwner" Data..=) Prelude.<$> domainOwner,
+            ("policyRevision" Data..=)
+              Prelude.<$> policyRevision,
+            Prelude.Just ("domain" Data..= domain),
+            Prelude.Just
+              ("policyDocument" Data..= policyDocument)
+          ]
+      )
+
+instance Data.ToPath PutDomainPermissionsPolicy where
+  toPath =
+    Prelude.const "/v1/domain/permissions/policy"
+
+instance Data.ToQuery PutDomainPermissionsPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutDomainPermissionsPolicyResponse' smart constructor.
+data PutDomainPermissionsPolicyResponse = PutDomainPermissionsPolicyResponse'
+  { -- | The resource policy that was set after processing the request.
+    policy :: Prelude.Maybe ResourcePolicy,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDomainPermissionsPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'putDomainPermissionsPolicyResponse_policy' - The resource policy that was set after processing the request.
+--
+-- 'httpStatus', 'putDomainPermissionsPolicyResponse_httpStatus' - The response's http status code.
+newPutDomainPermissionsPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDomainPermissionsPolicyResponse
+newPutDomainPermissionsPolicyResponse pHttpStatus_ =
+  PutDomainPermissionsPolicyResponse'
+    { policy =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The resource policy that was set after processing the request.
+putDomainPermissionsPolicyResponse_policy :: Lens.Lens' PutDomainPermissionsPolicyResponse (Prelude.Maybe ResourcePolicy)
+putDomainPermissionsPolicyResponse_policy = Lens.lens (\PutDomainPermissionsPolicyResponse' {policy} -> policy) (\s@PutDomainPermissionsPolicyResponse' {} a -> s {policy = a} :: PutDomainPermissionsPolicyResponse)
+
+-- | The response's http status code.
+putDomainPermissionsPolicyResponse_httpStatus :: Lens.Lens' PutDomainPermissionsPolicyResponse Prelude.Int
+putDomainPermissionsPolicyResponse_httpStatus = Lens.lens (\PutDomainPermissionsPolicyResponse' {httpStatus} -> httpStatus) (\s@PutDomainPermissionsPolicyResponse' {} a -> s {httpStatus = a} :: PutDomainPermissionsPolicyResponse)
+
+instance
+  Prelude.NFData
+    PutDomainPermissionsPolicyResponse
+  where
+  rnf PutDomainPermissionsPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/PutPackageOriginConfiguration.hs b/gen/Amazonka/CodeArtifact/PutPackageOriginConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/PutPackageOriginConfiguration.hs
@@ -0,0 +1,363 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.PutPackageOriginConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the package origin configuration for a package.
+--
+-- The package origin configuration determines how new versions of a
+-- package can be added to a repository. You can allow or block direct
+-- publishing of new package versions, or ingestion and retaining of new
+-- package versions from an external connection or upstream source. For
+-- more information about package origin controls and configuration, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/package-origin-controls.html Editing package origin controls>
+-- in the /CodeArtifact User Guide/.
+--
+-- @PutPackageOriginConfiguration@ can be called on a package that doesn\'t
+-- yet exist in the repository. When called on a package that does not
+-- exist, a package is created in the repository with no versions and the
+-- requested restrictions are set on the package. This can be used to
+-- preemptively block ingesting or retaining any versions from external
+-- connections or upstream repositories, or to block publishing any
+-- versions of the package into the repository before connecting any
+-- package managers or publishers to the repository.
+module Amazonka.CodeArtifact.PutPackageOriginConfiguration
+  ( -- * Creating a Request
+    PutPackageOriginConfiguration (..),
+    newPutPackageOriginConfiguration,
+
+    -- * Request Lenses
+    putPackageOriginConfiguration_domainOwner,
+    putPackageOriginConfiguration_namespace,
+    putPackageOriginConfiguration_domain,
+    putPackageOriginConfiguration_repository,
+    putPackageOriginConfiguration_format,
+    putPackageOriginConfiguration_package,
+    putPackageOriginConfiguration_restrictions,
+
+    -- * Destructuring the Response
+    PutPackageOriginConfigurationResponse (..),
+    newPutPackageOriginConfigurationResponse,
+
+    -- * Response Lenses
+    putPackageOriginConfigurationResponse_originConfiguration,
+    putPackageOriginConfigurationResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutPackageOriginConfiguration' smart constructor.
+data PutPackageOriginConfiguration = PutPackageOriginConfiguration'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the package to be updated. The package component that
+    -- specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository that contains the
+    -- package.
+    domain :: Prelude.Text,
+    -- | The name of the repository that contains the package.
+    repository :: Prelude.Text,
+    -- | A format that specifies the type of the package to be updated.
+    format :: PackageFormat,
+    -- | The name of the package to be updated.
+    package :: Prelude.Text,
+    -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+    -- object that contains information about the @upstream@ and @publish@
+    -- package origin restrictions. The @upstream@ restriction determines if
+    -- new package versions can be ingested or retained from external
+    -- connections or upstream repositories. The @publish@ restriction
+    -- determines if new package versions can be published directly to the
+    -- repository.
+    --
+    -- You must include both the desired @upstream@ and @publish@ restrictions.
+    restrictions :: PackageOriginRestrictions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutPackageOriginConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'putPackageOriginConfiguration_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'namespace', 'putPackageOriginConfiguration_namespace' - The namespace of the package to be updated. The package component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'domain', 'putPackageOriginConfiguration_domain' - The name of the domain that contains the repository that contains the
+-- package.
+--
+-- 'repository', 'putPackageOriginConfiguration_repository' - The name of the repository that contains the package.
+--
+-- 'format', 'putPackageOriginConfiguration_format' - A format that specifies the type of the package to be updated.
+--
+-- 'package', 'putPackageOriginConfiguration_package' - The name of the package to be updated.
+--
+-- 'restrictions', 'putPackageOriginConfiguration_restrictions' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+-- object that contains information about the @upstream@ and @publish@
+-- package origin restrictions. The @upstream@ restriction determines if
+-- new package versions can be ingested or retained from external
+-- connections or upstream repositories. The @publish@ restriction
+-- determines if new package versions can be published directly to the
+-- repository.
+--
+-- You must include both the desired @upstream@ and @publish@ restrictions.
+newPutPackageOriginConfiguration ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  -- | 'restrictions'
+  PackageOriginRestrictions ->
+  PutPackageOriginConfiguration
+newPutPackageOriginConfiguration
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_
+  pRestrictions_ =
+    PutPackageOriginConfiguration'
+      { domainOwner =
+          Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        restrictions = pRestrictions_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+putPackageOriginConfiguration_domainOwner :: Lens.Lens' PutPackageOriginConfiguration (Prelude.Maybe Prelude.Text)
+putPackageOriginConfiguration_domainOwner = Lens.lens (\PutPackageOriginConfiguration' {domainOwner} -> domainOwner) (\s@PutPackageOriginConfiguration' {} a -> s {domainOwner = a} :: PutPackageOriginConfiguration)
+
+-- | The namespace of the package to be updated. The package component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+putPackageOriginConfiguration_namespace :: Lens.Lens' PutPackageOriginConfiguration (Prelude.Maybe Prelude.Text)
+putPackageOriginConfiguration_namespace = Lens.lens (\PutPackageOriginConfiguration' {namespace} -> namespace) (\s@PutPackageOriginConfiguration' {} a -> s {namespace = a} :: PutPackageOriginConfiguration)
+
+-- | The name of the domain that contains the repository that contains the
+-- package.
+putPackageOriginConfiguration_domain :: Lens.Lens' PutPackageOriginConfiguration Prelude.Text
+putPackageOriginConfiguration_domain = Lens.lens (\PutPackageOriginConfiguration' {domain} -> domain) (\s@PutPackageOriginConfiguration' {} a -> s {domain = a} :: PutPackageOriginConfiguration)
+
+-- | The name of the repository that contains the package.
+putPackageOriginConfiguration_repository :: Lens.Lens' PutPackageOriginConfiguration Prelude.Text
+putPackageOriginConfiguration_repository = Lens.lens (\PutPackageOriginConfiguration' {repository} -> repository) (\s@PutPackageOriginConfiguration' {} a -> s {repository = a} :: PutPackageOriginConfiguration)
+
+-- | A format that specifies the type of the package to be updated.
+putPackageOriginConfiguration_format :: Lens.Lens' PutPackageOriginConfiguration PackageFormat
+putPackageOriginConfiguration_format = Lens.lens (\PutPackageOriginConfiguration' {format} -> format) (\s@PutPackageOriginConfiguration' {} a -> s {format = a} :: PutPackageOriginConfiguration)
+
+-- | The name of the package to be updated.
+putPackageOriginConfiguration_package :: Lens.Lens' PutPackageOriginConfiguration Prelude.Text
+putPackageOriginConfiguration_package = Lens.lens (\PutPackageOriginConfiguration' {package} -> package) (\s@PutPackageOriginConfiguration' {} a -> s {package = a} :: PutPackageOriginConfiguration)
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+-- object that contains information about the @upstream@ and @publish@
+-- package origin restrictions. The @upstream@ restriction determines if
+-- new package versions can be ingested or retained from external
+-- connections or upstream repositories. The @publish@ restriction
+-- determines if new package versions can be published directly to the
+-- repository.
+--
+-- You must include both the desired @upstream@ and @publish@ restrictions.
+putPackageOriginConfiguration_restrictions :: Lens.Lens' PutPackageOriginConfiguration PackageOriginRestrictions
+putPackageOriginConfiguration_restrictions = Lens.lens (\PutPackageOriginConfiguration' {restrictions} -> restrictions) (\s@PutPackageOriginConfiguration' {} a -> s {restrictions = a} :: PutPackageOriginConfiguration)
+
+instance
+  Core.AWSRequest
+    PutPackageOriginConfiguration
+  where
+  type
+    AWSResponse PutPackageOriginConfiguration =
+      PutPackageOriginConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutPackageOriginConfigurationResponse'
+            Prelude.<$> (x Data..?> "originConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutPackageOriginConfiguration
+  where
+  hashWithSalt _salt PutPackageOriginConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` restrictions
+
+instance Prelude.NFData PutPackageOriginConfiguration where
+  rnf PutPackageOriginConfiguration' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf restrictions
+
+instance Data.ToHeaders PutPackageOriginConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutPackageOriginConfiguration where
+  toJSON PutPackageOriginConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("restrictions" Data..= restrictions)]
+      )
+
+instance Data.ToPath PutPackageOriginConfiguration where
+  toPath = Prelude.const "/v1/package"
+
+instance Data.ToQuery PutPackageOriginConfiguration where
+  toQuery PutPackageOriginConfiguration' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package
+      ]
+
+-- | /See:/ 'newPutPackageOriginConfigurationResponse' smart constructor.
+data PutPackageOriginConfigurationResponse = PutPackageOriginConfigurationResponse'
+  { -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
+    -- object that describes the origin configuration set for the package. It
+    -- contains a
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+    -- object that describes how new versions of the package can be introduced
+    -- to the repository.
+    originConfiguration :: Prelude.Maybe PackageOriginConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutPackageOriginConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'originConfiguration', 'putPackageOriginConfigurationResponse_originConfiguration' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
+-- object that describes the origin configuration set for the package. It
+-- contains a
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+-- object that describes how new versions of the package can be introduced
+-- to the repository.
+--
+-- 'httpStatus', 'putPackageOriginConfigurationResponse_httpStatus' - The response's http status code.
+newPutPackageOriginConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutPackageOriginConfigurationResponse
+newPutPackageOriginConfigurationResponse pHttpStatus_ =
+  PutPackageOriginConfigurationResponse'
+    { originConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
+-- object that describes the origin configuration set for the package. It
+-- contains a
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+-- object that describes how new versions of the package can be introduced
+-- to the repository.
+putPackageOriginConfigurationResponse_originConfiguration :: Lens.Lens' PutPackageOriginConfigurationResponse (Prelude.Maybe PackageOriginConfiguration)
+putPackageOriginConfigurationResponse_originConfiguration = Lens.lens (\PutPackageOriginConfigurationResponse' {originConfiguration} -> originConfiguration) (\s@PutPackageOriginConfigurationResponse' {} a -> s {originConfiguration = a} :: PutPackageOriginConfigurationResponse)
+
+-- | The response's http status code.
+putPackageOriginConfigurationResponse_httpStatus :: Lens.Lens' PutPackageOriginConfigurationResponse Prelude.Int
+putPackageOriginConfigurationResponse_httpStatus = Lens.lens (\PutPackageOriginConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutPackageOriginConfigurationResponse' {} a -> s {httpStatus = a} :: PutPackageOriginConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutPackageOriginConfigurationResponse
+  where
+  rnf PutPackageOriginConfigurationResponse' {..} =
+    Prelude.rnf originConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/PutRepositoryPermissionsPolicy.hs b/gen/Amazonka/CodeArtifact/PutRepositoryPermissionsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/PutRepositoryPermissionsPolicy.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.PutRepositoryPermissionsPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the resource policy on a repository that specifies permissions to
+-- access it.
+--
+-- When you call @PutRepositoryPermissionsPolicy@, the resource policy on
+-- the repository is ignored when evaluting permissions. This ensures that
+-- the owner of a repository cannot lock themselves out of the repository,
+-- which would prevent them from being able to update the resource policy.
+module Amazonka.CodeArtifact.PutRepositoryPermissionsPolicy
+  ( -- * Creating a Request
+    PutRepositoryPermissionsPolicy (..),
+    newPutRepositoryPermissionsPolicy,
+
+    -- * Request Lenses
+    putRepositoryPermissionsPolicy_domainOwner,
+    putRepositoryPermissionsPolicy_policyRevision,
+    putRepositoryPermissionsPolicy_domain,
+    putRepositoryPermissionsPolicy_repository,
+    putRepositoryPermissionsPolicy_policyDocument,
+
+    -- * Destructuring the Response
+    PutRepositoryPermissionsPolicyResponse (..),
+    newPutRepositoryPermissionsPolicyResponse,
+
+    -- * Response Lenses
+    putRepositoryPermissionsPolicyResponse_policy,
+    putRepositoryPermissionsPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutRepositoryPermissionsPolicy' smart constructor.
+data PutRepositoryPermissionsPolicy = PutRepositoryPermissionsPolicy'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | Sets the revision of the resource policy that specifies permissions to
+    -- access the repository. This revision is used for optimistic locking,
+    -- which prevents others from overwriting your changes to the repository\'s
+    -- resource policy.
+    policyRevision :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain containing the repository to set the resource
+    -- policy on.
+    domain :: Prelude.Text,
+    -- | The name of the repository to set the resource policy on.
+    repository :: Prelude.Text,
+    -- | A valid displayable JSON Aspen policy string to be set as the access
+    -- control resource policy on the provided repository.
+    policyDocument :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutRepositoryPermissionsPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'putRepositoryPermissionsPolicy_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'policyRevision', 'putRepositoryPermissionsPolicy_policyRevision' - Sets the revision of the resource policy that specifies permissions to
+-- access the repository. This revision is used for optimistic locking,
+-- which prevents others from overwriting your changes to the repository\'s
+-- resource policy.
+--
+-- 'domain', 'putRepositoryPermissionsPolicy_domain' - The name of the domain containing the repository to set the resource
+-- policy on.
+--
+-- 'repository', 'putRepositoryPermissionsPolicy_repository' - The name of the repository to set the resource policy on.
+--
+-- 'policyDocument', 'putRepositoryPermissionsPolicy_policyDocument' - A valid displayable JSON Aspen policy string to be set as the access
+-- control resource policy on the provided repository.
+newPutRepositoryPermissionsPolicy ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'policyDocument'
+  Prelude.Text ->
+  PutRepositoryPermissionsPolicy
+newPutRepositoryPermissionsPolicy
+  pDomain_
+  pRepository_
+  pPolicyDocument_ =
+    PutRepositoryPermissionsPolicy'
+      { domainOwner =
+          Prelude.Nothing,
+        policyRevision = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        policyDocument = pPolicyDocument_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+putRepositoryPermissionsPolicy_domainOwner :: Lens.Lens' PutRepositoryPermissionsPolicy (Prelude.Maybe Prelude.Text)
+putRepositoryPermissionsPolicy_domainOwner = Lens.lens (\PutRepositoryPermissionsPolicy' {domainOwner} -> domainOwner) (\s@PutRepositoryPermissionsPolicy' {} a -> s {domainOwner = a} :: PutRepositoryPermissionsPolicy)
+
+-- | Sets the revision of the resource policy that specifies permissions to
+-- access the repository. This revision is used for optimistic locking,
+-- which prevents others from overwriting your changes to the repository\'s
+-- resource policy.
+putRepositoryPermissionsPolicy_policyRevision :: Lens.Lens' PutRepositoryPermissionsPolicy (Prelude.Maybe Prelude.Text)
+putRepositoryPermissionsPolicy_policyRevision = Lens.lens (\PutRepositoryPermissionsPolicy' {policyRevision} -> policyRevision) (\s@PutRepositoryPermissionsPolicy' {} a -> s {policyRevision = a} :: PutRepositoryPermissionsPolicy)
+
+-- | The name of the domain containing the repository to set the resource
+-- policy on.
+putRepositoryPermissionsPolicy_domain :: Lens.Lens' PutRepositoryPermissionsPolicy Prelude.Text
+putRepositoryPermissionsPolicy_domain = Lens.lens (\PutRepositoryPermissionsPolicy' {domain} -> domain) (\s@PutRepositoryPermissionsPolicy' {} a -> s {domain = a} :: PutRepositoryPermissionsPolicy)
+
+-- | The name of the repository to set the resource policy on.
+putRepositoryPermissionsPolicy_repository :: Lens.Lens' PutRepositoryPermissionsPolicy Prelude.Text
+putRepositoryPermissionsPolicy_repository = Lens.lens (\PutRepositoryPermissionsPolicy' {repository} -> repository) (\s@PutRepositoryPermissionsPolicy' {} a -> s {repository = a} :: PutRepositoryPermissionsPolicy)
+
+-- | A valid displayable JSON Aspen policy string to be set as the access
+-- control resource policy on the provided repository.
+putRepositoryPermissionsPolicy_policyDocument :: Lens.Lens' PutRepositoryPermissionsPolicy Prelude.Text
+putRepositoryPermissionsPolicy_policyDocument = Lens.lens (\PutRepositoryPermissionsPolicy' {policyDocument} -> policyDocument) (\s@PutRepositoryPermissionsPolicy' {} a -> s {policyDocument = a} :: PutRepositoryPermissionsPolicy)
+
+instance
+  Core.AWSRequest
+    PutRepositoryPermissionsPolicy
+  where
+  type
+    AWSResponse PutRepositoryPermissionsPolicy =
+      PutRepositoryPermissionsPolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutRepositoryPermissionsPolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutRepositoryPermissionsPolicy
+  where
+  hashWithSalt
+    _salt
+    PutRepositoryPermissionsPolicy' {..} =
+      _salt
+        `Prelude.hashWithSalt` domainOwner
+        `Prelude.hashWithSalt` policyRevision
+        `Prelude.hashWithSalt` domain
+        `Prelude.hashWithSalt` repository
+        `Prelude.hashWithSalt` policyDocument
+
+instance
+  Prelude.NFData
+    PutRepositoryPermissionsPolicy
+  where
+  rnf PutRepositoryPermissionsPolicy' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf policyRevision
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf policyDocument
+
+instance
+  Data.ToHeaders
+    PutRepositoryPermissionsPolicy
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutRepositoryPermissionsPolicy where
+  toJSON PutRepositoryPermissionsPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("policyRevision" Data..=)
+              Prelude.<$> policyRevision,
+            Prelude.Just
+              ("policyDocument" Data..= policyDocument)
+          ]
+      )
+
+instance Data.ToPath PutRepositoryPermissionsPolicy where
+  toPath =
+    Prelude.const "/v1/repository/permissions/policy"
+
+instance Data.ToQuery PutRepositoryPermissionsPolicy where
+  toQuery PutRepositoryPermissionsPolicy' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newPutRepositoryPermissionsPolicyResponse' smart constructor.
+data PutRepositoryPermissionsPolicyResponse = PutRepositoryPermissionsPolicyResponse'
+  { -- | The resource policy that was set after processing the request.
+    policy :: Prelude.Maybe ResourcePolicy,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutRepositoryPermissionsPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'putRepositoryPermissionsPolicyResponse_policy' - The resource policy that was set after processing the request.
+--
+-- 'httpStatus', 'putRepositoryPermissionsPolicyResponse_httpStatus' - The response's http status code.
+newPutRepositoryPermissionsPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutRepositoryPermissionsPolicyResponse
+newPutRepositoryPermissionsPolicyResponse
+  pHttpStatus_ =
+    PutRepositoryPermissionsPolicyResponse'
+      { policy =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The resource policy that was set after processing the request.
+putRepositoryPermissionsPolicyResponse_policy :: Lens.Lens' PutRepositoryPermissionsPolicyResponse (Prelude.Maybe ResourcePolicy)
+putRepositoryPermissionsPolicyResponse_policy = Lens.lens (\PutRepositoryPermissionsPolicyResponse' {policy} -> policy) (\s@PutRepositoryPermissionsPolicyResponse' {} a -> s {policy = a} :: PutRepositoryPermissionsPolicyResponse)
+
+-- | The response's http status code.
+putRepositoryPermissionsPolicyResponse_httpStatus :: Lens.Lens' PutRepositoryPermissionsPolicyResponse Prelude.Int
+putRepositoryPermissionsPolicyResponse_httpStatus = Lens.lens (\PutRepositoryPermissionsPolicyResponse' {httpStatus} -> httpStatus) (\s@PutRepositoryPermissionsPolicyResponse' {} a -> s {httpStatus = a} :: PutRepositoryPermissionsPolicyResponse)
+
+instance
+  Prelude.NFData
+    PutRepositoryPermissionsPolicyResponse
+  where
+  rnf PutRepositoryPermissionsPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/TagResource.hs b/gen/Amazonka/CodeArtifact/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/TagResource.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates tags for a resource in CodeArtifact.
+module Amazonka.CodeArtifact.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that you want to add or
+    -- update tags for.
+    resourceArn :: Prelude.Text,
+    -- | The tags you want to modify or add to the resource.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to add or
+-- update tags for.
+--
+-- 'tags', 'tagResource_tags' - The tags you want to modify or add to the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource that you want to add or
+-- update tags for.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags you want to modify or add to the resource.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/v1/tag"
+
+instance Data.ToQuery TagResource where
+  toQuery TagResource' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/Types.hs b/gen/Amazonka/CodeArtifact/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types.hs
@@ -0,0 +1,399 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AllowPublish
+    AllowPublish (..),
+
+    -- * AllowUpstream
+    AllowUpstream (..),
+
+    -- * DomainStatus
+    DomainStatus (..),
+
+    -- * ExternalConnectionStatus
+    ExternalConnectionStatus (..),
+
+    -- * HashAlgorithm
+    HashAlgorithm (..),
+
+    -- * PackageFormat
+    PackageFormat (..),
+
+    -- * PackageVersionErrorCode
+    PackageVersionErrorCode (..),
+
+    -- * PackageVersionOriginType
+    PackageVersionOriginType (..),
+
+    -- * PackageVersionSortType
+    PackageVersionSortType (..),
+
+    -- * PackageVersionStatus
+    PackageVersionStatus (..),
+
+    -- * AssetSummary
+    AssetSummary (..),
+    newAssetSummary,
+    assetSummary_hashes,
+    assetSummary_size,
+    assetSummary_name,
+
+    -- * DomainDescription
+    DomainDescription (..),
+    newDomainDescription,
+    domainDescription_arn,
+    domainDescription_assetSizeBytes,
+    domainDescription_createdTime,
+    domainDescription_encryptionKey,
+    domainDescription_name,
+    domainDescription_owner,
+    domainDescription_repositoryCount,
+    domainDescription_s3BucketArn,
+    domainDescription_status,
+
+    -- * DomainEntryPoint
+    DomainEntryPoint (..),
+    newDomainEntryPoint,
+    domainEntryPoint_externalConnectionName,
+    domainEntryPoint_repositoryName,
+
+    -- * DomainSummary
+    DomainSummary (..),
+    newDomainSummary,
+    domainSummary_arn,
+    domainSummary_createdTime,
+    domainSummary_encryptionKey,
+    domainSummary_name,
+    domainSummary_owner,
+    domainSummary_status,
+
+    -- * LicenseInfo
+    LicenseInfo (..),
+    newLicenseInfo,
+    licenseInfo_name,
+    licenseInfo_url,
+
+    -- * PackageDependency
+    PackageDependency (..),
+    newPackageDependency,
+    packageDependency_dependencyType,
+    packageDependency_namespace,
+    packageDependency_package,
+    packageDependency_versionRequirement,
+
+    -- * PackageDescription
+    PackageDescription (..),
+    newPackageDescription,
+    packageDescription_format,
+    packageDescription_name,
+    packageDescription_namespace,
+    packageDescription_originConfiguration,
+
+    -- * PackageOriginConfiguration
+    PackageOriginConfiguration (..),
+    newPackageOriginConfiguration,
+    packageOriginConfiguration_restrictions,
+
+    -- * PackageOriginRestrictions
+    PackageOriginRestrictions (..),
+    newPackageOriginRestrictions,
+    packageOriginRestrictions_publish,
+    packageOriginRestrictions_upstream,
+
+    -- * PackageSummary
+    PackageSummary (..),
+    newPackageSummary,
+    packageSummary_format,
+    packageSummary_namespace,
+    packageSummary_originConfiguration,
+    packageSummary_package,
+
+    -- * PackageVersionDescription
+    PackageVersionDescription (..),
+    newPackageVersionDescription,
+    packageVersionDescription_displayName,
+    packageVersionDescription_format,
+    packageVersionDescription_homePage,
+    packageVersionDescription_licenses,
+    packageVersionDescription_namespace,
+    packageVersionDescription_origin,
+    packageVersionDescription_packageName,
+    packageVersionDescription_publishedTime,
+    packageVersionDescription_revision,
+    packageVersionDescription_sourceCodeRepository,
+    packageVersionDescription_status,
+    packageVersionDescription_summary,
+    packageVersionDescription_version,
+
+    -- * PackageVersionError
+    PackageVersionError (..),
+    newPackageVersionError,
+    packageVersionError_errorCode,
+    packageVersionError_errorMessage,
+
+    -- * PackageVersionOrigin
+    PackageVersionOrigin (..),
+    newPackageVersionOrigin,
+    packageVersionOrigin_domainEntryPoint,
+    packageVersionOrigin_originType,
+
+    -- * PackageVersionSummary
+    PackageVersionSummary (..),
+    newPackageVersionSummary,
+    packageVersionSummary_origin,
+    packageVersionSummary_revision,
+    packageVersionSummary_version,
+    packageVersionSummary_status,
+
+    -- * RepositoryDescription
+    RepositoryDescription (..),
+    newRepositoryDescription,
+    repositoryDescription_administratorAccount,
+    repositoryDescription_arn,
+    repositoryDescription_description,
+    repositoryDescription_domainName,
+    repositoryDescription_domainOwner,
+    repositoryDescription_externalConnections,
+    repositoryDescription_name,
+    repositoryDescription_upstreams,
+
+    -- * RepositoryExternalConnectionInfo
+    RepositoryExternalConnectionInfo (..),
+    newRepositoryExternalConnectionInfo,
+    repositoryExternalConnectionInfo_externalConnectionName,
+    repositoryExternalConnectionInfo_packageFormat,
+    repositoryExternalConnectionInfo_status,
+
+    -- * RepositorySummary
+    RepositorySummary (..),
+    newRepositorySummary,
+    repositorySummary_administratorAccount,
+    repositorySummary_arn,
+    repositorySummary_description,
+    repositorySummary_domainName,
+    repositorySummary_domainOwner,
+    repositorySummary_name,
+
+    -- * ResourcePolicy
+    ResourcePolicy (..),
+    newResourcePolicy,
+    resourcePolicy_document,
+    resourcePolicy_resourceArn,
+    resourcePolicy_revision,
+
+    -- * SuccessfulPackageVersionInfo
+    SuccessfulPackageVersionInfo (..),
+    newSuccessfulPackageVersionInfo,
+    successfulPackageVersionInfo_revision,
+    successfulPackageVersionInfo_status,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * UpstreamRepository
+    UpstreamRepository (..),
+    newUpstreamRepository,
+    upstreamRepository_repositoryName,
+
+    -- * UpstreamRepositoryInfo
+    UpstreamRepositoryInfo (..),
+    newUpstreamRepositoryInfo,
+    upstreamRepositoryInfo_repositoryName,
+  )
+where
+
+import Amazonka.CodeArtifact.Types.AllowPublish
+import Amazonka.CodeArtifact.Types.AllowUpstream
+import Amazonka.CodeArtifact.Types.AssetSummary
+import Amazonka.CodeArtifact.Types.DomainDescription
+import Amazonka.CodeArtifact.Types.DomainEntryPoint
+import Amazonka.CodeArtifact.Types.DomainStatus
+import Amazonka.CodeArtifact.Types.DomainSummary
+import Amazonka.CodeArtifact.Types.ExternalConnectionStatus
+import Amazonka.CodeArtifact.Types.HashAlgorithm
+import Amazonka.CodeArtifact.Types.LicenseInfo
+import Amazonka.CodeArtifact.Types.PackageDependency
+import Amazonka.CodeArtifact.Types.PackageDescription
+import Amazonka.CodeArtifact.Types.PackageFormat
+import Amazonka.CodeArtifact.Types.PackageOriginConfiguration
+import Amazonka.CodeArtifact.Types.PackageOriginRestrictions
+import Amazonka.CodeArtifact.Types.PackageSummary
+import Amazonka.CodeArtifact.Types.PackageVersionDescription
+import Amazonka.CodeArtifact.Types.PackageVersionError
+import Amazonka.CodeArtifact.Types.PackageVersionErrorCode
+import Amazonka.CodeArtifact.Types.PackageVersionOrigin
+import Amazonka.CodeArtifact.Types.PackageVersionOriginType
+import Amazonka.CodeArtifact.Types.PackageVersionSortType
+import Amazonka.CodeArtifact.Types.PackageVersionStatus
+import Amazonka.CodeArtifact.Types.PackageVersionSummary
+import Amazonka.CodeArtifact.Types.RepositoryDescription
+import Amazonka.CodeArtifact.Types.RepositoryExternalConnectionInfo
+import Amazonka.CodeArtifact.Types.RepositorySummary
+import Amazonka.CodeArtifact.Types.ResourcePolicy
+import Amazonka.CodeArtifact.Types.SuccessfulPackageVersionInfo
+import Amazonka.CodeArtifact.Types.Tag
+import Amazonka.CodeArtifact.Types.UpstreamRepository
+import Amazonka.CodeArtifact.Types.UpstreamRepositoryInfo
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-09-22@ of the Amazon CodeArtifact SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "CodeArtifact",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "codeartifact",
+      Core.signingName = "codeartifact",
+      Core.version = "2018-09-22",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "CodeArtifact",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The operation did not succeed because of an unauthorized access attempt.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The operation did not succeed because prerequisites are not met.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The operation did not succeed because of an error that occurred inside
+-- CodeArtifact.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The operation did not succeed because the resource requested is not
+-- found in the service.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The operation did not succeed because it would have exceeded a service
+-- limit for your account.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The operation did not succeed because too many requests are sent to the
+-- service.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The operation did not succeed because a parameter in the request was
+-- sent with an invalid value.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/CodeArtifact/Types/AllowPublish.hs b/gen/Amazonka/CodeArtifact/Types/AllowPublish.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/AllowPublish.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.AllowPublish
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.AllowPublish
+  ( AllowPublish
+      ( ..,
+        AllowPublish_ALLOW,
+        AllowPublish_BLOCK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllowPublish = AllowPublish'
+  { fromAllowPublish ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AllowPublish_ALLOW :: AllowPublish
+pattern AllowPublish_ALLOW = AllowPublish' "ALLOW"
+
+pattern AllowPublish_BLOCK :: AllowPublish
+pattern AllowPublish_BLOCK = AllowPublish' "BLOCK"
+
+{-# COMPLETE
+  AllowPublish_ALLOW,
+  AllowPublish_BLOCK,
+  AllowPublish'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/AllowUpstream.hs b/gen/Amazonka/CodeArtifact/Types/AllowUpstream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/AllowUpstream.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.AllowUpstream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.AllowUpstream
+  ( AllowUpstream
+      ( ..,
+        AllowUpstream_ALLOW,
+        AllowUpstream_BLOCK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllowUpstream = AllowUpstream'
+  { fromAllowUpstream ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AllowUpstream_ALLOW :: AllowUpstream
+pattern AllowUpstream_ALLOW = AllowUpstream' "ALLOW"
+
+pattern AllowUpstream_BLOCK :: AllowUpstream
+pattern AllowUpstream_BLOCK = AllowUpstream' "BLOCK"
+
+{-# COMPLETE
+  AllowUpstream_ALLOW,
+  AllowUpstream_BLOCK,
+  AllowUpstream'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/AssetSummary.hs b/gen/Amazonka/CodeArtifact/Types/AssetSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/AssetSummary.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.AssetSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.AssetSummary where
+
+import Amazonka.CodeArtifact.Types.HashAlgorithm
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains details about a package version asset.
+--
+-- /See:/ 'newAssetSummary' smart constructor.
+data AssetSummary = AssetSummary'
+  { -- | The hashes of the asset.
+    hashes :: Prelude.Maybe (Prelude.HashMap HashAlgorithm Prelude.Text),
+    -- | The size of the asset.
+    size :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the asset.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hashes', 'assetSummary_hashes' - The hashes of the asset.
+--
+-- 'size', 'assetSummary_size' - The size of the asset.
+--
+-- 'name', 'assetSummary_name' - The name of the asset.
+newAssetSummary ::
+  -- | 'name'
+  Prelude.Text ->
+  AssetSummary
+newAssetSummary pName_ =
+  AssetSummary'
+    { hashes = Prelude.Nothing,
+      size = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The hashes of the asset.
+assetSummary_hashes :: Lens.Lens' AssetSummary (Prelude.Maybe (Prelude.HashMap HashAlgorithm Prelude.Text))
+assetSummary_hashes = Lens.lens (\AssetSummary' {hashes} -> hashes) (\s@AssetSummary' {} a -> s {hashes = a} :: AssetSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The size of the asset.
+assetSummary_size :: Lens.Lens' AssetSummary (Prelude.Maybe Prelude.Integer)
+assetSummary_size = Lens.lens (\AssetSummary' {size} -> size) (\s@AssetSummary' {} a -> s {size = a} :: AssetSummary)
+
+-- | The name of the asset.
+assetSummary_name :: Lens.Lens' AssetSummary Prelude.Text
+assetSummary_name = Lens.lens (\AssetSummary' {name} -> name) (\s@AssetSummary' {} a -> s {name = a} :: AssetSummary)
+
+instance Data.FromJSON AssetSummary where
+  parseJSON =
+    Data.withObject
+      "AssetSummary"
+      ( \x ->
+          AssetSummary'
+            Prelude.<$> (x Data..:? "hashes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "size")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable AssetSummary where
+  hashWithSalt _salt AssetSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` hashes
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AssetSummary where
+  rnf AssetSummary' {..} =
+    Prelude.rnf hashes
+      `Prelude.seq` Prelude.rnf size
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/CodeArtifact/Types/DomainDescription.hs b/gen/Amazonka/CodeArtifact/Types/DomainDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/DomainDescription.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.DomainDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.DomainDescription where
+
+import Amazonka.CodeArtifact.Types.DomainStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a domain. A domain is a container for repositories.
+-- When you create a domain, it is empty until you add one or more
+-- repositories.
+--
+-- /See:/ 'newDomainDescription' smart constructor.
+data DomainDescription = DomainDescription'
+  { -- | The Amazon Resource Name (ARN) of the domain.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The total size of all assets in the domain.
+    assetSizeBytes :: Prelude.Maybe Prelude.Integer,
+    -- | A timestamp that represents the date and time the domain was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of an Key Management Service (KMS) key associated with a domain.
+    encryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID that owns the domain.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The number of repositories in the domain.
+    repositoryCount :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the Amazon S3 bucket that is used to
+    -- store package assets in the domain.
+    s3BucketArn :: Prelude.Maybe Prelude.Text,
+    -- | The current status of a domain.
+    status :: Prelude.Maybe DomainStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'domainDescription_arn' - The Amazon Resource Name (ARN) of the domain.
+--
+-- 'assetSizeBytes', 'domainDescription_assetSizeBytes' - The total size of all assets in the domain.
+--
+-- 'createdTime', 'domainDescription_createdTime' - A timestamp that represents the date and time the domain was created.
+--
+-- 'encryptionKey', 'domainDescription_encryptionKey' - The ARN of an Key Management Service (KMS) key associated with a domain.
+--
+-- 'name', 'domainDescription_name' - The name of the domain.
+--
+-- 'owner', 'domainDescription_owner' - The Amazon Web Services account ID that owns the domain.
+--
+-- 'repositoryCount', 'domainDescription_repositoryCount' - The number of repositories in the domain.
+--
+-- 's3BucketArn', 'domainDescription_s3BucketArn' - The Amazon Resource Name (ARN) of the Amazon S3 bucket that is used to
+-- store package assets in the domain.
+--
+-- 'status', 'domainDescription_status' - The current status of a domain.
+newDomainDescription ::
+  DomainDescription
+newDomainDescription =
+  DomainDescription'
+    { arn = Prelude.Nothing,
+      assetSizeBytes = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      encryptionKey = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      repositoryCount = Prelude.Nothing,
+      s3BucketArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the domain.
+domainDescription_arn :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.Text)
+domainDescription_arn = Lens.lens (\DomainDescription' {arn} -> arn) (\s@DomainDescription' {} a -> s {arn = a} :: DomainDescription)
+
+-- | The total size of all assets in the domain.
+domainDescription_assetSizeBytes :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.Integer)
+domainDescription_assetSizeBytes = Lens.lens (\DomainDescription' {assetSizeBytes} -> assetSizeBytes) (\s@DomainDescription' {} a -> s {assetSizeBytes = a} :: DomainDescription)
+
+-- | A timestamp that represents the date and time the domain was created.
+domainDescription_createdTime :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.UTCTime)
+domainDescription_createdTime = Lens.lens (\DomainDescription' {createdTime} -> createdTime) (\s@DomainDescription' {} a -> s {createdTime = a} :: DomainDescription) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of an Key Management Service (KMS) key associated with a domain.
+domainDescription_encryptionKey :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.Text)
+domainDescription_encryptionKey = Lens.lens (\DomainDescription' {encryptionKey} -> encryptionKey) (\s@DomainDescription' {} a -> s {encryptionKey = a} :: DomainDescription)
+
+-- | The name of the domain.
+domainDescription_name :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.Text)
+domainDescription_name = Lens.lens (\DomainDescription' {name} -> name) (\s@DomainDescription' {} a -> s {name = a} :: DomainDescription)
+
+-- | The Amazon Web Services account ID that owns the domain.
+domainDescription_owner :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.Text)
+domainDescription_owner = Lens.lens (\DomainDescription' {owner} -> owner) (\s@DomainDescription' {} a -> s {owner = a} :: DomainDescription)
+
+-- | The number of repositories in the domain.
+domainDescription_repositoryCount :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.Int)
+domainDescription_repositoryCount = Lens.lens (\DomainDescription' {repositoryCount} -> repositoryCount) (\s@DomainDescription' {} a -> s {repositoryCount = a} :: DomainDescription)
+
+-- | The Amazon Resource Name (ARN) of the Amazon S3 bucket that is used to
+-- store package assets in the domain.
+domainDescription_s3BucketArn :: Lens.Lens' DomainDescription (Prelude.Maybe Prelude.Text)
+domainDescription_s3BucketArn = Lens.lens (\DomainDescription' {s3BucketArn} -> s3BucketArn) (\s@DomainDescription' {} a -> s {s3BucketArn = a} :: DomainDescription)
+
+-- | The current status of a domain.
+domainDescription_status :: Lens.Lens' DomainDescription (Prelude.Maybe DomainStatus)
+domainDescription_status = Lens.lens (\DomainDescription' {status} -> status) (\s@DomainDescription' {} a -> s {status = a} :: DomainDescription)
+
+instance Data.FromJSON DomainDescription where
+  parseJSON =
+    Data.withObject
+      "DomainDescription"
+      ( \x ->
+          DomainDescription'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "assetSizeBytes")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "encryptionKey")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "repositoryCount")
+            Prelude.<*> (x Data..:? "s3BucketArn")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable DomainDescription where
+  hashWithSalt _salt DomainDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` assetSizeBytes
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` encryptionKey
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` repositoryCount
+      `Prelude.hashWithSalt` s3BucketArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DomainDescription where
+  rnf DomainDescription' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetSizeBytes
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf encryptionKey
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf repositoryCount
+      `Prelude.seq` Prelude.rnf s3BucketArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/CodeArtifact/Types/DomainEntryPoint.hs b/gen/Amazonka/CodeArtifact/Types/DomainEntryPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/DomainEntryPoint.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.DomainEntryPoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.DomainEntryPoint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about how a package originally entered the CodeArtifact
+-- domain. For packages published directly to CodeArtifact, the entry point
+-- is the repository it was published to. For packages ingested from an
+-- external repository, the entry point is the external connection that it
+-- was ingested from. An external connection is a CodeArtifact repository
+-- that is connected to an external repository such as the npm registry or
+-- NuGet gallery.
+--
+-- /See:/ 'newDomainEntryPoint' smart constructor.
+data DomainEntryPoint = DomainEntryPoint'
+  { -- | The name of the external connection that a package was ingested from.
+    externalConnectionName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the repository that a package was originally published to.
+    repositoryName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainEntryPoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'externalConnectionName', 'domainEntryPoint_externalConnectionName' - The name of the external connection that a package was ingested from.
+--
+-- 'repositoryName', 'domainEntryPoint_repositoryName' - The name of the repository that a package was originally published to.
+newDomainEntryPoint ::
+  DomainEntryPoint
+newDomainEntryPoint =
+  DomainEntryPoint'
+    { externalConnectionName =
+        Prelude.Nothing,
+      repositoryName = Prelude.Nothing
+    }
+
+-- | The name of the external connection that a package was ingested from.
+domainEntryPoint_externalConnectionName :: Lens.Lens' DomainEntryPoint (Prelude.Maybe Prelude.Text)
+domainEntryPoint_externalConnectionName = Lens.lens (\DomainEntryPoint' {externalConnectionName} -> externalConnectionName) (\s@DomainEntryPoint' {} a -> s {externalConnectionName = a} :: DomainEntryPoint)
+
+-- | The name of the repository that a package was originally published to.
+domainEntryPoint_repositoryName :: Lens.Lens' DomainEntryPoint (Prelude.Maybe Prelude.Text)
+domainEntryPoint_repositoryName = Lens.lens (\DomainEntryPoint' {repositoryName} -> repositoryName) (\s@DomainEntryPoint' {} a -> s {repositoryName = a} :: DomainEntryPoint)
+
+instance Data.FromJSON DomainEntryPoint where
+  parseJSON =
+    Data.withObject
+      "DomainEntryPoint"
+      ( \x ->
+          DomainEntryPoint'
+            Prelude.<$> (x Data..:? "externalConnectionName")
+            Prelude.<*> (x Data..:? "repositoryName")
+      )
+
+instance Prelude.Hashable DomainEntryPoint where
+  hashWithSalt _salt DomainEntryPoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` externalConnectionName
+      `Prelude.hashWithSalt` repositoryName
+
+instance Prelude.NFData DomainEntryPoint where
+  rnf DomainEntryPoint' {..} =
+    Prelude.rnf externalConnectionName
+      `Prelude.seq` Prelude.rnf repositoryName
diff --git a/gen/Amazonka/CodeArtifact/Types/DomainStatus.hs b/gen/Amazonka/CodeArtifact/Types/DomainStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/DomainStatus.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.DomainStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.DomainStatus
+  ( DomainStatus
+      ( ..,
+        DomainStatus_Active,
+        DomainStatus_Deleted
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DomainStatus = DomainStatus'
+  { fromDomainStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DomainStatus_Active :: DomainStatus
+pattern DomainStatus_Active = DomainStatus' "Active"
+
+pattern DomainStatus_Deleted :: DomainStatus
+pattern DomainStatus_Deleted = DomainStatus' "Deleted"
+
+{-# COMPLETE
+  DomainStatus_Active,
+  DomainStatus_Deleted,
+  DomainStatus'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/DomainSummary.hs b/gen/Amazonka/CodeArtifact/Types/DomainSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/DomainSummary.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.DomainSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.DomainSummary where
+
+import Amazonka.CodeArtifact.Types.DomainStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a domain, including its name, Amazon Resource Name
+-- (ARN), and status. The
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListDomains.html ListDomains>
+-- operation returns a list of @DomainSummary@ objects.
+--
+-- /See:/ 'newDomainSummary' smart constructor.
+data DomainSummary = DomainSummary'
+  { -- | The ARN of the domain.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp that contains the date and time the domain was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The key used to encrypt the domain.
+    encryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | A string that contains the status of the domain.
+    status :: Prelude.Maybe DomainStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'domainSummary_arn' - The ARN of the domain.
+--
+-- 'createdTime', 'domainSummary_createdTime' - A timestamp that contains the date and time the domain was created.
+--
+-- 'encryptionKey', 'domainSummary_encryptionKey' - The key used to encrypt the domain.
+--
+-- 'name', 'domainSummary_name' - The name of the domain.
+--
+-- 'owner', 'domainSummary_owner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'status', 'domainSummary_status' - A string that contains the status of the domain.
+newDomainSummary ::
+  DomainSummary
+newDomainSummary =
+  DomainSummary'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      encryptionKey = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The ARN of the domain.
+domainSummary_arn :: Lens.Lens' DomainSummary (Prelude.Maybe Prelude.Text)
+domainSummary_arn = Lens.lens (\DomainSummary' {arn} -> arn) (\s@DomainSummary' {} a -> s {arn = a} :: DomainSummary)
+
+-- | A timestamp that contains the date and time the domain was created.
+domainSummary_createdTime :: Lens.Lens' DomainSummary (Prelude.Maybe Prelude.UTCTime)
+domainSummary_createdTime = Lens.lens (\DomainSummary' {createdTime} -> createdTime) (\s@DomainSummary' {} a -> s {createdTime = a} :: DomainSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The key used to encrypt the domain.
+domainSummary_encryptionKey :: Lens.Lens' DomainSummary (Prelude.Maybe Prelude.Text)
+domainSummary_encryptionKey = Lens.lens (\DomainSummary' {encryptionKey} -> encryptionKey) (\s@DomainSummary' {} a -> s {encryptionKey = a} :: DomainSummary)
+
+-- | The name of the domain.
+domainSummary_name :: Lens.Lens' DomainSummary (Prelude.Maybe Prelude.Text)
+domainSummary_name = Lens.lens (\DomainSummary' {name} -> name) (\s@DomainSummary' {} a -> s {name = a} :: DomainSummary)
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+domainSummary_owner :: Lens.Lens' DomainSummary (Prelude.Maybe Prelude.Text)
+domainSummary_owner = Lens.lens (\DomainSummary' {owner} -> owner) (\s@DomainSummary' {} a -> s {owner = a} :: DomainSummary)
+
+-- | A string that contains the status of the domain.
+domainSummary_status :: Lens.Lens' DomainSummary (Prelude.Maybe DomainStatus)
+domainSummary_status = Lens.lens (\DomainSummary' {status} -> status) (\s@DomainSummary' {} a -> s {status = a} :: DomainSummary)
+
+instance Data.FromJSON DomainSummary where
+  parseJSON =
+    Data.withObject
+      "DomainSummary"
+      ( \x ->
+          DomainSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "encryptionKey")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable DomainSummary where
+  hashWithSalt _salt DomainSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` encryptionKey
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DomainSummary where
+  rnf DomainSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf encryptionKey
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/CodeArtifact/Types/ExternalConnectionStatus.hs b/gen/Amazonka/CodeArtifact/Types/ExternalConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/ExternalConnectionStatus.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.ExternalConnectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.ExternalConnectionStatus
+  ( ExternalConnectionStatus
+      ( ..,
+        ExternalConnectionStatus_Available
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExternalConnectionStatus = ExternalConnectionStatus'
+  { fromExternalConnectionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ExternalConnectionStatus_Available :: ExternalConnectionStatus
+pattern ExternalConnectionStatus_Available = ExternalConnectionStatus' "Available"
+
+{-# COMPLETE
+  ExternalConnectionStatus_Available,
+  ExternalConnectionStatus'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/HashAlgorithm.hs b/gen/Amazonka/CodeArtifact/Types/HashAlgorithm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/HashAlgorithm.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.HashAlgorithm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.HashAlgorithm
+  ( HashAlgorithm
+      ( ..,
+        HashAlgorithm_MD5,
+        HashAlgorithm_SHA_1,
+        HashAlgorithm_SHA_256,
+        HashAlgorithm_SHA_512
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HashAlgorithm = HashAlgorithm'
+  { fromHashAlgorithm ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HashAlgorithm_MD5 :: HashAlgorithm
+pattern HashAlgorithm_MD5 = HashAlgorithm' "MD5"
+
+pattern HashAlgorithm_SHA_1 :: HashAlgorithm
+pattern HashAlgorithm_SHA_1 = HashAlgorithm' "SHA-1"
+
+pattern HashAlgorithm_SHA_256 :: HashAlgorithm
+pattern HashAlgorithm_SHA_256 = HashAlgorithm' "SHA-256"
+
+pattern HashAlgorithm_SHA_512 :: HashAlgorithm
+pattern HashAlgorithm_SHA_512 = HashAlgorithm' "SHA-512"
+
+{-# COMPLETE
+  HashAlgorithm_MD5,
+  HashAlgorithm_SHA_1,
+  HashAlgorithm_SHA_256,
+  HashAlgorithm_SHA_512,
+  HashAlgorithm'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/LicenseInfo.hs b/gen/Amazonka/CodeArtifact/Types/LicenseInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/LicenseInfo.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.LicenseInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.LicenseInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of the license data.
+--
+-- /See:/ 'newLicenseInfo' smart constructor.
+data LicenseInfo = LicenseInfo'
+  { -- | Name of the license.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The URL for license data.
+    url :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LicenseInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'licenseInfo_name' - Name of the license.
+--
+-- 'url', 'licenseInfo_url' - The URL for license data.
+newLicenseInfo ::
+  LicenseInfo
+newLicenseInfo =
+  LicenseInfo'
+    { name = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | Name of the license.
+licenseInfo_name :: Lens.Lens' LicenseInfo (Prelude.Maybe Prelude.Text)
+licenseInfo_name = Lens.lens (\LicenseInfo' {name} -> name) (\s@LicenseInfo' {} a -> s {name = a} :: LicenseInfo)
+
+-- | The URL for license data.
+licenseInfo_url :: Lens.Lens' LicenseInfo (Prelude.Maybe Prelude.Text)
+licenseInfo_url = Lens.lens (\LicenseInfo' {url} -> url) (\s@LicenseInfo' {} a -> s {url = a} :: LicenseInfo)
+
+instance Data.FromJSON LicenseInfo where
+  parseJSON =
+    Data.withObject
+      "LicenseInfo"
+      ( \x ->
+          LicenseInfo'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "url")
+      )
+
+instance Prelude.Hashable LicenseInfo where
+  hashWithSalt _salt LicenseInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData LicenseInfo where
+  rnf LicenseInfo' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf url
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageDependency.hs b/gen/Amazonka/CodeArtifact/Types/PackageDependency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageDependency.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageDependency
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageDependency where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a package dependency.
+--
+-- /See:/ 'newPackageDependency' smart constructor.
+data PackageDependency = PackageDependency'
+  { -- | The type of a package dependency. The possible values depend on the
+    -- package type. Example types are @compile@, @runtime@, and @test@ for
+    -- Maven packages, and @dev@, @prod@, and @optional@ for npm packages.
+    dependencyType :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the package that this package depends on. The package
+    -- component that specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the package that this package depends on.
+    package :: Prelude.Maybe Prelude.Text,
+    -- | The required version, or version range, of the package that this package
+    -- depends on. The version format is specific to the package type. For
+    -- example, the following are possible valid required versions: @1.2.3@,
+    -- @^2.3.4@, or @4.x@.
+    versionRequirement :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageDependency' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dependencyType', 'packageDependency_dependencyType' - The type of a package dependency. The possible values depend on the
+-- package type. Example types are @compile@, @runtime@, and @test@ for
+-- Maven packages, and @dev@, @prod@, and @optional@ for npm packages.
+--
+-- 'namespace', 'packageDependency_namespace' - The namespace of the package that this package depends on. The package
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'package', 'packageDependency_package' - The name of the package that this package depends on.
+--
+-- 'versionRequirement', 'packageDependency_versionRequirement' - The required version, or version range, of the package that this package
+-- depends on. The version format is specific to the package type. For
+-- example, the following are possible valid required versions: @1.2.3@,
+-- @^2.3.4@, or @4.x@.
+newPackageDependency ::
+  PackageDependency
+newPackageDependency =
+  PackageDependency'
+    { dependencyType =
+        Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      package = Prelude.Nothing,
+      versionRequirement = Prelude.Nothing
+    }
+
+-- | The type of a package dependency. The possible values depend on the
+-- package type. Example types are @compile@, @runtime@, and @test@ for
+-- Maven packages, and @dev@, @prod@, and @optional@ for npm packages.
+packageDependency_dependencyType :: Lens.Lens' PackageDependency (Prelude.Maybe Prelude.Text)
+packageDependency_dependencyType = Lens.lens (\PackageDependency' {dependencyType} -> dependencyType) (\s@PackageDependency' {} a -> s {dependencyType = a} :: PackageDependency)
+
+-- | The namespace of the package that this package depends on. The package
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+packageDependency_namespace :: Lens.Lens' PackageDependency (Prelude.Maybe Prelude.Text)
+packageDependency_namespace = Lens.lens (\PackageDependency' {namespace} -> namespace) (\s@PackageDependency' {} a -> s {namespace = a} :: PackageDependency)
+
+-- | The name of the package that this package depends on.
+packageDependency_package :: Lens.Lens' PackageDependency (Prelude.Maybe Prelude.Text)
+packageDependency_package = Lens.lens (\PackageDependency' {package} -> package) (\s@PackageDependency' {} a -> s {package = a} :: PackageDependency)
+
+-- | The required version, or version range, of the package that this package
+-- depends on. The version format is specific to the package type. For
+-- example, the following are possible valid required versions: @1.2.3@,
+-- @^2.3.4@, or @4.x@.
+packageDependency_versionRequirement :: Lens.Lens' PackageDependency (Prelude.Maybe Prelude.Text)
+packageDependency_versionRequirement = Lens.lens (\PackageDependency' {versionRequirement} -> versionRequirement) (\s@PackageDependency' {} a -> s {versionRequirement = a} :: PackageDependency)
+
+instance Data.FromJSON PackageDependency where
+  parseJSON =
+    Data.withObject
+      "PackageDependency"
+      ( \x ->
+          PackageDependency'
+            Prelude.<$> (x Data..:? "dependencyType")
+            Prelude.<*> (x Data..:? "namespace")
+            Prelude.<*> (x Data..:? "package")
+            Prelude.<*> (x Data..:? "versionRequirement")
+      )
+
+instance Prelude.Hashable PackageDependency where
+  hashWithSalt _salt PackageDependency' {..} =
+    _salt
+      `Prelude.hashWithSalt` dependencyType
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` versionRequirement
+
+instance Prelude.NFData PackageDependency where
+  rnf PackageDependency' {..} =
+    Prelude.rnf dependencyType
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf versionRequirement
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageDescription.hs b/gen/Amazonka/CodeArtifact/Types/PackageDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageDescription.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageDescription where
+
+import Amazonka.CodeArtifact.Types.PackageFormat
+import Amazonka.CodeArtifact.Types.PackageOriginConfiguration
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a package.
+--
+-- /See:/ 'newPackageDescription' smart constructor.
+data PackageDescription = PackageDescription'
+  { -- | A format that specifies the type of the package.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The name of the package.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the package. The package component that specifies its
+    -- namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The package origin configuration for the package.
+    originConfiguration :: Prelude.Maybe PackageOriginConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'packageDescription_format' - A format that specifies the type of the package.
+--
+-- 'name', 'packageDescription_name' - The name of the package.
+--
+-- 'namespace', 'packageDescription_namespace' - The namespace of the package. The package component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'originConfiguration', 'packageDescription_originConfiguration' - The package origin configuration for the package.
+newPackageDescription ::
+  PackageDescription
+newPackageDescription =
+  PackageDescription'
+    { format = Prelude.Nothing,
+      name = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      originConfiguration = Prelude.Nothing
+    }
+
+-- | A format that specifies the type of the package.
+packageDescription_format :: Lens.Lens' PackageDescription (Prelude.Maybe PackageFormat)
+packageDescription_format = Lens.lens (\PackageDescription' {format} -> format) (\s@PackageDescription' {} a -> s {format = a} :: PackageDescription)
+
+-- | The name of the package.
+packageDescription_name :: Lens.Lens' PackageDescription (Prelude.Maybe Prelude.Text)
+packageDescription_name = Lens.lens (\PackageDescription' {name} -> name) (\s@PackageDescription' {} a -> s {name = a} :: PackageDescription)
+
+-- | The namespace of the package. The package component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+packageDescription_namespace :: Lens.Lens' PackageDescription (Prelude.Maybe Prelude.Text)
+packageDescription_namespace = Lens.lens (\PackageDescription' {namespace} -> namespace) (\s@PackageDescription' {} a -> s {namespace = a} :: PackageDescription)
+
+-- | The package origin configuration for the package.
+packageDescription_originConfiguration :: Lens.Lens' PackageDescription (Prelude.Maybe PackageOriginConfiguration)
+packageDescription_originConfiguration = Lens.lens (\PackageDescription' {originConfiguration} -> originConfiguration) (\s@PackageDescription' {} a -> s {originConfiguration = a} :: PackageDescription)
+
+instance Data.FromJSON PackageDescription where
+  parseJSON =
+    Data.withObject
+      "PackageDescription"
+      ( \x ->
+          PackageDescription'
+            Prelude.<$> (x Data..:? "format")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "namespace")
+            Prelude.<*> (x Data..:? "originConfiguration")
+      )
+
+instance Prelude.Hashable PackageDescription where
+  hashWithSalt _salt PackageDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` originConfiguration
+
+instance Prelude.NFData PackageDescription where
+  rnf PackageDescription' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf originConfiguration
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageFormat.hs b/gen/Amazonka/CodeArtifact/Types/PackageFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageFormat.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageFormat
+  ( PackageFormat
+      ( ..,
+        PackageFormat_Maven,
+        PackageFormat_Npm,
+        PackageFormat_Nuget,
+        PackageFormat_Pypi
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PackageFormat = PackageFormat'
+  { fromPackageFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PackageFormat_Maven :: PackageFormat
+pattern PackageFormat_Maven = PackageFormat' "maven"
+
+pattern PackageFormat_Npm :: PackageFormat
+pattern PackageFormat_Npm = PackageFormat' "npm"
+
+pattern PackageFormat_Nuget :: PackageFormat
+pattern PackageFormat_Nuget = PackageFormat' "nuget"
+
+pattern PackageFormat_Pypi :: PackageFormat
+pattern PackageFormat_Pypi = PackageFormat' "pypi"
+
+{-# COMPLETE
+  PackageFormat_Maven,
+  PackageFormat_Npm,
+  PackageFormat_Nuget,
+  PackageFormat_Pypi,
+  PackageFormat'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageOriginConfiguration.hs b/gen/Amazonka/CodeArtifact/Types/PackageOriginConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageOriginConfiguration.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageOriginConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageOriginConfiguration where
+
+import Amazonka.CodeArtifact.Types.PackageOriginRestrictions
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the package origin configuration of a package.
+--
+-- /See:/ 'newPackageOriginConfiguration' smart constructor.
+data PackageOriginConfiguration = PackageOriginConfiguration'
+  { -- | A @PackageOriginRestrictions@ object that contains information about the
+    -- upstream and publish package origin configuration for the package.
+    restrictions :: Prelude.Maybe PackageOriginRestrictions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageOriginConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'restrictions', 'packageOriginConfiguration_restrictions' - A @PackageOriginRestrictions@ object that contains information about the
+-- upstream and publish package origin configuration for the package.
+newPackageOriginConfiguration ::
+  PackageOriginConfiguration
+newPackageOriginConfiguration =
+  PackageOriginConfiguration'
+    { restrictions =
+        Prelude.Nothing
+    }
+
+-- | A @PackageOriginRestrictions@ object that contains information about the
+-- upstream and publish package origin configuration for the package.
+packageOriginConfiguration_restrictions :: Lens.Lens' PackageOriginConfiguration (Prelude.Maybe PackageOriginRestrictions)
+packageOriginConfiguration_restrictions = Lens.lens (\PackageOriginConfiguration' {restrictions} -> restrictions) (\s@PackageOriginConfiguration' {} a -> s {restrictions = a} :: PackageOriginConfiguration)
+
+instance Data.FromJSON PackageOriginConfiguration where
+  parseJSON =
+    Data.withObject
+      "PackageOriginConfiguration"
+      ( \x ->
+          PackageOriginConfiguration'
+            Prelude.<$> (x Data..:? "restrictions")
+      )
+
+instance Prelude.Hashable PackageOriginConfiguration where
+  hashWithSalt _salt PackageOriginConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` restrictions
+
+instance Prelude.NFData PackageOriginConfiguration where
+  rnf PackageOriginConfiguration' {..} =
+    Prelude.rnf restrictions
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageOriginRestrictions.hs b/gen/Amazonka/CodeArtifact/Types/PackageOriginRestrictions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageOriginRestrictions.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageOriginRestrictions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageOriginRestrictions where
+
+import Amazonka.CodeArtifact.Types.AllowPublish
+import Amazonka.CodeArtifact.Types.AllowUpstream
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the origin restrictions set on the package. The package
+-- origin restrictions determine how new versions of a package can be added
+-- to a specific repository.
+--
+-- /See:/ 'newPackageOriginRestrictions' smart constructor.
+data PackageOriginRestrictions = PackageOriginRestrictions'
+  { -- | The package origin configuration that determines if new versions of the
+    -- package can be published directly to the repository.
+    publish :: AllowPublish,
+    -- | The package origin configuration that determines if new versions of the
+    -- package can be added to the repository from an external connection or
+    -- upstream source.
+    upstream :: AllowUpstream
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageOriginRestrictions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'publish', 'packageOriginRestrictions_publish' - The package origin configuration that determines if new versions of the
+-- package can be published directly to the repository.
+--
+-- 'upstream', 'packageOriginRestrictions_upstream' - The package origin configuration that determines if new versions of the
+-- package can be added to the repository from an external connection or
+-- upstream source.
+newPackageOriginRestrictions ::
+  -- | 'publish'
+  AllowPublish ->
+  -- | 'upstream'
+  AllowUpstream ->
+  PackageOriginRestrictions
+newPackageOriginRestrictions pPublish_ pUpstream_ =
+  PackageOriginRestrictions'
+    { publish = pPublish_,
+      upstream = pUpstream_
+    }
+
+-- | The package origin configuration that determines if new versions of the
+-- package can be published directly to the repository.
+packageOriginRestrictions_publish :: Lens.Lens' PackageOriginRestrictions AllowPublish
+packageOriginRestrictions_publish = Lens.lens (\PackageOriginRestrictions' {publish} -> publish) (\s@PackageOriginRestrictions' {} a -> s {publish = a} :: PackageOriginRestrictions)
+
+-- | The package origin configuration that determines if new versions of the
+-- package can be added to the repository from an external connection or
+-- upstream source.
+packageOriginRestrictions_upstream :: Lens.Lens' PackageOriginRestrictions AllowUpstream
+packageOriginRestrictions_upstream = Lens.lens (\PackageOriginRestrictions' {upstream} -> upstream) (\s@PackageOriginRestrictions' {} a -> s {upstream = a} :: PackageOriginRestrictions)
+
+instance Data.FromJSON PackageOriginRestrictions where
+  parseJSON =
+    Data.withObject
+      "PackageOriginRestrictions"
+      ( \x ->
+          PackageOriginRestrictions'
+            Prelude.<$> (x Data..: "publish")
+            Prelude.<*> (x Data..: "upstream")
+      )
+
+instance Prelude.Hashable PackageOriginRestrictions where
+  hashWithSalt _salt PackageOriginRestrictions' {..} =
+    _salt
+      `Prelude.hashWithSalt` publish
+      `Prelude.hashWithSalt` upstream
+
+instance Prelude.NFData PackageOriginRestrictions where
+  rnf PackageOriginRestrictions' {..} =
+    Prelude.rnf publish
+      `Prelude.seq` Prelude.rnf upstream
+
+instance Data.ToJSON PackageOriginRestrictions where
+  toJSON PackageOriginRestrictions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("publish" Data..= publish),
+            Prelude.Just ("upstream" Data..= upstream)
+          ]
+      )
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageSummary.hs b/gen/Amazonka/CodeArtifact/Types/PackageSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageSummary.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageSummary where
+
+import Amazonka.CodeArtifact.Types.PackageFormat
+import Amazonka.CodeArtifact.Types.PackageOriginConfiguration
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a package, including its format, namespace, and name. The
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackages.html ListPackages>
+-- operation returns a list of @PackageSummary@ objects.
+--
+-- /See:/ 'newPackageSummary' smart constructor.
+data PackageSummary = PackageSummary'
+  { -- | The format of the package.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The namespace of the package. The package component that specifies its
+    -- namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package is its @groupId@.
+    --
+    -- -   The namespace of an npm package is its @scope@.
+    --
+    -- -   Python and NuGet packages do not contain a corresponding component,
+    --     packages of those formats do not have a namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
+    -- object that contains a
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+    -- object that contains information about the upstream and publish package
+    -- origin restrictions.
+    originConfiguration :: Prelude.Maybe PackageOriginConfiguration,
+    -- | The name of the package.
+    package :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'packageSummary_format' - The format of the package.
+--
+-- 'namespace', 'packageSummary_namespace' - The namespace of the package. The package component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+--
+-- 'originConfiguration', 'packageSummary_originConfiguration' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
+-- object that contains a
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+-- object that contains information about the upstream and publish package
+-- origin restrictions.
+--
+-- 'package', 'packageSummary_package' - The name of the package.
+newPackageSummary ::
+  PackageSummary
+newPackageSummary =
+  PackageSummary'
+    { format = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      originConfiguration = Prelude.Nothing,
+      package = Prelude.Nothing
+    }
+
+-- | The format of the package.
+packageSummary_format :: Lens.Lens' PackageSummary (Prelude.Maybe PackageFormat)
+packageSummary_format = Lens.lens (\PackageSummary' {format} -> format) (\s@PackageSummary' {} a -> s {format = a} :: PackageSummary)
+
+-- | The namespace of the package. The package component that specifies its
+-- namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package is its @groupId@.
+--
+-- -   The namespace of an npm package is its @scope@.
+--
+-- -   Python and NuGet packages do not contain a corresponding component,
+--     packages of those formats do not have a namespace.
+packageSummary_namespace :: Lens.Lens' PackageSummary (Prelude.Maybe Prelude.Text)
+packageSummary_namespace = Lens.lens (\PackageSummary' {namespace} -> namespace) (\s@PackageSummary' {} a -> s {namespace = a} :: PackageSummary)
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
+-- object that contains a
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
+-- object that contains information about the upstream and publish package
+-- origin restrictions.
+packageSummary_originConfiguration :: Lens.Lens' PackageSummary (Prelude.Maybe PackageOriginConfiguration)
+packageSummary_originConfiguration = Lens.lens (\PackageSummary' {originConfiguration} -> originConfiguration) (\s@PackageSummary' {} a -> s {originConfiguration = a} :: PackageSummary)
+
+-- | The name of the package.
+packageSummary_package :: Lens.Lens' PackageSummary (Prelude.Maybe Prelude.Text)
+packageSummary_package = Lens.lens (\PackageSummary' {package} -> package) (\s@PackageSummary' {} a -> s {package = a} :: PackageSummary)
+
+instance Data.FromJSON PackageSummary where
+  parseJSON =
+    Data.withObject
+      "PackageSummary"
+      ( \x ->
+          PackageSummary'
+            Prelude.<$> (x Data..:? "format")
+            Prelude.<*> (x Data..:? "namespace")
+            Prelude.<*> (x Data..:? "originConfiguration")
+            Prelude.<*> (x Data..:? "package")
+      )
+
+instance Prelude.Hashable PackageSummary where
+  hashWithSalt _salt PackageSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` originConfiguration
+      `Prelude.hashWithSalt` package
+
+instance Prelude.NFData PackageSummary where
+  rnf PackageSummary' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf originConfiguration
+      `Prelude.seq` Prelude.rnf package
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionDescription.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionDescription.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionDescription where
+
+import Amazonka.CodeArtifact.Types.LicenseInfo
+import Amazonka.CodeArtifact.Types.PackageFormat
+import Amazonka.CodeArtifact.Types.PackageVersionOrigin
+import Amazonka.CodeArtifact.Types.PackageVersionStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a package version.
+--
+-- /See:/ 'newPackageVersionDescription' smart constructor.
+data PackageVersionDescription = PackageVersionDescription'
+  { -- | The name of the package that is displayed. The @displayName@ varies
+    -- depending on the package version\'s format. For example, if an npm
+    -- package is named @ui@, is in the namespace @vue@, and has the format
+    -- @npm@, then the @displayName@ is @\@vue\/ui@.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The format of the package version.
+    format :: Prelude.Maybe PackageFormat,
+    -- | The homepage associated with the package.
+    homePage :: Prelude.Maybe Prelude.Text,
+    -- | Information about licenses associated with the package version.
+    licenses :: Prelude.Maybe [LicenseInfo],
+    -- | The namespace of the package version. The package version component that
+    -- specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionOrigin.html PackageVersionOrigin>
+    -- object that contains information about how the package version was added
+    -- to the repository.
+    origin :: Prelude.Maybe PackageVersionOrigin,
+    -- | The name of the requested package.
+    packageName :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp that contains the date and time the package version was
+    -- published.
+    publishedTime :: Prelude.Maybe Data.POSIX,
+    -- | The revision of the package version.
+    revision :: Prelude.Maybe Prelude.Text,
+    -- | The repository for the source code in the package version, or the source
+    -- code used to build it.
+    sourceCodeRepository :: Prelude.Maybe Prelude.Text,
+    -- | A string that contains the status of the package version.
+    status :: Prelude.Maybe PackageVersionStatus,
+    -- | A summary of the package version. The summary is extracted from the
+    -- package. The information in and detail level of the summary depends on
+    -- the package version\'s format.
+    summary :: Prelude.Maybe Prelude.Text,
+    -- | The version of the package.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageVersionDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'displayName', 'packageVersionDescription_displayName' - The name of the package that is displayed. The @displayName@ varies
+-- depending on the package version\'s format. For example, if an npm
+-- package is named @ui@, is in the namespace @vue@, and has the format
+-- @npm@, then the @displayName@ is @\@vue\/ui@.
+--
+-- 'format', 'packageVersionDescription_format' - The format of the package version.
+--
+-- 'homePage', 'packageVersionDescription_homePage' - The homepage associated with the package.
+--
+-- 'licenses', 'packageVersionDescription_licenses' - Information about licenses associated with the package version.
+--
+-- 'namespace', 'packageVersionDescription_namespace' - The namespace of the package version. The package version component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'origin', 'packageVersionDescription_origin' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionOrigin.html PackageVersionOrigin>
+-- object that contains information about how the package version was added
+-- to the repository.
+--
+-- 'packageName', 'packageVersionDescription_packageName' - The name of the requested package.
+--
+-- 'publishedTime', 'packageVersionDescription_publishedTime' - A timestamp that contains the date and time the package version was
+-- published.
+--
+-- 'revision', 'packageVersionDescription_revision' - The revision of the package version.
+--
+-- 'sourceCodeRepository', 'packageVersionDescription_sourceCodeRepository' - The repository for the source code in the package version, or the source
+-- code used to build it.
+--
+-- 'status', 'packageVersionDescription_status' - A string that contains the status of the package version.
+--
+-- 'summary', 'packageVersionDescription_summary' - A summary of the package version. The summary is extracted from the
+-- package. The information in and detail level of the summary depends on
+-- the package version\'s format.
+--
+-- 'version', 'packageVersionDescription_version' - The version of the package.
+newPackageVersionDescription ::
+  PackageVersionDescription
+newPackageVersionDescription =
+  PackageVersionDescription'
+    { displayName =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      homePage = Prelude.Nothing,
+      licenses = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      origin = Prelude.Nothing,
+      packageName = Prelude.Nothing,
+      publishedTime = Prelude.Nothing,
+      revision = Prelude.Nothing,
+      sourceCodeRepository = Prelude.Nothing,
+      status = Prelude.Nothing,
+      summary = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The name of the package that is displayed. The @displayName@ varies
+-- depending on the package version\'s format. For example, if an npm
+-- package is named @ui@, is in the namespace @vue@, and has the format
+-- @npm@, then the @displayName@ is @\@vue\/ui@.
+packageVersionDescription_displayName :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_displayName = Lens.lens (\PackageVersionDescription' {displayName} -> displayName) (\s@PackageVersionDescription' {} a -> s {displayName = a} :: PackageVersionDescription)
+
+-- | The format of the package version.
+packageVersionDescription_format :: Lens.Lens' PackageVersionDescription (Prelude.Maybe PackageFormat)
+packageVersionDescription_format = Lens.lens (\PackageVersionDescription' {format} -> format) (\s@PackageVersionDescription' {} a -> s {format = a} :: PackageVersionDescription)
+
+-- | The homepage associated with the package.
+packageVersionDescription_homePage :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_homePage = Lens.lens (\PackageVersionDescription' {homePage} -> homePage) (\s@PackageVersionDescription' {} a -> s {homePage = a} :: PackageVersionDescription)
+
+-- | Information about licenses associated with the package version.
+packageVersionDescription_licenses :: Lens.Lens' PackageVersionDescription (Prelude.Maybe [LicenseInfo])
+packageVersionDescription_licenses = Lens.lens (\PackageVersionDescription' {licenses} -> licenses) (\s@PackageVersionDescription' {} a -> s {licenses = a} :: PackageVersionDescription) Prelude.. Lens.mapping Lens.coerced
+
+-- | The namespace of the package version. The package version component that
+-- specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+packageVersionDescription_namespace :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_namespace = Lens.lens (\PackageVersionDescription' {namespace} -> namespace) (\s@PackageVersionDescription' {} a -> s {namespace = a} :: PackageVersionDescription)
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionOrigin.html PackageVersionOrigin>
+-- object that contains information about how the package version was added
+-- to the repository.
+packageVersionDescription_origin :: Lens.Lens' PackageVersionDescription (Prelude.Maybe PackageVersionOrigin)
+packageVersionDescription_origin = Lens.lens (\PackageVersionDescription' {origin} -> origin) (\s@PackageVersionDescription' {} a -> s {origin = a} :: PackageVersionDescription)
+
+-- | The name of the requested package.
+packageVersionDescription_packageName :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_packageName = Lens.lens (\PackageVersionDescription' {packageName} -> packageName) (\s@PackageVersionDescription' {} a -> s {packageName = a} :: PackageVersionDescription)
+
+-- | A timestamp that contains the date and time the package version was
+-- published.
+packageVersionDescription_publishedTime :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.UTCTime)
+packageVersionDescription_publishedTime = Lens.lens (\PackageVersionDescription' {publishedTime} -> publishedTime) (\s@PackageVersionDescription' {} a -> s {publishedTime = a} :: PackageVersionDescription) Prelude.. Lens.mapping Data._Time
+
+-- | The revision of the package version.
+packageVersionDescription_revision :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_revision = Lens.lens (\PackageVersionDescription' {revision} -> revision) (\s@PackageVersionDescription' {} a -> s {revision = a} :: PackageVersionDescription)
+
+-- | The repository for the source code in the package version, or the source
+-- code used to build it.
+packageVersionDescription_sourceCodeRepository :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_sourceCodeRepository = Lens.lens (\PackageVersionDescription' {sourceCodeRepository} -> sourceCodeRepository) (\s@PackageVersionDescription' {} a -> s {sourceCodeRepository = a} :: PackageVersionDescription)
+
+-- | A string that contains the status of the package version.
+packageVersionDescription_status :: Lens.Lens' PackageVersionDescription (Prelude.Maybe PackageVersionStatus)
+packageVersionDescription_status = Lens.lens (\PackageVersionDescription' {status} -> status) (\s@PackageVersionDescription' {} a -> s {status = a} :: PackageVersionDescription)
+
+-- | A summary of the package version. The summary is extracted from the
+-- package. The information in and detail level of the summary depends on
+-- the package version\'s format.
+packageVersionDescription_summary :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_summary = Lens.lens (\PackageVersionDescription' {summary} -> summary) (\s@PackageVersionDescription' {} a -> s {summary = a} :: PackageVersionDescription)
+
+-- | The version of the package.
+packageVersionDescription_version :: Lens.Lens' PackageVersionDescription (Prelude.Maybe Prelude.Text)
+packageVersionDescription_version = Lens.lens (\PackageVersionDescription' {version} -> version) (\s@PackageVersionDescription' {} a -> s {version = a} :: PackageVersionDescription)
+
+instance Data.FromJSON PackageVersionDescription where
+  parseJSON =
+    Data.withObject
+      "PackageVersionDescription"
+      ( \x ->
+          PackageVersionDescription'
+            Prelude.<$> (x Data..:? "displayName")
+            Prelude.<*> (x Data..:? "format")
+            Prelude.<*> (x Data..:? "homePage")
+            Prelude.<*> (x Data..:? "licenses" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "namespace")
+            Prelude.<*> (x Data..:? "origin")
+            Prelude.<*> (x Data..:? "packageName")
+            Prelude.<*> (x Data..:? "publishedTime")
+            Prelude.<*> (x Data..:? "revision")
+            Prelude.<*> (x Data..:? "sourceCodeRepository")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "summary")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable PackageVersionDescription where
+  hashWithSalt _salt PackageVersionDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` homePage
+      `Prelude.hashWithSalt` licenses
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` origin
+      `Prelude.hashWithSalt` packageName
+      `Prelude.hashWithSalt` publishedTime
+      `Prelude.hashWithSalt` revision
+      `Prelude.hashWithSalt` sourceCodeRepository
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` summary
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData PackageVersionDescription where
+  rnf PackageVersionDescription' {..} =
+    Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf homePage
+      `Prelude.seq` Prelude.rnf licenses
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf packageName
+      `Prelude.seq` Prelude.rnf publishedTime
+      `Prelude.seq` Prelude.rnf revision
+      `Prelude.seq` Prelude.rnf sourceCodeRepository
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf summary
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionError.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionError.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionError where
+
+import Amazonka.CodeArtifact.Types.PackageVersionErrorCode
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | l An error associated with package.
+--
+-- /See:/ 'newPackageVersionError' smart constructor.
+data PackageVersionError = PackageVersionError'
+  { -- | The error code associated with the error. Valid error codes are:
+    --
+    -- -   @ALREADY_EXISTS@
+    --
+    -- -   @MISMATCHED_REVISION@
+    --
+    -- -   @MISMATCHED_STATUS@
+    --
+    -- -   @NOT_ALLOWED@
+    --
+    -- -   @NOT_FOUND@
+    --
+    -- -   @SKIPPED@
+    errorCode :: Prelude.Maybe PackageVersionErrorCode,
+    -- | The error message associated with the error.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageVersionError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'packageVersionError_errorCode' - The error code associated with the error. Valid error codes are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+--
+-- 'errorMessage', 'packageVersionError_errorMessage' - The error message associated with the error.
+newPackageVersionError ::
+  PackageVersionError
+newPackageVersionError =
+  PackageVersionError'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The error code associated with the error. Valid error codes are:
+--
+-- -   @ALREADY_EXISTS@
+--
+-- -   @MISMATCHED_REVISION@
+--
+-- -   @MISMATCHED_STATUS@
+--
+-- -   @NOT_ALLOWED@
+--
+-- -   @NOT_FOUND@
+--
+-- -   @SKIPPED@
+packageVersionError_errorCode :: Lens.Lens' PackageVersionError (Prelude.Maybe PackageVersionErrorCode)
+packageVersionError_errorCode = Lens.lens (\PackageVersionError' {errorCode} -> errorCode) (\s@PackageVersionError' {} a -> s {errorCode = a} :: PackageVersionError)
+
+-- | The error message associated with the error.
+packageVersionError_errorMessage :: Lens.Lens' PackageVersionError (Prelude.Maybe Prelude.Text)
+packageVersionError_errorMessage = Lens.lens (\PackageVersionError' {errorMessage} -> errorMessage) (\s@PackageVersionError' {} a -> s {errorMessage = a} :: PackageVersionError)
+
+instance Data.FromJSON PackageVersionError where
+  parseJSON =
+    Data.withObject
+      "PackageVersionError"
+      ( \x ->
+          PackageVersionError'
+            Prelude.<$> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+      )
+
+instance Prelude.Hashable PackageVersionError where
+  hashWithSalt _salt PackageVersionError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+
+instance Prelude.NFData PackageVersionError where
+  rnf PackageVersionError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionErrorCode.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionErrorCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionErrorCode
+  ( PackageVersionErrorCode
+      ( ..,
+        PackageVersionErrorCode_ALREADY_EXISTS,
+        PackageVersionErrorCode_MISMATCHED_REVISION,
+        PackageVersionErrorCode_MISMATCHED_STATUS,
+        PackageVersionErrorCode_NOT_ALLOWED,
+        PackageVersionErrorCode_NOT_FOUND,
+        PackageVersionErrorCode_SKIPPED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PackageVersionErrorCode = PackageVersionErrorCode'
+  { fromPackageVersionErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PackageVersionErrorCode_ALREADY_EXISTS :: PackageVersionErrorCode
+pattern PackageVersionErrorCode_ALREADY_EXISTS = PackageVersionErrorCode' "ALREADY_EXISTS"
+
+pattern PackageVersionErrorCode_MISMATCHED_REVISION :: PackageVersionErrorCode
+pattern PackageVersionErrorCode_MISMATCHED_REVISION = PackageVersionErrorCode' "MISMATCHED_REVISION"
+
+pattern PackageVersionErrorCode_MISMATCHED_STATUS :: PackageVersionErrorCode
+pattern PackageVersionErrorCode_MISMATCHED_STATUS = PackageVersionErrorCode' "MISMATCHED_STATUS"
+
+pattern PackageVersionErrorCode_NOT_ALLOWED :: PackageVersionErrorCode
+pattern PackageVersionErrorCode_NOT_ALLOWED = PackageVersionErrorCode' "NOT_ALLOWED"
+
+pattern PackageVersionErrorCode_NOT_FOUND :: PackageVersionErrorCode
+pattern PackageVersionErrorCode_NOT_FOUND = PackageVersionErrorCode' "NOT_FOUND"
+
+pattern PackageVersionErrorCode_SKIPPED :: PackageVersionErrorCode
+pattern PackageVersionErrorCode_SKIPPED = PackageVersionErrorCode' "SKIPPED"
+
+{-# COMPLETE
+  PackageVersionErrorCode_ALREADY_EXISTS,
+  PackageVersionErrorCode_MISMATCHED_REVISION,
+  PackageVersionErrorCode_MISMATCHED_STATUS,
+  PackageVersionErrorCode_NOT_ALLOWED,
+  PackageVersionErrorCode_NOT_FOUND,
+  PackageVersionErrorCode_SKIPPED,
+  PackageVersionErrorCode'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionOrigin.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionOrigin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionOrigin.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionOrigin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionOrigin where
+
+import Amazonka.CodeArtifact.Types.DomainEntryPoint
+import Amazonka.CodeArtifact.Types.PackageVersionOriginType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about how a package version was added to a repository.
+--
+-- /See:/ 'newPackageVersionOrigin' smart constructor.
+data PackageVersionOrigin = PackageVersionOrigin'
+  { -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DomainEntryPoint.html DomainEntryPoint>
+    -- object that contains information about from which repository or external
+    -- connection the package version was added to the domain.
+    domainEntryPoint :: Prelude.Maybe DomainEntryPoint,
+    -- | Describes how the package version was originally added to the domain. An
+    -- @INTERNAL@ origin type means the package version was published directly
+    -- to a repository in the domain. An @EXTERNAL@ origin type means the
+    -- package version was ingested from an external connection.
+    originType :: Prelude.Maybe PackageVersionOriginType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageVersionOrigin' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainEntryPoint', 'packageVersionOrigin_domainEntryPoint' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DomainEntryPoint.html DomainEntryPoint>
+-- object that contains information about from which repository or external
+-- connection the package version was added to the domain.
+--
+-- 'originType', 'packageVersionOrigin_originType' - Describes how the package version was originally added to the domain. An
+-- @INTERNAL@ origin type means the package version was published directly
+-- to a repository in the domain. An @EXTERNAL@ origin type means the
+-- package version was ingested from an external connection.
+newPackageVersionOrigin ::
+  PackageVersionOrigin
+newPackageVersionOrigin =
+  PackageVersionOrigin'
+    { domainEntryPoint =
+        Prelude.Nothing,
+      originType = Prelude.Nothing
+    }
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DomainEntryPoint.html DomainEntryPoint>
+-- object that contains information about from which repository or external
+-- connection the package version was added to the domain.
+packageVersionOrigin_domainEntryPoint :: Lens.Lens' PackageVersionOrigin (Prelude.Maybe DomainEntryPoint)
+packageVersionOrigin_domainEntryPoint = Lens.lens (\PackageVersionOrigin' {domainEntryPoint} -> domainEntryPoint) (\s@PackageVersionOrigin' {} a -> s {domainEntryPoint = a} :: PackageVersionOrigin)
+
+-- | Describes how the package version was originally added to the domain. An
+-- @INTERNAL@ origin type means the package version was published directly
+-- to a repository in the domain. An @EXTERNAL@ origin type means the
+-- package version was ingested from an external connection.
+packageVersionOrigin_originType :: Lens.Lens' PackageVersionOrigin (Prelude.Maybe PackageVersionOriginType)
+packageVersionOrigin_originType = Lens.lens (\PackageVersionOrigin' {originType} -> originType) (\s@PackageVersionOrigin' {} a -> s {originType = a} :: PackageVersionOrigin)
+
+instance Data.FromJSON PackageVersionOrigin where
+  parseJSON =
+    Data.withObject
+      "PackageVersionOrigin"
+      ( \x ->
+          PackageVersionOrigin'
+            Prelude.<$> (x Data..:? "domainEntryPoint")
+            Prelude.<*> (x Data..:? "originType")
+      )
+
+instance Prelude.Hashable PackageVersionOrigin where
+  hashWithSalt _salt PackageVersionOrigin' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainEntryPoint
+      `Prelude.hashWithSalt` originType
+
+instance Prelude.NFData PackageVersionOrigin where
+  rnf PackageVersionOrigin' {..} =
+    Prelude.rnf domainEntryPoint
+      `Prelude.seq` Prelude.rnf originType
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionOriginType.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionOriginType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionOriginType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionOriginType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionOriginType
+  ( PackageVersionOriginType
+      ( ..,
+        PackageVersionOriginType_EXTERNAL,
+        PackageVersionOriginType_INTERNAL,
+        PackageVersionOriginType_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PackageVersionOriginType = PackageVersionOriginType'
+  { fromPackageVersionOriginType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PackageVersionOriginType_EXTERNAL :: PackageVersionOriginType
+pattern PackageVersionOriginType_EXTERNAL = PackageVersionOriginType' "EXTERNAL"
+
+pattern PackageVersionOriginType_INTERNAL :: PackageVersionOriginType
+pattern PackageVersionOriginType_INTERNAL = PackageVersionOriginType' "INTERNAL"
+
+pattern PackageVersionOriginType_UNKNOWN :: PackageVersionOriginType
+pattern PackageVersionOriginType_UNKNOWN = PackageVersionOriginType' "UNKNOWN"
+
+{-# COMPLETE
+  PackageVersionOriginType_EXTERNAL,
+  PackageVersionOriginType_INTERNAL,
+  PackageVersionOriginType_UNKNOWN,
+  PackageVersionOriginType'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionSortType.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionSortType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionSortType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionSortType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionSortType
+  ( PackageVersionSortType
+      ( ..,
+        PackageVersionSortType_PUBLISHED_TIME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PackageVersionSortType = PackageVersionSortType'
+  { fromPackageVersionSortType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PackageVersionSortType_PUBLISHED_TIME :: PackageVersionSortType
+pattern PackageVersionSortType_PUBLISHED_TIME = PackageVersionSortType' "PUBLISHED_TIME"
+
+{-# COMPLETE
+  PackageVersionSortType_PUBLISHED_TIME,
+  PackageVersionSortType'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionStatus.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionStatus
+  ( PackageVersionStatus
+      ( ..,
+        PackageVersionStatus_Archived,
+        PackageVersionStatus_Deleted,
+        PackageVersionStatus_Disposed,
+        PackageVersionStatus_Published,
+        PackageVersionStatus_Unfinished,
+        PackageVersionStatus_Unlisted
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PackageVersionStatus = PackageVersionStatus'
+  { fromPackageVersionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PackageVersionStatus_Archived :: PackageVersionStatus
+pattern PackageVersionStatus_Archived = PackageVersionStatus' "Archived"
+
+pattern PackageVersionStatus_Deleted :: PackageVersionStatus
+pattern PackageVersionStatus_Deleted = PackageVersionStatus' "Deleted"
+
+pattern PackageVersionStatus_Disposed :: PackageVersionStatus
+pattern PackageVersionStatus_Disposed = PackageVersionStatus' "Disposed"
+
+pattern PackageVersionStatus_Published :: PackageVersionStatus
+pattern PackageVersionStatus_Published = PackageVersionStatus' "Published"
+
+pattern PackageVersionStatus_Unfinished :: PackageVersionStatus
+pattern PackageVersionStatus_Unfinished = PackageVersionStatus' "Unfinished"
+
+pattern PackageVersionStatus_Unlisted :: PackageVersionStatus
+pattern PackageVersionStatus_Unlisted = PackageVersionStatus' "Unlisted"
+
+{-# COMPLETE
+  PackageVersionStatus_Archived,
+  PackageVersionStatus_Deleted,
+  PackageVersionStatus_Disposed,
+  PackageVersionStatus_Published,
+  PackageVersionStatus_Unfinished,
+  PackageVersionStatus_Unlisted,
+  PackageVersionStatus'
+  #-}
diff --git a/gen/Amazonka/CodeArtifact/Types/PackageVersionSummary.hs b/gen/Amazonka/CodeArtifact/Types/PackageVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/PackageVersionSummary.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.PackageVersionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.PackageVersionSummary where
+
+import Amazonka.CodeArtifact.Types.PackageVersionOrigin
+import Amazonka.CodeArtifact.Types.PackageVersionStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a package version, including its status, version, and
+-- revision. The
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersions.html ListPackageVersions>
+-- operation returns a list of @PackageVersionSummary@ objects.
+--
+-- /See:/ 'newPackageVersionSummary' smart constructor.
+data PackageVersionSummary = PackageVersionSummary'
+  { -- | A
+    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionOrigin.html PackageVersionOrigin>
+    -- object that contains information about how the package version was added
+    -- to the repository.
+    origin :: Prelude.Maybe PackageVersionOrigin,
+    -- | The revision associated with a package version.
+    revision :: Prelude.Maybe Prelude.Text,
+    -- | Information about a package version.
+    version :: Prelude.Text,
+    -- | A string that contains the status of the package version. It can be one
+    -- of the following:
+    status :: PackageVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackageVersionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'origin', 'packageVersionSummary_origin' - A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionOrigin.html PackageVersionOrigin>
+-- object that contains information about how the package version was added
+-- to the repository.
+--
+-- 'revision', 'packageVersionSummary_revision' - The revision associated with a package version.
+--
+-- 'version', 'packageVersionSummary_version' - Information about a package version.
+--
+-- 'status', 'packageVersionSummary_status' - A string that contains the status of the package version. It can be one
+-- of the following:
+newPackageVersionSummary ::
+  -- | 'version'
+  Prelude.Text ->
+  -- | 'status'
+  PackageVersionStatus ->
+  PackageVersionSummary
+newPackageVersionSummary pVersion_ pStatus_ =
+  PackageVersionSummary'
+    { origin = Prelude.Nothing,
+      revision = Prelude.Nothing,
+      version = pVersion_,
+      status = pStatus_
+    }
+
+-- | A
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageVersionOrigin.html PackageVersionOrigin>
+-- object that contains information about how the package version was added
+-- to the repository.
+packageVersionSummary_origin :: Lens.Lens' PackageVersionSummary (Prelude.Maybe PackageVersionOrigin)
+packageVersionSummary_origin = Lens.lens (\PackageVersionSummary' {origin} -> origin) (\s@PackageVersionSummary' {} a -> s {origin = a} :: PackageVersionSummary)
+
+-- | The revision associated with a package version.
+packageVersionSummary_revision :: Lens.Lens' PackageVersionSummary (Prelude.Maybe Prelude.Text)
+packageVersionSummary_revision = Lens.lens (\PackageVersionSummary' {revision} -> revision) (\s@PackageVersionSummary' {} a -> s {revision = a} :: PackageVersionSummary)
+
+-- | Information about a package version.
+packageVersionSummary_version :: Lens.Lens' PackageVersionSummary Prelude.Text
+packageVersionSummary_version = Lens.lens (\PackageVersionSummary' {version} -> version) (\s@PackageVersionSummary' {} a -> s {version = a} :: PackageVersionSummary)
+
+-- | A string that contains the status of the package version. It can be one
+-- of the following:
+packageVersionSummary_status :: Lens.Lens' PackageVersionSummary PackageVersionStatus
+packageVersionSummary_status = Lens.lens (\PackageVersionSummary' {status} -> status) (\s@PackageVersionSummary' {} a -> s {status = a} :: PackageVersionSummary)
+
+instance Data.FromJSON PackageVersionSummary where
+  parseJSON =
+    Data.withObject
+      "PackageVersionSummary"
+      ( \x ->
+          PackageVersionSummary'
+            Prelude.<$> (x Data..:? "origin")
+            Prelude.<*> (x Data..:? "revision")
+            Prelude.<*> (x Data..: "version")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable PackageVersionSummary where
+  hashWithSalt _salt PackageVersionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` origin
+      `Prelude.hashWithSalt` revision
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData PackageVersionSummary where
+  rnf PackageVersionSummary' {..} =
+    Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf revision
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/CodeArtifact/Types/RepositoryDescription.hs b/gen/Amazonka/CodeArtifact/Types/RepositoryDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/RepositoryDescription.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.RepositoryDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.RepositoryDescription where
+
+import Amazonka.CodeArtifact.Types.RepositoryExternalConnectionInfo
+import Amazonka.CodeArtifact.Types.UpstreamRepositoryInfo
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of a repository stored in CodeArtifact. A CodeArtifact
+-- repository contains a set of package versions, each of which maps to a
+-- set of assets. Repositories are polyglot—a single repository can contain
+-- packages of any supported type. Each repository exposes endpoints for
+-- fetching and publishing packages using tools like the @npm@ CLI, the
+-- Maven CLI (@mvn@), and @pip@. You can create up to 100 repositories per
+-- Amazon Web Services account.
+--
+-- /See:/ 'newRepositoryDescription' smart constructor.
+data RepositoryDescription = RepositoryDescription'
+  { -- | The 12-digit account number of the Amazon Web Services account that
+    -- manages the repository.
+    administratorAccount :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the repository.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A text description of the repository.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain that contains the repository. It does not include dashes or
+    -- spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | An array of external connections associated with the repository.
+    externalConnections :: Prelude.Maybe [RepositoryExternalConnectionInfo],
+    -- | The name of the repository.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of upstream repositories to associate with the repository. The
+    -- order of the upstream repositories in the list determines their priority
+    -- order when CodeArtifact looks for a requested package version. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+    upstreams :: Prelude.Maybe [UpstreamRepositoryInfo]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RepositoryDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'administratorAccount', 'repositoryDescription_administratorAccount' - The 12-digit account number of the Amazon Web Services account that
+-- manages the repository.
+--
+-- 'arn', 'repositoryDescription_arn' - The Amazon Resource Name (ARN) of the repository.
+--
+-- 'description', 'repositoryDescription_description' - A text description of the repository.
+--
+-- 'domainName', 'repositoryDescription_domainName' - The name of the domain that contains the repository.
+--
+-- 'domainOwner', 'repositoryDescription_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain that contains the repository. It does not include dashes or
+-- spaces.
+--
+-- 'externalConnections', 'repositoryDescription_externalConnections' - An array of external connections associated with the repository.
+--
+-- 'name', 'repositoryDescription_name' - The name of the repository.
+--
+-- 'upstreams', 'repositoryDescription_upstreams' - A list of upstream repositories to associate with the repository. The
+-- order of the upstream repositories in the list determines their priority
+-- order when CodeArtifact looks for a requested package version. For more
+-- information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+newRepositoryDescription ::
+  RepositoryDescription
+newRepositoryDescription =
+  RepositoryDescription'
+    { administratorAccount =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      domainOwner = Prelude.Nothing,
+      externalConnections = Prelude.Nothing,
+      name = Prelude.Nothing,
+      upstreams = Prelude.Nothing
+    }
+
+-- | The 12-digit account number of the Amazon Web Services account that
+-- manages the repository.
+repositoryDescription_administratorAccount :: Lens.Lens' RepositoryDescription (Prelude.Maybe Prelude.Text)
+repositoryDescription_administratorAccount = Lens.lens (\RepositoryDescription' {administratorAccount} -> administratorAccount) (\s@RepositoryDescription' {} a -> s {administratorAccount = a} :: RepositoryDescription)
+
+-- | The Amazon Resource Name (ARN) of the repository.
+repositoryDescription_arn :: Lens.Lens' RepositoryDescription (Prelude.Maybe Prelude.Text)
+repositoryDescription_arn = Lens.lens (\RepositoryDescription' {arn} -> arn) (\s@RepositoryDescription' {} a -> s {arn = a} :: RepositoryDescription)
+
+-- | A text description of the repository.
+repositoryDescription_description :: Lens.Lens' RepositoryDescription (Prelude.Maybe Prelude.Text)
+repositoryDescription_description = Lens.lens (\RepositoryDescription' {description} -> description) (\s@RepositoryDescription' {} a -> s {description = a} :: RepositoryDescription)
+
+-- | The name of the domain that contains the repository.
+repositoryDescription_domainName :: Lens.Lens' RepositoryDescription (Prelude.Maybe Prelude.Text)
+repositoryDescription_domainName = Lens.lens (\RepositoryDescription' {domainName} -> domainName) (\s@RepositoryDescription' {} a -> s {domainName = a} :: RepositoryDescription)
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain that contains the repository. It does not include dashes or
+-- spaces.
+repositoryDescription_domainOwner :: Lens.Lens' RepositoryDescription (Prelude.Maybe Prelude.Text)
+repositoryDescription_domainOwner = Lens.lens (\RepositoryDescription' {domainOwner} -> domainOwner) (\s@RepositoryDescription' {} a -> s {domainOwner = a} :: RepositoryDescription)
+
+-- | An array of external connections associated with the repository.
+repositoryDescription_externalConnections :: Lens.Lens' RepositoryDescription (Prelude.Maybe [RepositoryExternalConnectionInfo])
+repositoryDescription_externalConnections = Lens.lens (\RepositoryDescription' {externalConnections} -> externalConnections) (\s@RepositoryDescription' {} a -> s {externalConnections = a} :: RepositoryDescription) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the repository.
+repositoryDescription_name :: Lens.Lens' RepositoryDescription (Prelude.Maybe Prelude.Text)
+repositoryDescription_name = Lens.lens (\RepositoryDescription' {name} -> name) (\s@RepositoryDescription' {} a -> s {name = a} :: RepositoryDescription)
+
+-- | A list of upstream repositories to associate with the repository. The
+-- order of the upstream repositories in the list determines their priority
+-- order when CodeArtifact looks for a requested package version. For more
+-- information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+repositoryDescription_upstreams :: Lens.Lens' RepositoryDescription (Prelude.Maybe [UpstreamRepositoryInfo])
+repositoryDescription_upstreams = Lens.lens (\RepositoryDescription' {upstreams} -> upstreams) (\s@RepositoryDescription' {} a -> s {upstreams = a} :: RepositoryDescription) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON RepositoryDescription where
+  parseJSON =
+    Data.withObject
+      "RepositoryDescription"
+      ( \x ->
+          RepositoryDescription'
+            Prelude.<$> (x Data..:? "administratorAccount")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "domainName")
+            Prelude.<*> (x Data..:? "domainOwner")
+            Prelude.<*> ( x
+                            Data..:? "externalConnections"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "upstreams" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable RepositoryDescription where
+  hashWithSalt _salt RepositoryDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` administratorAccount
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` externalConnections
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` upstreams
+
+instance Prelude.NFData RepositoryDescription where
+  rnf RepositoryDescription' {..} =
+    Prelude.rnf administratorAccount
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf externalConnections
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf upstreams
diff --git a/gen/Amazonka/CodeArtifact/Types/RepositoryExternalConnectionInfo.hs b/gen/Amazonka/CodeArtifact/Types/RepositoryExternalConnectionInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/RepositoryExternalConnectionInfo.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.RepositoryExternalConnectionInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.RepositoryExternalConnectionInfo where
+
+import Amazonka.CodeArtifact.Types.ExternalConnectionStatus
+import Amazonka.CodeArtifact.Types.PackageFormat
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the external connection of a repository.
+--
+-- /See:/ 'newRepositoryExternalConnectionInfo' smart constructor.
+data RepositoryExternalConnectionInfo = RepositoryExternalConnectionInfo'
+  { -- | The name of the external connection associated with a repository.
+    externalConnectionName :: Prelude.Maybe Prelude.Text,
+    -- | The package format associated with a repository\'s external connection.
+    -- The valid package formats are:
+    --
+    -- -   @npm@: A Node Package Manager (npm) package.
+    --
+    -- -   @pypi@: A Python Package Index (PyPI) package.
+    --
+    -- -   @maven@: A Maven package that contains compiled code in a
+    --     distributable format, such as a JAR file.
+    --
+    -- -   @nuget@: A NuGet package.
+    packageFormat :: Prelude.Maybe PackageFormat,
+    -- | The status of the external connection of a repository. There is one
+    -- valid value, @Available@.
+    status :: Prelude.Maybe ExternalConnectionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RepositoryExternalConnectionInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'externalConnectionName', 'repositoryExternalConnectionInfo_externalConnectionName' - The name of the external connection associated with a repository.
+--
+-- 'packageFormat', 'repositoryExternalConnectionInfo_packageFormat' - The package format associated with a repository\'s external connection.
+-- The valid package formats are:
+--
+-- -   @npm@: A Node Package Manager (npm) package.
+--
+-- -   @pypi@: A Python Package Index (PyPI) package.
+--
+-- -   @maven@: A Maven package that contains compiled code in a
+--     distributable format, such as a JAR file.
+--
+-- -   @nuget@: A NuGet package.
+--
+-- 'status', 'repositoryExternalConnectionInfo_status' - The status of the external connection of a repository. There is one
+-- valid value, @Available@.
+newRepositoryExternalConnectionInfo ::
+  RepositoryExternalConnectionInfo
+newRepositoryExternalConnectionInfo =
+  RepositoryExternalConnectionInfo'
+    { externalConnectionName =
+        Prelude.Nothing,
+      packageFormat = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The name of the external connection associated with a repository.
+repositoryExternalConnectionInfo_externalConnectionName :: Lens.Lens' RepositoryExternalConnectionInfo (Prelude.Maybe Prelude.Text)
+repositoryExternalConnectionInfo_externalConnectionName = Lens.lens (\RepositoryExternalConnectionInfo' {externalConnectionName} -> externalConnectionName) (\s@RepositoryExternalConnectionInfo' {} a -> s {externalConnectionName = a} :: RepositoryExternalConnectionInfo)
+
+-- | The package format associated with a repository\'s external connection.
+-- The valid package formats are:
+--
+-- -   @npm@: A Node Package Manager (npm) package.
+--
+-- -   @pypi@: A Python Package Index (PyPI) package.
+--
+-- -   @maven@: A Maven package that contains compiled code in a
+--     distributable format, such as a JAR file.
+--
+-- -   @nuget@: A NuGet package.
+repositoryExternalConnectionInfo_packageFormat :: Lens.Lens' RepositoryExternalConnectionInfo (Prelude.Maybe PackageFormat)
+repositoryExternalConnectionInfo_packageFormat = Lens.lens (\RepositoryExternalConnectionInfo' {packageFormat} -> packageFormat) (\s@RepositoryExternalConnectionInfo' {} a -> s {packageFormat = a} :: RepositoryExternalConnectionInfo)
+
+-- | The status of the external connection of a repository. There is one
+-- valid value, @Available@.
+repositoryExternalConnectionInfo_status :: Lens.Lens' RepositoryExternalConnectionInfo (Prelude.Maybe ExternalConnectionStatus)
+repositoryExternalConnectionInfo_status = Lens.lens (\RepositoryExternalConnectionInfo' {status} -> status) (\s@RepositoryExternalConnectionInfo' {} a -> s {status = a} :: RepositoryExternalConnectionInfo)
+
+instance
+  Data.FromJSON
+    RepositoryExternalConnectionInfo
+  where
+  parseJSON =
+    Data.withObject
+      "RepositoryExternalConnectionInfo"
+      ( \x ->
+          RepositoryExternalConnectionInfo'
+            Prelude.<$> (x Data..:? "externalConnectionName")
+            Prelude.<*> (x Data..:? "packageFormat")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance
+  Prelude.Hashable
+    RepositoryExternalConnectionInfo
+  where
+  hashWithSalt
+    _salt
+    RepositoryExternalConnectionInfo' {..} =
+      _salt
+        `Prelude.hashWithSalt` externalConnectionName
+        `Prelude.hashWithSalt` packageFormat
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    RepositoryExternalConnectionInfo
+  where
+  rnf RepositoryExternalConnectionInfo' {..} =
+    Prelude.rnf externalConnectionName
+      `Prelude.seq` Prelude.rnf packageFormat
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/CodeArtifact/Types/RepositorySummary.hs b/gen/Amazonka/CodeArtifact/Types/RepositorySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/RepositorySummary.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.RepositorySummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.RepositorySummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a repository, including its Amazon Resource Name (ARN),
+-- description, and domain information. The
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositories.html ListRepositories>
+-- operation returns a list of @RepositorySummary@ objects.
+--
+-- /See:/ 'newRepositorySummary' smart constructor.
+data RepositorySummary = RepositorySummary'
+  { -- | The Amazon Web Services account ID that manages the repository.
+    administratorAccount :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the repository.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the repository.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the domain that contains the repository.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the repository.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RepositorySummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'administratorAccount', 'repositorySummary_administratorAccount' - The Amazon Web Services account ID that manages the repository.
+--
+-- 'arn', 'repositorySummary_arn' - The ARN of the repository.
+--
+-- 'description', 'repositorySummary_description' - The description of the repository.
+--
+-- 'domainName', 'repositorySummary_domainName' - The name of the domain that contains the repository.
+--
+-- 'domainOwner', 'repositorySummary_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'name', 'repositorySummary_name' - The name of the repository.
+newRepositorySummary ::
+  RepositorySummary
+newRepositorySummary =
+  RepositorySummary'
+    { administratorAccount =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      domainOwner = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services account ID that manages the repository.
+repositorySummary_administratorAccount :: Lens.Lens' RepositorySummary (Prelude.Maybe Prelude.Text)
+repositorySummary_administratorAccount = Lens.lens (\RepositorySummary' {administratorAccount} -> administratorAccount) (\s@RepositorySummary' {} a -> s {administratorAccount = a} :: RepositorySummary)
+
+-- | The ARN of the repository.
+repositorySummary_arn :: Lens.Lens' RepositorySummary (Prelude.Maybe Prelude.Text)
+repositorySummary_arn = Lens.lens (\RepositorySummary' {arn} -> arn) (\s@RepositorySummary' {} a -> s {arn = a} :: RepositorySummary)
+
+-- | The description of the repository.
+repositorySummary_description :: Lens.Lens' RepositorySummary (Prelude.Maybe Prelude.Text)
+repositorySummary_description = Lens.lens (\RepositorySummary' {description} -> description) (\s@RepositorySummary' {} a -> s {description = a} :: RepositorySummary)
+
+-- | The name of the domain that contains the repository.
+repositorySummary_domainName :: Lens.Lens' RepositorySummary (Prelude.Maybe Prelude.Text)
+repositorySummary_domainName = Lens.lens (\RepositorySummary' {domainName} -> domainName) (\s@RepositorySummary' {} a -> s {domainName = a} :: RepositorySummary)
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+repositorySummary_domainOwner :: Lens.Lens' RepositorySummary (Prelude.Maybe Prelude.Text)
+repositorySummary_domainOwner = Lens.lens (\RepositorySummary' {domainOwner} -> domainOwner) (\s@RepositorySummary' {} a -> s {domainOwner = a} :: RepositorySummary)
+
+-- | The name of the repository.
+repositorySummary_name :: Lens.Lens' RepositorySummary (Prelude.Maybe Prelude.Text)
+repositorySummary_name = Lens.lens (\RepositorySummary' {name} -> name) (\s@RepositorySummary' {} a -> s {name = a} :: RepositorySummary)
+
+instance Data.FromJSON RepositorySummary where
+  parseJSON =
+    Data.withObject
+      "RepositorySummary"
+      ( \x ->
+          RepositorySummary'
+            Prelude.<$> (x Data..:? "administratorAccount")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "domainName")
+            Prelude.<*> (x Data..:? "domainOwner")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable RepositorySummary where
+  hashWithSalt _salt RepositorySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` administratorAccount
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData RepositorySummary where
+  rnf RepositorySummary' {..} =
+    Prelude.rnf administratorAccount
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/CodeArtifact/Types/ResourcePolicy.hs b/gen/Amazonka/CodeArtifact/Types/ResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/ResourcePolicy.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.ResourcePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.ResourcePolicy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An CodeArtifact resource policy that contains a resource ARN, document
+-- details, and a revision.
+--
+-- /See:/ 'newResourcePolicy' smart constructor.
+data ResourcePolicy = ResourcePolicy'
+  { -- | The resource policy formatted in JSON.
+    document :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the resource associated with the resource policy
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy.
+    revision :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourcePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'document', 'resourcePolicy_document' - The resource policy formatted in JSON.
+--
+-- 'resourceArn', 'resourcePolicy_resourceArn' - The ARN of the resource associated with the resource policy
+--
+-- 'revision', 'resourcePolicy_revision' - The current revision of the resource policy.
+newResourcePolicy ::
+  ResourcePolicy
+newResourcePolicy =
+  ResourcePolicy'
+    { document = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      revision = Prelude.Nothing
+    }
+
+-- | The resource policy formatted in JSON.
+resourcePolicy_document :: Lens.Lens' ResourcePolicy (Prelude.Maybe Prelude.Text)
+resourcePolicy_document = Lens.lens (\ResourcePolicy' {document} -> document) (\s@ResourcePolicy' {} a -> s {document = a} :: ResourcePolicy)
+
+-- | The ARN of the resource associated with the resource policy
+resourcePolicy_resourceArn :: Lens.Lens' ResourcePolicy (Prelude.Maybe Prelude.Text)
+resourcePolicy_resourceArn = Lens.lens (\ResourcePolicy' {resourceArn} -> resourceArn) (\s@ResourcePolicy' {} a -> s {resourceArn = a} :: ResourcePolicy)
+
+-- | The current revision of the resource policy.
+resourcePolicy_revision :: Lens.Lens' ResourcePolicy (Prelude.Maybe Prelude.Text)
+resourcePolicy_revision = Lens.lens (\ResourcePolicy' {revision} -> revision) (\s@ResourcePolicy' {} a -> s {revision = a} :: ResourcePolicy)
+
+instance Data.FromJSON ResourcePolicy where
+  parseJSON =
+    Data.withObject
+      "ResourcePolicy"
+      ( \x ->
+          ResourcePolicy'
+            Prelude.<$> (x Data..:? "document")
+            Prelude.<*> (x Data..:? "resourceArn")
+            Prelude.<*> (x Data..:? "revision")
+      )
+
+instance Prelude.Hashable ResourcePolicy where
+  hashWithSalt _salt ResourcePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` document
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` revision
+
+instance Prelude.NFData ResourcePolicy where
+  rnf ResourcePolicy' {..} =
+    Prelude.rnf document
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf revision
diff --git a/gen/Amazonka/CodeArtifact/Types/SuccessfulPackageVersionInfo.hs b/gen/Amazonka/CodeArtifact/Types/SuccessfulPackageVersionInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/SuccessfulPackageVersionInfo.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.SuccessfulPackageVersionInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.SuccessfulPackageVersionInfo where
+
+import Amazonka.CodeArtifact.Types.PackageVersionStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the revision and status of a package version.
+--
+-- /See:/ 'newSuccessfulPackageVersionInfo' smart constructor.
+data SuccessfulPackageVersionInfo = SuccessfulPackageVersionInfo'
+  { -- | The revision of a package version.
+    revision :: Prelude.Maybe Prelude.Text,
+    -- | The status of a package version.
+    status :: Prelude.Maybe PackageVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuccessfulPackageVersionInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'revision', 'successfulPackageVersionInfo_revision' - The revision of a package version.
+--
+-- 'status', 'successfulPackageVersionInfo_status' - The status of a package version.
+newSuccessfulPackageVersionInfo ::
+  SuccessfulPackageVersionInfo
+newSuccessfulPackageVersionInfo =
+  SuccessfulPackageVersionInfo'
+    { revision =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The revision of a package version.
+successfulPackageVersionInfo_revision :: Lens.Lens' SuccessfulPackageVersionInfo (Prelude.Maybe Prelude.Text)
+successfulPackageVersionInfo_revision = Lens.lens (\SuccessfulPackageVersionInfo' {revision} -> revision) (\s@SuccessfulPackageVersionInfo' {} a -> s {revision = a} :: SuccessfulPackageVersionInfo)
+
+-- | The status of a package version.
+successfulPackageVersionInfo_status :: Lens.Lens' SuccessfulPackageVersionInfo (Prelude.Maybe PackageVersionStatus)
+successfulPackageVersionInfo_status = Lens.lens (\SuccessfulPackageVersionInfo' {status} -> status) (\s@SuccessfulPackageVersionInfo' {} a -> s {status = a} :: SuccessfulPackageVersionInfo)
+
+instance Data.FromJSON SuccessfulPackageVersionInfo where
+  parseJSON =
+    Data.withObject
+      "SuccessfulPackageVersionInfo"
+      ( \x ->
+          SuccessfulPackageVersionInfo'
+            Prelude.<$> (x Data..:? "revision")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance
+  Prelude.Hashable
+    SuccessfulPackageVersionInfo
+  where
+  hashWithSalt _salt SuccessfulPackageVersionInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` revision
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData SuccessfulPackageVersionInfo where
+  rnf SuccessfulPackageVersionInfo' {..} =
+    Prelude.rnf revision
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/CodeArtifact/Types/Tag.hs b/gen/Amazonka/CodeArtifact/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/Tag.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A tag is a key-value pair that can be used to manage, search for, or
+-- filter resources in CodeArtifact.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The tag key.
+    key :: Prelude.Text,
+    -- | The tag value.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The tag key.
+--
+-- 'value', 'tag_value' - The tag value.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The tag key.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The tag value.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "key")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("key" Data..= key),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/CodeArtifact/Types/UpstreamRepository.hs b/gen/Amazonka/CodeArtifact/Types/UpstreamRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/UpstreamRepository.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.UpstreamRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.UpstreamRepository where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an upstream repository. A list of @UpstreamRepository@
+-- objects is an input parameter to
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_CreateRepository.html CreateRepository>
+-- and
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdateRepository.html UpdateRepository>.
+--
+-- /See:/ 'newUpstreamRepository' smart constructor.
+data UpstreamRepository = UpstreamRepository'
+  { -- | The name of an upstream repository.
+    repositoryName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpstreamRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repositoryName', 'upstreamRepository_repositoryName' - The name of an upstream repository.
+newUpstreamRepository ::
+  -- | 'repositoryName'
+  Prelude.Text ->
+  UpstreamRepository
+newUpstreamRepository pRepositoryName_ =
+  UpstreamRepository'
+    { repositoryName =
+        pRepositoryName_
+    }
+
+-- | The name of an upstream repository.
+upstreamRepository_repositoryName :: Lens.Lens' UpstreamRepository Prelude.Text
+upstreamRepository_repositoryName = Lens.lens (\UpstreamRepository' {repositoryName} -> repositoryName) (\s@UpstreamRepository' {} a -> s {repositoryName = a} :: UpstreamRepository)
+
+instance Prelude.Hashable UpstreamRepository where
+  hashWithSalt _salt UpstreamRepository' {..} =
+    _salt `Prelude.hashWithSalt` repositoryName
+
+instance Prelude.NFData UpstreamRepository where
+  rnf UpstreamRepository' {..} =
+    Prelude.rnf repositoryName
+
+instance Data.ToJSON UpstreamRepository where
+  toJSON UpstreamRepository' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("repositoryName" Data..= repositoryName)
+          ]
+      )
diff --git a/gen/Amazonka/CodeArtifact/Types/UpstreamRepositoryInfo.hs b/gen/Amazonka/CodeArtifact/Types/UpstreamRepositoryInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Types/UpstreamRepositoryInfo.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Types.UpstreamRepositoryInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Types.UpstreamRepositoryInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an upstream repository.
+--
+-- /See:/ 'newUpstreamRepositoryInfo' smart constructor.
+data UpstreamRepositoryInfo = UpstreamRepositoryInfo'
+  { -- | The name of an upstream repository.
+    repositoryName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpstreamRepositoryInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repositoryName', 'upstreamRepositoryInfo_repositoryName' - The name of an upstream repository.
+newUpstreamRepositoryInfo ::
+  UpstreamRepositoryInfo
+newUpstreamRepositoryInfo =
+  UpstreamRepositoryInfo'
+    { repositoryName =
+        Prelude.Nothing
+    }
+
+-- | The name of an upstream repository.
+upstreamRepositoryInfo_repositoryName :: Lens.Lens' UpstreamRepositoryInfo (Prelude.Maybe Prelude.Text)
+upstreamRepositoryInfo_repositoryName = Lens.lens (\UpstreamRepositoryInfo' {repositoryName} -> repositoryName) (\s@UpstreamRepositoryInfo' {} a -> s {repositoryName = a} :: UpstreamRepositoryInfo)
+
+instance Data.FromJSON UpstreamRepositoryInfo where
+  parseJSON =
+    Data.withObject
+      "UpstreamRepositoryInfo"
+      ( \x ->
+          UpstreamRepositoryInfo'
+            Prelude.<$> (x Data..:? "repositoryName")
+      )
+
+instance Prelude.Hashable UpstreamRepositoryInfo where
+  hashWithSalt _salt UpstreamRepositoryInfo' {..} =
+    _salt `Prelude.hashWithSalt` repositoryName
+
+instance Prelude.NFData UpstreamRepositoryInfo where
+  rnf UpstreamRepositoryInfo' {..} =
+    Prelude.rnf repositoryName
diff --git a/gen/Amazonka/CodeArtifact/UntagResource.hs b/gen/Amazonka/CodeArtifact/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/UntagResource.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes tags from a resource in CodeArtifact.
+module Amazonka.CodeArtifact.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that you want to remove
+    -- tags from.
+    resourceArn :: Prelude.Text,
+    -- | The tag key for each tag that you want to remove from the resource.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to remove
+-- tags from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag key for each tag that you want to remove from the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource that you want to remove
+-- tags from.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag key for each tag that you want to remove from the resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tagKeys" Data..= tagKeys)]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/v1/untag"
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/UpdatePackageVersionsStatus.hs b/gen/Amazonka/CodeArtifact/UpdatePackageVersionsStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/UpdatePackageVersionsStatus.hs
@@ -0,0 +1,390 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.UpdatePackageVersionsStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the status of one or more versions of a package. Using
+-- @UpdatePackageVersionsStatus@, you can update the status of package
+-- versions to @Archived@, @Published@, or @Unlisted@. To set the status of
+-- a package version to @Disposed@, use
+-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DisposePackageVersions.html DisposePackageVersions>.
+module Amazonka.CodeArtifact.UpdatePackageVersionsStatus
+  ( -- * Creating a Request
+    UpdatePackageVersionsStatus (..),
+    newUpdatePackageVersionsStatus,
+
+    -- * Request Lenses
+    updatePackageVersionsStatus_domainOwner,
+    updatePackageVersionsStatus_expectedStatus,
+    updatePackageVersionsStatus_namespace,
+    updatePackageVersionsStatus_versionRevisions,
+    updatePackageVersionsStatus_domain,
+    updatePackageVersionsStatus_repository,
+    updatePackageVersionsStatus_format,
+    updatePackageVersionsStatus_package,
+    updatePackageVersionsStatus_versions,
+    updatePackageVersionsStatus_targetStatus,
+
+    -- * Destructuring the Response
+    UpdatePackageVersionsStatusResponse (..),
+    newUpdatePackageVersionsStatusResponse,
+
+    -- * Response Lenses
+    updatePackageVersionsStatusResponse_failedVersions,
+    updatePackageVersionsStatusResponse_successfulVersions,
+    updatePackageVersionsStatusResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdatePackageVersionsStatus' smart constructor.
+data UpdatePackageVersionsStatus = UpdatePackageVersionsStatus'
+  { -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | The package version’s expected status before it is updated. If
+    -- @expectedStatus@ is provided, the package version\'s status is updated
+    -- only if its status at the time @UpdatePackageVersionsStatus@ is called
+    -- matches @expectedStatus@.
+    expectedStatus :: Prelude.Maybe PackageVersionStatus,
+    -- | The namespace of the package version to be updated. The package version
+    -- component that specifies its namespace depends on its type. For example:
+    --
+    -- -   The namespace of a Maven package version is its @groupId@.
+    --
+    -- -   The namespace of an npm package version is its @scope@.
+    --
+    -- -   Python and NuGet package versions do not contain a corresponding
+    --     component, package versions of those formats do not have a
+    --     namespace.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | A map of package versions and package version revisions. The map @key@
+    -- is the package version (for example, @3.5.2@), and the map @value@ is
+    -- the package version revision.
+    versionRevisions :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the domain that contains the repository that contains the
+    -- package versions with a status to be updated.
+    domain :: Prelude.Text,
+    -- | The repository that contains the package versions with the status you
+    -- want to update.
+    repository :: Prelude.Text,
+    -- | A format that specifies the type of the package with the statuses to
+    -- update.
+    format :: PackageFormat,
+    -- | The name of the package with the version statuses to update.
+    package :: Prelude.Text,
+    -- | An array of strings that specify the versions of the package with the
+    -- statuses to update.
+    versions :: [Prelude.Text],
+    -- | The status you want to change the package version status to.
+    targetStatus :: PackageVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdatePackageVersionsStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainOwner', 'updatePackageVersionsStatus_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'expectedStatus', 'updatePackageVersionsStatus_expectedStatus' - The package version’s expected status before it is updated. If
+-- @expectedStatus@ is provided, the package version\'s status is updated
+-- only if its status at the time @UpdatePackageVersionsStatus@ is called
+-- matches @expectedStatus@.
+--
+-- 'namespace', 'updatePackageVersionsStatus_namespace' - The namespace of the package version to be updated. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+--
+-- 'versionRevisions', 'updatePackageVersionsStatus_versionRevisions' - A map of package versions and package version revisions. The map @key@
+-- is the package version (for example, @3.5.2@), and the map @value@ is
+-- the package version revision.
+--
+-- 'domain', 'updatePackageVersionsStatus_domain' - The name of the domain that contains the repository that contains the
+-- package versions with a status to be updated.
+--
+-- 'repository', 'updatePackageVersionsStatus_repository' - The repository that contains the package versions with the status you
+-- want to update.
+--
+-- 'format', 'updatePackageVersionsStatus_format' - A format that specifies the type of the package with the statuses to
+-- update.
+--
+-- 'package', 'updatePackageVersionsStatus_package' - The name of the package with the version statuses to update.
+--
+-- 'versions', 'updatePackageVersionsStatus_versions' - An array of strings that specify the versions of the package with the
+-- statuses to update.
+--
+-- 'targetStatus', 'updatePackageVersionsStatus_targetStatus' - The status you want to change the package version status to.
+newUpdatePackageVersionsStatus ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'format'
+  PackageFormat ->
+  -- | 'package'
+  Prelude.Text ->
+  -- | 'targetStatus'
+  PackageVersionStatus ->
+  UpdatePackageVersionsStatus
+newUpdatePackageVersionsStatus
+  pDomain_
+  pRepository_
+  pFormat_
+  pPackage_
+  pTargetStatus_ =
+    UpdatePackageVersionsStatus'
+      { domainOwner =
+          Prelude.Nothing,
+        expectedStatus = Prelude.Nothing,
+        namespace = Prelude.Nothing,
+        versionRevisions = Prelude.Nothing,
+        domain = pDomain_,
+        repository = pRepository_,
+        format = pFormat_,
+        package = pPackage_,
+        versions = Prelude.mempty,
+        targetStatus = pTargetStatus_
+      }
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+updatePackageVersionsStatus_domainOwner :: Lens.Lens' UpdatePackageVersionsStatus (Prelude.Maybe Prelude.Text)
+updatePackageVersionsStatus_domainOwner = Lens.lens (\UpdatePackageVersionsStatus' {domainOwner} -> domainOwner) (\s@UpdatePackageVersionsStatus' {} a -> s {domainOwner = a} :: UpdatePackageVersionsStatus)
+
+-- | The package version’s expected status before it is updated. If
+-- @expectedStatus@ is provided, the package version\'s status is updated
+-- only if its status at the time @UpdatePackageVersionsStatus@ is called
+-- matches @expectedStatus@.
+updatePackageVersionsStatus_expectedStatus :: Lens.Lens' UpdatePackageVersionsStatus (Prelude.Maybe PackageVersionStatus)
+updatePackageVersionsStatus_expectedStatus = Lens.lens (\UpdatePackageVersionsStatus' {expectedStatus} -> expectedStatus) (\s@UpdatePackageVersionsStatus' {} a -> s {expectedStatus = a} :: UpdatePackageVersionsStatus)
+
+-- | The namespace of the package version to be updated. The package version
+-- component that specifies its namespace depends on its type. For example:
+--
+-- -   The namespace of a Maven package version is its @groupId@.
+--
+-- -   The namespace of an npm package version is its @scope@.
+--
+-- -   Python and NuGet package versions do not contain a corresponding
+--     component, package versions of those formats do not have a
+--     namespace.
+updatePackageVersionsStatus_namespace :: Lens.Lens' UpdatePackageVersionsStatus (Prelude.Maybe Prelude.Text)
+updatePackageVersionsStatus_namespace = Lens.lens (\UpdatePackageVersionsStatus' {namespace} -> namespace) (\s@UpdatePackageVersionsStatus' {} a -> s {namespace = a} :: UpdatePackageVersionsStatus)
+
+-- | A map of package versions and package version revisions. The map @key@
+-- is the package version (for example, @3.5.2@), and the map @value@ is
+-- the package version revision.
+updatePackageVersionsStatus_versionRevisions :: Lens.Lens' UpdatePackageVersionsStatus (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updatePackageVersionsStatus_versionRevisions = Lens.lens (\UpdatePackageVersionsStatus' {versionRevisions} -> versionRevisions) (\s@UpdatePackageVersionsStatus' {} a -> s {versionRevisions = a} :: UpdatePackageVersionsStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the domain that contains the repository that contains the
+-- package versions with a status to be updated.
+updatePackageVersionsStatus_domain :: Lens.Lens' UpdatePackageVersionsStatus Prelude.Text
+updatePackageVersionsStatus_domain = Lens.lens (\UpdatePackageVersionsStatus' {domain} -> domain) (\s@UpdatePackageVersionsStatus' {} a -> s {domain = a} :: UpdatePackageVersionsStatus)
+
+-- | The repository that contains the package versions with the status you
+-- want to update.
+updatePackageVersionsStatus_repository :: Lens.Lens' UpdatePackageVersionsStatus Prelude.Text
+updatePackageVersionsStatus_repository = Lens.lens (\UpdatePackageVersionsStatus' {repository} -> repository) (\s@UpdatePackageVersionsStatus' {} a -> s {repository = a} :: UpdatePackageVersionsStatus)
+
+-- | A format that specifies the type of the package with the statuses to
+-- update.
+updatePackageVersionsStatus_format :: Lens.Lens' UpdatePackageVersionsStatus PackageFormat
+updatePackageVersionsStatus_format = Lens.lens (\UpdatePackageVersionsStatus' {format} -> format) (\s@UpdatePackageVersionsStatus' {} a -> s {format = a} :: UpdatePackageVersionsStatus)
+
+-- | The name of the package with the version statuses to update.
+updatePackageVersionsStatus_package :: Lens.Lens' UpdatePackageVersionsStatus Prelude.Text
+updatePackageVersionsStatus_package = Lens.lens (\UpdatePackageVersionsStatus' {package} -> package) (\s@UpdatePackageVersionsStatus' {} a -> s {package = a} :: UpdatePackageVersionsStatus)
+
+-- | An array of strings that specify the versions of the package with the
+-- statuses to update.
+updatePackageVersionsStatus_versions :: Lens.Lens' UpdatePackageVersionsStatus [Prelude.Text]
+updatePackageVersionsStatus_versions = Lens.lens (\UpdatePackageVersionsStatus' {versions} -> versions) (\s@UpdatePackageVersionsStatus' {} a -> s {versions = a} :: UpdatePackageVersionsStatus) Prelude.. Lens.coerced
+
+-- | The status you want to change the package version status to.
+updatePackageVersionsStatus_targetStatus :: Lens.Lens' UpdatePackageVersionsStatus PackageVersionStatus
+updatePackageVersionsStatus_targetStatus = Lens.lens (\UpdatePackageVersionsStatus' {targetStatus} -> targetStatus) (\s@UpdatePackageVersionsStatus' {} a -> s {targetStatus = a} :: UpdatePackageVersionsStatus)
+
+instance Core.AWSRequest UpdatePackageVersionsStatus where
+  type
+    AWSResponse UpdatePackageVersionsStatus =
+      UpdatePackageVersionsStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdatePackageVersionsStatusResponse'
+            Prelude.<$> (x Data..?> "failedVersions" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "successfulVersions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdatePackageVersionsStatus where
+  hashWithSalt _salt UpdatePackageVersionsStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` expectedStatus
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` versionRevisions
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` package
+      `Prelude.hashWithSalt` versions
+      `Prelude.hashWithSalt` targetStatus
+
+instance Prelude.NFData UpdatePackageVersionsStatus where
+  rnf UpdatePackageVersionsStatus' {..} =
+    Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf expectedStatus
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf versionRevisions
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf package
+      `Prelude.seq` Prelude.rnf versions
+      `Prelude.seq` Prelude.rnf targetStatus
+
+instance Data.ToHeaders UpdatePackageVersionsStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdatePackageVersionsStatus where
+  toJSON UpdatePackageVersionsStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("expectedStatus" Data..=)
+              Prelude.<$> expectedStatus,
+            ("versionRevisions" Data..=)
+              Prelude.<$> versionRevisions,
+            Prelude.Just ("versions" Data..= versions),
+            Prelude.Just ("targetStatus" Data..= targetStatus)
+          ]
+      )
+
+instance Data.ToPath UpdatePackageVersionsStatus where
+  toPath =
+    Prelude.const "/v1/package/versions/update_status"
+
+instance Data.ToQuery UpdatePackageVersionsStatus where
+  toQuery UpdatePackageVersionsStatus' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "namespace" Data.=: namespace,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository,
+        "format" Data.=: format,
+        "package" Data.=: package
+      ]
+
+-- | /See:/ 'newUpdatePackageVersionsStatusResponse' smart constructor.
+data UpdatePackageVersionsStatusResponse = UpdatePackageVersionsStatusResponse'
+  { -- | A list of @SuccessfulPackageVersionInfo@ objects, one for each package
+    -- version with a status that successfully updated.
+    failedVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError),
+    -- | A list of @PackageVersionError@ objects, one for each package version
+    -- with a status that failed to update.
+    successfulVersions :: Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdatePackageVersionsStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedVersions', 'updatePackageVersionsStatusResponse_failedVersions' - A list of @SuccessfulPackageVersionInfo@ objects, one for each package
+-- version with a status that successfully updated.
+--
+-- 'successfulVersions', 'updatePackageVersionsStatusResponse_successfulVersions' - A list of @PackageVersionError@ objects, one for each package version
+-- with a status that failed to update.
+--
+-- 'httpStatus', 'updatePackageVersionsStatusResponse_httpStatus' - The response's http status code.
+newUpdatePackageVersionsStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdatePackageVersionsStatusResponse
+newUpdatePackageVersionsStatusResponse pHttpStatus_ =
+  UpdatePackageVersionsStatusResponse'
+    { failedVersions =
+        Prelude.Nothing,
+      successfulVersions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of @SuccessfulPackageVersionInfo@ objects, one for each package
+-- version with a status that successfully updated.
+updatePackageVersionsStatusResponse_failedVersions :: Lens.Lens' UpdatePackageVersionsStatusResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text PackageVersionError))
+updatePackageVersionsStatusResponse_failedVersions = Lens.lens (\UpdatePackageVersionsStatusResponse' {failedVersions} -> failedVersions) (\s@UpdatePackageVersionsStatusResponse' {} a -> s {failedVersions = a} :: UpdatePackageVersionsStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @PackageVersionError@ objects, one for each package version
+-- with a status that failed to update.
+updatePackageVersionsStatusResponse_successfulVersions :: Lens.Lens' UpdatePackageVersionsStatusResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text SuccessfulPackageVersionInfo))
+updatePackageVersionsStatusResponse_successfulVersions = Lens.lens (\UpdatePackageVersionsStatusResponse' {successfulVersions} -> successfulVersions) (\s@UpdatePackageVersionsStatusResponse' {} a -> s {successfulVersions = a} :: UpdatePackageVersionsStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updatePackageVersionsStatusResponse_httpStatus :: Lens.Lens' UpdatePackageVersionsStatusResponse Prelude.Int
+updatePackageVersionsStatusResponse_httpStatus = Lens.lens (\UpdatePackageVersionsStatusResponse' {httpStatus} -> httpStatus) (\s@UpdatePackageVersionsStatusResponse' {} a -> s {httpStatus = a} :: UpdatePackageVersionsStatusResponse)
+
+instance
+  Prelude.NFData
+    UpdatePackageVersionsStatusResponse
+  where
+  rnf UpdatePackageVersionsStatusResponse' {..} =
+    Prelude.rnf failedVersions
+      `Prelude.seq` Prelude.rnf successfulVersions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/UpdateRepository.hs b/gen/Amazonka/CodeArtifact/UpdateRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/UpdateRepository.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.UpdateRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the properties of a repository.
+module Amazonka.CodeArtifact.UpdateRepository
+  ( -- * Creating a Request
+    UpdateRepository (..),
+    newUpdateRepository,
+
+    -- * Request Lenses
+    updateRepository_description,
+    updateRepository_domainOwner,
+    updateRepository_upstreams,
+    updateRepository_domain,
+    updateRepository_repository,
+
+    -- * Destructuring the Response
+    UpdateRepositoryResponse (..),
+    newUpdateRepositoryResponse,
+
+    -- * Response Lenses
+    updateRepositoryResponse_repository,
+    updateRepositoryResponse_httpStatus,
+  )
+where
+
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRepository' smart constructor.
+data UpdateRepository = UpdateRepository'
+  { -- | An updated repository description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The 12-digit account number of the Amazon Web Services account that owns
+    -- the domain. It does not include dashes or spaces.
+    domainOwner :: Prelude.Maybe Prelude.Text,
+    -- | A list of upstream repositories to associate with the repository. The
+    -- order of the upstream repositories in the list determines their priority
+    -- order when CodeArtifact looks for a requested package version. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+    upstreams :: Prelude.Maybe [UpstreamRepository],
+    -- | The name of the domain associated with the repository to update.
+    domain :: Prelude.Text,
+    -- | The name of the repository to update.
+    repository :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateRepository_description' - An updated repository description.
+--
+-- 'domainOwner', 'updateRepository_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+--
+-- 'upstreams', 'updateRepository_upstreams' - A list of upstream repositories to associate with the repository. The
+-- order of the upstream repositories in the list determines their priority
+-- order when CodeArtifact looks for a requested package version. For more
+-- information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+--
+-- 'domain', 'updateRepository_domain' - The name of the domain associated with the repository to update.
+--
+-- 'repository', 'updateRepository_repository' - The name of the repository to update.
+newUpdateRepository ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  UpdateRepository
+newUpdateRepository pDomain_ pRepository_ =
+  UpdateRepository'
+    { description = Prelude.Nothing,
+      domainOwner = Prelude.Nothing,
+      upstreams = Prelude.Nothing,
+      domain = pDomain_,
+      repository = pRepository_
+    }
+
+-- | An updated repository description.
+updateRepository_description :: Lens.Lens' UpdateRepository (Prelude.Maybe Prelude.Text)
+updateRepository_description = Lens.lens (\UpdateRepository' {description} -> description) (\s@UpdateRepository' {} a -> s {description = a} :: UpdateRepository)
+
+-- | The 12-digit account number of the Amazon Web Services account that owns
+-- the domain. It does not include dashes or spaces.
+updateRepository_domainOwner :: Lens.Lens' UpdateRepository (Prelude.Maybe Prelude.Text)
+updateRepository_domainOwner = Lens.lens (\UpdateRepository' {domainOwner} -> domainOwner) (\s@UpdateRepository' {} a -> s {domainOwner = a} :: UpdateRepository)
+
+-- | A list of upstream repositories to associate with the repository. The
+-- order of the upstream repositories in the list determines their priority
+-- order when CodeArtifact looks for a requested package version. For more
+-- information, see
+-- <https://docs.aws.amazon.com/codeartifact/latest/ug/repos-upstream.html Working with upstream repositories>.
+updateRepository_upstreams :: Lens.Lens' UpdateRepository (Prelude.Maybe [UpstreamRepository])
+updateRepository_upstreams = Lens.lens (\UpdateRepository' {upstreams} -> upstreams) (\s@UpdateRepository' {} a -> s {upstreams = a} :: UpdateRepository) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the domain associated with the repository to update.
+updateRepository_domain :: Lens.Lens' UpdateRepository Prelude.Text
+updateRepository_domain = Lens.lens (\UpdateRepository' {domain} -> domain) (\s@UpdateRepository' {} a -> s {domain = a} :: UpdateRepository)
+
+-- | The name of the repository to update.
+updateRepository_repository :: Lens.Lens' UpdateRepository Prelude.Text
+updateRepository_repository = Lens.lens (\UpdateRepository' {repository} -> repository) (\s@UpdateRepository' {} a -> s {repository = a} :: UpdateRepository)
+
+instance Core.AWSRequest UpdateRepository where
+  type
+    AWSResponse UpdateRepository =
+      UpdateRepositoryResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRepositoryResponse'
+            Prelude.<$> (x Data..?> "repository")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRepository where
+  hashWithSalt _salt UpdateRepository' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` domainOwner
+      `Prelude.hashWithSalt` upstreams
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` repository
+
+instance Prelude.NFData UpdateRepository where
+  rnf UpdateRepository' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf domainOwner
+      `Prelude.seq` Prelude.rnf upstreams
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf repository
+
+instance Data.ToHeaders UpdateRepository where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRepository where
+  toJSON UpdateRepository' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("upstreams" Data..=) Prelude.<$> upstreams
+          ]
+      )
+
+instance Data.ToPath UpdateRepository where
+  toPath = Prelude.const "/v1/repository"
+
+instance Data.ToQuery UpdateRepository where
+  toQuery UpdateRepository' {..} =
+    Prelude.mconcat
+      [ "domain-owner" Data.=: domainOwner,
+        "domain" Data.=: domain,
+        "repository" Data.=: repository
+      ]
+
+-- | /See:/ 'newUpdateRepositoryResponse' smart constructor.
+data UpdateRepositoryResponse = UpdateRepositoryResponse'
+  { -- | The updated repository.
+    repository :: Prelude.Maybe RepositoryDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRepositoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'repository', 'updateRepositoryResponse_repository' - The updated repository.
+--
+-- 'httpStatus', 'updateRepositoryResponse_httpStatus' - The response's http status code.
+newUpdateRepositoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRepositoryResponse
+newUpdateRepositoryResponse pHttpStatus_ =
+  UpdateRepositoryResponse'
+    { repository =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The updated repository.
+updateRepositoryResponse_repository :: Lens.Lens' UpdateRepositoryResponse (Prelude.Maybe RepositoryDescription)
+updateRepositoryResponse_repository = Lens.lens (\UpdateRepositoryResponse' {repository} -> repository) (\s@UpdateRepositoryResponse' {} a -> s {repository = a} :: UpdateRepositoryResponse)
+
+-- | The response's http status code.
+updateRepositoryResponse_httpStatus :: Lens.Lens' UpdateRepositoryResponse Prelude.Int
+updateRepositoryResponse_httpStatus = Lens.lens (\UpdateRepositoryResponse' {httpStatus} -> httpStatus) (\s@UpdateRepositoryResponse' {} a -> s {httpStatus = a} :: UpdateRepositoryResponse)
+
+instance Prelude.NFData UpdateRepositoryResponse where
+  rnf UpdateRepositoryResponse' {..} =
+    Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CodeArtifact/Waiters.hs b/gen/Amazonka/CodeArtifact/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CodeArtifact/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CodeArtifact.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CodeArtifact.Waiters where
+
+import Amazonka.CodeArtifact.Lens
+import Amazonka.CodeArtifact.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.CodeArtifact
+import Test.Amazonka.CodeArtifact.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "CodeArtifact"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/CodeArtifact.hs b/test/Test/Amazonka/CodeArtifact.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/CodeArtifact.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.CodeArtifact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.CodeArtifact
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/CodeArtifact/Internal.hs b/test/Test/Amazonka/CodeArtifact/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/CodeArtifact/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.CodeArtifact.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.CodeArtifact.Internal where
diff --git a/test/Test/Amazonka/Gen/CodeArtifact.hs b/test/Test/Amazonka/Gen/CodeArtifact.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/CodeArtifact.hs
@@ -0,0 +1,750 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.CodeArtifact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.CodeArtifact where
+
+import Amazonka.CodeArtifact
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.CodeArtifact.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAssociateExternalConnection $
+--             newAssociateExternalConnection
+--
+--         , requestCopyPackageVersions $
+--             newCopyPackageVersions
+--
+--         , requestCreateDomain $
+--             newCreateDomain
+--
+--         , requestCreateRepository $
+--             newCreateRepository
+--
+--         , requestDeleteDomain $
+--             newDeleteDomain
+--
+--         , requestDeleteDomainPermissionsPolicy $
+--             newDeleteDomainPermissionsPolicy
+--
+--         , requestDeletePackageVersions $
+--             newDeletePackageVersions
+--
+--         , requestDeleteRepository $
+--             newDeleteRepository
+--
+--         , requestDeleteRepositoryPermissionsPolicy $
+--             newDeleteRepositoryPermissionsPolicy
+--
+--         , requestDescribeDomain $
+--             newDescribeDomain
+--
+--         , requestDescribePackage $
+--             newDescribePackage
+--
+--         , requestDescribePackageVersion $
+--             newDescribePackageVersion
+--
+--         , requestDescribeRepository $
+--             newDescribeRepository
+--
+--         , requestDisassociateExternalConnection $
+--             newDisassociateExternalConnection
+--
+--         , requestDisposePackageVersions $
+--             newDisposePackageVersions
+--
+--         , requestGetAuthorizationToken $
+--             newGetAuthorizationToken
+--
+--         , requestGetDomainPermissionsPolicy $
+--             newGetDomainPermissionsPolicy
+--
+--         , requestGetPackageVersionAsset $
+--             newGetPackageVersionAsset
+--
+--         , requestGetPackageVersionReadme $
+--             newGetPackageVersionReadme
+--
+--         , requestGetRepositoryEndpoint $
+--             newGetRepositoryEndpoint
+--
+--         , requestGetRepositoryPermissionsPolicy $
+--             newGetRepositoryPermissionsPolicy
+--
+--         , requestListDomains $
+--             newListDomains
+--
+--         , requestListPackageVersionAssets $
+--             newListPackageVersionAssets
+--
+--         , requestListPackageVersionDependencies $
+--             newListPackageVersionDependencies
+--
+--         , requestListPackageVersions $
+--             newListPackageVersions
+--
+--         , requestListPackages $
+--             newListPackages
+--
+--         , requestListRepositories $
+--             newListRepositories
+--
+--         , requestListRepositoriesInDomain $
+--             newListRepositoriesInDomain
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutDomainPermissionsPolicy $
+--             newPutDomainPermissionsPolicy
+--
+--         , requestPutPackageOriginConfiguration $
+--             newPutPackageOriginConfiguration
+--
+--         , requestPutRepositoryPermissionsPolicy $
+--             newPutRepositoryPermissionsPolicy
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdatePackageVersionsStatus $
+--             newUpdatePackageVersionsStatus
+--
+--         , requestUpdateRepository $
+--             newUpdateRepository
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateExternalConnection $
+--             newAssociateExternalConnectionResponse
+--
+--         , responseCopyPackageVersions $
+--             newCopyPackageVersionsResponse
+--
+--         , responseCreateDomain $
+--             newCreateDomainResponse
+--
+--         , responseCreateRepository $
+--             newCreateRepositoryResponse
+--
+--         , responseDeleteDomain $
+--             newDeleteDomainResponse
+--
+--         , responseDeleteDomainPermissionsPolicy $
+--             newDeleteDomainPermissionsPolicyResponse
+--
+--         , responseDeletePackageVersions $
+--             newDeletePackageVersionsResponse
+--
+--         , responseDeleteRepository $
+--             newDeleteRepositoryResponse
+--
+--         , responseDeleteRepositoryPermissionsPolicy $
+--             newDeleteRepositoryPermissionsPolicyResponse
+--
+--         , responseDescribeDomain $
+--             newDescribeDomainResponse
+--
+--         , responseDescribePackage $
+--             newDescribePackageResponse
+--
+--         , responseDescribePackageVersion $
+--             newDescribePackageVersionResponse
+--
+--         , responseDescribeRepository $
+--             newDescribeRepositoryResponse
+--
+--         , responseDisassociateExternalConnection $
+--             newDisassociateExternalConnectionResponse
+--
+--         , responseDisposePackageVersions $
+--             newDisposePackageVersionsResponse
+--
+--         , responseGetAuthorizationToken $
+--             newGetAuthorizationTokenResponse
+--
+--         , responseGetDomainPermissionsPolicy $
+--             newGetDomainPermissionsPolicyResponse
+--
+--         , responseGetPackageVersionAsset $
+--             newGetPackageVersionAssetResponse
+--
+--         , responseGetPackageVersionReadme $
+--             newGetPackageVersionReadmeResponse
+--
+--         , responseGetRepositoryEndpoint $
+--             newGetRepositoryEndpointResponse
+--
+--         , responseGetRepositoryPermissionsPolicy $
+--             newGetRepositoryPermissionsPolicyResponse
+--
+--         , responseListDomains $
+--             newListDomainsResponse
+--
+--         , responseListPackageVersionAssets $
+--             newListPackageVersionAssetsResponse
+--
+--         , responseListPackageVersionDependencies $
+--             newListPackageVersionDependenciesResponse
+--
+--         , responseListPackageVersions $
+--             newListPackageVersionsResponse
+--
+--         , responseListPackages $
+--             newListPackagesResponse
+--
+--         , responseListRepositories $
+--             newListRepositoriesResponse
+--
+--         , responseListRepositoriesInDomain $
+--             newListRepositoriesInDomainResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutDomainPermissionsPolicy $
+--             newPutDomainPermissionsPolicyResponse
+--
+--         , responsePutPackageOriginConfiguration $
+--             newPutPackageOriginConfigurationResponse
+--
+--         , responsePutRepositoryPermissionsPolicy $
+--             newPutRepositoryPermissionsPolicyResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdatePackageVersionsStatus $
+--             newUpdatePackageVersionsStatusResponse
+--
+--         , responseUpdateRepository $
+--             newUpdateRepositoryResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateExternalConnection :: AssociateExternalConnection -> TestTree
+requestAssociateExternalConnection =
+  req
+    "AssociateExternalConnection"
+    "fixture/AssociateExternalConnection.yaml"
+
+requestCopyPackageVersions :: CopyPackageVersions -> TestTree
+requestCopyPackageVersions =
+  req
+    "CopyPackageVersions"
+    "fixture/CopyPackageVersions.yaml"
+
+requestCreateDomain :: CreateDomain -> TestTree
+requestCreateDomain =
+  req
+    "CreateDomain"
+    "fixture/CreateDomain.yaml"
+
+requestCreateRepository :: CreateRepository -> TestTree
+requestCreateRepository =
+  req
+    "CreateRepository"
+    "fixture/CreateRepository.yaml"
+
+requestDeleteDomain :: DeleteDomain -> TestTree
+requestDeleteDomain =
+  req
+    "DeleteDomain"
+    "fixture/DeleteDomain.yaml"
+
+requestDeleteDomainPermissionsPolicy :: DeleteDomainPermissionsPolicy -> TestTree
+requestDeleteDomainPermissionsPolicy =
+  req
+    "DeleteDomainPermissionsPolicy"
+    "fixture/DeleteDomainPermissionsPolicy.yaml"
+
+requestDeletePackageVersions :: DeletePackageVersions -> TestTree
+requestDeletePackageVersions =
+  req
+    "DeletePackageVersions"
+    "fixture/DeletePackageVersions.yaml"
+
+requestDeleteRepository :: DeleteRepository -> TestTree
+requestDeleteRepository =
+  req
+    "DeleteRepository"
+    "fixture/DeleteRepository.yaml"
+
+requestDeleteRepositoryPermissionsPolicy :: DeleteRepositoryPermissionsPolicy -> TestTree
+requestDeleteRepositoryPermissionsPolicy =
+  req
+    "DeleteRepositoryPermissionsPolicy"
+    "fixture/DeleteRepositoryPermissionsPolicy.yaml"
+
+requestDescribeDomain :: DescribeDomain -> TestTree
+requestDescribeDomain =
+  req
+    "DescribeDomain"
+    "fixture/DescribeDomain.yaml"
+
+requestDescribePackage :: DescribePackage -> TestTree
+requestDescribePackage =
+  req
+    "DescribePackage"
+    "fixture/DescribePackage.yaml"
+
+requestDescribePackageVersion :: DescribePackageVersion -> TestTree
+requestDescribePackageVersion =
+  req
+    "DescribePackageVersion"
+    "fixture/DescribePackageVersion.yaml"
+
+requestDescribeRepository :: DescribeRepository -> TestTree
+requestDescribeRepository =
+  req
+    "DescribeRepository"
+    "fixture/DescribeRepository.yaml"
+
+requestDisassociateExternalConnection :: DisassociateExternalConnection -> TestTree
+requestDisassociateExternalConnection =
+  req
+    "DisassociateExternalConnection"
+    "fixture/DisassociateExternalConnection.yaml"
+
+requestDisposePackageVersions :: DisposePackageVersions -> TestTree
+requestDisposePackageVersions =
+  req
+    "DisposePackageVersions"
+    "fixture/DisposePackageVersions.yaml"
+
+requestGetAuthorizationToken :: GetAuthorizationToken -> TestTree
+requestGetAuthorizationToken =
+  req
+    "GetAuthorizationToken"
+    "fixture/GetAuthorizationToken.yaml"
+
+requestGetDomainPermissionsPolicy :: GetDomainPermissionsPolicy -> TestTree
+requestGetDomainPermissionsPolicy =
+  req
+    "GetDomainPermissionsPolicy"
+    "fixture/GetDomainPermissionsPolicy.yaml"
+
+requestGetPackageVersionAsset :: GetPackageVersionAsset -> TestTree
+requestGetPackageVersionAsset =
+  req
+    "GetPackageVersionAsset"
+    "fixture/GetPackageVersionAsset.yaml"
+
+requestGetPackageVersionReadme :: GetPackageVersionReadme -> TestTree
+requestGetPackageVersionReadme =
+  req
+    "GetPackageVersionReadme"
+    "fixture/GetPackageVersionReadme.yaml"
+
+requestGetRepositoryEndpoint :: GetRepositoryEndpoint -> TestTree
+requestGetRepositoryEndpoint =
+  req
+    "GetRepositoryEndpoint"
+    "fixture/GetRepositoryEndpoint.yaml"
+
+requestGetRepositoryPermissionsPolicy :: GetRepositoryPermissionsPolicy -> TestTree
+requestGetRepositoryPermissionsPolicy =
+  req
+    "GetRepositoryPermissionsPolicy"
+    "fixture/GetRepositoryPermissionsPolicy.yaml"
+
+requestListDomains :: ListDomains -> TestTree
+requestListDomains =
+  req
+    "ListDomains"
+    "fixture/ListDomains.yaml"
+
+requestListPackageVersionAssets :: ListPackageVersionAssets -> TestTree
+requestListPackageVersionAssets =
+  req
+    "ListPackageVersionAssets"
+    "fixture/ListPackageVersionAssets.yaml"
+
+requestListPackageVersionDependencies :: ListPackageVersionDependencies -> TestTree
+requestListPackageVersionDependencies =
+  req
+    "ListPackageVersionDependencies"
+    "fixture/ListPackageVersionDependencies.yaml"
+
+requestListPackageVersions :: ListPackageVersions -> TestTree
+requestListPackageVersions =
+  req
+    "ListPackageVersions"
+    "fixture/ListPackageVersions.yaml"
+
+requestListPackages :: ListPackages -> TestTree
+requestListPackages =
+  req
+    "ListPackages"
+    "fixture/ListPackages.yaml"
+
+requestListRepositories :: ListRepositories -> TestTree
+requestListRepositories =
+  req
+    "ListRepositories"
+    "fixture/ListRepositories.yaml"
+
+requestListRepositoriesInDomain :: ListRepositoriesInDomain -> TestTree
+requestListRepositoriesInDomain =
+  req
+    "ListRepositoriesInDomain"
+    "fixture/ListRepositoriesInDomain.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutDomainPermissionsPolicy :: PutDomainPermissionsPolicy -> TestTree
+requestPutDomainPermissionsPolicy =
+  req
+    "PutDomainPermissionsPolicy"
+    "fixture/PutDomainPermissionsPolicy.yaml"
+
+requestPutPackageOriginConfiguration :: PutPackageOriginConfiguration -> TestTree
+requestPutPackageOriginConfiguration =
+  req
+    "PutPackageOriginConfiguration"
+    "fixture/PutPackageOriginConfiguration.yaml"
+
+requestPutRepositoryPermissionsPolicy :: PutRepositoryPermissionsPolicy -> TestTree
+requestPutRepositoryPermissionsPolicy =
+  req
+    "PutRepositoryPermissionsPolicy"
+    "fixture/PutRepositoryPermissionsPolicy.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdatePackageVersionsStatus :: UpdatePackageVersionsStatus -> TestTree
+requestUpdatePackageVersionsStatus =
+  req
+    "UpdatePackageVersionsStatus"
+    "fixture/UpdatePackageVersionsStatus.yaml"
+
+requestUpdateRepository :: UpdateRepository -> TestTree
+requestUpdateRepository =
+  req
+    "UpdateRepository"
+    "fixture/UpdateRepository.yaml"
+
+-- Responses
+
+responseAssociateExternalConnection :: AssociateExternalConnectionResponse -> TestTree
+responseAssociateExternalConnection =
+  res
+    "AssociateExternalConnectionResponse"
+    "fixture/AssociateExternalConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateExternalConnection)
+
+responseCopyPackageVersions :: CopyPackageVersionsResponse -> TestTree
+responseCopyPackageVersions =
+  res
+    "CopyPackageVersionsResponse"
+    "fixture/CopyPackageVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CopyPackageVersions)
+
+responseCreateDomain :: CreateDomainResponse -> TestTree
+responseCreateDomain =
+  res
+    "CreateDomainResponse"
+    "fixture/CreateDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDomain)
+
+responseCreateRepository :: CreateRepositoryResponse -> TestTree
+responseCreateRepository =
+  res
+    "CreateRepositoryResponse"
+    "fixture/CreateRepositoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRepository)
+
+responseDeleteDomain :: DeleteDomainResponse -> TestTree
+responseDeleteDomain =
+  res
+    "DeleteDomainResponse"
+    "fixture/DeleteDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDomain)
+
+responseDeleteDomainPermissionsPolicy :: DeleteDomainPermissionsPolicyResponse -> TestTree
+responseDeleteDomainPermissionsPolicy =
+  res
+    "DeleteDomainPermissionsPolicyResponse"
+    "fixture/DeleteDomainPermissionsPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDomainPermissionsPolicy)
+
+responseDeletePackageVersions :: DeletePackageVersionsResponse -> TestTree
+responseDeletePackageVersions =
+  res
+    "DeletePackageVersionsResponse"
+    "fixture/DeletePackageVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePackageVersions)
+
+responseDeleteRepository :: DeleteRepositoryResponse -> TestTree
+responseDeleteRepository =
+  res
+    "DeleteRepositoryResponse"
+    "fixture/DeleteRepositoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRepository)
+
+responseDeleteRepositoryPermissionsPolicy :: DeleteRepositoryPermissionsPolicyResponse -> TestTree
+responseDeleteRepositoryPermissionsPolicy =
+  res
+    "DeleteRepositoryPermissionsPolicyResponse"
+    "fixture/DeleteRepositoryPermissionsPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRepositoryPermissionsPolicy)
+
+responseDescribeDomain :: DescribeDomainResponse -> TestTree
+responseDescribeDomain =
+  res
+    "DescribeDomainResponse"
+    "fixture/DescribeDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDomain)
+
+responseDescribePackage :: DescribePackageResponse -> TestTree
+responseDescribePackage =
+  res
+    "DescribePackageResponse"
+    "fixture/DescribePackageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePackage)
+
+responseDescribePackageVersion :: DescribePackageVersionResponse -> TestTree
+responseDescribePackageVersion =
+  res
+    "DescribePackageVersionResponse"
+    "fixture/DescribePackageVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePackageVersion)
+
+responseDescribeRepository :: DescribeRepositoryResponse -> TestTree
+responseDescribeRepository =
+  res
+    "DescribeRepositoryResponse"
+    "fixture/DescribeRepositoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRepository)
+
+responseDisassociateExternalConnection :: DisassociateExternalConnectionResponse -> TestTree
+responseDisassociateExternalConnection =
+  res
+    "DisassociateExternalConnectionResponse"
+    "fixture/DisassociateExternalConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateExternalConnection)
+
+responseDisposePackageVersions :: DisposePackageVersionsResponse -> TestTree
+responseDisposePackageVersions =
+  res
+    "DisposePackageVersionsResponse"
+    "fixture/DisposePackageVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisposePackageVersions)
+
+responseGetAuthorizationToken :: GetAuthorizationTokenResponse -> TestTree
+responseGetAuthorizationToken =
+  res
+    "GetAuthorizationTokenResponse"
+    "fixture/GetAuthorizationTokenResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAuthorizationToken)
+
+responseGetDomainPermissionsPolicy :: GetDomainPermissionsPolicyResponse -> TestTree
+responseGetDomainPermissionsPolicy =
+  res
+    "GetDomainPermissionsPolicyResponse"
+    "fixture/GetDomainPermissionsPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomainPermissionsPolicy)
+
+responseGetPackageVersionReadme :: GetPackageVersionReadmeResponse -> TestTree
+responseGetPackageVersionReadme =
+  res
+    "GetPackageVersionReadmeResponse"
+    "fixture/GetPackageVersionReadmeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPackageVersionReadme)
+
+responseGetRepositoryEndpoint :: GetRepositoryEndpointResponse -> TestTree
+responseGetRepositoryEndpoint =
+  res
+    "GetRepositoryEndpointResponse"
+    "fixture/GetRepositoryEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRepositoryEndpoint)
+
+responseGetRepositoryPermissionsPolicy :: GetRepositoryPermissionsPolicyResponse -> TestTree
+responseGetRepositoryPermissionsPolicy =
+  res
+    "GetRepositoryPermissionsPolicyResponse"
+    "fixture/GetRepositoryPermissionsPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRepositoryPermissionsPolicy)
+
+responseListDomains :: ListDomainsResponse -> TestTree
+responseListDomains =
+  res
+    "ListDomainsResponse"
+    "fixture/ListDomainsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDomains)
+
+responseListPackageVersionAssets :: ListPackageVersionAssetsResponse -> TestTree
+responseListPackageVersionAssets =
+  res
+    "ListPackageVersionAssetsResponse"
+    "fixture/ListPackageVersionAssetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPackageVersionAssets)
+
+responseListPackageVersionDependencies :: ListPackageVersionDependenciesResponse -> TestTree
+responseListPackageVersionDependencies =
+  res
+    "ListPackageVersionDependenciesResponse"
+    "fixture/ListPackageVersionDependenciesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPackageVersionDependencies)
+
+responseListPackageVersions :: ListPackageVersionsResponse -> TestTree
+responseListPackageVersions =
+  res
+    "ListPackageVersionsResponse"
+    "fixture/ListPackageVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPackageVersions)
+
+responseListPackages :: ListPackagesResponse -> TestTree
+responseListPackages =
+  res
+    "ListPackagesResponse"
+    "fixture/ListPackagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPackages)
+
+responseListRepositories :: ListRepositoriesResponse -> TestTree
+responseListRepositories =
+  res
+    "ListRepositoriesResponse"
+    "fixture/ListRepositoriesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRepositories)
+
+responseListRepositoriesInDomain :: ListRepositoriesInDomainResponse -> TestTree
+responseListRepositoriesInDomain =
+  res
+    "ListRepositoriesInDomainResponse"
+    "fixture/ListRepositoriesInDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRepositoriesInDomain)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutDomainPermissionsPolicy :: PutDomainPermissionsPolicyResponse -> TestTree
+responsePutDomainPermissionsPolicy =
+  res
+    "PutDomainPermissionsPolicyResponse"
+    "fixture/PutDomainPermissionsPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDomainPermissionsPolicy)
+
+responsePutPackageOriginConfiguration :: PutPackageOriginConfigurationResponse -> TestTree
+responsePutPackageOriginConfiguration =
+  res
+    "PutPackageOriginConfigurationResponse"
+    "fixture/PutPackageOriginConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutPackageOriginConfiguration)
+
+responsePutRepositoryPermissionsPolicy :: PutRepositoryPermissionsPolicyResponse -> TestTree
+responsePutRepositoryPermissionsPolicy =
+  res
+    "PutRepositoryPermissionsPolicyResponse"
+    "fixture/PutRepositoryPermissionsPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutRepositoryPermissionsPolicy)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdatePackageVersionsStatus :: UpdatePackageVersionsStatusResponse -> TestTree
+responseUpdatePackageVersionsStatus =
+  res
+    "UpdatePackageVersionsStatusResponse"
+    "fixture/UpdatePackageVersionsStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdatePackageVersionsStatus)
+
+responseUpdateRepository :: UpdateRepositoryResponse -> TestTree
+responseUpdateRepository =
+  res
+    "UpdateRepositoryResponse"
+    "fixture/UpdateRepositoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRepository)
