docs: function getUploadedParts (req, res, next) {
      // @ts-ignore The `uppy` property is added by middleware before reaching here.
      const client = req.uppy.s3Client
      const { uploadId } = req.params
      const { key } = req.query
  
      if (typeof key !== 'string') {
        return res.status(400).json({ error: 's3: the object key must be passed as a query parameter. For example: "?key=abc.jpg"' })
      }
  
      let parts = []
      listPartsPage(0)
  
      function listPartsPage (startAt) {
        client.listParts({
          Bucket: config.bucket,
          Key: key,
          UploadId: uploadId,
          PartNumberMarker: startAt
        }, (err, data) => {
          if (err) {
            next(err)
            return
          }
  
          parts = parts.concat(data.Parts)
  
          if (data.IsTruncated) {
            // Get the next page.
            listPartsPage(data.NextPartNumberMarker)
          } else {
            done()
          }
        })
      }
  
      function done () {
        res.json(parts)
      }
    }