@splitsoftware/splitio-commons 2.11.1-rc.2 → 2.12.1

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.
Files changed (157) hide show
  1. package/CHANGES.txt +6 -2
  2. package/cjs/evaluator/condition/engineUtils.js +2 -2
  3. package/cjs/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +3 -3
  4. package/cjs/evaluator/fallbackTreatmentsCalculator/index.js +21 -32
  5. package/cjs/evaluator/matchers/whitelist.js +1 -1
  6. package/cjs/integrations/pluggable.js +1 -1
  7. package/cjs/listeners/node.js +2 -2
  8. package/cjs/logger/constants.js +3 -4
  9. package/cjs/logger/index.js +1 -1
  10. package/cjs/logger/messages/debug.js +1 -1
  11. package/cjs/logger/messages/error.js +1 -1
  12. package/cjs/logger/messages/info.js +2 -3
  13. package/cjs/logger/messages/warn.js +4 -4
  14. package/cjs/sdkClient/client.js +2 -3
  15. package/cjs/sdkClient/clientAttributesDecoration.js +3 -3
  16. package/cjs/sdkClient/clientInputValidation.js +36 -68
  17. package/cjs/sdkClient/identity.js +1 -1
  18. package/cjs/sdkClient/sdkClient.js +19 -7
  19. package/cjs/sdkFactory/index.js +8 -41
  20. package/cjs/services/splitApi.js +13 -13
  21. package/cjs/services/splitHttpClient.js +1 -1
  22. package/cjs/storages/KeyBuilder.js +12 -12
  23. package/cjs/storages/KeyBuilderCS.js +13 -13
  24. package/cjs/storages/KeyBuilderSS.js +15 -15
  25. package/cjs/storages/getRolloutPlan.js +1 -1
  26. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +1 -1
  27. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +1 -1
  28. package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
  29. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
  30. package/cjs/storages/inMemory/SplitsCacheInMemory.js +1 -1
  31. package/cjs/storages/inRedis/EventsCacheInRedis.js +1 -1
  32. package/cjs/storages/inRedis/ImpressionCountsCacheInRedis.js +5 -5
  33. package/cjs/storages/inRedis/ImpressionsCacheInRedis.js +1 -1
  34. package/cjs/storages/inRedis/RedisAdapter.js +8 -8
  35. package/cjs/storages/inRedis/SplitsCacheInRedis.js +6 -6
  36. package/cjs/storages/inRedis/TelemetryCacheInRedis.js +7 -7
  37. package/cjs/storages/inRedis/UniqueKeysCacheInRedis.js +3 -3
  38. package/cjs/storages/pluggable/EventsCachePluggable.js +1 -1
  39. package/cjs/storages/pluggable/ImpressionCountsCachePluggable.js +6 -6
  40. package/cjs/storages/pluggable/SplitsCachePluggable.js +4 -4
  41. package/cjs/storages/pluggable/TelemetryCachePluggable.js +7 -7
  42. package/cjs/storages/pluggable/UniqueKeysCachePluggable.js +2 -2
  43. package/cjs/storages/pluggable/index.js +3 -3
  44. package/cjs/storages/pluggable/wrapperAdapter.js +1 -1
  45. package/cjs/storages/setRolloutPlan.js +3 -3
  46. package/cjs/storages/utils.js +6 -6
  47. package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
  48. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  49. package/cjs/sync/polling/pollingManagerSS.js +2 -2
  50. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +6 -6
  51. package/cjs/sync/polling/updaters/splitChangesUpdater.js +12 -10
  52. package/cjs/sync/streaming/SSEClient/index.js +2 -2
  53. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +2 -2
  54. package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -2
  55. package/cjs/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +2 -2
  56. package/cjs/sync/streaming/parseUtils.js +1 -1
  57. package/cjs/sync/submitters/submitter.js +1 -1
  58. package/cjs/trackers/eventTracker.js +10 -12
  59. package/cjs/trackers/impressionObserver/buildKey.js +1 -1
  60. package/cjs/trackers/impressionsTracker.js +37 -20
  61. package/cjs/trackers/uniqueKeysTracker.js +1 -1
  62. package/cjs/utils/inputValidation/apiKey.js +1 -1
  63. package/cjs/utils/inputValidation/attribute.js +2 -2
  64. package/cjs/utils/inputValidation/eventProperties.js +1 -1
  65. package/cjs/utils/inputValidation/isOperational.js +1 -1
  66. package/cjs/utils/lang/index.js +1 -1
  67. package/cjs/utils/lang/sets.js +4 -4
  68. package/cjs/utils/promise/timeout.js +1 -1
  69. package/cjs/utils/settingsValidation/splitFilters.js +2 -2
  70. package/cjs/utils/settingsValidation/url.js +5 -5
  71. package/esm/evaluator/condition/engineUtils.js +2 -2
  72. package/esm/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +3 -3
  73. package/esm/evaluator/fallbackTreatmentsCalculator/index.js +21 -33
  74. package/esm/evaluator/matchers/whitelist.js +1 -1
  75. package/esm/integrations/pluggable.js +1 -1
  76. package/esm/listeners/node.js +2 -2
  77. package/esm/logger/constants.js +0 -1
  78. package/esm/logger/index.js +1 -1
  79. package/esm/logger/messages/info.js +1 -2
  80. package/esm/logger/messages/warn.js +3 -3
  81. package/esm/sdkClient/client.js +3 -4
  82. package/esm/sdkClient/clientAttributesDecoration.js +3 -3
  83. package/esm/sdkClient/clientInputValidation.js +36 -68
  84. package/esm/sdkClient/identity.js +1 -1
  85. package/esm/sdkClient/sdkClient.js +20 -8
  86. package/esm/sdkFactory/index.js +8 -41
  87. package/esm/services/splitApi.js +13 -13
  88. package/esm/services/splitHttpClient.js +1 -1
  89. package/esm/storages/KeyBuilder.js +12 -12
  90. package/esm/storages/KeyBuilderCS.js +12 -12
  91. package/esm/storages/KeyBuilderSS.js +14 -14
  92. package/esm/storages/getRolloutPlan.js +1 -1
  93. package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
  94. package/esm/storages/inRedis/EventsCacheInRedis.js +1 -1
  95. package/esm/storages/inRedis/ImpressionCountsCacheInRedis.js +4 -4
  96. package/esm/storages/inRedis/RedisAdapter.js +7 -7
  97. package/esm/storages/inRedis/SplitsCacheInRedis.js +4 -4
  98. package/esm/storages/inRedis/TelemetryCacheInRedis.js +7 -7
  99. package/esm/storages/inRedis/UniqueKeysCacheInRedis.js +1 -1
  100. package/esm/storages/pluggable/EventsCachePluggable.js +1 -1
  101. package/esm/storages/pluggable/ImpressionCountsCachePluggable.js +5 -5
  102. package/esm/storages/pluggable/SplitsCachePluggable.js +2 -2
  103. package/esm/storages/pluggable/TelemetryCachePluggable.js +7 -7
  104. package/esm/storages/pluggable/UniqueKeysCachePluggable.js +1 -1
  105. package/esm/storages/pluggable/index.js +2 -2
  106. package/esm/storages/pluggable/wrapperAdapter.js +1 -1
  107. package/esm/storages/setRolloutPlan.js +3 -3
  108. package/esm/storages/utils.js +6 -6
  109. package/esm/sync/offline/splitsParser/parseCondition.js +1 -1
  110. package/esm/sync/polling/pollingManagerSS.js +2 -2
  111. package/esm/sync/polling/updaters/segmentChangesUpdater.js +6 -6
  112. package/esm/sync/polling/updaters/splitChangesUpdater.js +12 -10
  113. package/esm/sync/streaming/SSEClient/index.js +2 -2
  114. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +2 -2
  115. package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -2
  116. package/esm/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +2 -2
  117. package/esm/sync/streaming/parseUtils.js +1 -1
  118. package/esm/sync/submitters/submitter.js +1 -1
  119. package/esm/trackers/eventTracker.js +10 -12
  120. package/esm/trackers/impressionObserver/buildKey.js +1 -1
  121. package/esm/trackers/impressionsTracker.js +38 -21
  122. package/esm/trackers/uniqueKeysTracker.js +1 -1
  123. package/esm/utils/inputValidation/apiKey.js +1 -1
  124. package/esm/utils/inputValidation/attribute.js +2 -2
  125. package/esm/utils/inputValidation/isOperational.js +1 -1
  126. package/esm/utils/lang/sets.js +4 -4
  127. package/esm/utils/promise/timeout.js +1 -1
  128. package/esm/utils/settingsValidation/splitFilters.js +2 -2
  129. package/esm/utils/settingsValidation/url.js +5 -5
  130. package/package.json +5 -5
  131. package/src/dtos/types.ts +15 -15
  132. package/src/evaluator/condition/engineUtils.ts +2 -2
  133. package/src/evaluator/fallbackTreatmentsCalculator/index.ts +23 -41
  134. package/src/evaluator/matchers/whitelist.ts +2 -2
  135. package/src/evaluator/types.ts +2 -2
  136. package/src/evaluator/value/index.ts +1 -1
  137. package/src/integrations/pluggable.ts +1 -1
  138. package/src/logger/constants.ts +0 -1
  139. package/src/logger/messages/info.ts +1 -2
  140. package/src/logger/messages/warn.ts +3 -3
  141. package/src/sdkClient/client.ts +3 -5
  142. package/src/sdkClient/clientInputValidation.ts +38 -61
  143. package/src/sdkClient/sdkClient.ts +20 -5
  144. package/src/sdkFactory/index.ts +10 -47
  145. package/src/sdkFactory/types.ts +6 -3
  146. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +1 -1
  147. package/src/storages/inMemory/SplitsCacheInMemory.ts +1 -1
  148. package/src/storages/inRedis/SplitsCacheInRedis.ts +1 -1
  149. package/src/storages/pluggable/SplitsCachePluggable.ts +1 -1
  150. package/src/storages/setRolloutPlan.ts +2 -2
  151. package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
  152. package/src/sync/polling/updaters/splitChangesUpdater.ts +11 -9
  153. package/src/trackers/eventTracker.ts +7 -10
  154. package/src/trackers/impressionsTracker.ts +42 -26
  155. package/src/trackers/types.ts +3 -1
  156. package/src/utils/lang/sets.ts +4 -2
  157. package/types/splitio.d.ts +22 -18
