From ad4e2d0417272b108033056919dd1c316b59dbd7 Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Tue, 12 Apr 2022 13:39:48 -0300 Subject: [PATCH 1/7] reject redis promise with Error instance instead of string --- src/readiness/__tests__/sdkReadinessManager.spec.ts | 3 ++- src/readiness/sdkReadinessManager.ts | 12 +++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/readiness/__tests__/sdkReadinessManager.spec.ts b/src/readiness/__tests__/sdkReadinessManager.spec.ts index c1929bdc..b17ea51f 100644 --- a/src/readiness/__tests__/sdkReadinessManager.spec.ts +++ b/src/readiness/__tests__/sdkReadinessManager.spec.ts @@ -309,7 +309,8 @@ describe('SDK Readiness Manager - Ready promise', () => { .then(() => { throw new Error(); }) .then(() => { throw new Error(); }) .catch((error) => { - expect(error).toBe('Split SDK has emitted SDK_READY_TIMED_OUT event.'); + expect(error instanceof Error).toBe(true); + expect(error.message).toBe('Split SDK has emitted SDK_READY_TIMED_OUT event.'); expect(loggerMock.error).toBeCalledTimes(2); // If we provide an onRejected handler, even chaining several onFulfilled handlers, the error is not logged. done(); }); diff --git a/src/readiness/sdkReadinessManager.ts b/src/readiness/sdkReadinessManager.ts index 52f519ad..f50f78f9 100644 --- a/src/readiness/sdkReadinessManager.ts +++ b/src/readiness/sdkReadinessManager.ts @@ -51,7 +51,7 @@ export function sdkReadinessManagerFactory( // default onRejected handler, that just logs the error, if ready promise doesn't have one. function defaultOnRejected(err: any) { - log.error(err); + log.error(err && err.message); } function generateReadyPromise() { @@ -62,7 +62,9 @@ export function sdkReadinessManagerFactory( if (readyCbCount === internalReadyCbCount && !promise.hasOnFulfilled()) log.warn(CLIENT_NO_LISTENER); resolve(); }); - readinessManager.gate.once(SDK_READY_TIMED_OUT, reject); + readinessManager.gate.once(SDK_READY_TIMED_OUT, (message: string) => { + reject(new Error(message)); + }); }), defaultOnRejected); return promise; @@ -106,10 +108,10 @@ export function sdkReadinessManagerFactory( * @function ready * @returns {Promise} */ - ready: () => { + ready() { if (readinessManager.hasTimedout()) { if (!readinessManager.isReady()) { - return promiseWrapper(Promise.reject('Split SDK has emitted SDK_READY_TIMED_OUT event.'), defaultOnRejected); + return promiseWrapper(Promise.reject(new Error('Split SDK has emitted SDK_READY_TIMED_OUT event.')), defaultOnRejected); } else { return Promise.resolve(); } @@ -118,7 +120,7 @@ export function sdkReadinessManagerFactory( }, // Expose status for internal purposes only. Not considered part of the public API, and might be updated eventually. - __getStatus: () => { + __getStatus() { return { isReady: readinessManager.isReady(), isReadyFromCache: readinessManager.isReadyFromCache(), From 3ed29924d668c8cd55d549947b538c1ed84dbd65 Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Wed, 13 Apr 2022 14:20:15 -0300 Subject: [PATCH 2/7] updated how settings version is accessed --- src/services/splitHttpClient.ts | 22 ++++++++++++---------- src/trackers/impressionsTracker.ts | 8 ++++---- src/types.ts | 4 ++-- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/services/splitHttpClient.ts b/src/services/splitHttpClient.ts index d9ec90f7..b5df0e68 100644 --- a/src/services/splitHttpClient.ts +++ b/src/services/splitHttpClient.ts @@ -14,24 +14,26 @@ const messageNoFetch = 'Global fetch API is not available.'; */ export function splitHttpClientFactory(settings: Pick, getFetch?: () => (IFetch | undefined), getOptions?: () => object): ISplitHttpClient { - const { log, core: { authorizationKey }, version, runtime: { ip, hostname } } = settings; + const log = settings.log; const options = getOptions && getOptions(); const fetch = getFetch && getFetch(); // if fetch is not available, log Error if (!fetch) log.error(ERROR_CLIENT_CANNOT_GET_READY, [messageNoFetch]); - const headers: Record = { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${authorizationKey}`, - 'SplitSDKVersion': version - }; + return function httpClient(url: string, reqOpts: IRequestOptions = {}, logErrorsAsInfo: boolean = false): Promise { - if (ip) headers['SplitSDKMachineIP'] = ip; - if (hostname) headers['SplitSDKMachineName'] = hostname; + const { core: { authorizationKey }, version, runtime: { ip, hostname } } = settings; - return function httpClient(url: string, reqOpts: IRequestOptions = {}, logErrorsAsInfo: boolean = false): Promise { + const headers: Record = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${authorizationKey}`, + 'SplitSDKVersion': version + }; + + if (ip) headers['SplitSDKMachineIP'] = ip; + if (hostname) headers['SplitSDKMachineName'] = hostname; const request = objectAssign({ headers: reqOpts.headers ? objectAssign({}, headers, reqOpts.headers) : headers, diff --git a/src/trackers/impressionsTracker.ts b/src/trackers/impressionsTracker.ts index ecd40a5d..f3274678 100644 --- a/src/trackers/impressionsTracker.ts +++ b/src/trackers/impressionsTracker.ts @@ -28,7 +28,7 @@ export function impressionsTrackerFactory( countsCache?: IImpressionCountsCacheSync ): IImpressionsTracker { - const { log, impressionListener, runtime: { ip, hostname }, version } = settings; + const { log, impressionListener, runtime: { ip, hostname } } = settings; return { track(impressions: ImpressionDTO[], attributes?: SplitIO.Attributes) { @@ -74,9 +74,9 @@ export function impressionsTrackerFactory( // copy of impression, to avoid unexpected behaviour if modified by integrations or impressionListener impression: objectAssign({}, impressions[i]), attributes, - ip: ip as string, - hostname: hostname as string, - sdkLanguageVersion: version + ip, + hostname, + sdkLanguageVersion: settings.version }; // Wrap in a timeout because we don't want it to be blocking. diff --git a/src/types.ts b/src/types.ts index 7d523223..6c330eec 100644 --- a/src/types.ts +++ b/src/types.ts @@ -535,8 +535,8 @@ export namespace SplitIO { export type ImpressionData = { impression: ImpressionDTO, attributes?: SplitIO.Attributes, - ip: string, - hostname: string, + ip: string| false, + hostname: string | false, sdkLanguageVersion: string }; /** From c900094cdcd0fa2241a4463fa095956029874f9d Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Mon, 18 Apr 2022 12:35:34 -0300 Subject: [PATCH 3/7] added changelog entry --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 7bf86465..5019191a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +1.3.1 (TBD) + - Bugfixing - Updated `ready` method to rejects the promise with an Error object instead of a string value (Related to issue https://github.com/splitio/javascript-client/issues/654). + 1.3.0 (April 6, 2022) - Added user consent feature to allow delaying or disabling the data tracking from SDK until user consent is explicitly granted or declined. Read more in our docs. - Added `scheduler.impressionsQueueSize` property to SDK configuration to limit the amount of impressions tracked in memory. Read more in our docs. From 378864c44f515eca399b5e5ebeef7ca1822dfe8b Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Mon, 18 Apr 2022 13:03:05 -0300 Subject: [PATCH 4/7] added js-yaml and ioredis as peerDependencies --- package-lock.json | 2 +- package.json | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a53eec0e..72e77f53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.0", + "version": "1.3.1-rc.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 074589a1..3c2ff174 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.0", + "version": "1.3.1-rc.0", "description": "Split Javascript SDK common components", "main": "cjs/index.js", "module": "esm/index.js", @@ -46,6 +46,18 @@ "dependencies": { "tslib": "^2.3.1" }, + "peerDependencies": { + "js-yaml": "^3.13.1", + "ioredis": "^4.28.0" + }, + "peerDependenciesMeta": { + "js-yaml": { + "optional": true + }, + "ioredis": { + "optional": true + } + }, "devDependencies": { "@types/google.analytics": "0.0.40", "@types/ioredis": "^4.28.0", @@ -62,7 +74,7 @@ "ioredis": "^4.28.0", "jest": "^27.2.3", "jest-localstorage-mock": "^2.4.3", - "js-yaml": "^3.14.0", + "js-yaml": "^3.13.1", "lodash": "^4.17.21", "node-fetch": "^2.6.7", "redis-server": "1.2.2", From efc01293264e31009f29011a785dad8916bfe2e9 Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Tue, 19 Apr 2022 11:41:03 -0300 Subject: [PATCH 5/7] update version --- CHANGES.txt | 3 ++- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 5019191a..35a4822c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ -1.3.1 (TBD) +1.3.1 (April 19, 2022) + - Bugfixing - Added peer dependencies to avoid issues when requiring some third-party dependencies used by modules of the package (Related to issue https://github.com/splitio/javascript-client/issues/662). - Bugfixing - Updated `ready` method to rejects the promise with an Error object instead of a string value (Related to issue https://github.com/splitio/javascript-client/issues/654). 1.3.0 (April 6, 2022) diff --git a/package-lock.json b/package-lock.json index 72e77f53..9459fc73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.1-rc.0", + "version": "1.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3c2ff174..ba8520d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.1-rc.0", + "version": "1.3.1", "description": "Split Javascript SDK common components", "main": "cjs/index.js", "module": "esm/index.js", From 572928b8a2a194a7640c9914d23079f991be8c11 Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Tue, 19 Apr 2022 18:41:15 -0300 Subject: [PATCH 6/7] revert: updated how settings version is accessed --- package-lock.json | 2 +- package.json | 2 +- src/services/splitHttpClient.ts | 22 ++++++++++------------ src/trackers/impressionsTracker.ts | 4 ++-- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9459fc73..79a35942 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.1", + "version": "1.3.1-rc.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ba8520d5..0a19cd18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.1", + "version": "1.3.1-rc.1", "description": "Split Javascript SDK common components", "main": "cjs/index.js", "module": "esm/index.js", diff --git a/src/services/splitHttpClient.ts b/src/services/splitHttpClient.ts index b5df0e68..d9ec90f7 100644 --- a/src/services/splitHttpClient.ts +++ b/src/services/splitHttpClient.ts @@ -14,26 +14,24 @@ const messageNoFetch = 'Global fetch API is not available.'; */ export function splitHttpClientFactory(settings: Pick, getFetch?: () => (IFetch | undefined), getOptions?: () => object): ISplitHttpClient { - const log = settings.log; + const { log, core: { authorizationKey }, version, runtime: { ip, hostname } } = settings; const options = getOptions && getOptions(); const fetch = getFetch && getFetch(); // if fetch is not available, log Error if (!fetch) log.error(ERROR_CLIENT_CANNOT_GET_READY, [messageNoFetch]); - return function httpClient(url: string, reqOpts: IRequestOptions = {}, logErrorsAsInfo: boolean = false): Promise { - - const { core: { authorizationKey }, version, runtime: { ip, hostname } } = settings; + const headers: Record = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${authorizationKey}`, + 'SplitSDKVersion': version + }; - const headers: Record = { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${authorizationKey}`, - 'SplitSDKVersion': version - }; + if (ip) headers['SplitSDKMachineIP'] = ip; + if (hostname) headers['SplitSDKMachineName'] = hostname; - if (ip) headers['SplitSDKMachineIP'] = ip; - if (hostname) headers['SplitSDKMachineName'] = hostname; + return function httpClient(url: string, reqOpts: IRequestOptions = {}, logErrorsAsInfo: boolean = false): Promise { const request = objectAssign({ headers: reqOpts.headers ? objectAssign({}, headers, reqOpts.headers) : headers, diff --git a/src/trackers/impressionsTracker.ts b/src/trackers/impressionsTracker.ts index f3274678..c2335531 100644 --- a/src/trackers/impressionsTracker.ts +++ b/src/trackers/impressionsTracker.ts @@ -28,7 +28,7 @@ export function impressionsTrackerFactory( countsCache?: IImpressionCountsCacheSync ): IImpressionsTracker { - const { log, impressionListener, runtime: { ip, hostname } } = settings; + const { log, impressionListener, runtime: { ip, hostname }, version } = settings; return { track(impressions: ImpressionDTO[], attributes?: SplitIO.Attributes) { @@ -76,7 +76,7 @@ export function impressionsTrackerFactory( attributes, ip, hostname, - sdkLanguageVersion: settings.version + sdkLanguageVersion: version }; // Wrap in a timeout because we don't want it to be blocking. From 5d6faa1225f7a5371194f25cb7add2700b9b74a0 Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Tue, 19 Apr 2022 18:49:23 -0300 Subject: [PATCH 7/7] update version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 79a35942..9459fc73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.1-rc.1", + "version": "1.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 0a19cd18..ba8520d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.3.1-rc.1", + "version": "1.3.1", "description": "Split Javascript SDK common components", "main": "cjs/index.js", "module": "esm/index.js",