Skip to content

Commit b5cf5b3

Browse files
yfrancisgreghuels
authored andcommitted
Add overrides to precomputed client
1 parent f860c88 commit b5cf5b3

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/client/eppo-precomputed-client.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { IBanditEvent, IBanditLogger } from '../bandit-logger';
99
import { AssignmentCache } from '../cache/abstract-assignment-cache';
1010
import { LRUInMemoryAssignmentCache } from '../cache/lru-in-memory-assignment-cache';
1111
import { NonExpiringInMemoryAssignmentCache } from '../cache/non-expiring-in-memory-cache-assignment';
12-
import { IConfigurationStore } from '../configuration-store/configuration-store';
12+
import { IConfigurationStore, ISyncStore } from '../configuration-store/configuration-store';
1313
import {
1414
DEFAULT_INITIAL_CONFIG_REQUEST_RETRIES,
1515
DEFAULT_POLL_CONFIG_REQUEST_RETRIES,
@@ -27,6 +27,7 @@ import {
2727
IObfuscatedPrecomputedBandit,
2828
PrecomputedFlag,
2929
VariationType,
30+
Variation,
3031
} from '../interfaces';
3132
import { getMD5Hash } from '../obfuscation';
3233
import initPoller, { IPoller } from '../poller';
@@ -60,6 +61,7 @@ export type PrecomputedFlagsRequestParameters = {
6061
interface EppoPrecomputedClientOptions {
6162
precomputedFlagStore: IConfigurationStore<PrecomputedFlag>;
6263
precomputedBanditStore?: IConfigurationStore<IObfuscatedPrecomputedBandit>;
64+
overridesStore?: ISyncStore<Variation>;
6365
subject: Subject;
6466
banditActions?: Record<FlagKey, Record<string, ContextAttributes>>;
6567
requestParameters?: PrecomputedFlagsRequestParameters;
@@ -81,10 +83,13 @@ export default class EppoPrecomputedClient {
8183
private banditActions?: Record<FlagKey, Record<string, ContextAttributes>>;
8284
private precomputedFlagStore: IConfigurationStore<PrecomputedFlag>;
8385
private precomputedBanditStore?: IConfigurationStore<IObfuscatedPrecomputedBandit>;
86+
private overridesStore?: ISyncStore<Variation>;
8487

8588
public constructor(options: EppoPrecomputedClientOptions) {
8689
this.precomputedFlagStore = options.precomputedFlagStore;
8790
this.precomputedBanditStore = options.precomputedBanditStore;
91+
this.overridesStore = options.overridesStore;
92+
8893
const { subjectKey, subjectAttributes } = options.subject;
8994
this.subject = {
9095
subjectKey,
@@ -199,6 +204,11 @@ export default class EppoPrecomputedClient {
199204
): T {
200205
validateNotBlank(flagKey, 'Invalid argument: flagKey cannot be blank');
201206

207+
const overrideVariation = this.overridesStore?.get(flagKey);
208+
if (overrideVariation) {
209+
return valueTransformer(overrideVariation.value);
210+
}
211+
202212
const precomputedFlag = this.getPrecomputedFlag(flagKey);
203213

204214
if (precomputedFlag == null) {
@@ -515,4 +525,12 @@ export default class EppoPrecomputedClient {
515525
sdkLibVersion: LIB_VERSION,
516526
};
517527
}
528+
529+
public setOverridesStore(store: ISyncStore<Variation>): void {
530+
this.overridesStore = store;
531+
}
532+
533+
public unsetOverridesStore(): void {
534+
this.overridesStore = undefined;
535+
}
518536
}

0 commit comments

Comments
 (0)