Skip to content

Commit f2ac28e

Browse files
Merge pull request #341 from splitio/SDKS-8407_memberships_cdn_bypass
Large Segments: CDN bypass for `/memberships` requests
2 parents b1d4acb + 3a861d7 commit f2ac28e

File tree

16 files changed

+226
-137
lines changed

16 files changed

+226
-137
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@splitsoftware/splitio-commons",
3-
"version": "1.16.1-rc.11",
3+
"version": "1.16.1-rc.12",
44
"description": "Split JavaScript SDK common components",
55
"main": "cjs/index.js",
66
"module": "esm/index.js",

src/services/__tests__/splitApi.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ describe('splitApi', () => {
3030
assertHeaders(settings, headers);
3131
expect(url).toBe('auth/v2/auth?s=1.1&users=key1&users=key2');
3232

33-
splitApi.fetchMemberships('userKey');
33+
splitApi.fetchMemberships('userKey', false, 80);
3434
[url, { headers }] = fetchMock.mock.calls[1];
3535
assertHeaders(settings, headers);
36-
expect(url).toBe('sdk/memberships/userKey');
36+
expect(url).toBe('sdk/memberships/userKey?till=80');
3737

3838
splitApi.fetchSegmentChanges(-1, 'segmentName', false, 90);
3939
[url, { headers }] = fetchMock.mock.calls[2];

src/services/splitApi.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,14 @@ export function splitApiFactory(
6767
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
6868
},
6969

70-
fetchMemberships(userMatchingKey: string, noCache?: boolean) {
70+
fetchMemberships(userMatchingKey: string, noCache?: boolean, till?: number) {
7171
/**
7272
* URI encoding of user keys in order to:
7373
* - avoid 400 responses (due to URI malformed). E.g.: '/api/memberships/%'
7474
* - avoid 404 responses. E.g.: '/api/memberships/foo/bar'
7575
* - match user keys with special characters. E.g.: 'foo%bar', 'foo/bar'
7676
*/
77-
const url = `${urls.sdk}/memberships/${encodeURIComponent(userMatchingKey)}`;
77+
const url = `${urls.sdk}/memberships/${encodeURIComponent(userMatchingKey)}${till ? '?till=' + till : ''}`;
7878
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MEMBERSHIPS));
7979
},
8080

src/services/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export type IFetchSplitChanges = (since: number, noCache?: boolean, till?: numbe
3939

4040
export type IFetchSegmentChanges = (since: number, segmentName: string, noCache?: boolean, till?: number) => Promise<IResponse>
4141

42-
export type IFetchMemberships = (userMatchingKey: string, noCache?: boolean) => Promise<IResponse>
42+
export type IFetchMemberships = (userMatchingKey: string, noCache?: boolean, till?: number) => Promise<IResponse>
4343

4444
export type IPostEventsBulk = (body: string, headers?: Record<string, string>) => Promise<IResponse>
4545

src/storages/inMemory/TelemetryCacheInMemory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export class TelemetryCacheInMemory implements ITelemetryCacheSync {
5151
spC: this.splits && this.splits.getSplitNames().length,
5252
seC: this.segments && this.segments.getRegisteredSegments().length,
5353
skC: this.segments && this.segments.getKeysCount(),
54-
lseC: this.largeSegments && this.largeSegments.getRegisteredSegments().length,
54+
lsC: this.largeSegments && this.largeSegments.getRegisteredSegments().length,
5555
lskC: this.largeSegments && this.largeSegments.getKeysCount(),
5656
sL: this.getSessionLength(),
5757
eQ: this.getEventStats(QUEUED),

src/storages/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ export interface ISegmentsCacheSync extends ISegmentsCacheBase {
270270
getRegisteredSegments(): string[]
271271
getKeysCount(): number // only used for telemetry
272272
setChangeNumber(name: string, changeNumber: number): boolean | void
273-
getChangeNumber(name: string): number
273+
getChangeNumber(name?: string): number
274274
resetSegments(segmentsData: MySegmentsData | IMySegmentsResponse): boolean // only for Sync Client-Side
275275
clear(): void
276276
}

src/sync/polling/fetchers/mySegmentsFetcher.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ export function mySegmentsFetcherFactory(fetchMemberships: IFetchMemberships): I
1111
return function mySegmentsFetcher(
1212
userMatchingKey: string,
1313
noCache?: boolean,
14+
till?: number,
1415
// Optional decorator for `fetchMemberships` promise, such as timeout or time tracker
1516
decorator?: (promise: Promise<IResponse>) => Promise<IResponse>
1617
): Promise<IMembershipsResponse> {
1718

18-
let mySegmentsPromise = fetchMemberships(userMatchingKey, noCache);
19+
let mySegmentsPromise = fetchMemberships(userMatchingKey, noCache, till);
1920
if (decorator) mySegmentsPromise = decorator(mySegmentsPromise);
2021

2122
return mySegmentsPromise.then(resp => resp.json());

src/sync/polling/fetchers/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ export type ISegmentChangesFetcher = (
1919
export type IMySegmentsFetcher = (
2020
userMatchingKey: string,
2121
noCache?: boolean,
22+
till?: number,
2223
decorator?: (promise: Promise<IResponse>) => Promise<IResponse>
2324
) => Promise<IMembershipsResponse>

src/sync/polling/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export type MySegmentsData = {
1515
removed: string[]
1616
}
1717

18-
export interface IMySegmentsSyncTask extends ISyncTask<[segmentsData?: MySegmentsData, noCache?: boolean], boolean> { }
18+
export interface IMySegmentsSyncTask extends ISyncTask<[segmentsData?: MySegmentsData, noCache?: boolean, till?: number], boolean> { }
1919

2020
export interface IPollingManager extends ITask {
2121
syncAll(): Promise<any>

0 commit comments

Comments
 (0)