Skip to content

Commit 1617fca

Browse files
committed
feat: use subdomain in precomputed client
1 parent 5edebab commit 1617fca

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

src/client/eppo-precomputed-client.spec.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,78 @@ describe('EppoPrecomputedClient E2E test', () => {
714714
pollAfterFailedInitialization ? red : 'default',
715715
);
716716
});
717+
718+
describe('Enhanced SDK Token with encoded subdomain', () => {
719+
let urlsRequested: string[] = [];
720+
721+
beforeEach(() => {
722+
urlsRequested = [];
723+
global.fetch = jest.fn((url) => {
724+
urlsRequested.push(url.toString());
725+
return Promise.resolve({
726+
ok: true,
727+
status: 200,
728+
json: () => Promise.resolve(precomputedResponse),
729+
} as Response);
730+
});
731+
});
732+
733+
it('should request from the encoded subdomain', async () => {
734+
const client = new EppoPrecomputedClient({
735+
precomputedFlagStore: new MemoryOnlyConfigurationStore<PrecomputedFlag>(),
736+
subject,
737+
requestParameters: {
738+
apiKey: 'zCsQuoHJxVPp895.Y3M9ZXhwZXJpbWVudA==', // subdomain=experiment
739+
sdkName: 'js-client-sdk-common',
740+
sdkVersion: '1.0.0',
741+
},
742+
});
743+
744+
await client.fetchPrecomputedFlags();
745+
746+
expect(urlsRequested).toHaveLength(1);
747+
expect(urlsRequested[0]).toContain(
748+
'https://experiment.fs-edge-assignment.eppo.cloud/assignments?apiKey=zCsQuoHJxVPp895.Y3M9ZXhwZXJpbWVudA%3D%3D&sdkName=js-client-sdk-common&sdkVersion=1.0.0',
749+
);
750+
});
751+
752+
it('should request from the default domain if the encoded subdomain is not present', async () => {
753+
const client = new EppoPrecomputedClient({
754+
precomputedFlagStore: new MemoryOnlyConfigurationStore<PrecomputedFlag>(),
755+
subject,
756+
requestParameters: {
757+
apiKey: 'old style key',
758+
sdkName: 'js-client-sdk-common',
759+
sdkVersion: '1.0.0',
760+
},
761+
});
762+
763+
await client.fetchPrecomputedFlags();
764+
765+
expect(urlsRequested).toHaveLength(1);
766+
expect(urlsRequested[0]).toEqual(
767+
'https://fs-edge-assignment.eppo.cloud/assignments?apiKey=old+style+key&sdkName=js-client-sdk-common&sdkVersion=1.0.0',
768+
);
769+
});
770+
771+
it('should request from the provided baseUrl if present', async () => {
772+
const client = new EppoPrecomputedClient({
773+
precomputedFlagStore: new MemoryOnlyConfigurationStore<PrecomputedFlag>(),
774+
subject,
775+
requestParameters: {
776+
apiKey: 'zCsQuoHJxVPp895.Y3M9ZXhwZXJpbWVudA==', // subdomain=experiment
777+
sdkName: 'js-client-sdk-common',
778+
sdkVersion: '1.0.0',
779+
baseUrl: 'https://custom-base-url.com',
780+
},
781+
});
782+
783+
await client.fetchPrecomputedFlags();
784+
785+
expect(urlsRequested).toHaveLength(1);
786+
expect(urlsRequested[0]).toContain('https://custom-base-url.com');
787+
});
788+
});
717789
});
718790

719791
describe('Obfuscated precomputed flags', () => {

src/client/eppo-precomputed-client.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
import { getMD5Hash } from '../obfuscation';
3333
import initPoller, { IPoller } from '../poller';
3434
import PrecomputedRequestor from '../precomputed-requestor';
35+
import SdkTokenDecoder from '../sdk-token-decoder';
3536
import { Attributes, ContextAttributes, FlagKey } from '../types';
3637
import { validateNotBlank } from '../validation';
3738
import { LIB_VERSION } from '../version';
@@ -164,6 +165,7 @@ export default class EppoPrecomputedClient {
164165
defaultUrl: PRECOMPUTED_BASE_URL,
165166
baseUrl,
166167
queryParams: { apiKey, sdkName, sdkVersion },
168+
sdkTokenDecoder: new SdkTokenDecoder(apiKey),
167169
});
168170
const httpClient = new FetchHttpClient(apiEndpoints, requestTimeoutMs);
169171
const precomputedRequestor = new PrecomputedRequestor(

0 commit comments

Comments
 (0)