diff --git a/package-lock.json b/package-lock.json index ea4ce2f6..2896b21c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@splitsoftware/splitio-commons", - "version": "2.4.1", + "version": "2.4.2-rc.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@splitsoftware/splitio-commons", - "version": "2.4.1", + "version": "2.4.2-rc.1", "license": "Apache-2.0", "dependencies": { "@types/ioredis": "^4.28.0", diff --git a/package.json b/package.json index 27b15da2..9bc1ac29 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "2.4.1", + "version": "2.4.2-rc.1", "description": "Split JavaScript SDK common components", "main": "cjs/index.js", "module": "esm/index.js", diff --git a/src/sdkClient/sdkClient.ts b/src/sdkClient/sdkClient.ts index cc44c9f7..7417a9ab 100644 --- a/src/sdkClient/sdkClient.ts +++ b/src/sdkClient/sdkClient.ts @@ -48,6 +48,7 @@ export function sdkClientFactory(params: ISdkFactoryContext, isSharedClient?: bo // Sdk destroy { + __ctx: params, flush() { // @TODO define cooldown time return __cooldown(__flush, COOLDOWN_TIME_IN_MILLIS); diff --git a/src/sdkFactory/index.ts b/src/sdkFactory/index.ts index bf807425..0dabfc06 100644 --- a/src/sdkFactory/index.ts +++ b/src/sdkFactory/index.ts @@ -107,8 +107,7 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA log.info(NEW_FACTORY); - // @ts-ignore - return objectAssign({ + const factory = objectAssign({ // Split evaluation and event tracking engine client: clientMethod, @@ -126,6 +125,17 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA destroy() { hasInit = false; return Promise.all(Object.keys(clients).map(key => clients[key].destroy())).then(() => { }); - } + }, + + __ctx: ctx }, extraProps && extraProps(ctx), lazyInit ? { init } : init()); + + // append factory to global + if (typeof window === 'object') { // @ts-ignore + // eslint-disable-next-line no-undef + (window.__HARNESS_FME__ = window.__HARNESS_FME__ || []).push(factory); + } + + // @ts-ignore + return factory; } diff --git a/src/trackers/impressionsTracker.ts b/src/trackers/impressionsTracker.ts index 0d64a8ed..cc29c2d0 100644 --- a/src/trackers/impressionsTracker.ts +++ b/src/trackers/impressionsTracker.ts @@ -20,7 +20,7 @@ export function impressionsTrackerFactory( telemetryCache?: ITelemetryCacheSync | ITelemetryCacheAsync, ): IImpressionsTracker { - const { log, impressionListener, runtime: { ip, hostname }, version } = settings; + const { log, runtime: { ip, hostname }, version } = settings; return { track(impressions: ImpressionDecorated[], attributes?: SplitIO.Attributes) { @@ -56,7 +56,7 @@ export function impressionsTrackerFactory( } // @TODO next block might be handled by the integration manager. In that case, the metadata object doesn't need to be passed in the constructor - if (impressionListener || integrationsManager) { + if (settings.impressionListener || integrationsManager) { for (let i = 0; i < impressionsLength; i++) { const impressionData: SplitIO.ImpressionData = { // copy of impression, to avoid unexpected behavior if modified by integrations or impressionListener @@ -74,7 +74,7 @@ export function impressionsTrackerFactory( if (integrationsManager) integrationsManager.handleImpression(impressionData); try { // @ts-ignore. An exception on the listeners should not break the SDK. - if (impressionListener) impressionListener.logImpression(impressionData); + if (settings.impressionListener) settings.impressionListener.logImpression(impressionData); } catch (err) { log.error(ERROR_IMPRESSIONS_LISTENER, [err]); }