diff --git a/packages/optimizely-sdk/lib/optimizely_decision/index.ts b/packages/optimizely-sdk/lib/optimizely_decision/index.ts index ac0a7a8fc..f0698881d 100644 --- a/packages/optimizely-sdk/lib/optimizely_decision/index.ts +++ b/packages/optimizely-sdk/lib/optimizely_decision/index.ts @@ -17,11 +17,17 @@ import OptimizelyUserContext from '../optimizely_user_context'; export interface OptimizelyDecision { variationKey: string | null; + // The boolean value indicating if the flag is enabled or not enabled: boolean; + // The collection of variables associated with the decision variables: { [variableKey: string]: unknown }; + // The rule key of the decision ruleKey: string | null; + // The flag key for which the decision has been made for flagKey: string; + // A copy of the user context for which the decision has been made for userContext: OptimizelyUserContext; + // An array of error/info messages describing why the decision has been made. reasons: string[]; } diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts index c3f713f62..d60d33ce1 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts @@ -69,7 +69,7 @@ export default class OptimizelyUserContext { options: OptimizelyDecideOptions[] = [] ): OptimizelyDecision { - return this.optimizely.decide(this, key, options); + return this.optimizely.decide(this.cloneUserContext(), key, options); } /** @@ -85,7 +85,7 @@ export default class OptimizelyUserContext { options: OptimizelyDecideOptions[] = [], ): { [key: string]: OptimizelyDecision } { - return this.optimizely.decideForKeys(this, keys, options); + return this.optimizely.decideForKeys(this.cloneUserContext(), keys, options); } /** @@ -97,7 +97,7 @@ export default class OptimizelyUserContext { options: OptimizelyDecideOptions[] = [] ): { [key: string]: OptimizelyDecision } { - return this.optimizely.decideAll(this, options); + return this.optimizely.decideAll(this.cloneUserContext(), options); } /** @@ -108,4 +108,12 @@ export default class OptimizelyUserContext { trackEvent(eventName: string, eventTags?: EventTags): void { this.optimizely.track(eventName, this.userId, this.attributes, eventTags); } + + private cloneUserContext(): OptimizelyUserContext { + return new OptimizelyUserContext({ + optimizely: this.getOptimizely(), + userId: this.getUserId(), + attributes: this.getAttributes(), + }) + } }