@@ -34,97 +34,68 @@ export function clientInputValidationDecorator(settings, client, readinessManage
34
34
  };
35
35
  }
36
36
  function evaluateFallBackTreatment(featureFlagName, withConfig) {
37
- var _a = fallbackTreatmentsCalculator.resolve(featureFlagName, ''), treatment = _a.treatment, config = _a.config;
38
- if (withConfig) {
39
- return {
37
+ if (Array.isArray(featureFlagName)) {
38
+ var res_1 = {};
39
+ featureFlagName.forEach(function (split) { return res_1[split] = evaluateFallBackTreatment(split, withConfig); });
40
+ return res_1;
41
+ }
42
+ var _a = fallbackTreatmentsCalculator(featureFlagName), treatment = _a.treatment, config = _a.config;
43
+ return withConfig ?
44
+ {
40
45
  treatment: treatment,
41
46
  config: config
42
- };
43
- }
44
- return treatment;
47
+ } : treatment;
45
48
  }
46
49
  function wrapResult(value) {
47
50
  return isAsync ? Promise.resolve(value) : value;
48
51
  }
49
52
  function getTreatment(maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions) {
50
53
  var params = validateEvaluationParams(GET_TREATMENT, maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions);
51
- if (params.valid) {
52
- return client.getTreatment(params.key, params.nameOrNames, params.attributes, params.options);
53
- }
54
- else {
55
- var result = evaluateFallBackTreatment(params.nameOrNames, false);
56
- return wrapResult(result);
57
- }
54
+ return params.valid ?
55
+ client.getTreatment(params.key, params.nameOrNames, params.attributes, params.options) :
56
+ wrapResult(evaluateFallBackTreatment(params.nameOrNames, false));
58
57
  }
