import { AsyncLocalStorage } from 'node:async_hooks'; import { setAsyncContextStrategy, getDefaultIsolationScope, getDefaultCurrentScope } from '@sentry/core'; /** * Sets the async context strategy to use AsyncLocalStorage. * * This is a lightweight alternative to the OpenTelemetry-based strategy. * It uses Node's native AsyncLocalStorage directly without any OpenTelemetry dependencies. */ function setAsyncLocalStorageAsyncContextStrategy() { const asyncStorage = new AsyncLocalStorage (); function getScopes() { const scopes = asyncStorage.getStore(); if (scopes) { return scopes; } // fallback behavior: // if, for whatever reason, we can't find scopes on the context here, we have to fix this somehow return { scope: getDefaultCurrentScope(), isolationScope: getDefaultIsolationScope(), }; } function withScope(callback) { const scope = getScopes().scope.clone(); const isolationScope = getScopes().isolationScope; return asyncStorage.run({ scope, isolationScope }, () => { return callback(scope); }); } function withSetScope(scope, callback) { const isolationScope = getScopes().isolationScope.clone(); return asyncStorage.run({ scope, isolationScope }, () => { return callback(scope); }); } function withIsolationScope(callback) { const scope = getScopes().scope.clone(); const isolationScope = getScopes().isolationScope.clone(); return asyncStorage.run({ scope, isolationScope }, () => { return callback(isolationScope); }); } function withSetIsolationScope(isolationScope, callback) { const scope = getScopes().scope.clone(); return asyncStorage.run({ scope, isolationScope }, () => { return callback(isolationScope); }); } // In contrast to the browser, we can rely on async context isolation here function suppressTracing(callback) { return withScope(scope => { scope.setSDKProcessingMetadata({ __SENTRY_SUPPRESS_TRACING__: true }); return callback(); }); } setAsyncContextStrategy({ suppressTracing, withScope, withSetScope, withIsolationScope, withSetIsolationScope, getCurrentScope: () => getScopes().scope, getIsolationScope: () => getScopes().isolationScope, }); } export { setAsyncLocalStorageAsyncContextStrategy }; //# sourceMappingURL=asyncLocalStorageStrategy.js.map