async function handler()

in lambdas/catalog-updater/index.js [189:243]


async function handler (event, context) {
  console.log(`event: ${inspectStringify(event)}`)
  bucketName = process.env.BucketName

  const sdkGeneration = JSON.parse(
    (await exports.s3.getObject({ Bucket: bucketName, Key: 'sdkGeneration.json', ExpectedBucketOwner: process.env.SourceAccount }).promise())
      .Body.toString()
  )
  console.log(`sdkGeneration: ${inspectStringify(sdkGeneration)}`)

  const usagePlansPromise = getAllUsagePlans(exports.apiGateway)
  const builderPromise = usagePlansPromise.then(usagePlans => {
    console.log(`usagePlans: ${inspectStringify(usagePlans)}`)
    return new CatalogBuilder(usagePlans, sdkGeneration)
  })

  const promises = []
  let token

  while (true) {
    const listObjectsResult = await exports.s3.listObjectsV2(
      token != null
        ? { Bucket: bucketName, Prefix: 'catalog/', ContinuationToken: token, ExpectedBucketOwner: process.env.SourceAccount }
        : { Bucket: bucketName, Prefix: 'catalog/', ExpectedBucketOwner: process.env.SourceAccount }
    ).promise()

    for (const file of listObjectsResult.Contents) {
      if (exports.swaggerFileFilter(file)) {
        promises.push(
          builderPromise.then(builder =>
            exports.getSwaggerFile(file).then(s => builder.addToCatalog(s))
          )
        )
      }
    }

    if (!listObjectsResult.IsTruncated) break
    token = listObjectsResult.NextContinuationToken
  }

  await Promise.all(promises)
  const { catalog } = await builderPromise

  console.log(`catalog: ${inspectStringify(catalog)}`)

  const params = {
    Bucket: bucketName,
    Key: 'catalog.json',
    Body: JSON.stringify(catalog),
    ContentType: 'application/json',
    ExpectedBucketOwner: process.env.SourceAccount
  }

  await exports.s3.upload(params).promise()
}