Skip to content

Commit

Permalink
Add flags spec query param to auth requests
Browse files Browse the repository at this point in the history
  • Loading branch information
EmilianoSanchez committed Apr 9, 2024
1 parent 440ac15 commit ff12f34
Show file tree
Hide file tree
Showing 17 changed files with 48 additions and 48 deletions.
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"node": ">=6"
},
"dependencies": {
"@splitsoftware/splitio-commons": "1.13.2-rc.1",
"@splitsoftware/splitio-commons": "1.13.2-rc.2",
"@types/google.analytics": "0.0.40",
"@types/ioredis": "^4.28.0",
"bloom-filters": "^3.0.0",
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/browserSuites/push-corner-cases.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ export function testSplitKillOnReadyFromCache(fetchMock, assert) {
});

// 1 auth request
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), { status: 200, body: authPushEnabledNicolas });
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), { status: 200, body: authPushEnabledNicolas });
// 2 mySegments requests: initial sync and after SSE opened
fetchMock.get({ url: url(settings, '/mySegments/nicolas%40split.io'), repeat: 2 }, { status: 200, body: { mySegments: [] } });

Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/browserSuites/push-fallbacking.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ export function testFallbacking(fetchMock, assert) {

});

fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth success');
return { status: 200, body: authPushEnabledNicolas };
Expand Down Expand Up @@ -237,7 +237,7 @@ export function testFallbacking(fetchMock, assert) {

// creating of second client during streaming: initial mysegment sync, reauth and syncAll due to new client
fetchMock.getOnce(url(settings, '/mySegments/marcio%40split.io'), { status: 200, body: mySegmentsMarcio });
fetchMock.get({ url: url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}&users=${encodeURIComponent(secondUserKey)}`), repeat: 3 /* initial + 2 STREAMING_RESET */ }, (url, opts) => {
fetchMock.get({ url: url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}&users=${encodeURIComponent(secondUserKey)}`), repeat: 3 /* initial + 2 STREAMING_RESET */ }, (url, opts) => {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('second auth success');
return { status: 200, body: authPushEnabledNicolasAndMarcio };
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/browserSuites/push-flag-sets.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export function testFlagSets(fetchMock, t) {

fetchMock.get(baseUrls.sdk + '/mySegments/nicolas%40split.io', { status: 200, body: { 'mySegments': [] } });

fetchMock.get(baseUrls.auth + '/v2/auth?users=nicolas%40split.io', function () {
fetchMock.get(baseUrls.auth + '/v2/auth?s=1.1&users=nicolas%40split.io', function () {
return { status: 200, body: authPushEnabled };
});
fetchMock.get(baseUrls.sdk + '/splitChanges?s=1.1&since=-1', function () {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ function testInitializationFail(fetchMock, assert, fallbackToPolling) {
export function testAuthWithPushDisabled(fetchMock, assert) {
assert.plan(6);

fetchMock.getOnce(`https://auth.push-initialization-nopush/api/v2/auth?users=${encodeURIComponent(userKey)}`, function (url, opts) {
fetchMock.getOnce(`https://auth.push-initialization-nopush/api/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`, function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth');
return { status: 200, body: authPushDisabled };
Expand All @@ -96,7 +96,7 @@ export function testAuthWithPushDisabled(fetchMock, assert) {
export function testAuthWith401(fetchMock, assert) {
assert.plan(6);

fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth');
return { status: 401, body: authInvalidCredentials };
Expand All @@ -122,7 +122,7 @@ export function testSSEWithNonRetryableError(fetchMock, assert) {
assert.plan(7);

// Auth successes
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth successes');
return { status: 200, body: authPushEnabledNicolas };
Expand Down
16 changes: 8 additions & 8 deletions src/__tests__/browserSuites/push-initialization-retries.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ export function testPushRetriesDueToAuthErrors(fetchMock, assert) {

let start, splitio, client, ready = false;

fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('first auth attempt');
return { status: 200, body: authPushBadToken };
});
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), { throws: new TypeError('Network error') });
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), { throws: new TypeError('Network error') });
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
const lapse = Date.now() - start;
const expected = (settings.scheduler.pushRetryBackoffBase * Math.pow(2, 0) + settings.scheduler.pushRetryBackoffBase * Math.pow(2, 1));
Expand Down Expand Up @@ -130,7 +130,7 @@ export function testPushRetriesDueToSseErrors(fetchMock, assert) {
sseattempts++;
});

fetchMock.get({ url: url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), repeat: 3 /* 3 push attempts */ }, function (url, opts) {
fetchMock.get({ url: url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), repeat: 3 /* 3 push attempts */ }, function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth success');
return { status: 200, body: authPushEnabledNicolas };
Expand Down Expand Up @@ -189,7 +189,7 @@ export function testSdkDestroyWhileAuthSuccess(fetchMock, assert) {

let splitio, client, ready = false;

fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), { status: 200, body: authPushEnabledNicolas }, { delay: 100 });
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), { status: 200, body: authPushEnabledNicolas }, { delay: 100 });

fetchMock.getOnce(url(settings, '/mySegments/nicolas%40split.io'), { status: 200, body: mySegmentsNicolasMock });
fetchMock.getOnce(url(settings, '/splitChanges?s=1.1&since=-1'), { status: 200, body: splitChangesMock1 });
Expand Down Expand Up @@ -224,7 +224,7 @@ export function testSdkDestroyWhileConnDelay(fetchMock, assert) {
assert.fail('unexpected EventSource request with url: ' + eventSourceInstance.url);
});

fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), { status: 200, body: { ...authPushEnabledNicolas, connDelay: 0.1 } });
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), { status: 200, body: { ...authPushEnabledNicolas, connDelay: 0.1 } });
fetchMock.getOnce(url(settings, '/mySegments/nicolas%40split.io'), { status: 200, body: mySegmentsNicolasMock });
fetchMock.getOnce(url(settings, '/splitChanges?s=1.1&since=-1'), { status: 200, body: splitChangesMock1 });

Expand Down Expand Up @@ -255,8 +255,8 @@ export function testSdkDestroyWhileAuthRetries(fetchMock, assert) {

let splitio, client, ready = false;

fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), { status: 200, body: authPushBadToken });
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), { throws: new TypeError('Network error') }, { delay: 100 });
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), { status: 200, body: authPushBadToken });
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), { throws: new TypeError('Network error') }, { delay: 100 });

