Skip to content

Commit f9dc947

Browse files
Remove 'track' property from ImpressionDTO, to not modify the ImpressionListener types
1 parent e6d46fd commit f9dc947

File tree

5 files changed

+20
-21
lines changed

5 files changed

+20
-21
lines changed

src/sdkClient/client.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
3434
const stopTelemetryTracker = telemetryTracker.trackEval(withConfig ? TREATMENT_WITH_CONFIG : TREATMENT);
3535

3636
const wrapUp = (evaluationResult: IEvaluationResult) => {
37-
const queue: SplitIO.ImpressionDTO[] = [];
37+
const queue: [impression: SplitIO.ImpressionDTO, track?: boolean][] = [];
3838
const treatment = processEvaluation(evaluationResult, featureFlagName, key, attributes, withConfig, methodName, queue);
3939
impressionsTracker.track(queue, attributes);
4040

41-
stopTelemetryTracker(queue[0] && queue[0].label);
41+
stopTelemetryTracker(queue[0] && queue[0][0].label);
4242
return treatment;
4343
};
4444

@@ -59,14 +59,14 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
5959
const stopTelemetryTracker = telemetryTracker.trackEval(withConfig ? TREATMENTS_WITH_CONFIG : TREATMENTS);
6060

6161
const wrapUp = (evaluationResults: Record<string, IEvaluationResult>) => {
62-
const queue: SplitIO.ImpressionDTO[] = [];
62+
const queue: [impression: SplitIO.ImpressionDTO, track?: boolean][] = [];
6363
const treatments: Record<string, SplitIO.Treatment | SplitIO.TreatmentWithConfig> = {};
6464
Object.keys(evaluationResults).forEach(featureFlagName => {
6565
treatments[featureFlagName] = processEvaluation(evaluationResults[featureFlagName], featureFlagName, key, attributes, withConfig, methodName, queue);
6666
});
6767
impressionsTracker.track(queue, attributes);
6868

69-
stopTelemetryTracker(queue[0] && queue[0].label);
69+
stopTelemetryTracker(queue[0] && queue[0][0].label);
7070
return treatments;
7171
};
7272

@@ -87,15 +87,15 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
8787
const stopTelemetryTracker = telemetryTracker.trackEval(method);
8888

8989
const wrapUp = (evaluationResults: Record<string, IEvaluationResult>) => {
90-
const queue: SplitIO.ImpressionDTO[] = [];
90+
const queue: [impression: SplitIO.ImpressionDTO, track?: boolean][] = [];
9191
const treatments: Record<string, SplitIO.Treatment | SplitIO.TreatmentWithConfig> = {};
9292
const evaluations = evaluationResults;
9393
Object.keys(evaluations).forEach(featureFlagName => {
9494
treatments[featureFlagName] = processEvaluation(evaluations[featureFlagName], featureFlagName, key, attributes, withConfig, methodName, queue);
9595
});
9696
impressionsTracker.track(queue, attributes);
9797

98-
stopTelemetryTracker(queue[0] && queue[0].label);
98+
stopTelemetryTracker(queue[0] && queue[0][0].label);
9999
return treatments;
100100
};
101101