59
58
  function getTreatmentWithConfig(maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions) {
60
59
  var params = validateEvaluationParams(GET_TREATMENT_WITH_CONFIG, maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions);
61
- if (params.valid) {
62
- return client.getTreatmentWithConfig(params.key, params.nameOrNames, params.attributes, params.options);
63
- }
64
- else {
65
- var result = evaluateFallBackTreatment(params.nameOrNames, true);
66
- return wrapResult(result);
67
- }
60
+ return params.valid ?
61
+ client.getTreatmentWithConfig(params.key, params.nameOrNames, params.attributes, params.options) :
62
+ wrapResult(evaluateFallBackTreatment(params.nameOrNames, true));
68
63
  }
69
64
  function getTreatments(maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions) {
70
65
  var params = validateEvaluationParams(GET_TREATMENTS, maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions);
71
- if (params.valid) {
72
- return client.getTreatments(params.key, params.nameOrNames, params.attributes, params.options);
73
- }
74
- else {
75
- var res_1 = {};
76
- if (params.nameOrNames)
77
- params.nameOrNames.forEach(function (split) { return res_1[split] = evaluateFallBackTreatment(split, false); });
78
- return wrapResult(res_1);
79
- }
66
+ return params.valid ?
67
+ client.getTreatments(params.key, params.nameOrNames, params.attributes, params.options) :
68
+ wrapResult(evaluateFallBackTreatment(params.nameOrNames || [], false));
80
69
  }
81
70
  function getTreatmentsWithConfig(maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions) {
82
71
  var params = validateEvaluationParams(GET_TREATMENTS_WITH_CONFIG, maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions);
83
- if (params.valid) {
84
- return client.getTreatmentsWithConfig(params.key, params.nameOrNames, params.attributes, params.options);
85
- }
86
- else {
87
- var res_2 = {};
88
- if (params.nameOrNames)
89
- params.nameOrNames.forEach(function (split) { return res_2[split] = evaluateFallBackTreatment(split, true); });
90
- return wrapResult(res_2);
91
- }
72
+ return params.valid ?
73
+ client.getTreatmentsWithConfig(params.key, params.nameOrNames, params.attributes, params.options) :
74
+ wrapResult(evaluateFallBackTreatment(params.nameOrNames || [], true));
92
75
  }
93
76
  function getTreatmentsByFlagSets(maybeKey, maybeFlagSets, maybeAttributes, maybeOptions) {
94
77
  var params = validateEvaluationParams(GET_TREATMENTS_BY_FLAG_SETS, maybeKey, maybeFlagSets, maybeAttributes, maybeOptions);
95
- if (params.valid) {
96
- return client.getTreatmentsByFlagSets(params.key, params.nameOrNames, params.attributes, params.options);
97
- }
98
- else {
99
- return wrapResult({});
100
- }
78
+ return params.valid ?
79
+ client.getTreatmentsByFlagSets(params.key, params.nameOrNames, params.attributes, params.options) :
80
+ wrapResult({});
101
81
  }
102
82
  function getTreatmentsWithConfigByFlagSets(maybeKey, maybeFlagSets, maybeAttributes, maybeOptions) {
103
83
  var params = validateEvaluationParams(GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SETS, maybeKey, maybeFlagSets, maybeAttributes, maybeOptions);
104
- if (params.valid) {
105
- return client.getTreatmentsWithConfigByFlagSets(params.key, params.nameOrNames, params.attributes, params.options);
106
- }
107
- else {
108
- return wrapResult({});
109
- }
84
+ return params.valid ?
85
+ client.getTreatmentsWithConfigByFlagSets(params.key, params.nameOrNames, params.attributes, params.options) :
86
+ wrapResult({});
110
87
  }
111
88
  function getTreatmentsByFlagSet(maybeKey, maybeFlagSet, maybeAttributes, maybeOptions) {
112
89
  var params = validateEvaluationParams(GET_TREATMENTS_BY_FLAG_SET, maybeKey, [maybeFlagSet], maybeAttributes, maybeOptions);
113
- if (params.valid) {
114
- return client.getTreatmentsByFlagSet(params.key, params.nameOrNames[0], params.attributes, params.options);
115
- }
116
- else {
117
- return wrapResult({});
118
- }
90
+ return params.valid ?
91
+ client.getTreatmentsByFlagSet(params.key, params.nameOrNames[0], params.attributes, params.options) :
92
+ wrapResult({});
119
93
  }
120
94
  function getTreatmentsWithConfigByFlagSet(maybeKey, maybeFlagSet, maybeAttributes, maybeOptions) {
121
95
  var params = validateEvaluationParams(GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SET, maybeKey, [maybeFlagSet], maybeAttributes, maybeOptions);
122
- if (params.valid) {
123
- return client.getTreatmentsWithConfigByFlagSet(params.key, params.nameOrNames[0], params.attributes, params.options);
124
- }
125
- else {
126
- return wrapResult({});
127
- }
96
+ return params.valid ?
97
+ client.getTreatmentsWithConfigByFlagSet(params.key, params.nameOrNames[0], params.attributes, params.options) :
98
+ wrapResult({});
128
99
  }
