#4516·hapi

How to use AsyncLocalStorage?

Author: joshkelCreated Jul 3, 2024Updated Jul 5, 2024
Labelsfeature

Runtime

Node.js

Runtime version

18.17.1

Module version

21.3.10

Used with

Hapi application

Any other relevant information

No response

What problem are you trying to solve?

I'm looking into using AsyncLocalStorage to make certain values accessible throughout my application logic, without explicitly passing it as a parameter everywhere.

As far as I can tell, this is a poor fit for Hapi: Hapi lifecycle methods and plugins offer extension points, for invoking arbitrary logic at different points in the application. However, AsyncLocalStorage wants to be invoked with an asynchronous callback, so it can see the start-to-finish execution of amethod; I can't find a way for a Hapi plugin to wrap a request or handler method start-to-finish.

Similar questions come up with instrumentation and monitoring frameworks such as Sentry or OpenTelemetry; OpenTelemetry's Hapi instrumentation currently uses complex runtime patching to accomplish its goals.

Do you have a new or modified API suggestion to solve the problem?

Hapi could offer a new lifecycle method / extension point that's invoked with a callback, so it can see the entire method start to finish.

Alternatively, Hapi could add explicit support for one or more AsyncLocalStorage instances.