UNPKG

nats-micro

Version:

NATS micro compatible extra-lightweight microservice library

35 lines (25 loc) 1.13 kB
import { AsyncLocalStorage } from 'async_hooks'; import { contextHeadersToObject, objectToContextHeaders } from './misc.js'; import { Headers } from '../types/broker.js'; // eslint-disable-next-line @typescript-eslint/no-explicit-any export const threadContext = new AsyncLocalStorage<Map<string, any>>(); export enum ThreadContextKey { additionalHeaders = 'additionalHeaders', context = 'context' } export function addThreadContextHeaders(headers?: Headers): Headers | undefined { const store = threadContext.getStore(); if (!store) return headers; const allHeaders = Array.from(headers ?? []) .filter((header) => header[0] !== ThreadContextKey.additionalHeaders && header[0] !== ThreadContextKey.context); allHeaders.push(...(store.get(ThreadContextKey.additionalHeaders) ?? [])); allHeaders.push(...objectToContextHeaders(store.get(ThreadContextKey.context) ?? {})); return allHeaders; } export const addContextHeadersToThreadContext = (headers?: Headers) => { const store = threadContext.getStore(); store?.set(ThreadContextKey.context, contextHeadersToObject(headers ?? [])); };