129
100
  function track(maybeKey, maybeTT, maybeEvent, maybeEventValue, maybeProperties) {
130
101
  var key = validateKey(log, maybeKey, TRACK_FN_LABEL);
@@ -133,12 +104,9 @@ export function clientInputValidationDecorator(settings, client, readinessManage
133
104
  var eventValue = validateEventValue(log, maybeEventValue, TRACK_FN_LABEL);
134
105
  var _a = validateEventProperties(log, maybeProperties, TRACK_FN_LABEL), properties = _a.properties, size = _a.size;
135
106
  var isNotDestroyed = validateIfNotDestroyed(log, readinessManager, TRACK_FN_LABEL);
136
- if (isNotDestroyed && key && tt && event && eventValue !== false && properties !== false) { // @ts-expect-error
137
- return client.track(key, tt, event, eventValue, properties, size);
138
- }
139
- else {
140
- return isAsync ? Promise.resolve(false) : false;
141
- }
107
+ return isNotDestroyed && key && tt && event && eventValue !== false && properties !== false ? // @ts-expect-error
108
+ client.track(key, tt, event, eventValue, properties, size) :
109
+ wrapResult(false);
142
110
  }
143
111
  return {
144
112
  getTreatment: getTreatment,
@@ -1,3 +1,3 @@
1
1
  export function buildInstanceId(key, trafficType) {
2
- return (key.matchingKey ? key.matchingKey : key) + "-" + (key.bucketingKey ? key.bucketingKey : key) + "-" + (trafficType ? trafficType : '');
2
+ return "".concat(key.matchingKey ? key.matchingKey : key, "-").concat(key.bucketingKey ? key.bucketingKey : key, "-").concat(trafficType ? trafficType : '');
3
3
  }
@@ -1,13 +1,14 @@
1
1
  import { objectAssign } from '../utils/lang/objectAssign';
2
- import { releaseApiKey } from '../utils/inputValidation/apiKey';
2
+ import { releaseApiKey, validateAndTrackApiKey } from '../utils/inputValidation/apiKey';
3
3
  import { clientFactory } from './client';
4
4
  import { clientInputValidationDecorator } from './clientInputValidation';
5
5
  var COOLDOWN_TIME_IN_MILLIS = 1000;
6
6
  /**
7
- * Creates an Sdk client, i.e., a base client with status and destroy interface
7
+ * Creates an Sdk client, i.e., a base client with status, init, flush and destroy interface
8
8
  */
9
9
  export function sdkClientFactory(params, isSharedClient) {
10
- var sdkReadinessManager = params.sdkReadinessManager, syncManager = params.syncManager, storage = params.storage, signalListener = params.signalListener, settings = params.settings, telemetryTracker = params.telemetryTracker, uniqueKeysTracker = params.uniqueKeysTracker;
10
+ var sdkReadinessManager = params.sdkReadinessManager, syncManager = params.syncManager, storage = params.storage, signalListener = params.signalListener, settings = params.settings, telemetryTracker = params.telemetryTracker, impressionsTracker = params.impressionsTracker;
11
+ var hasInit = false;
11
12
  var lastActionTime = 0;
12
13
  function __cooldown(func, time) {
13
14
  var now = Date.now();
@@ -16,7 +17,7 @@ export function sdkClientFactory(params, isSharedClient) {
16
17
  //check if the time elapsed is less than desired cooldown
17
18
  if (timeElapsed < time) {
18
19
  //if yes, return message with remaining time in seconds
19
- settings.log.warn("Flush cooldown, remaining time " + (time - timeElapsed) / 1000 + " seconds");
20
+ settings.log.warn("Flush cooldown, remaining time ".concat((time - timeElapsed) / 1000, " seconds"));
20
21
  return Promise.resolve();
21
22
  }
22
23
  else {
@@ -32,14 +33,25 @@ export function sdkClientFactory(params, isSharedClient) {
32
33
  // Proto-linkage of the readiness Event Emitter
33
34
  Object.create(sdkReadinessManager.sdkStatus),
34
35
  // Client API (getTreatment* & track methods)
35
- clientInputValidationDecorator(settings, clientFactory(params), sdkReadinessManager.readinessManager, params.fallbackTreatmentsCalculator),
36
- // Sdk destroy
37
- {
36
+ clientInputValidationDecorator(settings, clientFactory(params), sdkReadinessManager.readinessManager, params.fallbackTreatmentsCalculator), {
37
+ init: function () {
38
+ if (hasInit)
39
+ return;
40
+ hasInit = true;
41
+ if (!isSharedClient) {
42
+ validateAndTrackApiKey(settings.log, settings.core.authorizationKey);
43
+ sdkReadinessManager.readinessManager.init();
44
+ impressionsTracker.start();
45
+ syncManager && syncManager.start();
46
+ signalListener && signalListener.start();
47
+ }
48
+ },
38
49
  flush: function () {
39
50
  // @TODO define cooldown time
40
51
  return __cooldown(__flush, COOLDOWN_TIME_IN_MILLIS);
41
52
  },
42
53
  destroy: function () {
54
+ hasInit = false;
43
55
  // Mark the SDK as destroyed immediately
44
56
  sdkReadinessManager.readinessManager.destroy();
45
57
  // For main client, cleanup the SDK Key, listeners and scheduled jobs, and record stat before flushing data
@@ -47,7 +59,7 @@ export function sdkClientFactory(params, isSharedClient) {
47
59
  releaseApiKey(settings.core.authorizationKey);
48
60
  telemetryTracker.sessionLength();
49
61
  signalListener && signalListener.stop();
50
- uniqueKeysTracker.stop();
62
+ impressionsTracker.stop();
51
63
  }
52
64
  // Stop background jobs
53
65
  syncManager && syncManager.stop();
@@ -2,16 +2,10 @@ import { sdkReadinessManagerFactory } from '../readiness/sdkReadinessManager';
2
2
  import { impressionsTrackerFactory } from '../trackers/impressionsTracker';
3
3
  import { eventTrackerFactory } from '../trackers/eventTracker';
4
4
  import { telemetryTrackerFactory } from '../trackers/telemetryTracker';
5
- import { validateAndTrackApiKey } from '../utils/inputValidation/apiKey';
6
5
  import { createLoggerAPI } from '../logger/sdkLogger';
7
6
  import { NEW_FACTORY, RETRIEVE_MANAGER } from '../logger/constants';
8
7
  import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../readiness/constants';
9
8
  import { objectAssign } from '../utils/lang/objectAssign';
10
- import { strategyDebugFactory } from '../trackers/strategy/strategyDebug';
11
- import { strategyOptimizedFactory } from '../trackers/strategy/strategyOptimized';
12
- import { strategyNoneFactory } from '../trackers/strategy/strategyNone';
13
- import { uniqueKeysTrackerFactory } from '../trackers/uniqueKeysTracker';
14
- import { DEBUG, OPTIMIZED } from '../utils/constants';
15
9
  import { setRolloutPlan } from '../storages/setRolloutPlan';
16
10
  import { getMatching } from '../utils/key';
17
11
  import { FallbackTreatmentsCalculator } from '../evaluator/fallbackTreatmentsCalculator';
@@ -19,19 +13,10 @@ import { FallbackTreatmentsCalculator } from '../evaluator/fallbackTreatmentsCal
19
13
  * Modular SDK factory
20
14
  */
21
15
  export function sdkFactory(params) {
22
- var settings = params.settings, platform = params.platform, storageFactory = params.storageFactory, splitApiFactory = params.splitApiFactory, extraProps = params.extraProps, syncManagerFactory = params.syncManagerFactory, SignalListener = params.SignalListener, impressionsObserverFactory = params.impressionsObserverFactory, integrationsManagerFactory = params.integrationsManagerFactory, sdkManagerFactory = params.sdkManagerFactory, sdkClientMethodFactory = params.sdkClientMethodFactory, filterAdapterFactory = params.filterAdapterFactory, lazyInit = params.lazyInit;
23
- var log = settings.log, impressionsMode = settings.sync.impressionsMode, initialRolloutPlan = settings.initialRolloutPlan, key = settings.core.key;
16
+ var settings = params.settings, platform = params.platform, storageFactory = params.storageFactory, splitApiFactory = params.splitApiFactory, extraProps = params.extraProps, syncManagerFactory = params.syncManagerFactory, SignalListener = params.SignalListener, integrationsManagerFactory = params.integrationsManagerFactory, sdkManagerFactory = params.sdkManagerFactory, sdkClientMethodFactory = params.sdkClientMethodFactory, lazyInit = params.lazyInit;
17
+ var log = settings.log, initialRolloutPlan = settings.initialRolloutPlan, key = settings.core.key;
24
18
  // @TODO handle non-recoverable errors, such as, global `fetch` not available, invalid SDK Key, etc.
25
19
  // On non-recoverable errors, we should mark the SDK as destroyed and not start synchronization.
26
- // initialization
27
- var hasInit = false;
28
- var initCallbacks = [];
29
- function whenInit(cb) {
30
- if (hasInit)
31
- cb();
32
- else
33
- initCallbacks.push(cb);
34
- }
35
20
  var sdkReadinessManager = sdkReadinessManagerFactory(platform.EventEmitter, settings);
36
21
  var readiness = sdkReadinessManager.readinessManager;
37
22
  var storage = storageFactory({
@@ -49,7 +34,7 @@ export function sdkFactory(params) {
49
34
  readiness.splits.emit(SDK_SPLITS_CACHE_LOADED);
50
35
  }
51
36
  });
52
- var fallbackTreatmentsCalculator = new FallbackTreatmentsCalculator(settings.fallbackTreatments);
37
+ var fallbackTreatmentsCalculator = FallbackTreatmentsCalculator(settings.fallbackTreatments);
53
38
  if (initialRolloutPlan) {
54
39
  setRolloutPlan(log, initialRolloutPlan, storage, key && getMatching(key));
55
40
  if (storage.splits.getChangeNumber() > -1)
@@ -58,38 +43,21 @@ export function sdkFactory(params) {
58
43
  var clients = {};
59
44
  var telemetryTracker = telemetryTrackerFactory(storage.telemetry, platform.now);
60
45
  var integrationsManager = integrationsManagerFactory && integrationsManagerFactory({ settings: settings, storage: storage, telemetryTracker: telemetryTracker });
61
- var observer = impressionsObserverFactory();
62
- var uniqueKeysTracker = uniqueKeysTrackerFactory(log, storage.uniqueKeys, filterAdapterFactory && filterAdapterFactory());
63
- var noneStrategy = strategyNoneFactory(storage.impressionCounts, uniqueKeysTracker);
64
- var strategy = impressionsMode === OPTIMIZED ?
65
- strategyOptimizedFactory(observer, storage.impressionCounts) :
66
- impressionsMode === DEBUG ?
67
- strategyDebugFactory(observer) :
68
- noneStrategy;
69
- var impressionsTracker = impressionsTrackerFactory(settings, storage.impressions, noneStrategy, strategy, whenInit, integrationsManager, storage.telemetry);
70
- var eventTracker = eventTrackerFactory(settings, storage.events, whenInit, integrationsManager, storage.telemetry);
46
+ var impressionsTracker = impressionsTrackerFactory(params, storage, integrationsManager);
47
+ var eventTracker = eventTrackerFactory(settings, storage.events, integrationsManager, storage.telemetry);
71
48
  // splitApi is used by SyncManager and Browser signal listener
72
49
  var splitApi = splitApiFactory && splitApiFactory(settings, platform, telemetryTracker);
73
- var ctx = { clients: clients, splitApi: splitApi, eventTracker: eventTracker, impressionsTracker: impressionsTracker, telemetryTracker: telemetryTracker, uniqueKeysTracker: uniqueKeysTracker, sdkReadinessManager: sdkReadinessManager, readiness: readiness, settings: settings, storage: storage, platform: platform, fallbackTreatmentsCalculator: fallbackTreatmentsCalculator };
50
+ var ctx = { clients: clients, splitApi: splitApi, eventTracker: eventTracker, impressionsTracker: impressionsTracker, telemetryTracker: telemetryTracker, sdkReadinessManager: sdkReadinessManager, readiness: readiness, settings: settings, storage: storage, platform: platform, fallbackTreatmentsCalculator: fallbackTreatmentsCalculator };
74
51
  var syncManager = syncManagerFactory && syncManagerFactory(ctx);
75
52
  ctx.syncManager = syncManager;
53
+ // @TODO: move into platform, and call inside sdkClientFactory (if it's used only there)
76
54
  var signalListener = SignalListener && new SignalListener(syncManager, settings, storage, splitApi);
77
55
  ctx.signalListener = signalListener;
78
56
  // SDK client and manager
79
57
  var clientMethod = sdkClientMethodFactory(ctx);
80
58
  var managerInstance = sdkManagerFactory(settings, storage.splits, sdkReadinessManager);
81
59
  function init() {
82
- if (hasInit)
83
- return;
84
- hasInit = true;
85
- // We will just log and allow for the SDK to end up throwing an SDK_TIMEOUT event for devs to handle.
86
- validateAndTrackApiKey(log, settings.core.authorizationKey);
87
- readiness.init();
88
- uniqueKeysTracker.start();
89
- syncManager && syncManager.start();
90
- signalListener && signalListener.start();
91
- initCallbacks.forEach(function (cb) { return cb(); });
92
- initCallbacks.length = 0;
60
+ Object.keys(clients).map(function (key) { return clients[key].init(); });
93
61
  }
94
62
  log.info(NEW_FACTORY, [settings.version]);
95
63
  // @ts-ignore
@@ -105,7 +73,6 @@ export function sdkFactory(params) {
105
73
  Logger: createLoggerAPI(log),
106
74
  settings: settings,
107
75
  destroy: function () {
108
- hasInit = false;
109
76
  return Promise.all(Object.keys(clients).map(function (key) { return clients[key].destroy(); })).then(function () { });
110
77
  }
111
78
  }, extraProps && extraProps(ctx), lazyInit ? { init: init } : init());
@@ -21,15 +21,15 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
21
21
  return {
22
22
  // @TODO throw errors if health check requests fail, to log them in the Synchronizer
23
23
  getSdkAPIHealthCheck: function () {
24
- var url = urls.sdk + "/version";
24
+ var url = "".concat(urls.sdk, "/version");
25
25
  return splitHttpClient(url).then(function () { return true; }).catch(function () { return false; });
26
26
  },
27
27
  getEventsAPIHealthCheck: function () {
28
- var url = urls.events + "/version";
28
+ var url = "".concat(urls.events, "/version");
29
29
  return splitHttpClient(url).then(function () { return true; }).catch(function () { return false; });
30
30
  },
31
31
  fetchAuth: function (userMatchingKeys) {
32
- var url = urls.auth + "/v2/auth?s=" + settings.sync.flagSpecVersion;
32
+ var url = "".concat(urls.auth, "/v2/auth?s=").concat(settings.sync.flagSpecVersion);
33
33
  if (userMatchingKeys) { // `userMatchingKeys` is undefined in server-side
34
34
  var queryParams = userMatchingKeys.map(userKeyToQueryParam).join('&');
35
35
  if (queryParams)
@@ -38,7 +38,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
38
38
  return splitHttpClient(url, undefined, telemetryTracker.trackHttp(TOKEN));
39
39
  },
40
40
  fetchSplitChanges: function (since, noCache, till, rbSince) {
41
- var url = urls.sdk + "/splitChanges?s=" + settings.sync.flagSpecVersion + "&since=" + since + (rbSince ? '&rbSince=' + rbSince : '') + (filterQueryString || '') + (till ? '&till=' + till : '');
41
+ var url = "".concat(urls.sdk, "/splitChanges?s=").concat(settings.sync.flagSpecVersion, "&since=").concat(since).concat(rbSince ? '&rbSince=' + rbSince : '').concat(filterQueryString || '').concat(till ? '&till=' + till : '');
42
42
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SPLITS))
43
43
  .catch(function (err) {
44
44
  if (err.statusCode === 414)
@@ -47,7 +47,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
47
47
  });
48
48
  },
49
49
  fetchSegmentChanges: function (since, segmentName, noCache, till) {
50
- var url = urls.sdk + "/segmentChanges/" + segmentName + "?since=" + since + (till ? '&till=' + till : '');
50
+ var url = "".concat(urls.sdk, "/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
51
51
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
52
52
  },
53
53
  fetchMemberships: function (userMatchingKey, noCache, till) {
@@ -57,7 +57,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
57
57
  * - avoid 404 responses. E.g.: '/api/memberships/foo/bar'
58
58
  * - match user keys with special characters. E.g.: 'foo%bar', 'foo/bar'
59
59
  */
60
- var url = urls.sdk + "/memberships/" + encodeURIComponent(userMatchingKey) + (till ? '?till=' + till : '');
60
+ var url = "".concat(urls.sdk, "/memberships/").concat(encodeURIComponent(userMatchingKey)).concat(till ? '?till=' + till : '');
61
61
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MEMBERSHIPS));
62
62
  },
63
63
  /**
@@ -67,7 +67,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
67
67
  * @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
68
68
  */
69
69
  postEventsBulk: function (body, headers) {
70
- var url = urls.events + "/events/bulk";
70
+ var url = "".concat(urls.events, "/events/bulk");
71
71
  return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(EVENTS));
72
72
  },
73
73
  /**
@@ -77,7 +77,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
77
77
  * @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
78
78
  */
79
79
  postTestImpressionsBulk: function (body, headers) {
80
- var url = urls.events + "/testImpressions/bulk";
80
+ var url = "".concat(urls.events, "/testImpressions/bulk");
81
81
  return splitHttpClient(url, {
82
82
  // Adding extra headers to send impressions in OPTIMIZED or DEBUG modes.
83
83
  method: 'POST',
@@ -92,7 +92,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
92
92
  * @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
93
93
  */
94
94
  postTestImpressionsCount: function (body, headers) {
95
- var url = urls.events + "/testImpressions/count";
95
+ var url = "".concat(urls.events, "/testImpressions/count");
96
96
  return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(IMPRESSIONS_COUNT));
97
97
  },
98
98
  /**
@@ -102,7 +102,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
102
102
  * @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
103
103
  */
104
104
  postUniqueKeysBulkCs: function (body, headers) {
105
- var url = urls.telemetry + "/v1/keys/cs";
105
+ var url = "".concat(urls.telemetry, "/v1/keys/cs");
106
106
  return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY));
107
107
  },
108
108
  /**
@@ -112,15 +112,15 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
112
112
  * @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
113
113
  */
114
114
  postUniqueKeysBulkSs: function (body, headers) {
115
- var url = urls.telemetry + "/v1/keys/ss";
115
+ var url = "".concat(urls.telemetry, "/v1/keys/ss");
116
116
  return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY));
117
117
  },
118
118
  postMetricsConfig: function (body, headers) {
119
- var url = urls.telemetry + "/v1/metrics/config";
119
+ var url = "".concat(urls.telemetry, "/v1/metrics/config");
120
120
  return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY), true);
121
121
  },
122
122
  postMetricsUsage: function (body, headers) {
123
- var url = urls.telemetry + "/v1/metrics/usage";
123
+ var url = "".concat(urls.telemetry, "/v1/metrics/usage");
124
124
  return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY), true);
125
125
  }
126
126
  };
@@ -21,7 +21,7 @@ export function splitHttpClientFactory(settings, _a) {
21
21
  var commonHeaders = {
22
22
  'Accept': 'application/json',
23
23
  'Content-Type': 'application/json',
24
- 'Authorization': "Bearer " + authorizationKey,
24
+ 'Authorization': "Bearer ".concat(authorizationKey),
25
25
  'SplitSDKVersion': version
26
26
  };
27
27
  if (ip)
@@ -10,34 +10,34 @@ var KeyBuilder = /** @class */ (function () {
10
10
  this.prefix = prefix;
11
11
  }
12
12
  KeyBuilder.prototype.buildTrafficTypeKey = function (trafficType) {
13
- return this.prefix + ".trafficType." + trafficType;
13
+ return "".concat(this.prefix, ".trafficType.").concat(trafficType);
14
14
  };
15
15
  KeyBuilder.prototype.buildFlagSetKey = function (flagSet) {
16
- return this.prefix + ".flagSet." + flagSet;
16
+ return "".concat(this.prefix, ".flagSet.").concat(flagSet);
17
17
  };
18
18
  KeyBuilder.prototype.buildSplitKey = function (splitName) {
19
- return this.prefix + ".split." + splitName;
19
+ return "".concat(this.prefix, ".split.").concat(splitName);
20
20
  };
21
21
  KeyBuilder.prototype.buildSplitsTillKey = function () {
22
- return this.prefix + ".splits.till";
22
+ return "".concat(this.prefix, ".splits.till");
23
23
  };
24
24
  KeyBuilder.prototype.buildSplitKeyPrefix = function () {
25
- return this.prefix + ".split.";
25
+ return "".concat(this.prefix, ".split.");
26
26
  };
27
27
  KeyBuilder.prototype.buildRBSegmentKey = function (rbsegmentName) {
28
- return this.prefix + ".rbsegment." + rbsegmentName;
28
+ return "".concat(this.prefix, ".rbsegment.").concat(rbsegmentName);
29
29
  };
30
30
  KeyBuilder.prototype.buildRBSegmentsTillKey = function () {
31
- return this.prefix + ".rbsegments.till";
31
+ return "".concat(this.prefix, ".rbsegments.till");
32
32
  };
33
33
  KeyBuilder.prototype.buildRBSegmentKeyPrefix = function () {
34
- return this.prefix + ".rbsegment.";
34
+ return "".concat(this.prefix, ".rbsegment.");
35
35
  };
36
36
  KeyBuilder.prototype.buildSegmentNameKey = function (segmentName) {
37
- return this.prefix + ".segment." + segmentName;
37
+ return "".concat(this.prefix, ".segment.").concat(segmentName);
38
38
  };
39
39
  KeyBuilder.prototype.buildSegmentTillKey = function (segmentName) {
40
- return this.prefix + ".segment." + segmentName + ".till";
40
+ return "".concat(this.prefix, ".segment.").concat(segmentName, ".till");
41
41
  };
42
42
  KeyBuilder.prototype.extractKey = function (builtKey) {
43
43
  var s = builtKey.match(everythingAtTheEnd);
@@ -49,7 +49,7 @@ var KeyBuilder = /** @class */ (function () {
49
49
  }
50
50
  };
51
51
  KeyBuilder.prototype.buildHashKey = function () {
52
- return this.prefix + ".hash";
52
+ return "".concat(this.prefix, ".hash");
53
53
  };
54
54
  return KeyBuilder;
55
55
  }());
@@ -59,5 +59,5 @@ export { KeyBuilder };
59
59
  * The hash is in hexadecimal format (8 characters max, 32 bits).
60
60
  */
61
61
  export function getStorageHash(settings) {
62
- return hash(settings.core.authorizationKey + "::" + settings.sync.__splitFiltersValidation.queryString + "::" + settings.sync.flagSpecVersion).toString(16);
62
+ return hash("".concat(settings.core.authorizationKey, "::").concat(settings.sync.__splitFiltersValidation.queryString, "::").concat(settings.sync.flagSpecVersion)).toString(16);
63
63
  }
@@ -6,40 +6,40 @@ var KeyBuilderCS = /** @class */ (function (_super) {
6
6
  function KeyBuilderCS(prefix, matchingKey) {
7
7
  var _this = _super.call(this, prefix) || this;
8
8
  _this.matchingKey = matchingKey;
9
- _this.regexSplitsCacheKey = new RegExp("^" + prefix + "\\.(splits?|trafficType|flagSet)\\.");
9
+ _this.regexSplitsCacheKey = new RegExp("^".concat(prefix, "\\.(splits?|trafficType|flagSet)\\."));
10
10
  return _this;
11
11
  }
12
12
  /**
13
13
  * @override
14
14
  */
15
15
  KeyBuilderCS.prototype.buildSegmentNameKey = function (segmentName) {
16
- return this.prefix + "." + this.matchingKey + ".segment." + segmentName;
16
+ return "".concat(this.prefix, ".").concat(this.matchingKey, ".segment.").concat(segmentName);
17
17
  };
18
18
  KeyBuilderCS.prototype.extractSegmentName = function (builtSegmentKeyName) {
19
- var prefix = this.prefix + "." + this.matchingKey + ".segment.";
19
+ var prefix = "".concat(this.prefix, ".").concat(this.matchingKey, ".segment.");
20
20
  if (startsWith(builtSegmentKeyName, prefix))
21
21
  return builtSegmentKeyName.slice(prefix.length);
22
22
  };
23
23
  KeyBuilderCS.prototype.buildLastUpdatedKey = function () {
24
- return this.prefix + ".splits.lastUpdated";
24
+ return "".concat(this.prefix, ".splits.lastUpdated");
25
25
  };
26
26
  KeyBuilderCS.prototype.isSplitsCacheKey = function (key) {
27
27
  return this.regexSplitsCacheKey.test(key);
28
28
  };
29
29
  KeyBuilderCS.prototype.buildTillKey = function () {
30
- return this.prefix + "." + this.matchingKey + ".segments.till";
30
+ return "".concat(this.prefix, ".").concat(this.matchingKey, ".segments.till");
31
31
  };
32
32
  KeyBuilderCS.prototype.isSplitKey = function (key) {
33
- return startsWith(key, this.prefix + ".split.");
33
+ return startsWith(key, "".concat(this.prefix, ".split."));
34
34
  };
35
35
  KeyBuilderCS.prototype.isRBSegmentKey = function (key) {
36
- return startsWith(key, this.prefix + ".rbsegment.");
36
+ return startsWith(key, "".concat(this.prefix, ".rbsegment."));
37
37
  };
38
38
  KeyBuilderCS.prototype.buildSplitsWithSegmentCountKey = function () {
39
- return this.prefix + ".splits.usingSegments";
39
+ return "".concat(this.prefix, ".splits.usingSegments");
40
40
  };
41
41
  KeyBuilderCS.prototype.buildLastClear = function () {
42
- return this.prefix + ".lastClear";
42
+ return "".concat(this.prefix, ".lastClear");
43
43
  };
44
44
  return KeyBuilderCS;
45
45
  }(KeyBuilder));
@@ -47,15 +47,15 @@ export { KeyBuilderCS };
47
47
  export function myLargeSegmentsKeyBuilder(prefix, matchingKey) {
48
48
  return {
49
49
  buildSegmentNameKey: function (segmentName) {
50
- return prefix + "." + matchingKey + ".largeSegment." + segmentName;
50
+ return "".concat(prefix, ".").concat(matchingKey, ".largeSegment.").concat(segmentName);
51
51
  },
52
52
  extractSegmentName: function (builtSegmentKeyName) {
53
- var p = prefix + "." + matchingKey + ".largeSegment.";
53
+ var p = "".concat(prefix, ".").concat(matchingKey, ".largeSegment.");
54
54
  if (startsWith(builtSegmentKeyName, p))
55
55
  return builtSegmentKeyName.slice(p.length);
56
56
  },
57
57
  buildTillKey: function () {
58
- return prefix + "." + matchingKey + ".largeSegments.till";
58
+ return "".concat(prefix, ".").concat(matchingKey, ".largeSegments.till");
59
59
  }
60
60
  };
61
61
  }
@@ -15,42 +15,42 @@ var KeyBuilderSS = /** @class */ (function (_super) {
15
15
  __extends(KeyBuilderSS, _super);
16
16
  function KeyBuilderSS(prefix, metadata) {
17
17
  var _this = _super.call(this, prefix) || this;
18
- _this.latencyPrefix = _this.prefix + ".telemetry.latencies";
19
- _this.exceptionPrefix = _this.prefix + ".telemetry.exceptions";
20
- _this.initPrefix = _this.prefix + ".telemetry.init";
21
- _this.versionablePrefix = metadata.s + "/" + metadata.n + "/" + metadata.i;
18
+ _this.latencyPrefix = "".concat(_this.prefix, ".telemetry.latencies");
19
+ _this.exceptionPrefix = "".concat(_this.prefix, ".telemetry.exceptions");
20
+ _this.initPrefix = "".concat(_this.prefix, ".telemetry.init");
21
+ _this.versionablePrefix = "".concat(metadata.s, "/").concat(metadata.n, "/").concat(metadata.i);
22
22
  return _this;
23
23
  }
24
24
  KeyBuilderSS.prototype.buildRegisteredSegmentsKey = function () {
25
- return this.prefix + ".segments.registered";
25
+ return "".concat(this.prefix, ".segments.registered");
26
26
  };
27
27
  KeyBuilderSS.prototype.buildImpressionsKey = function () {
28
- return this.prefix + ".impressions";
28
+ return "".concat(this.prefix, ".impressions");
29
29
  };
30
30
  KeyBuilderSS.prototype.buildImpressionsCountKey = function () {
31
- return this.prefix + ".impressions.count";
31
+ return "".concat(this.prefix, ".impressions.count");
32
32
  };
33
33
  KeyBuilderSS.prototype.buildUniqueKeysKey = function () {
34
- return this.prefix + ".uniquekeys";
34
+ return "".concat(this.prefix, ".uniquekeys");
35
35
  };
36
36
  KeyBuilderSS.prototype.buildEventsKey = function () {
37
- return this.prefix + ".events";
37
+ return "".concat(this.prefix, ".events");
38
38
  };
39
39
  KeyBuilderSS.prototype.searchPatternForSplitKeys = function () {
40
- return this.buildSplitKeyPrefix() + "*";
40
+ return "".concat(this.buildSplitKeyPrefix(), "*");
41
41
  };
42
42
  KeyBuilderSS.prototype.searchPatternForRBSegmentKeys = function () {
43
- return this.buildRBSegmentKeyPrefix() + "*";
43
+ return "".concat(this.buildRBSegmentKeyPrefix(), "*");
44
44
  };
45
45
  /* Telemetry keys */
46
46
  KeyBuilderSS.prototype.buildLatencyKey = function (method, bucket) {
47
- return this.latencyPrefix + "::" + this.versionablePrefix + "/" + METHOD_NAMES[method] + "/" + bucket;
47
+ return "".concat(this.latencyPrefix, "::").concat(this.versionablePrefix, "/").concat(METHOD_NAMES[method], "/").concat(bucket);
48
48
  };
49
49
  KeyBuilderSS.prototype.buildExceptionKey = function (method) {
50
- return this.exceptionPrefix + "::" + this.versionablePrefix + "/" + METHOD_NAMES[method];
50
+ return "".concat(this.exceptionPrefix, "::").concat(this.versionablePrefix, "/").concat(METHOD_NAMES[method]);
51
51
  };
52
52
  KeyBuilderSS.prototype.buildInitKey = function () {
53
- return this.initPrefix + "::" + this.versionablePrefix;
53
+ return "".concat(this.initPrefix, "::").concat(this.versionablePrefix);
54
54
  };
55
55
  return KeyBuilderSS;
56
56
  }(KeyBuilder));
@@ -7,7 +7,7 @@ export function getRolloutPlan(log, storage, options) {
7
7
  if (options === void 0) { options = {}; }
8
8
  var keys = options.keys, exposeSegments = options.exposeSegments;
9
9
  var splits = storage.splits, segments = storage.segments, rbSegments = storage.rbSegments;
10
- log.debug("storage: get feature flags" + (keys ? ", and memberships for keys: " + keys : '') + (exposeSegments ? ', and segments' : ''));
10
+ log.debug("storage: get feature flags".concat(keys ? ", and memberships for keys: ".concat(keys) : '').concat(exposeSegments ? ', and segments' : ''));
11
11
  return {
12
12
  splitChanges: {
13
13
  ff: {