Skip to content

Commit e6454b9

Browse files
authored
feat: Clone OptimizelyUserContext before calling decide api (#643)
* Clone OptimizelyUsercOntext before calling decide apis * Add description to decision params
1 parent 72116b4 commit e6454b9

File tree

2 files changed

+17
-3
lines changed
  • packages/optimizely-sdk/lib

2 files changed

+17
-3
lines changed

packages/optimizely-sdk/lib/optimizely_decision/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@ import OptimizelyUserContext from '../optimizely_user_context';
1717

1818
export interface OptimizelyDecision {
1919
variationKey: string | null;
20+
// The boolean value indicating if the flag is enabled or not
2021
enabled: boolean;
22+
// The collection of variables associated with the decision
2123
variables: { [variableKey: string]: unknown };
24+
// The rule key of the decision
2225
ruleKey: string | null;
26+
// The flag key for which the decision has been made for
2327
flagKey: string;
28+
// A copy of the user context for which the decision has been made for
2429
userContext: OptimizelyUserContext;
30+
// An array of error/info messages describing why the decision has been made.
2531
reasons: string[];
2632
}
2733

packages/optimizely-sdk/lib/optimizely_user_context/index.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export default class OptimizelyUserContext {
6969
options: OptimizelyDecideOptions[] = []
7070
): OptimizelyDecision {
7171

72-
return this.optimizely.decide(this, key, options);
72+
return this.optimizely.decide(this.cloneUserContext(), key, options);
7373
}
7474

7575
/**
@@ -85,7 +85,7 @@ export default class OptimizelyUserContext {
8585
options: OptimizelyDecideOptions[] = [],
8686
): { [key: string]: OptimizelyDecision } {
8787

88-
return this.optimizely.decideForKeys(this, keys, options);
88+
return this.optimizely.decideForKeys(this.cloneUserContext(), keys, options);
8989
}
9090

9191
/**
@@ -97,7 +97,7 @@ export default class OptimizelyUserContext {
9797
options: OptimizelyDecideOptions[] = []
9898
): { [key: string]: OptimizelyDecision } {
9999

100-
return this.optimizely.decideAll(this, options);
100+
return this.optimizely.decideAll(this.cloneUserContext(), options);
101101
}
102102

103103
/**
@@ -108,4 +108,12 @@ export default class OptimizelyUserContext {
108108
trackEvent(eventName: string, eventTags?: EventTags): void {
109109
this.optimizely.track(eventName, this.userId, this.attributes, eventTags);
110110
}
111+
112+
private cloneUserContext(): OptimizelyUserContext {
113+
return new OptimizelyUserContext({
114+
optimizely: this.getOptimizely(),
115+
userId: this.getUserId(),
116+
attributes: this.getAttributes(),
117+
})
118+
}
111119
}

0 commit comments

Comments
 (0)