@1mill/journal

<https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/idempotency/#idempotency-request-flow>

Usage no npm install needed!

<script type="module">
  import 1millJournal from 'https://cdn.skypack.dev/@1mill/journal';
</script>

README

@1mill/journal

Context

https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/idempotency/#idempotency-request-flow

Install

npm install @1mill/journal
// * index.js
const { Journal } = require('@1mill/journal')

const journal = new Journal({
  name: 'my-journal-db' || process.env.MILL_JOURNAL_NAME,
  table: 'my-collection' || process.env.MILL_JOURNAL_TABLE,
  uri: 'mongodb://...:27017' || process.env.MILL_JOURNAL_URI,
})

export.handler = async (cloudevent, ctx) => {
  // * https://www.jeremydaly.com/reuse-database-connections-aws-lambda/
  ctx.callbackWaitsForEmptyEventLoop = false

  try {
    const { skip } = await journal.entry({ cloudevent })
    if (skip) return // * Already being performed by another lambda

    // * Perform business logic
    // ...
  } catch (err) {
    console.error(err)
    // * Erase entry on business logic failure (e.g. fetch to
    // * third-party API failed)
    await journal.erase({ cloudevent })
    throw new Error(err) // * Requeue event to run again
  }
}