@splitsoftware/splitio-commons 1.6.2-rc.3 → 1.6.2-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/evaluator/index.js +10 -11
- package/cjs/integrations/ga/GaToSplit.js +8 -5
- package/cjs/sdkFactory/index.js +2 -3
- package/cjs/sdkManager/index.js +3 -11
- package/cjs/services/splitApi.js +0 -1
- package/cjs/storages/AbstractSplitsCacheAsync.js +7 -9
- package/cjs/storages/AbstractSplitsCacheSync.js +7 -9
- package/cjs/storages/dataLoader.js +1 -1
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +5 -6
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +7 -10
- package/cjs/storages/inRedis/SplitsCacheInRedis.js +15 -9
- package/cjs/storages/pluggable/SplitsCachePluggable.js +14 -9
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -3
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +1 -1
- package/cjs/trackers/telemetryTracker.js +6 -0
- package/cjs/types.js +2 -0
- package/cjs/utils/key/index.js +1 -1
- package/cjs/utils/settingsValidation/index.js +0 -1
- package/esm/evaluator/index.js +10 -11
- package/esm/integrations/ga/GaToSplit.js +8 -5
- package/esm/sdkFactory/index.js +2 -3
- package/esm/sdkManager/index.js +3 -11
- package/esm/services/splitApi.js +0 -1
- package/esm/storages/AbstractSplitsCacheAsync.js +7 -9
- package/esm/storages/AbstractSplitsCacheSync.js +7 -9
- package/esm/storages/dataLoader.js +1 -1
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +5 -6
- package/esm/storages/inMemory/SplitsCacheInMemory.js +7 -10
- package/esm/storages/inRedis/SplitsCacheInRedis.js +15 -9
- package/esm/storages/pluggable/SplitsCachePluggable.js +14 -9
- package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +2 -3
- package/esm/sync/polling/updaters/splitChangesUpdater.js +1 -1
- package/esm/trackers/telemetryTracker.js +6 -0
- package/esm/types.js +1 -0
- package/esm/utils/key/index.js +1 -1
- package/esm/utils/settingsValidation/index.js +0 -1
- package/package.json +2 -2
- package/src/consent/sdkUserConsent.ts +3 -4
- package/src/dtos/types.ts +8 -0
- package/src/evaluator/Engine.ts +3 -3
- package/src/evaluator/combiners/and.ts +1 -1
- package/src/evaluator/combiners/ifelseif.ts +3 -3
- package/src/evaluator/condition/engineUtils.ts +1 -1
- package/src/evaluator/condition/index.ts +6 -6
- package/src/evaluator/index.ts +18 -19
- package/src/evaluator/matchers/all.ts +1 -1
- package/src/evaluator/matchers/between.ts +1 -1
- package/src/evaluator/matchers/boolean.ts +1 -1
- package/src/evaluator/matchers/cont_all.ts +1 -1
- package/src/evaluator/matchers/cont_any.ts +1 -1
- package/src/evaluator/matchers/cont_str.ts +1 -1
- package/src/evaluator/matchers/dependency.ts +1 -1
- package/src/evaluator/matchers/eq.ts +1 -1
- package/src/evaluator/matchers/eq_set.ts +1 -1
- package/src/evaluator/matchers/ew.ts +1 -1
- package/src/evaluator/matchers/gte.ts +1 -1
- package/src/evaluator/matchers/index.ts +1 -1
- package/src/evaluator/matchers/lte.ts +1 -1
- package/src/evaluator/matchers/part_of.ts +1 -1
- package/src/evaluator/matchers/segment.ts +1 -1
- package/src/evaluator/matchers/string.ts +1 -1
- package/src/evaluator/matchers/sw.ts +1 -1
- package/src/evaluator/matchers/whitelist.ts +1 -1
- package/src/evaluator/parser/index.ts +3 -3
- package/src/evaluator/types.ts +6 -6
- package/src/evaluator/value/index.ts +4 -4
- package/src/evaluator/value/sanitize.ts +4 -4
- package/src/integrations/ga/GaToSplit.ts +15 -11
- package/src/integrations/ga/SplitToGa.ts +10 -10
- package/src/integrations/ga/types.ts +4 -4
- package/src/integrations/pluggable.ts +3 -3
- package/src/integrations/types.ts +4 -3
- package/src/logger/index.ts +3 -3
- package/src/logger/sdkLogger.ts +2 -1
- package/src/logger/types.ts +16 -0
- package/src/readiness/sdkReadinessManager.ts +1 -1
- package/src/readiness/types.ts +9 -2
- package/src/sdkClient/client.ts +13 -13
- package/src/sdkClient/clientAttributesDecoration.ts +9 -9
- package/src/sdkClient/clientCS.ts +4 -3
- package/src/sdkClient/clientInputValidation.ts +15 -15
- package/src/sdkClient/sdkClient.ts +2 -2
- package/src/sdkClient/sdkClientMethod.ts +2 -2
- package/src/sdkClient/sdkClientMethodCS.ts +9 -9
- package/src/sdkClient/sdkClientMethodCSWithTT.ts +9 -9
- package/src/sdkFactory/index.ts +4 -5
- package/src/sdkFactory/types.ts +4 -4
- package/src/sdkManager/index.ts +7 -16
- package/src/services/splitApi.ts +0 -1
- package/src/storages/AbstractSplitsCacheAsync.ts +13 -14
- package/src/storages/AbstractSplitsCacheSync.ts +14 -16
- package/src/storages/dataLoader.ts +3 -3
- package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +1 -1
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +10 -12
- package/src/storages/inLocalStorage/index.ts +2 -3
- package/src/storages/inMemory/EventsCacheInMemory.ts +4 -4
- package/src/storages/inMemory/SplitsCacheInMemory.ts +10 -14
- package/src/storages/inRedis/EventsCacheInRedis.ts +4 -4
- package/src/storages/inRedis/ImpressionsCacheInRedis.ts +1 -1
- package/src/storages/inRedis/RedisAdapter.ts +1 -1
- package/src/storages/inRedis/SegmentsCacheInRedis.ts +1 -1
- package/src/storages/inRedis/SplitsCacheInRedis.ts +22 -18
- package/src/storages/inRedis/TelemetryCacheInRedis.ts +1 -1
- package/src/storages/inRedis/index.ts +2 -3
- package/src/storages/pluggable/EventsCachePluggable.ts +4 -4
- package/src/storages/pluggable/ImpressionsCachePluggable.ts +1 -1
- package/src/storages/pluggable/SegmentsCachePluggable.ts +1 -1
- package/src/storages/pluggable/SplitsCachePluggable.ts +21 -18
- package/src/storages/pluggable/TelemetryCachePluggable.ts +1 -1
- package/src/storages/pluggable/index.ts +3 -3
- package/src/storages/pluggable/wrapperAdapter.ts +1 -1
- package/src/storages/types.ts +30 -54
- package/src/sync/offline/LocalhostFromObject.ts +4 -4
- package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +8 -8
- package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +5 -6
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +1 -1
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
- package/src/sync/polling/updaters/splitChangesUpdater.ts +3 -3
- package/src/sync/streaming/SSEHandler/index.ts +1 -1
- package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
- package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
- package/src/sync/submitters/submitter.ts +1 -1
- package/src/sync/submitters/types.ts +2 -2
- package/src/sync/syncTask.ts +1 -1
- package/src/trackers/eventTracker.ts +3 -3
- package/src/trackers/impressionsTracker.ts +3 -3
- package/src/trackers/telemetryTracker.ts +7 -2
- package/src/trackers/types.ts +8 -4
- package/src/types.ts +1263 -0
- package/src/utils/constants/index.ts +1 -1
- package/src/utils/inputValidation/apiKey.ts +1 -1
- package/src/utils/inputValidation/attribute.ts +1 -1
- package/src/utils/inputValidation/attributes.ts +3 -3
- package/src/utils/inputValidation/event.ts +1 -1
- package/src/utils/inputValidation/eventProperties.ts +3 -3
- package/src/utils/inputValidation/eventValue.ts +1 -1
- package/src/utils/inputValidation/isOperational.ts +1 -1
- package/src/utils/inputValidation/key.ts +3 -3
- package/src/utils/inputValidation/preloadedData.ts +3 -3
- package/src/utils/inputValidation/split.ts +1 -1
- package/src/utils/inputValidation/splitExistance.ts +1 -1
- package/src/utils/inputValidation/splits.ts +1 -1
- package/src/utils/inputValidation/trafficType.ts +1 -1
- package/src/utils/inputValidation/trafficTypeExistance.ts +1 -1
- package/src/utils/key/index.ts +9 -9
- package/src/utils/settingsValidation/consent.ts +2 -1
- package/src/utils/settingsValidation/impressionsMode.ts +3 -3
- package/src/utils/settingsValidation/index.ts +0 -1
- package/src/utils/settingsValidation/integrations/common.ts +1 -1
- package/src/utils/settingsValidation/integrations/configurable.ts +1 -1
- package/src/utils/settingsValidation/integrations/pluggable.ts +2 -1
- package/src/utils/settingsValidation/localhost/builtin.ts +2 -1
- package/src/utils/settingsValidation/localhost/pluggable.ts +2 -1
- package/src/utils/settingsValidation/logger/builtinLogger.ts +2 -1
- package/src/utils/settingsValidation/logger/pluggableLogger.ts +2 -1
- package/src/utils/settingsValidation/splitFilters.ts +9 -7
- package/src/utils/settingsValidation/storage/storageCS.ts +2 -1
- package/types/consent/sdkUserConsent.d.ts +9 -2
- package/types/dtos/types.d.ts +6 -0
- package/types/evaluator/Engine.d.ts +3 -3
- package/types/evaluator/combiners/and.d.ts +1 -1
- package/types/evaluator/combiners/ifelseif.d.ts +1 -1
- package/types/evaluator/condition/engineUtils.d.ts +1 -1
- package/types/evaluator/condition/index.d.ts +1 -1
- package/types/evaluator/index.d.ts +4 -4
- package/types/evaluator/matchers/all.d.ts +1 -1
- package/types/evaluator/matchers/between.d.ts +1 -1
- package/types/evaluator/matchers/boolean.d.ts +1 -1
- package/types/evaluator/matchers/cont_all.d.ts +1 -1
- package/types/evaluator/matchers/cont_any.d.ts +1 -1
- package/types/evaluator/matchers/cont_str.d.ts +1 -1
- package/types/evaluator/matchers/dependency.d.ts +1 -1
- package/types/evaluator/matchers/eq.d.ts +1 -1
- package/types/evaluator/matchers/eq_set.d.ts +1 -1
- package/types/evaluator/matchers/ew.d.ts +1 -1
- package/types/evaluator/matchers/gte.d.ts +1 -1
- package/types/evaluator/matchers/index.d.ts +1 -1
- package/types/evaluator/matchers/lte.d.ts +1 -1
- package/types/evaluator/matchers/part_of.d.ts +1 -1
- package/types/evaluator/matchers/segment.d.ts +1 -1
- package/types/evaluator/matchers/string.d.ts +1 -1
- package/types/evaluator/matchers/sw.d.ts +1 -1
- package/types/evaluator/matchers/whitelist.d.ts +1 -1
- package/types/evaluator/parser/index.d.ts +1 -1
- package/types/evaluator/types.d.ts +6 -6
- package/types/evaluator/value/index.d.ts +3 -3
- package/types/evaluator/value/sanitize.d.ts +3 -3
- package/types/integrations/ga/GaToSplit.d.ts +4 -4
- package/types/integrations/ga/SplitToGa.d.ts +4 -4
- package/types/integrations/ga/types.d.ts +4 -4
- package/types/integrations/types.d.ts +4 -3
- package/types/logger/index.d.ts +5 -3
- package/types/logger/sdkLogger.d.ts +2 -1
- package/types/logger/types.d.ts +11 -0
- package/types/readiness/sdkReadinessManager.d.ts +1 -1
- package/types/readiness/types.d.ts +8 -2
- package/types/sdkClient/client.d.ts +2 -2
- package/types/sdkClient/clientAttributesDecoration.d.ts +8 -8
- package/types/sdkClient/clientCS.d.ts +3 -2
- package/types/sdkClient/clientInputValidation.d.ts +2 -2
- package/types/sdkClient/sdkClient.d.ts +2 -2
- package/types/sdkClient/sdkClientMethod.d.ts +2 -2
- package/types/sdkClient/sdkClientMethodCS.d.ts +2 -2
- package/types/sdkClient/sdkClientMethodCSWithTT.d.ts +2 -2
- package/types/sdkFactory/index.d.ts +2 -2
- package/types/sdkFactory/types.d.ts +6 -6
- package/types/sdkManager/index.d.ts +3 -3
- package/types/storages/AbstractSplitsCacheAsync.d.ts +6 -5
- package/types/storages/AbstractSplitsCacheSync.d.ts +5 -5
- package/types/storages/dataLoader.d.ts +2 -2
- package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +1 -1
- package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +4 -3
- package/types/storages/inLocalStorage/index.d.ts +2 -2
- package/types/storages/inMemory/EventsCacheInMemory.d.ts +3 -3
- package/types/storages/inMemory/InMemoryStorage.d.ts +1 -1
- package/types/storages/inMemory/InMemoryStorageCS.d.ts +1 -1
- package/types/storages/inMemory/SplitsCacheInMemory.d.ts +3 -2
- package/types/storages/inRedis/EventsCacheInRedis.d.ts +3 -3
- package/types/storages/inRedis/ImpressionsCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/RedisAdapter.d.ts +1 -1
- package/types/storages/inRedis/SegmentsCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/SplitsCacheInRedis.d.ts +7 -6
- package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/index.d.ts +2 -2
- package/types/storages/pluggable/EventsCachePluggable.d.ts +3 -3
- package/types/storages/pluggable/ImpressionsCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/SegmentsCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/SplitsCachePluggable.d.ts +7 -6
- package/types/storages/pluggable/TelemetryCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/index.d.ts +2 -3
- package/types/storages/pluggable/wrapperAdapter.d.ts +1 -1
- package/types/storages/types.d.ts +28 -54
- package/types/sync/offline/LocalhostFromObject.d.ts +2 -2
- package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
- package/types/sync/polling/updaters/segmentChangesUpdater.d.ts +1 -1
- package/types/sync/polling/updaters/splitChangesUpdater.d.ts +2 -2
- package/types/sync/streaming/SSEHandler/index.d.ts +1 -1
- package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
- package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +1 -1
- package/types/sync/submitters/submitter.d.ts +1 -1
- package/types/sync/submitters/types.d.ts +2 -2
- package/types/sync/syncTask.d.ts +1 -1
- package/types/trackers/types.d.ts +8 -4
- package/types/types.d.ts +1261 -0
- package/types/utils/constants/index.d.ts +1 -1
- package/types/utils/inputValidation/apiKey.d.ts +1 -1
- package/types/utils/inputValidation/attribute.d.ts +1 -1
- package/types/utils/inputValidation/attributes.d.ts +3 -3
- package/types/utils/inputValidation/event.d.ts +1 -1
- package/types/utils/inputValidation/eventProperties.d.ts +3 -3
- package/types/utils/inputValidation/eventValue.d.ts +1 -1
- package/types/utils/inputValidation/isOperational.d.ts +1 -1
- package/types/utils/inputValidation/key.d.ts +3 -3
- package/types/utils/inputValidation/preloadedData.d.ts +3 -3
- package/types/utils/inputValidation/split.d.ts +1 -1
- package/types/utils/inputValidation/splitExistance.d.ts +1 -1
- package/types/utils/inputValidation/splits.d.ts +1 -1
- package/types/utils/inputValidation/trafficType.d.ts +1 -1
- package/types/utils/inputValidation/trafficTypeExistance.d.ts +1 -1
- package/types/utils/key/index.d.ts +4 -4
- package/types/utils/settingsValidation/consent.d.ts +2 -1
- package/types/utils/settingsValidation/impressionsMode.d.ts +3 -3
- package/types/utils/settingsValidation/integrations/common.d.ts +1 -1
- package/types/utils/settingsValidation/integrations/configurable.d.ts +1 -1
- package/types/utils/settingsValidation/integrations/pluggable.d.ts +2 -1
- package/types/utils/settingsValidation/localhost/builtin.d.ts +2 -1
- package/types/utils/settingsValidation/localhost/pluggable.d.ts +2 -1
- package/types/utils/settingsValidation/logger/builtinLogger.d.ts +1 -1
- package/types/utils/settingsValidation/logger/pluggableLogger.d.ts +1 -1
- package/types/utils/settingsValidation/splitFilters.d.ts +2 -1
- package/types/utils/settingsValidation/storage/storageCS.d.ts +3 -2
- package/src/types.d.ts +0 -1646
package/src/evaluator/index.ts
CHANGED
|
@@ -5,8 +5,8 @@ import { CONTROL } from '../utils/constants';
|
|
|
5
5
|
import { ISplit, MaybeThenable } from '../dtos/types';
|
|
6
6
|
import { IStorageAsync, IStorageSync } from '../storages/types';
|
|
7
7
|
import { IEvaluationResult } from './types';
|
|
8
|
-
import {
|
|
9
|
-
import { ILogger } from '../types';
|
|
8
|
+
import { SplitIO } from '../types';
|
|
9
|
+
import { ILogger } from '../logger/types';
|
|
10
10
|
|
|
11
11
|
const treatmentException = {
|
|
12
12
|
treatment: CONTROL,
|
|
@@ -24,9 +24,9 @@ function treatmentsException(splitNames: string[]) {
|
|
|
24
24
|
|
|
25
25
|
export function evaluateFeature(
|
|
26
26
|
log: ILogger,
|
|
27
|
-
key: SplitKey,
|
|
27
|
+
key: SplitIO.SplitKey,
|
|
28
28
|
splitName: string,
|
|
29
|
-
attributes: Attributes | undefined,
|
|
29
|
+
attributes: SplitIO.Attributes | undefined,
|
|
30
30
|
storage: IStorageSync | IStorageAsync,
|
|
31
31
|
): MaybeThenable<IEvaluationResult> {
|
|
32
32
|
let stringifiedSplit;
|
|
@@ -63,35 +63,35 @@ export function evaluateFeature(
|
|
|
63
63
|
|
|
64
64
|
export function evaluateFeatures(
|
|
65
65
|
log: ILogger,
|
|
66
|
-
key: SplitKey,
|
|
66
|
+
key: SplitIO.SplitKey,
|
|
67
67
|
splitNames: string[],
|
|
68
|
-
attributes: Attributes | undefined,
|
|
68
|
+
attributes: SplitIO.Attributes | undefined,
|
|
69
69
|
storage: IStorageSync | IStorageAsync,
|
|
70
70
|
): MaybeThenable<Record<string, IEvaluationResult>> {
|
|
71
|
-
let
|
|
71
|
+
let parsedSplits;
|
|
72
72
|
|
|
73
73
|
try {
|
|
74
|
-
|
|
74
|
+
parsedSplits = storage.splits.getSplits(splitNames);
|
|
75
75
|
} catch (e) {
|
|
76
76
|
// Exception on sync `getSplits` storage. Not possible ATM with InMemory and InLocal storages.
|
|
77
77
|
return treatmentsException(splitNames);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
return
|
|
81
|
-
|
|
80
|
+
return thenable(parsedSplits) ?
|
|
81
|
+
parsedSplits.then(splits => getEvaluations(log, splitNames, splits, key, attributes, storage))
|
|
82
82
|
.catch(() => {
|
|
83
83
|
// Exception on async `getSplits` storage. For example, when the storage is redis or
|
|
84
84
|
// pluggable and there is a connection issue and we can't retrieve the split to be evaluated
|
|
85
85
|
return treatmentsException(splitNames);
|
|
86
86
|
}) :
|
|
87
|
-
getEvaluations(log, splitNames,
|
|
87
|
+
getEvaluations(log, splitNames, parsedSplits, key, attributes, storage);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
function getEvaluation(
|
|
91
91
|
log: ILogger,
|
|
92
|
-
|
|
93
|
-
key: SplitKey,
|
|
94
|
-
attributes: Attributes | undefined,
|
|
92
|
+
splitJSON: ISplit | null,
|
|
93
|
+
key: SplitIO.SplitKey,
|
|
94
|
+
attributes: SplitIO.Attributes | undefined,
|
|
95
95
|
storage: IStorageSync | IStorageAsync,
|
|
96
96
|
): MaybeThenable<IEvaluationResult> {
|
|
97
97
|
let evaluation: MaybeThenable<IEvaluationResult> = {
|
|
@@ -100,8 +100,7 @@ function getEvaluation(
|
|
|
100
100
|
config: null
|
|
101
101
|
};
|
|
102
102
|
|
|
103
|
-
if (
|
|
104
|
-
const splitJSON: ISplit = JSON.parse(stringifiedSplit);
|
|
103
|
+
if (splitJSON) {
|
|
105
104
|
const split = Engine.parse(log, splitJSON, storage);
|
|
106
105
|
evaluation = split.getTreatment(key, attributes, evaluateFeature);
|
|
107
106
|
|
|
@@ -125,9 +124,9 @@ function getEvaluation(
|
|
|
125
124
|
function getEvaluations(
|
|
126
125
|
log: ILogger,
|
|
127
126
|
splitNames: string[],
|
|
128
|
-
splits: Record<string,
|
|
129
|
-
key: SplitKey,
|
|
130
|
-
attributes: Attributes | undefined,
|
|
127
|
+
splits: Record<string, ISplit | null>,
|
|
128
|
+
key: SplitIO.SplitKey,
|
|
129
|
+
attributes: SplitIO.Attributes | undefined,
|
|
131
130
|
storage: IStorageSync | IStorageAsync,
|
|
132
131
|
): MaybeThenable<Record<string, IEvaluationResult>> {
|
|
133
132
|
const result: Record<string, IEvaluationResult> = {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IBetweenMatcherData } from '../../dtos/types';
|
|
2
2
|
import { ENGINE_MATCHER_BETWEEN } from '../../logger/constants';
|
|
3
|
-
import { ILogger } from '../../types';
|
|
3
|
+
import { ILogger } from '../../logger/types';
|
|
4
4
|
|
|
5
5
|
export function betweenMatcherContext(log: ILogger, ruleVO: IBetweenMatcherData) /*: Function */ {
|
|
6
6
|
return function betweenMatcher(runtimeAttr: number): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_BOOLEAN } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
|
|
4
4
|
export function booleanMatcherContext(log: ILogger, ruleAttr: boolean) /*: Function */ {
|
|
5
5
|
return function booleanMatcher(runtimeAttr: boolean): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_CONTAINS_ALL } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { findIndex } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function containsAllSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_CONTAINS_ANY } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { findIndex } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function containsAnySetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isString } from '../../utils/lang';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { ENGINE_MATCHER_CONTAINS_STRING } from '../../logger/constants';
|
|
4
4
|
|
|
5
5
|
export function containsStringMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IDependencyMatcherData, MaybeThenable } from '../../dtos/types';
|
|
2
2
|
import { IStorageAsync, IStorageSync } from '../../storages/types';
|
|
3
|
-
import { ILogger } from '../../types';
|
|
3
|
+
import { ILogger } from '../../logger/types';
|
|
4
4
|
import { thenable } from '../../utils/promise/thenable';
|
|
5
5
|
import { IDependencyMatcherValue, IEvaluation, ISplitEvaluator } from '../types';
|
|
6
6
|
import { ENGINE_MATCHER_DEPENDENCY, ENGINE_MATCHER_DEPENDENCY_PRE } from '../../logger/constants';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_EQUAL } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
|
|
4
4
|
export function equalToMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ {
|
|
5
5
|
return function equalToMatcher(runtimeAttr: number): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_EQUAL_TO_SET } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { findIndex } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function equalToSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_ENDS_WITH } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { endsWith } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function endsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_GREATER } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
|
|
4
4
|
export function greaterThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ {
|
|
5
5
|
return function greaterThanEqualMatcher(runtimeAttr: number): boolean {
|
|
@@ -17,7 +17,7 @@ import { booleanMatcherContext } from './boolean';
|
|
|
17
17
|
import { stringMatcherContext } from './string';
|
|
18
18
|
import { IStorageAsync, IStorageSync } from '../../storages/types';
|
|
19
19
|
import { IMatcher, IMatcherDto } from '../types';
|
|
20
|
-
import { ILogger } from '../../types';
|
|
20
|
+
import { ILogger } from '../../logger/types';
|
|
21
21
|
|
|
22
22
|
const matchers = [
|
|
23
23
|
undefined, // UNDEFINED: 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_LESS } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
|
|
4
4
|
export function lessThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: function */ {
|
|
5
5
|
return function lessThanEqualMatcher(runtimeAttr: number): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { findIndex } from '../../utils/lang';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { ENGINE_MATCHER_PART_OF } from '../../logger/constants';
|
|
4
4
|
|
|
5
5
|
export function partOfSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MaybeThenable } from '../../dtos/types';
|
|
2
2
|
import { ISegmentsCacheBase } from '../../storages/types';
|
|
3
|
-
import { ILogger } from '../../types';
|
|
3
|
+
import { ILogger } from '../../logger/types';
|
|
4
4
|
import { thenable } from '../../utils/promise/thenable';
|
|
5
5
|
import { ENGINE_MATCHER_SEGMENT } from '../../logger/constants';
|
|
6
6
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_STRING_INVALID, ENGINE_MATCHER_STRING } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
|
|
4
4
|
export function stringMatcherContext(log: ILogger, ruleAttr: string) /*: Function */ {
|
|
5
5
|
return function stringMatcher(runtimeAttr: string): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_STARTS_WITH } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { startsWith } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function startsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { setToArray, ISet } from '../../utils/lang/sets';
|
|
2
|
-
import { ILogger } from '../../types';
|
|
2
|
+
import { ILogger } from '../../logger/types';
|
|
3
3
|
import { ENGINE_MATCHER_WHITELIST } from '../../logger/constants';
|
|
4
4
|
|
|
5
5
|
export function whitelistMatcherContext(log: ILogger, ruleAttr: ISet<string>) /*: Function */ {
|
|
@@ -9,8 +9,8 @@ import { thenable } from '../../utils/promise/thenable';
|
|
|
9
9
|
import { IEvaluator, IMatcherDto, ISplitEvaluator } from '../types';
|
|
10
10
|
import { ISplitCondition } from '../../dtos/types';
|
|
11
11
|
import { IStorageAsync, IStorageSync } from '../../storages/types';
|
|
12
|
-
import {
|
|
13
|
-
import { ILogger } from '../../types';
|
|
12
|
+
import { SplitIO } from '../../types';
|
|
13
|
+
import { ILogger } from '../../logger/types';
|
|
14
14
|
|
|
15
15
|
export function parser(log: ILogger, conditions: ISplitCondition[], storage: IStorageSync | IStorageAsync): IEvaluator {
|
|
16
16
|
let predicates = [];
|
|
@@ -31,7 +31,7 @@ export function parser(log: ILogger, conditions: ISplitCondition[], storage: ISt
|
|
|
31
31
|
const matcher = matcherFactory(log, matcherDto, storage);
|
|
32
32
|
|
|
33
33
|
// Evaluator function.
|
|
34
|
-
return (key: string, attributes: Attributes | undefined, splitEvaluator: ISplitEvaluator) => {
|
|
34
|
+
return (key: string, attributes: SplitIO.Attributes | undefined, splitEvaluator: ISplitEvaluator) => {
|
|
35
35
|
const value = sanitizeValue(log, key, matcherDto, attributes);
|
|
36
36
|
const result = value !== undefined && matcher ? matcher(value, splitEvaluator) : false;
|
|
37
37
|
|
package/src/evaluator/types.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { IBetweenMatcherData, IDependencyMatcherData, MaybeThenable } from '../dtos/types';
|
|
2
2
|
import { IStorageAsync, IStorageSync } from '../storages/types';
|
|
3
3
|
import { ISet } from '../utils/lang/sets';
|
|
4
|
-
import {
|
|
5
|
-
import { ILogger } from '../types';
|
|
4
|
+
import { SplitIO } from '../types';
|
|
5
|
+
import { ILogger } from '../logger/types';
|
|
6
6
|
|
|
7
7
|
export interface IDependencyMatcherValue {
|
|
8
|
-
key: SplitKey,
|
|
9
|
-
attributes?: Attributes
|
|
8
|
+
key: SplitIO.SplitKey,
|
|
9
|
+
attributes?: SplitIO.Attributes
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export interface IMatcherDto {
|
|
@@ -27,8 +27,8 @@ export interface IEvaluation {
|
|
|
27
27
|
|
|
28
28
|
export type IEvaluationResult = IEvaluation & { treatment: string }
|
|
29
29
|
|
|
30
|
-
export type ISplitEvaluator = (log: ILogger, key: SplitKey, splitName: string, attributes: Attributes | undefined, storage: IStorageSync | IStorageAsync) => MaybeThenable<IEvaluation>
|
|
30
|
+
export type ISplitEvaluator = (log: ILogger, key: SplitIO.SplitKey, splitName: string, attributes: SplitIO.Attributes | undefined, storage: IStorageSync | IStorageAsync) => MaybeThenable<IEvaluation>
|
|
31
31
|
|
|
32
|
-
export type IEvaluator = (key: SplitKey, seed: number, trafficAllocation?: number, trafficAllocationSeed?: number, attributes?: Attributes, splitEvaluator?: ISplitEvaluator) => MaybeThenable<IEvaluation | undefined>
|
|
32
|
+
export type IEvaluator = (key: SplitIO.SplitKey, seed: number, trafficAllocation?: number, trafficAllocationSeed?: number, attributes?: SplitIO.Attributes, splitEvaluator?: ISplitEvaluator) => MaybeThenable<IEvaluation | undefined>
|
|
33
33
|
|
|
34
34
|
export type IMatcher = (...args: any) => MaybeThenable<boolean>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SplitIO } from '../../types';
|
|
2
2
|
import { IMatcherDto } from '../types';
|
|
3
|
-
import { ILogger } from '../../types';
|
|
3
|
+
import { ILogger } from '../../logger/types';
|
|
4
4
|
import { sanitize } from './sanitize';
|
|
5
5
|
import { ENGINE_VALUE, ENGINE_VALUE_NO_ATTRIBUTES, ENGINE_VALUE_INVALID } from '../../logger/constants';
|
|
6
6
|
|
|
7
|
-
function parseValue(log: ILogger, key: string, attributeName: string | null, attributes?: Attributes) {
|
|
7
|
+
function parseValue(log: ILogger, key: string, attributeName: string | null, attributes?: SplitIO.Attributes) {
|
|
8
8
|
let value = undefined;
|
|
9
9
|
if (attributeName) {
|
|
10
10
|
if (attributes) {
|
|
@@ -23,7 +23,7 @@ function parseValue(log: ILogger, key: string, attributeName: string | null, att
|
|
|
23
23
|
/**
|
|
24
24
|
* Defines value to be matched (key / attribute).
|
|
25
25
|
*/
|
|
26
|
-
export function sanitizeValue(log: ILogger, key: string, matcherDto: IMatcherDto, attributes?: Attributes) {
|
|
26
|
+
export function sanitizeValue(log: ILogger, key: string, matcherDto: IMatcherDto, attributes?: SplitIO.Attributes) {
|
|
27
27
|
const attributeName = matcherDto.attribute;
|
|
28
28
|
const valueToMatch = parseValue(log, key, attributeName, attributes);
|
|
29
29
|
const sanitizedValue = sanitize(log, matcherDto.type, valueToMatch, matcherDto.dataType, attributes);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SplitIO } from '../../types';
|
|
2
2
|
import { IDependencyMatcherValue } from '../types';
|
|
3
|
-
import { ILogger } from '../../types';
|
|
3
|
+
import { ILogger } from '../../logger/types';
|
|
4
4
|
import { isObject, uniq, toString, toNumber } from '../../utils/lang';
|
|
5
5
|
import { zeroSinceHH, zeroSinceSS } from '../convertions';
|
|
6
6
|
import { matcherTypes, matcherDataTypes } from '../matchers/matcherTypes';
|
|
@@ -41,7 +41,7 @@ function sanitizeBoolean(val: any): boolean | undefined {
|
|
|
41
41
|
return undefined;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
function dependencyProcessor(sanitizedValue: string, attributes?: Attributes): IDependencyMatcherValue {
|
|
44
|
+
function dependencyProcessor(sanitizedValue: string, attributes?: SplitIO.Attributes): IDependencyMatcherValue {
|
|
45
45
|
return {
|
|
46
46
|
key: sanitizedValue,
|
|
47
47
|
attributes
|
|
@@ -69,7 +69,7 @@ function getProcessingFunction(matcherTypeID: number, dataType: string) {
|
|
|
69
69
|
/**
|
|
70
70
|
* Sanitize matcher value
|
|
71
71
|
*/
|
|
72
|
-
export function sanitize(log: ILogger, matcherTypeID: number, value: string | number | boolean | Array<string | number> | undefined, dataType: string, attributes?: Attributes) {
|
|
72
|
+
export function sanitize(log: ILogger, matcherTypeID: number, value: string | number | boolean | Array<string | number> | undefined, dataType: string, attributes?: SplitIO.Attributes) {
|
|
73
73
|
const processor = getProcessingFunction(matcherTypeID, dataType);
|
|
74
74
|
let sanitizedValue: string | number | boolean | Array<string | number> | IDependencyMatcherValue | undefined;
|
|
75
75
|
|
|
@@ -8,10 +8,11 @@ import {
|
|
|
8
8
|
validateKey,
|
|
9
9
|
validateTrafficType,
|
|
10
10
|
} from '../../utils/inputValidation';
|
|
11
|
-
import {
|
|
11
|
+
import { SplitIO } from '../../types';
|
|
12
12
|
import { Identity, GoogleAnalyticsToSplitOptions } from './types';
|
|
13
|
-
import { ILogger } from '../../types';
|
|
13
|
+
import { ILogger } from '../../logger/types';
|
|
14
14
|
import { IIntegrationFactoryParams } from '../types';
|
|
15
|
+
import { ITelemetryTracker } from '../../trackers/types';
|
|
15
16
|
|
|
16
17
|
const logPrefix = 'ga-to-split: ';
|
|
17
18
|
const logNameMapper = 'ga-to-split:mapper';
|
|
@@ -25,7 +26,7 @@ const logNameMapper = 'ga-to-split:mapper';
|
|
|
25
26
|
* @param log Logger instance.
|
|
26
27
|
* @param autoRequire If true, log error when auto-require script is not detected
|
|
27
28
|
*/
|
|
28
|
-
function providePlugin(window: any, pluginName: string, pluginConstructor: Function, log: ILogger, autoRequire?:
|
|
29
|
+
function providePlugin(window: any, pluginName: string, pluginConstructor: Function, log: ILogger, autoRequire: boolean, telemetryTracker?: ITelemetryTracker) {
|
|
29
30
|
// get reference to global command queue. Init it if not defined yet.
|
|
30
31
|
const gaAlias = window.GoogleAnalyticsObject || 'ga';
|
|
31
32
|
window[gaAlias] = window[gaAlias] || function () {
|
|
@@ -35,10 +36,13 @@ function providePlugin(window: any, pluginName: string, pluginConstructor: Funct
|
|
|
35
36
|
// provides the plugin for use with analytics.js.
|
|
36
37
|
window[gaAlias]('provide', pluginName, pluginConstructor);
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
const hasAutoRequire = window[gaAlias].q && window[gaAlias].q.push !== [].push;
|
|
40
|
+
if (autoRequire && !hasAutoRequire) { // Expecting spy on ga.q push method but not found
|
|
40
41
|
log.error(logPrefix + 'integration is configured to autorequire the splitTracker plugin, but the necessary script does not seem to have run. Please check the docs.');
|
|
41
42
|
}
|
|
43
|
+
if (telemetryTracker && hasAutoRequire) {
|
|
44
|
+
telemetryTracker.addTag('integration:ga-autorequire');
|
|
45
|
+
}
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
// Default mapping: object used for building the default mapper from hits to Split events
|
|
@@ -67,7 +71,7 @@ const defaultMapping = {
|
|
|
67
71
|
* @param {object} mapping
|
|
68
72
|
*/
|
|
69
73
|
function mapperBuilder(mapping: typeof defaultMapping) {
|
|
70
|
-
return function (model: UniversalAnalytics.Model): EventData {
|
|
74
|
+
return function (model: UniversalAnalytics.Model): SplitIO.EventData {
|
|
71
75
|
const hitType: string = model.get('hitType');
|
|
72
76
|
// @ts-expect-error
|
|
73
77
|
const eventTypeId = model.get(mapping.eventTypeId[hitType] || 'hitType');
|
|
@@ -133,7 +137,7 @@ export function validateIdentities(identities?: Identity[]) {
|
|
|
133
137
|
* @param {EventData} data event data instance to validate. Precondition: data != undefined
|
|
134
138
|
* @returns {boolean} Whether the data instance is a valid EventData or not.
|
|
135
139
|
*/
|
|
136
|
-
export function validateEventData(log: ILogger, eventData: any): eventData is EventData {
|
|
140
|
+
export function validateEventData(log: ILogger, eventData: any): eventData is SplitIO.EventData {
|
|
137
141
|
if (!validateEvent(log, eventData.eventTypeId, logNameMapper))
|
|
138
142
|
return false;
|
|
139
143
|
|
|
@@ -191,7 +195,7 @@ export function fixEventTypeId(log: ILogger, eventTypeId: any) {
|
|
|
191
195
|
*/
|
|
192
196
|
export function GaToSplit(sdkOptions: GoogleAnalyticsToSplitOptions, params: IIntegrationFactoryParams) {
|
|
193
197
|
|
|
194
|
-
const { storage, settings: { core: coreSettings, log } } = params;
|
|
198
|
+
const { storage, settings: { core: coreSettings, log }, telemetryTracker } = params;
|
|
195
199
|
|
|
196
200
|
const defaultOptions = {
|
|
197
201
|
prefix: defaultPrefix,
|
|
@@ -251,10 +255,10 @@ export function GaToSplit(sdkOptions: GoogleAnalyticsToSplitOptions, params: IIn
|
|
|
251
255
|
}
|
|
252
256
|
|
|
253
257
|
// map hit into an EventData instance
|
|
254
|
-
let eventData: EventData = defaultMapper(model);
|
|
258
|
+
let eventData: SplitIO.EventData = defaultMapper(model);
|
|
255
259
|
if (opts.mapper) {
|
|
256
260
|
try {
|
|
257
|
-
eventData = opts.mapper(model, eventData as EventData);
|
|
261
|
+
eventData = opts.mapper(model, eventData as SplitIO.EventData);
|
|
258
262
|
} catch (err) {
|
|
259
263
|
log.warn(logPrefix + `custom mapper threw: ${err}`);
|
|
260
264
|
return;
|
|
@@ -291,5 +295,5 @@ export function GaToSplit(sdkOptions: GoogleAnalyticsToSplitOptions, params: IIn
|
|
|
291
295
|
}
|
|
292
296
|
|
|
293
297
|
// Register the plugin, even if config is invalid, since, if not provided, it will block `ga` command queue.
|
|
294
|
-
providePlugin(window, 'splitTracker', SplitTracker, log, sdkOptions.autoRequire === true);
|
|
298
|
+
providePlugin(window, 'splitTracker', SplitTracker, log, sdkOptions.autoRequire === true, telemetryTracker);
|
|
295
299
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* eslint-disable no-undef */
|
|
2
2
|
import { uniq } from '../../utils/lang';
|
|
3
3
|
import { SPLIT_IMPRESSION, SPLIT_EVENT } from '../../utils/constants';
|
|
4
|
-
import {
|
|
4
|
+
import { SplitIO } from '../../types';
|
|
5
5
|
import { IIntegration } from '../types';
|
|
6
6
|
import { SplitToGoogleAnalyticsOptions } from './types';
|
|
7
|
-
import { ILogger } from '../../types';
|
|
7
|
+
import { ILogger } from '../../logger/types';
|
|
8
8
|
|
|
9
9
|
const logPrefix = 'split-to-ga: ';
|
|
10
10
|
const noGaWarning = '`ga` command queue not found.';
|
|
@@ -16,29 +16,29 @@ export class SplitToGa implements IIntegration {
|
|
|
16
16
|
static defaultTrackerNames = [''];
|
|
17
17
|
|
|
18
18
|
private trackerNames: string[];
|
|
19
|
-
private filter?: (data: IntegrationData) => boolean;
|
|
20
|
-
private mapper?: (data: IntegrationData, defaultMapping: UniversalAnalytics.FieldsObject) => UniversalAnalytics.FieldsObject;
|
|
19
|
+
private filter?: (data: SplitIO.IntegrationData) => boolean;
|
|
20
|
+
private mapper?: (data: SplitIO.IntegrationData, defaultMapping: UniversalAnalytics.FieldsObject) => UniversalAnalytics.FieldsObject;
|
|
21
21
|
private impressions: boolean | undefined;
|
|
22
22
|
private events: boolean | undefined;
|
|
23
23
|
private log: ILogger;
|
|
24
24
|
|
|
25
25
|
// Default mapper function.
|
|
26
|
-
static defaultMapper({ type, payload }: IntegrationData): UniversalAnalytics.FieldsObject {
|
|
26
|
+
static defaultMapper({ type, payload }: SplitIO.IntegrationData): UniversalAnalytics.FieldsObject {
|
|
27
27
|
switch (type) {
|
|
28
28
|
case SPLIT_IMPRESSION:
|
|
29
29
|
return {
|
|
30
30
|
hitType: 'event',
|
|
31
31
|
eventCategory: 'split-impression',
|
|
32
|
-
eventAction: 'Evaluate ' + (payload as ImpressionData).impression.feature,
|
|
33
|
-
eventLabel: 'Treatment: ' + (payload as ImpressionData).impression.treatment + '. Targeting rule: ' + (payload as ImpressionData).impression.label + '.',
|
|
32
|
+
eventAction: 'Evaluate ' + (payload as SplitIO.ImpressionData).impression.feature,
|
|
33
|
+
eventLabel: 'Treatment: ' + (payload as SplitIO.ImpressionData).impression.treatment + '. Targeting rule: ' + (payload as SplitIO.ImpressionData).impression.label + '.',
|
|
34
34
|
nonInteraction: true,
|
|
35
35
|
};
|
|
36
36
|
case SPLIT_EVENT:
|
|
37
37
|
return {
|
|
38
38
|
hitType: 'event',
|
|
39
39
|
eventCategory: 'split-event',
|
|
40
|
-
eventAction: (payload as EventData).eventTypeId,
|
|
41
|
-
eventValue: (payload as EventData).value,
|
|
40
|
+
eventAction: (payload as SplitIO.EventData).eventTypeId,
|
|
41
|
+
eventValue: (payload as SplitIO.EventData).value,
|
|
42
42
|
nonInteraction: true,
|
|
43
43
|
};
|
|
44
44
|
}
|
|
@@ -93,7 +93,7 @@ export class SplitToGa implements IIntegration {
|
|
|
93
93
|
if (typeof SplitToGa.getGa() !== 'function') log.warn(logPrefix + `${noGaWarning} No hits will be sent until it is available.`);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
queue(data: IntegrationData) {
|
|
96
|
+
queue(data: SplitIO.IntegrationData) {
|
|
97
97
|
// access ga command queue via `getGa` method, accounting for the possibility that
|
|
98
98
|
// the global `ga` reference was not yet mutated by analytics.js.
|
|
99
99
|
const ga = SplitToGa.getGa();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SplitIO } from '../../types';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A pair of user key and it's trafficType, required for tracking valid Split events.
|
|
@@ -41,7 +41,7 @@ export interface GoogleAnalyticsToSplitOptions {
|
|
|
41
41
|
* return defaultMapping;
|
|
42
42
|
* }`
|
|
43
43
|
*/
|
|
44
|
-
mapper?: (model: UniversalAnalytics.Model, defaultMapping: EventData) => EventData,
|
|
44
|
+
mapper?: (model: UniversalAnalytics.Model, defaultMapping: SplitIO.EventData) => SplitIO.EventData,
|
|
45
45
|
/**
|
|
46
46
|
* Optional prefix for EventTypeId, to prevent any kind of data collision between events.
|
|
47
47
|
* @property {string} prefix
|
|
@@ -97,7 +97,7 @@ export interface SplitToGoogleAnalyticsOptions {
|
|
|
97
97
|
* For example, the following filter allows to track only impressions, equivalent to setting events to false:
|
|
98
98
|
* `(data) => data.type === 'IMPRESSION'`
|
|
99
99
|
*/
|
|
100
|
-
filter?: (data: IntegrationData) => boolean,
|
|
100
|
+
filter?: (data: SplitIO.IntegrationData) => boolean,
|
|
101
101
|
/**
|
|
102
102
|
* Optional function useful when you need to modify the GA hit before sending it.
|
|
103
103
|
* This function is invoked with two arguments:
|
|
@@ -128,7 +128,7 @@ export interface SplitToGoogleAnalyticsOptions {
|
|
|
128
128
|
* nonInteraction: true,
|
|
129
129
|
* }`
|
|
130
130
|
*/
|
|
131
|
-
mapper?: (data: IntegrationData, defaultMapping: UniversalAnalytics.FieldsObject) => UniversalAnalytics.FieldsObject,
|
|
131
|
+
mapper?: (data: SplitIO.IntegrationData, defaultMapping: UniversalAnalytics.FieldsObject) => UniversalAnalytics.FieldsObject,
|
|
132
132
|
/**
|
|
133
133
|
* List of tracker names to send the hit. An empty string represents the default tracker.
|
|
134
134
|
* If not provided, hits are only sent to default tracker.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SPLIT_IMPRESSION, SPLIT_EVENT } from '../utils/constants';
|
|
2
|
-
import {
|
|
2
|
+
import { SplitIO } from '../types';
|
|
3
3
|
import { IIntegration, IIntegrationManager, IIntegrationFactoryParams } from './types';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -29,10 +29,10 @@ export function pluggableIntegrationsManagerFactory(
|
|
|
29
29
|
|
|
30
30
|
// Exception safe methods: each integration module is responsable for handling errors
|
|
31
31
|
return {
|
|
32
|
-
handleImpression(impressionData: ImpressionData) {
|
|
32
|
+
handleImpression(impressionData: SplitIO.ImpressionData) {
|
|
33
33
|
listeners.forEach(listener => listener.queue({ type: SPLIT_IMPRESSION, payload: impressionData }));
|
|
34
34
|
},
|
|
35
|
-
handleEvent(eventData: EventData) {
|
|
35
|
+
handleEvent(eventData: SplitIO.EventData) {
|
|
36
36
|
listeners.forEach(listener => listener.queue({ type: SPLIT_EVENT, payload: eventData }));
|
|
37
37
|
}
|
|
38
38
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { IEventsCacheBase } from '../storages/types';
|
|
2
|
-
import { IEventsHandler, IImpressionsHandler } from '../trackers/types';
|
|
3
|
-
import { ISettings,
|
|
2
|
+
import { IEventsHandler, IImpressionsHandler, ITelemetryTracker } from '../trackers/types';
|
|
3
|
+
import { ISettings, SplitIO } from '../types';
|
|
4
4
|
|
|
5
5
|
export interface IIntegration {
|
|
6
|
-
queue(data: IntegrationData): void
|
|
6
|
+
queue(data: SplitIO.IntegrationData): void
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export type IIntegrationManager = IEventsHandler & IImpressionsHandler;
|
|
@@ -11,6 +11,7 @@ export type IIntegrationManager = IEventsHandler & IImpressionsHandler;
|
|
|
11
11
|
export interface IIntegrationFactoryParams {
|
|
12
12
|
storage: { events: IEventsCacheBase }
|
|
13
13
|
settings: ISettings
|
|
14
|
+
telemetryTracker: ITelemetryTracker
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export type IntegrationFactory = {
|
package/src/logger/index.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { objectAssign } from '../utils/lang/objectAssign';
|
|
2
|
-
import { ILoggerOptions } from './types';
|
|
2
|
+
import { ILoggerOptions, ILogger } from './types';
|
|
3
3
|
import { find } from '../utils/lang';
|
|
4
|
-
import { LogLevel
|
|
4
|
+
import { LogLevel } from '../types';
|
|
5
5
|
import { IMap, _Map } from '../utils/lang/maps';
|
|
6
6
|
|
|
7
|
-
export const LogLevels:
|
|
7
|
+
export const LogLevels: { [level: string]: LogLevel } = {
|
|
8
8
|
DEBUG: 'DEBUG',
|
|
9
9
|
INFO: 'INFO',
|
|
10
10
|
WARN: 'WARN',
|
package/src/logger/sdkLogger.ts
CHANGED
package/src/logger/types.ts
CHANGED
|
@@ -5,3 +5,19 @@ export interface ILoggerOptions {
|
|
|
5
5
|
logLevel?: LogLevel,
|
|
6
6
|
showLevel?: boolean, // @TODO remove this param eventually since it is not being set `false` anymore
|
|
7
7
|
}
|
|
8
|
+
|
|
9
|
+
export interface ILogger {
|
|
10
|
+
setLogLevel(logLevel: LogLevel): void
|
|
11
|
+
|
|
12
|
+
debug(msg: any): void
|
|
13
|
+
debug(msg: string | number, args?: any[]): void
|
|
14
|
+
|
|
15
|
+
info(msg: any): void
|
|
16
|
+
info(msg: string | number, args?: any[]): void
|
|
17
|
+
|
|
18
|
+
warn(msg: any): void
|
|
19
|
+
warn(msg: string | number, args?: any[]): void
|
|
20
|
+
|
|
21
|
+
error(msg: any): void
|
|
22
|
+
error(msg: string | number, args?: any[]): void
|
|
23
|
+
}
|
|
@@ -4,7 +4,7 @@ import { readinessManagerFactory } from './readinessManager';
|
|
|
4
4
|
import { ISdkReadinessManager } from './types';
|
|
5
5
|
import { IEventEmitter } from '../types';
|
|
6
6
|
import { SDK_READY, SDK_READY_TIMED_OUT, SDK_READY_FROM_CACHE, SDK_UPDATE } from './constants';
|
|
7
|
-
import { ILogger } from '../types';
|
|
7
|
+
import { ILogger } from '../logger/types';
|
|
8
8
|
import { ERROR_CLIENT_LISTENER, CLIENT_READY_FROM_CACHE, CLIENT_READY, CLIENT_NO_LISTENER } from '../logger/constants';
|
|
9
9
|
|
|
10
10
|
const NEW_LISTENER_EVENT = 'newListener';
|