Skip to content

Commit b04f796

Browse files
authored
Ability to set configuration request parameters on an already instantiated client instance (#37)
* ability to set configuration request parameters on an already instantiated client * feedback from PR
1 parent ce0c424 commit b04f796

File tree

3 files changed

+41
-17
lines changed

3 files changed

+41
-17
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@eppo/js-client-sdk-common",
3-
"version": "2.1.0",
3+
"version": "2.1.1",
44
"description": "Eppo SDK for client-side JavaScript applications (base for both web and react native)",
55
"main": "dist/index.js",
66
"files": [

src/client/eppo-client.spec.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1160,7 +1160,7 @@ describe('Eppo Client constructed with configuration request parameters', () =>
11601160
mock.teardown();
11611161
});
11621162

1163-
it('Fetches initial configuration', async () => {
1163+
it('Fetches initial configuration with parameters in constructor', async () => {
11641164
client = new EppoClient(storage, requestConfiguration);
11651165
client.setIsGracefulFailureMode(false);
11661166
// no configuration loaded
@@ -1172,6 +1172,19 @@ describe('Eppo Client constructed with configuration request parameters', () =>
11721172
expect(variation).toBe('green');
11731173
});
11741174

1175+
it('Fetches initial configuration with parameters provided later', async () => {
1176+
client = new EppoClient(storage);
1177+
client.setIsGracefulFailureMode(false);
1178+
client.setConfigurationRequestParameters(requestConfiguration);
1179+
// no configuration loaded
1180+
let variation = client.getAssignment(subjectForGreenVariation, flagKey);
1181+
expect(variation).toBeNull();
1182+
// have client fetch configurations
1183+
await client.fetchFlagConfigurations();
1184+
variation = client.getAssignment(subjectForGreenVariation, flagKey);
1185+
expect(variation).toBe('green');
1186+
});
1187+
11751188
it.each([
11761189
{ pollAfterSuccessfulInitialization: false },
11771190
{ pollAfterSuccessfulInitialization: true },

src/client/eppo-client.ts

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ export interface IEppoClient {
115115

116116
useCustomAssignmentCache(cache: AssignmentCache<Cacheable>): void;
117117

118+
setConfigurationRequestParameters(
119+
configurationRequestParameters: ExperimentConfigurationRequestParameters,
120+
): void;
121+
118122
fetchFlagConfigurations(): void;
119123

120124
stopPolling(): void;
@@ -141,21 +145,27 @@ export default class EppoClient implements IEppoClient {
141145
private isGracefulFailureMode = true;
142146
private assignmentCache: AssignmentCache<Cacheable> | undefined;
143147
private configurationStore: IConfigurationStore;
144-
private configurationRequestConfig: ExperimentConfigurationRequestParameters | undefined;
148+
private configurationRequestParameters: ExperimentConfigurationRequestParameters | undefined;
145149
private requestPoller: IPoller | undefined;
146150

147151
constructor(
148152
configurationStore: IConfigurationStore,
149-
configurationRequestConfig?: ExperimentConfigurationRequestParameters,
153+
configurationRequestParameters?: ExperimentConfigurationRequestParameters,
150154
) {
151155
this.configurationStore = configurationStore;
152-
this.configurationRequestConfig = configurationRequestConfig;
156+
this.configurationRequestParameters = configurationRequestParameters;
157+
}
158+
159+
public setConfigurationRequestParameters(
160+
configurationRequestParameters: ExperimentConfigurationRequestParameters,
161+
) {
162+
this.configurationRequestParameters = configurationRequestParameters;
153163
}
154164

155165
public async fetchFlagConfigurations() {
156-
if (!this.configurationRequestConfig) {
166+
if (!this.configurationRequestParameters) {
157167
throw new Error(
158-
'Eppo SDK unable to fetch flag configurations without a request configuration',
168+
'Eppo SDK unable to fetch flag configurations without configuration request parameters',
159169
);
160170
}
161171

@@ -165,13 +175,13 @@ export default class EppoClient implements IEppoClient {
165175
}
166176

167177
const axiosInstance = axios.create({
168-
baseURL: this.configurationRequestConfig.baseUrl || DEFAULT_BASE_URL,
169-
timeout: this.configurationRequestConfig.requestTimeoutMs || DEFAULT_REQUEST_TIMEOUT_MS,
178+
baseURL: this.configurationRequestParameters.baseUrl || DEFAULT_BASE_URL,
179+
timeout: this.configurationRequestParameters.requestTimeoutMs || DEFAULT_REQUEST_TIMEOUT_MS,
170180
});
171181
const httpClient = new HttpClient(axiosInstance, {
172-
apiKey: this.configurationRequestConfig.apiKey,
173-
sdkName: this.configurationRequestConfig.sdkName,
174-
sdkVersion: this.configurationRequestConfig.sdkVersion,
182+
apiKey: this.configurationRequestParameters.apiKey,
183+
sdkName: this.configurationRequestParameters.sdkName,
184+
sdkVersion: this.configurationRequestParameters.sdkVersion,
175185
});
176186
const configurationRequestor = new ExperimentConfigurationRequestor(
177187
this.configurationStore,
@@ -183,16 +193,17 @@ export default class EppoClient implements IEppoClient {
183193
configurationRequestor.fetchAndStoreConfigurations.bind(configurationRequestor),
184194
{
185195
maxStartRetries:
186-
this.configurationRequestConfig.numInitialRequestRetries ??
196+
this.configurationRequestParameters.numInitialRequestRetries ??
187197
DEFAULT_INITIAL_CONFIG_REQUEST_RETRIES,
188198
maxPollRetries:
189-
this.configurationRequestConfig.numPollRequestRetries ??
199+
this.configurationRequestParameters.numPollRequestRetries ??
190200
DEFAULT_POLL_CONFIG_REQUEST_RETRIES,
191201
pollAfterSuccessfulStart:
192-
this.configurationRequestConfig.pollAfterSuccessfulInitialization ?? false,
202+
this.configurationRequestParameters.pollAfterSuccessfulInitialization ?? false,
193203
pollAfterFailedStart:
194-
this.configurationRequestConfig.pollAfterFailedInitialization ?? false,
195-
errorOnFailedStart: this.configurationRequestConfig.throwOnFailedInitialization ?? false,
204+
this.configurationRequestParameters.pollAfterFailedInitialization ?? false,
205+
errorOnFailedStart:
206+
this.configurationRequestParameters.throwOnFailedInitialization ?? false,
196207
},
197208
);
198209

0 commit comments

Comments
 (0)