fetchMock.get({ url: url(settings, '/mySegments/nicolas%40split.io'), repeat: 2 }, { status: 200, body: mySegmentsNicolasMock });
fetchMock.getOnce(url(settings, '/splitChanges?s=1.1&since=-1'), { status: 200, body: splitChangesMock1 });
Expand Down
6 changes: 3 additions & 3 deletions src/__tests__/browserSuites/push-refresh-token.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export function testRefreshToken(fetchMock, assert) {
fetchMock.getOnce(url(settings, '/mySegments/nicolas%40split.io'), { status: 200, body: mySegmentsNicolasMock1 });

// first auth
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth success');
return { status: 200, body: authPushEnabledNicolas };
Expand All @@ -92,7 +92,7 @@ export function testRefreshToken(fetchMock, assert) {
fetchMock.getOnce(url(settings, '/mySegments/nicolas%40split.io'), { status: 200, body: mySegmentsNicolasMock1 });

// re-auth due to refresh token, with connDelay of 0.5 seconds
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
const lapse = Date.now() - start;
assert.true(nearlyEqual(lapse, MILLIS_REFRESH_TOKEN), 'reauthentication for token refresh');
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
Expand All @@ -108,7 +108,7 @@ export function testRefreshToken(fetchMock, assert) {
fetchMock.getOnce(url(settings, '/mySegments/nicolas%40split.io'), { status: 200, body: mySegmentsNicolasMock1 });

// second re-auth due to refresh token, this time responding with pushEnabled false
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}`), function (url, opts) {
const lapse = Date.now() - start;
assert.true(nearlyEqual(lapse, MILLIS_REFRESH_TOKEN * 2), 'second reauthentication for token refresh');
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ export function testSynchronizationRetries(fetchMock, assert) {
});

// initial auth
fetchMock.getOnce(url(settings, `/v2/auth?users=${encodeURIComponent(userKey)}&users=${encodeURIComponent(otherUserKeySync)}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&users=${encodeURIComponent(userKey)}&users=${encodeURIComponent(otherUserKeySync)}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth success');
return { status: 200, body: authPushEnabledNicolas };
Expand Down
6 changes: 3 additions & 3 deletions src/__tests__/browserSuites/push-synchronization.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -265,23 +265,23 @@ export function testSynchronization(fetchMock, assert) {

// initial auth
let authParams = `users=${encodeURIComponent(userKey)}`;
fetchMock.getOnce(url(settings, `/v2/auth?${authParams}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&${authParams}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth success');
return { status: 200, body: authPushEnabledNicolas };
});

// reauth due to new client
authParams += `&users=${encodeURIComponent(otherUserKey)}`;
fetchMock.getOnce(url(settings, `/v2/auth?${authParams}`), function (url, opts) {
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&${authParams}`), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('second auth success');
return { status: 200, body: authPushEnabledNicolasAndMarcio };
});

// reauth due to more clients
authParams += `&users=${encodeURIComponent(keylistAddKey)}&users=${encodeURIComponent(keylistRemoveKey)}&users=${encodeURIComponent(bitmapTrueKey)}`;
fetchMock.getOnce(url(settings, `/v2/auth?${authParams}`), { status: 200, body: authPushEnabledNicolasAndMarcio });
fetchMock.getOnce(url(settings, `/v2/auth?s=1.1&${authParams}`), { status: 200, body: authPushEnabledNicolasAndMarcio });

// initial split and mySegments sync
fetchMock.getOnce(url(settings, '/splitChanges?s=1.1&since=-1'), function (url, opts) {
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/nodeSuites/push-fallbacking.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ export function testFallbacking(fetchMock, assert) {

});

fetchMock.get({ url: url(settings, '/v2/auth'), repeat: 3 /* initial + 2 STREAMING_RESET */ }, function (url, opts) {
fetchMock.get({ url: url(settings, '/v2/auth?s=1.1'), repeat: 3 /* initial + 2 STREAMING_RESET */ }, function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth success');
return { status: 200, body: authPushEnabled };
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/nodeSuites/push-flag-sets.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export function testFlagSets(fetchMock, t) {
mockSegmentChanges(fetchMock, new RegExp(baseUrls.sdk + '/segmentChanges/*'), ['some-key']);
fetchMock.post('*', 200);

fetchMock.get(baseUrls.auth + '/v2/auth', function (url, opts) {
fetchMock.get(baseUrls.auth + '/v2/auth?s=1.1', function (url, opts) {
if (!opts.headers['Authorization']) t.fail('`/v2/auth` request must include `Authorization` header');
t.pass('auth success');
return { status: 200, body: authPushEnabled };
Expand Down
8 changes: 4 additions & 4 deletions src/__tests__/nodeSuites/push-initialization-nopush.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ function testInitializationFail(fetchMock, assert, fallbackToPolling) {
export function testAuthWithPushDisabled(fetchMock, assert) {
assert.plan(6);

fetchMock.getOnce('https://auth.push-initialization-nopush/api/v2/auth', function (url, opts) {
fetchMock.getOnce('https://auth.push-initialization-nopush/api/v2/auth?s=1.1', function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth');
return { status: 200, body: authPushDisabled };
Expand All @@ -93,7 +93,7 @@ export function testAuthWithPushDisabled(fetchMock, assert) {
export function testAuthWith401(fetchMock, assert) {
assert.plan(6);

fetchMock.getOnce(url(settings, '/v2/auth'), function (url, opts) {
fetchMock.getOnce(url(settings, '/v2/auth?s=1.1'), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth');
return { status: 401, body: authInvalidCredentials };
Expand All @@ -106,7 +106,7 @@ export function testAuthWith401(fetchMock, assert) {
export function testAuthWith400(fetchMock, assert) {
assert.plan(6);

fetchMock.getOnce(url(settings, '/v2/auth'), function (url, opts) {
fetchMock.getOnce(url(settings, '/v2/auth?s=1.1'), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth');
return { status: 400, body: authNoUserSpecified };
Expand All @@ -131,7 +131,7 @@ export function testSSEWithNonRetryableError(fetchMock, assert) {
assert.plan(7);

// Auth successes
fetchMock.getOnce(url(settings, '/v2/auth'), function (url, opts) {
fetchMock.getOnce(url(settings, '/v2/auth?s=1.1'), function (url, opts) {
if (!opts.headers['Authorization']) assert.fail('`/v2/auth` request must include `Authorization` header');
assert.pass('auth successes');
return { status: 200, body: authPushEnabled };
Expand Down
Loading

0 comments on commit ff12f34

Please sign in to comment.