@@ -128,7 +128,7 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
128128
attributes: SplitIO.Attributes | undefined,
129129
withConfig: boolean,
130130
invokingMethodName: string,
131-
queue: SplitIO.ImpressionDTO[]
131+
queue: [impression: SplitIO.ImpressionDTO, track?: boolean][]
132132
): SplitIO.Treatment | SplitIO.TreatmentWithConfig {
133133
const matchingKey = getMatching(key);
134134
const bucketingKey = getBucketing(key);
@@ -138,16 +138,15 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
138138

139139
if (validateSplitExistence(log, readinessManager, featureFlagName, label, invokingMethodName)) {
140140
log.info(IMPRESSION_QUEUEING);
141-
queue.push({
141+
queue.push([{
142142
feature: featureFlagName,
143143
keyName: matchingKey,
144144
treatment,
145145
time: Date.now(),
146146
bucketingKey,
147147
label,
148148
changeNumber: changeNumber as number,
149-
track
150-
});
149+
}, track]);
151150
}
152151

153152
if (withConfig) {

src/trackers/__tests__/impressionsTracker.spec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ describe('Impressions Tracker', () => {
7070

7171
expect(fakeImpressionsCache.track).not.toBeCalled(); // cache method should not be called by just creating a tracker
7272

73-
tracker.track([imp1, imp2, imp3]);
73+
tracker.track([[imp1], [imp2], [imp3]]);
7474

7575
expect(fakeImpressionsCache.track.mock.calls[0][0]).toEqual([imp1, imp2, imp3]); // Should call the storage track method once we invoke .track() method, passing queued params in a sequence.
7676
});
@@ -93,7 +93,7 @@ describe('Impressions Tracker', () => {
9393
expect(fakeIntegrationsManager.handleImpression).not.toBeCalled(); // The integrations manager handleImpression method should not be invoked if we haven't tracked impressions.
9494

9595
// We signal that we actually want to track the queued impressions.
96-
tracker.track([fakeImpression, fakeImpression2], fakeAttributes);
96+
tracker.track([[fakeImpression], [fakeImpression2]], fakeAttributes);
9797

9898
expect(fakeImpressionsCache.track.mock.calls[0][0]).toEqual([fakeImpression, fakeImpression2]); // Even with a listener, impression should be sent to the cache
9999
expect(fakeListener.logImpression).not.toBeCalled(); // The listener should not be executed synchronously.
@@ -157,7 +157,7 @@ describe('Impressions Tracker', () => {
157157
expect(fakeImpressionsCache.track).not.toBeCalled(); // storage method should not be called until impressions are tracked.
158158

159159
trackers.forEach(tracker => {
160-
tracker.track([impression, impression2, impression3]);
160+
tracker.track([[impression], [impression2], [impression3]]);
161161

162162
const lastArgs = fakeImpressionsCache.track.mock.calls[fakeImpressionsCache.track.mock.calls.length - 1];
163163

@@ -182,7 +182,7 @@ describe('Impressions Tracker', () => {
182182

183183
expect(fakeImpressionsCache.track).not.toBeCalled(); // cache method should not be called by just creating a tracker
184184

185-
tracker.track([impression, impression2, impression3]);
185+
tracker.track([[impression], [impression2], [impression3]]);
186186

187187
const lastArgs = fakeImpressionsCache.track.mock.calls[fakeImpressionsCache.track.mock.calls.length - 1];
188188

@@ -203,19 +203,19 @@ describe('Impressions Tracker', () => {
203203

204204
const tracker = impressionsTrackerFactory(settings, fakeImpressionsCache, strategy, fakeWhenInit);
205205

206-
tracker.track([impression]);
206+
tracker.track([[impression]]);
207207
expect(fakeImpressionsCache.track).toBeCalledTimes(1); // impression should be tracked if userConsent is undefined
208208

209209
settings.userConsent = 'UNKNOWN';
210-
tracker.track([impression]);
210+
tracker.track([[impression]]);
211211
expect(fakeImpressionsCache.track).toBeCalledTimes(2); // impression should be tracked if userConsent is unknown
212212

213213
settings.userConsent = 'GRANTED';
214-
tracker.track([impression]);
214+
tracker.track([[impression]]);
215215
expect(fakeImpressionsCache.track).toBeCalledTimes(3); // impression should be tracked if userConsent is granted
216216

217217
settings.userConsent = 'DECLINED';
218-
tracker.track([impression]);
218+
tracker.track([[impression]]);
219219
expect(fakeImpressionsCache.track).toBeCalledTimes(3); // impression should not be tracked if userConsent is declined
220220
});
221221

src/trackers/impressionsTracker.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ export function impressionsTrackerFactory(
2828
const { log, impressionListener, runtime: { ip, hostname }, version } = settings;
2929

3030
return {
31-
track(impressions: SplitIO.ImpressionDTO[], attributes?: SplitIO.Attributes) {
31+
track(imps: [impression: SplitIO.ImpressionDTO, track?: boolean][], attributes?: SplitIO.Attributes) {
3232
if (settings.userConsent === CONSENT_DECLINED) return;
3333

34+
const impressions = imps.map((item) => item[0]);
3435
const impressionsCount = impressions.length;
3536
const { impressionsToStore, impressionsToListener, deduped } = strategy.process(impressions);
3637

src/trackers/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export interface IImpressionsHandler {
1818
}
1919

2020
export interface IImpressionsTracker {
21-
track(impressions: SplitIO.ImpressionDTO[], attributes?: SplitIO.Attributes): void
21+
track(impressions: [impression: SplitIO.ImpressionDTO, track?: boolean][], attributes?: SplitIO.Attributes): void
2222
}
2323

2424
/** Telemetry tracker */

types/splitio.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,6 @@ declare namespace SplitIO {
811811
label: string;
812812
changeNumber: number;
813813
pt?: number;
814-
track?: boolean;
815814
}
816815
/**
817816
* Object with information about an impression. It contains the generated impression DTO as well as

0 commit comments

Comments
 (0)