Skip to content

Commit 028c2a4

Browse files
committed
reset config stores in the config requestor when set on the client
1 parent f5080f6 commit 028c2a4

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

src/client/eppo-client.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,31 @@ export default class EppoClient {
209209
// noinspection JSUnusedGlobalSymbols
210210
setFlagConfigurationStore(flagConfigurationStore: IConfigurationStore<Flag | ObfuscatedFlag>) {
211211
this.flagConfigurationStore = flagConfigurationStore;
212+
213+
// Update the ConfigurationRequestor if it exists
214+
if (this.configurationRequestor) {
215+
this.configurationRequestor.setConfigurationStores(
216+
this.flagConfigurationStore,
217+
this.banditVariationConfigurationStore || null,
218+
this.banditModelConfigurationStore || null,
219+
);
220+
}
212221
}
213222

214223
// noinspection JSUnusedGlobalSymbols
215224
setBanditVariationConfigurationStore(
216225
banditVariationConfigurationStore: IConfigurationStore<BanditVariation[]>,
217226
) {
218227
this.banditVariationConfigurationStore = banditVariationConfigurationStore;
228+
229+
// Update the ConfigurationRequestor if it exists
230+
if (this.configurationRequestor) {
231+
this.configurationRequestor.setConfigurationStores(
232+
this.flagConfigurationStore,
233+
this.banditVariationConfigurationStore,
234+
this.banditModelConfigurationStore || null,
235+
);
236+
}
219237
}
220238

221239
/** Sets the EventDispatcher instance to use when tracking events with {@link track}. */
@@ -244,6 +262,15 @@ export default class EppoClient {
244262
banditModelConfigurationStore: IConfigurationStore<BanditParameters>,
245263
) {
246264
this.banditModelConfigurationStore = banditModelConfigurationStore;
265+
266+
// Update the ConfigurationRequestor if it exists
267+
if (this.configurationRequestor) {
268+
this.configurationRequestor.setConfigurationStores(
269+
this.flagConfigurationStore,
270+
this.banditVariationConfigurationStore || null,
271+
this.banditModelConfigurationStore,
272+
);
273+
}
247274
}
248275

249276
// noinspection JSUnusedGlobalSymbols

src/configuration-requestor.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ import { BanditVariation, BanditParameters, Flag, BanditReference } from './inte
1010
// Requests AND stores flag configurations
1111
export default class ConfigurationRequestor {
1212
private banditModelVersions: string[] = [];
13-
private readonly configuration: StoreBackedConfiguration;
13+
private configuration: StoreBackedConfiguration;
1414

1515
constructor(
1616
private readonly httpClient: IHttpClient,
17-
private readonly flagConfigurationStore: IConfigurationStore<Flag>,
18-
private readonly banditVariationConfigurationStore: IConfigurationStore<
19-
BanditVariation[]
20-
> | null,
21-
private readonly banditModelConfigurationStore: IConfigurationStore<BanditParameters> | null,
17+
private flagConfigurationStore: IConfigurationStore<Flag>,
18+
private banditVariationConfigurationStore: IConfigurationStore<BanditVariation[]> | null,
19+
private banditModelConfigurationStore: IConfigurationStore<BanditParameters> | null,
2220
) {
2321
this.configuration = new StoreBackedConfiguration(
2422
this.flagConfigurationStore,
@@ -27,6 +25,26 @@ export default class ConfigurationRequestor {
2725
);
2826
}
2927

28+
/**
29+
* Updates the configuration stores and recreates the StoreBackedConfiguration
30+
*/
31+
public setConfigurationStores(
32+
flagConfigurationStore: IConfigurationStore<Flag>,
33+
banditVariationConfigurationStore: IConfigurationStore<BanditVariation[]> | null,
34+
banditModelConfigurationStore: IConfigurationStore<BanditParameters> | null,
35+
): void {
36+
this.flagConfigurationStore = flagConfigurationStore;
37+
this.banditVariationConfigurationStore = banditVariationConfigurationStore;
38+
this.banditModelConfigurationStore = banditModelConfigurationStore;
39+
40+
// Recreate the configuration with the new stores
41+
this.configuration = new StoreBackedConfiguration(
42+
this.flagConfigurationStore,
43+
this.banditVariationConfigurationStore,
44+
this.banditModelConfigurationStore,
45+
);
46+
}
47+
3048
public isFlagConfigExpired(): Promise<boolean> {
3149
return this.flagConfigurationStore.isExpired();
3250
}

0 commit comments

Comments
 (0)