diff --git a/packages/backend-core/src/context/mainContext.ts b/packages/backend-core/src/context/mainContext.ts index 4beb02c9c7..a52a17dd53 100644 --- a/packages/backend-core/src/context/mainContext.ts +++ b/packages/backend-core/src/context/mainContext.ts @@ -375,3 +375,22 @@ export function getCurrentContext(): ContextMap | undefined { return undefined } } + +export function getFeatureFlags>( + key: string +): T | undefined { + const context = getCurrentContext() + if (!context) { + return undefined + } + return context.featureFlagCache?.[key] as T +} + +export function setFeatureFlags(key: string, value: Record) { + const context = getCurrentContext() + if (!context) { + return + } + context.featureFlagCache ??= {} + context.featureFlagCache[key] = value +} diff --git a/packages/backend-core/src/features/index.ts b/packages/backend-core/src/features/index.ts index b03641ec90..67084c8486 100644 --- a/packages/backend-core/src/features/index.ts +++ b/packages/backend-core/src/features/index.ts @@ -130,10 +130,7 @@ export class FlagSet, T extends { [key: string]: V }> { async fetch(ctx?: UserCtx): Promise> { return await tracer.trace("features.fetch", async span => { - const requestContext = context.getCurrentContext() - const cachedFlags = requestContext?.featureFlagCache?.[this.setId] as - | FlagValues - | undefined + const cachedFlags = context.getFeatureFlags>(this.setId) if (cachedFlags) { span?.addTags({ fromCache: true }) return cachedFlags @@ -252,11 +249,7 @@ export class FlagSet, T extends { [key: string]: V }> { } } - if (requestContext) { - requestContext.featureFlagCache ??= {} - requestContext.featureFlagCache[this.setId] = flagValues - } - + context.setFeatureFlags(this.setId, flagValues) for (const [key, value] of Object.entries(flagValues)) { tags[`flags.${key}.value`] = value }