Thread Local Storage ( Or Async Local Storage in JavaScript World )
Use thread Local Storage to separate the concern of contextual state propagation, from the domain specific concern you are trying to implement. This makes your domain code more portable. And your method signatures easier to parse. It's clear what's needed for the method and what is just needed to ensure any downstream code can access the operating context for tech level concerns such as authentication, caching, APM and transaction management.