@ninetailed/experience.js 4.3.0-beta.3 → 5.0.0-beta.2

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/index.d.ts CHANGED
@@ -7,9 +7,5 @@ export * from './lib/experience';
7
7
  export * from './lib/plugins/selectPluginsHavingExperienceSelectionMiddleware';
8
8
  export * from './lib/plugins/selectPluginsHavingOnChangeEmitter';
9
9
  export * from './lib/types/interfaces/HasExperienceSelectionMiddleware';
10
- export * from './lib/types/interfaces/InterestedInSeenElements';
11
- export * from './lib/types/interfaces/InterestedInProfileChange';
12
- export * from './lib/types/interfaces/InterestedInHiddenPage';
13
- export * from './lib/types/interfaces/AcceptsCredentials';
14
10
  export * from './lib/utils/OnChangeEmitter';
15
11
  export type { Profile } from '@ninetailed/experience.js-shared';
package/index.js CHANGED
@@ -1,12 +1,10 @@
1
1
  import { FEATURES, logger, ConsoleLogSink, buildPageEvent, buildTrackEvent, buildIdentifyEvent, unionBy, NinetailedApiClient, OnLogLogSink, OnErrorLogSink, PageviewProperties, Properties, Traits, pipe } from '@ninetailed/experience.js-shared';
2
- export { EXPERIENCE_TRAIT_PREFIX, isExperienceMatch, selectActiveExperiments, selectDistribution, selectEligibleExperiences, selectExperience, selectBaselineWithVariants as selectExperienceBaselineWithVariants, selectVariant as selectExperienceVariant, selectVariants as selectExperienceVariants, selectHasVariants as selectHasExperienceVariants } from '@ninetailed/experience.js-shared';
2
+ export { EXPERIENCE_TRAIT_PREFIX, isExperienceMatch, selectActiveExperiments, selectDistribution, selectEligibleExperiences, selectExperience, selectBaselineWithVariants as selectExperienceBaselineWithVariants, selectVariantClientSide as selectExperienceVariantClientSide, selectVariants as selectExperienceVariants, selectHasVariants as selectHasExperienceVariants } from '@ninetailed/experience.js-shared';
3
3
  import Analytics from 'analytics';
4
4
  import { z } from 'zod';
5
5
 
6
6
  const HAS_SEEN_EXPERIENCE = 'has_seen_experience';
7
7
  const HAS_SEEN_COMPONENT = 'has_seen_component';
8
- const HAS_SEEN_ELEMENT = 'has_seen_element';
9
- const PAGE_HIDDEN = 'page_hidden';
10
8
 
11
9
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
12
10
 
@@ -604,9 +602,9 @@ var inspectSource$3 = store$1.inspectSource;
604
602
  var global$d = global$k;
605
603
  var isCallable$d = isCallable$k;
606
604
 
607
- var WeakMap$2 = global$d.WeakMap;
605
+ var WeakMap$1 = global$d.WeakMap;
608
606
 
609
- var weakMapBasicDetection = isCallable$d(WeakMap$2) && /native code/.test(String(WeakMap$2));
607
+ var weakMapBasicDetection = isCallable$d(WeakMap$1) && /native code/.test(String(WeakMap$1));
610
608
 
611
609
  var shared$1 = shared$3.exports;
612
610
  var uid = uid$2;
@@ -630,7 +628,7 @@ var hiddenKeys$3 = hiddenKeys$4;
630
628
 
631
629
  var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
632
630
  var TypeError$2 = global$c.TypeError;
633
- var WeakMap$1 = global$c.WeakMap;
631
+ var WeakMap = global$c.WeakMap;
634
632
  var set$1, get, has;
635
633
 
636
634
  var enforce = function (it) {
@@ -647,7 +645,7 @@ var getterFor = function (TYPE) {
647
645
  };
648
646
 
649
647
  if (NATIVE_WEAK_MAP || shared.state) {
650
- var store = shared.state || (shared.state = new WeakMap$1());
648
+ var store = shared.state || (shared.state = new WeakMap());
651
649
  /* eslint-disable no-self-assign -- prototype methods protection */
652
650
  store.get = store.get;
653
651
  store.has = store.has;
@@ -2519,18 +2517,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2519
2517
  PERFORMANCE OF THIS SOFTWARE.
2520
2518
  ***************************************************************************** */
2521
2519
 
2522
- function __rest(s, e) {
2523
- var t = {};
2524
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
2525
- t[p] = s[p];
2526
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
2527
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2528
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
2529
- t[p[i]] = s[p[i]];
2530
- }
2531
- return t;
2532
- }
2533
-
2534
2520
  function __awaiter(thisArg, _arguments, P, generator) {
2535
2521
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2536
2522
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -2586,6 +2572,7 @@ const LEGACY_ANONYMOUS_ID = '__anon_id';
2586
2572
  const ANONYMOUS_ID = '__nt_anonymous_id__';
2587
2573
  const DEBUG_FLAG = '__nt_debug__';
2588
2574
  const PROFILE_FALLBACK_CACHE = '__nt_profile__';
2575
+ const EXPERIENCES_FALLBACK_CACHE = '__nt_experiences__';
2589
2576
  const PROFILE_CHANGE = 'profile-change';
2590
2577
  const PROFILE_RESET = 'profile-reset';
2591
2578
  const CONSENT = '__nt-consent__';
@@ -2614,7 +2601,10 @@ const ninetailedPlugin = ({
2614
2601
  }
2615
2602
  try {
2616
2603
  const anonymousId = _instance.storage.getItem(ANONYMOUS_ID);
2617
- const profile = yield apiClient.upsertProfile({
2604
+ const {
2605
+ profile,
2606
+ experiences
2607
+ } = yield apiClient.upsertProfile({
2618
2608
  profileId: anonymousId,
2619
2609
  events
2620
2610
  }, {
@@ -2623,10 +2613,13 @@ const ninetailedPlugin = ({
2623
2613
  });
2624
2614
  _instance.storage.setItem(ANONYMOUS_ID, profile.id);
2625
2615
  _instance.storage.setItem(PROFILE_FALLBACK_CACHE, profile);
2616
+ _instance.storage.setItem(EXPERIENCES_FALLBACK_CACHE, experiences);
2626
2617
  logger.debug('Profile from api: ', profile);
2618
+ logger.debug('Experiences from api: ', experiences);
2627
2619
  _instance.dispatch({
2628
2620
  type: PROFILE_CHANGE,
2629
- profile
2621
+ profile,
2622
+ experiences
2630
2623
  });
2631
2624
  yield delay(20);
2632
2625
  return {
@@ -2635,27 +2628,27 @@ const ninetailedPlugin = ({
2635
2628
  } catch (error) {
2636
2629
  logger.debug('An error occurred during flushing the events: ', error);
2637
2630
  const fallbackProfile = _instance.storage.getItem(PROFILE_FALLBACK_CACHE);
2631
+ const fallbackExperiences = _instance.storage.getItem(EXPERIENCES_FALLBACK_CACHE) || [];
2638
2632
  if (fallbackProfile) {
2639
2633
  logger.debug('Found a fallback profile - will use this.');
2640
2634
  _instance.dispatch({
2641
2635
  type: PROFILE_CHANGE,
2642
- profile: fallbackProfile
2636
+ profile: fallbackProfile,
2637
+ experiences: fallbackExperiences
2643
2638
  });
2644
- return {
2645
- success: false
2646
- };
2647
2639
  } else {
2648
2640
  logger.debug('No fallback profile found - setting profile to null.');
2649
2641
  _instance.dispatch({
2650
2642
  type: PROFILE_CHANGE,
2651
2643
  // TODO is it a good idea to set the profile to null?
2652
2644
  profile: null,
2645
+ experiences: fallbackExperiences,
2653
2646
  error
2654
2647
  });
2655
- return {
2656
- success: false
2657
- };
2658
2648
  }
2649
+ return {
2650
+ success: false
2651
+ };
2659
2652
  }
2660
2653
  });
2661
2654
  const enqueueEvent = event => __awaiter(void 0, void 0, void 0, function* () {
@@ -2754,7 +2747,7 @@ const ninetailedPlugin = ({
2754
2747
  abort,
2755
2748
  payload
2756
2749
  }) => {
2757
- if (![ANONYMOUS_ID, DEBUG_FLAG, PROFILE_FALLBACK_CACHE, CONSENT].includes(payload.key)) {
2750
+ if (![ANONYMOUS_ID, DEBUG_FLAG, PROFILE_FALLBACK_CACHE, EXPERIENCES_FALLBACK_CACHE, CONSENT].includes(payload.key)) {
2758
2751
  return abort();
2759
2752
  }
2760
2753
  return payload;
@@ -2769,6 +2762,7 @@ const ninetailedPlugin = ({
2769
2762
  });
2770
2763
  instance.storage.removeItem(ANONYMOUS_ID);
2771
2764
  instance.storage.removeItem(PROFILE_FALLBACK_CACHE);
2765
+ instance.storage.removeItem(EXPERIENCES_FALLBACK_CACHE);
2772
2766
  logger.debug('Removed old profile data from localstorage.');
2773
2767
  yield ninetailed.track('nt_reset');
2774
2768
  logger.info('Profile reset successful.');
@@ -2849,115 +2843,6 @@ if (NOT_GENERIC || INCORRECT_NAME) {
2849
2843
  }, { unsafe: true });
2850
2844
  }
2851
2845
 
2852
- var classof = classofRaw$2;
2853
-
2854
- // `IsArray` abstract operation
2855
- // https://tc39.es/ecma262/#sec-isarray
2856
- // eslint-disable-next-line es/no-array-isarray -- safe
2857
- var isArray$2 = Array.isArray || function isArray(argument) {
2858
- return classof(argument) == 'Array';
2859
- };
2860
-
2861
- var $TypeError$1 = TypeError;
2862
- var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991
2863
-
2864
- var doesNotExceedSafeInteger$1 = function (it) {
2865
- if (it > MAX_SAFE_INTEGER) throw $TypeError$1('Maximum allowed index exceeded');
2866
- return it;
2867
- };
2868
-
2869
- var isArray$1 = isArray$2;
2870
- var lengthOfArrayLike$2 = lengthOfArrayLike$5;
2871
- var doesNotExceedSafeInteger = doesNotExceedSafeInteger$1;
2872
- var bind = functionBindContext;
2873
-
2874
- // `FlattenIntoArray` abstract operation
2875
- // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
2876
- var flattenIntoArray$1 = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {
2877
- var targetIndex = start;
2878
- var sourceIndex = 0;
2879
- var mapFn = mapper ? bind(mapper, thisArg) : false;
2880
- var element, elementLen;
2881
-
2882
- while (sourceIndex < sourceLen) {
2883
- if (sourceIndex in source) {
2884
- element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
2885
-
2886
- if (depth > 0 && isArray$1(element)) {
2887
- elementLen = lengthOfArrayLike$2(element);
2888
- targetIndex = flattenIntoArray$1(target, original, element, elementLen, targetIndex, depth - 1) - 1;
2889
- } else {
2890
- doesNotExceedSafeInteger(targetIndex + 1);
2891
- target[targetIndex] = element;
2892
- }
2893
-
2894
- targetIndex++;
2895
- }
2896
- sourceIndex++;
2897
- }
2898
- return targetIndex;
2899
- };
2900
-
2901
- var flattenIntoArray_1 = flattenIntoArray$1;
2902
-
2903
- var isArray = isArray$2;
2904
- var isConstructor = isConstructor$2;
2905
- var isObject$1 = isObject$a;
2906
- var wellKnownSymbol$3 = wellKnownSymbol$h;
2907
-
2908
- var SPECIES = wellKnownSymbol$3('species');
2909
- var $Array = Array;
2910
-
2911
- // a part of `ArraySpeciesCreate` abstract operation
2912
- // https://tc39.es/ecma262/#sec-arrayspeciescreate
2913
- var arraySpeciesConstructor$1 = function (originalArray) {
2914
- var C;
2915
- if (isArray(originalArray)) {
2916
- C = originalArray.constructor;
2917
- // cross-realm fallback
2918
- if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;
2919
- else if (isObject$1(C)) {
2920
- C = C[SPECIES];
2921
- if (C === null) C = undefined;
2922
- }
2923
- } return C === undefined ? $Array : C;
2924
- };
2925
-
2926
- var arraySpeciesConstructor = arraySpeciesConstructor$1;
2927
-
2928
- // `ArraySpeciesCreate` abstract operation
2929
- // https://tc39.es/ecma262/#sec-arrayspeciescreate
2930
- var arraySpeciesCreate$1 = function (originalArray, length) {
2931
- return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
2932
- };
2933
-
2934
- var $$3 = _export;
2935
- var flattenIntoArray = flattenIntoArray_1;
2936
- var toObject$2 = toObject$5;
2937
- var lengthOfArrayLike$1 = lengthOfArrayLike$5;
2938
- var toIntegerOrInfinity = toIntegerOrInfinity$3;
2939
- var arraySpeciesCreate = arraySpeciesCreate$1;
2940
-
2941
- // `Array.prototype.flat` method
2942
- // https://tc39.es/ecma262/#sec-array.prototype.flat
2943
- $$3({ target: 'Array', proto: true }, {
2944
- flat: function flat(/* depthArg = 1 */) {
2945
- var depthArg = arguments.length ? arguments[0] : undefined;
2946
- var O = toObject$2(this);
2947
- var sourceLen = lengthOfArrayLike$1(O);
2948
- var A = arraySpeciesCreate(O, 0);
2949
- A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));
2950
- return A;
2951
- }
2952
- });
2953
-
2954
- // this method was added to unscopables after implementation
2955
- // in popular engines, so it's moved to a separate module
2956
- var addToUnscopables$1 = addToUnscopables$3;
2957
-
2958
- // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
2959
- addToUnscopables$1('flat');
2960
-
2961
2846
  var fails$3 = fails$h;
2962
2847
 
2963
2848
  var correctPrototypeGetter = !fails$3(function () {
@@ -2969,7 +2854,7 @@ var correctPrototypeGetter = !fails$3(function () {
2969
2854
 
2970
2855
  var hasOwn = hasOwnProperty_1;
2971
2856
  var isCallable$2 = isCallable$k;
2972
- var toObject$1 = toObject$5;
2857
+ var toObject$2 = toObject$5;
2973
2858
  var sharedKey = sharedKey$3;
2974
2859
  var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter;
2975
2860
 
@@ -2981,7 +2866,7 @@ var ObjectPrototype = $Object.prototype;
2981
2866
  // https://tc39.es/ecma262/#sec-object.getprototypeof
2982
2867
  // eslint-disable-next-line es/no-object-getprototypeof -- safe
2983
2868
  var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {
2984
- var object = toObject$1(O);
2869
+ var object = toObject$2(O);
2985
2870
  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
2986
2871
  var constructor = object.constructor;
2987
2872
  if (isCallable$2(constructor) && object instanceof constructor) {
@@ -2991,12 +2876,12 @@ var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : f
2991
2876
 
2992
2877
  var fails$2 = fails$h;
2993
2878
  var isCallable$1 = isCallable$k;
2994
- var isObject = isObject$a;
2879
+ var isObject$1 = isObject$a;
2995
2880
  var getPrototypeOf$1 = objectGetPrototypeOf;
2996
2881
  var defineBuiltIn$1 = defineBuiltIn$6;
2997
- var wellKnownSymbol$2 = wellKnownSymbol$h;
2882
+ var wellKnownSymbol$3 = wellKnownSymbol$h;
2998
2883
 
2999
- var ITERATOR$3 = wellKnownSymbol$2('iterator');
2884
+ var ITERATOR$3 = wellKnownSymbol$3('iterator');
3000
2885
  var BUGGY_SAFARI_ITERATORS$1 = false;
3001
2886
 
3002
2887
  // `%IteratorPrototype%` object
@@ -3014,7 +2899,7 @@ if ([].keys) {
3014
2899
  }
3015
2900
  }
3016
2901
 
3017
- var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype$2) || fails$2(function () {
2902
+ var NEW_ITERATOR_PROTOTYPE = !isObject$1(IteratorPrototype$2) || fails$2(function () {
3018
2903
  var test = {};
3019
2904
  // FF44- legacy iterators case
3020
2905
  return IteratorPrototype$2[ITERATOR$3].call(test) !== test;
@@ -3051,7 +2936,7 @@ var iteratorCreateConstructor = function (IteratorConstructor, NAME, next, ENUME
3051
2936
  return IteratorConstructor;
3052
2937
  };
3053
2938
 
3054
- var $$2 = _export;
2939
+ var $$3 = _export;
3055
2940
  var call = functionCall;
3056
2941
  var FunctionName = functionName;
3057
2942
  var isCallable = isCallable$k;
@@ -3061,7 +2946,7 @@ var setPrototypeOf = objectSetPrototypeOf;
3061
2946
  var setToStringTag = setToStringTag$3;
3062
2947
  var createNonEnumerableProperty$1 = createNonEnumerableProperty$4;
3063
2948
  var defineBuiltIn = defineBuiltIn$6;
3064
- var wellKnownSymbol$1 = wellKnownSymbol$h;
2949
+ var wellKnownSymbol$2 = wellKnownSymbol$h;
3065
2950
  var Iterators$1 = iterators;
3066
2951
  var IteratorsCore = iteratorsCore;
3067
2952
 
@@ -3069,7 +2954,7 @@ var PROPER_FUNCTION_NAME = FunctionName.PROPER;
3069
2954
  var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
3070
2955
  var IteratorPrototype = IteratorsCore.IteratorPrototype;
3071
2956
  var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
3072
- var ITERATOR$2 = wellKnownSymbol$1('iterator');
2957
+ var ITERATOR$2 = wellKnownSymbol$2('iterator');
3073
2958
  var KEYS = 'keys';
3074
2959
  var VALUES = 'values';
3075
2960
  var ENTRIES = 'entries';
@@ -3136,7 +3021,7 @@ var iteratorDefine = function (Iterable, NAME, IteratorConstructor, next, DEFAUL
3136
3021
  if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
3137
3022
  defineBuiltIn(IterablePrototype, KEY, methods[KEY]);
3138
3023
  }
3139
- } else $$2({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
3024
+ } else $$3({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
3140
3025
  }
3141
3026
 
3142
3027
  // define iterator
@@ -3155,7 +3040,7 @@ var createIterResultObject$1 = function (value, done) {
3155
3040
  };
3156
3041
 
3157
3042
  var toIndexedObject = toIndexedObject$5;
3158
- var addToUnscopables = addToUnscopables$3;
3043
+ var addToUnscopables$1 = addToUnscopables$3;
3159
3044
  var Iterators = iterators;
3160
3045
  var InternalStateModule = internalState;
3161
3046
  var defineProperty = objectDefineProperty.f;
@@ -3206,9 +3091,9 @@ var es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind)
3206
3091
  var values = Iterators.Arguments = Iterators.Array;
3207
3092
 
3208
3093
  // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
3209
- addToUnscopables('keys');
3210
- addToUnscopables('values');
3211
- addToUnscopables('entries');
3094
+ addToUnscopables$1('keys');
3095
+ addToUnscopables$1('values');
3096
+ addToUnscopables$1('entries');
3212
3097
 
3213
3098
  // V8 ~ Chrome 45- bug
3214
3099
  if (DESCRIPTORS && values.name !== 'values') try {
@@ -3264,10 +3149,10 @@ var DOMIterables = domIterables;
3264
3149
  var DOMTokenListPrototype = domTokenListPrototype;
3265
3150
  var ArrayIteratorMethods = es_array_iterator;
3266
3151
  var createNonEnumerableProperty = createNonEnumerableProperty$4;
3267
- var wellKnownSymbol = wellKnownSymbol$h;
3152
+ var wellKnownSymbol$1 = wellKnownSymbol$h;
3268
3153
 
3269
- var ITERATOR$1 = wellKnownSymbol('iterator');
3270
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
3154
+ var ITERATOR$1 = wellKnownSymbol$1('iterator');
3155
+ var TO_STRING_TAG = wellKnownSymbol$1('toStringTag');
3271
3156
  var ArrayValues = ArrayIteratorMethods.values;
3272
3157
 
3273
3158
  var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {
@@ -3298,59 +3183,119 @@ for (var COLLECTION_NAME in DOMIterables) {
3298
3183
 
3299
3184
  handlePrototype(DOMTokenListPrototype, 'DOMTokenList');
3300
3185
 
3301
- class ElementSeenObserver {
3302
- constructor(_options) {
3303
- this._options = _options;
3304
- this._elementDelays = new WeakMap();
3305
- this._intersectionTimers = new WeakMap();
3306
- if (typeof IntersectionObserver !== 'undefined') {
3307
- this._intersectionObserver = new IntersectionObserver(this.onIntersection.bind(this));
3308
- }
3309
- }
3310
- onIntersection(entries) {
3311
- entries.forEach(entry => {
3312
- const {
3313
- isIntersecting,
3314
- target
3315
- } = entry;
3316
- if (isIntersecting) {
3317
- const delay = this._elementDelays.get(target);
3318
- const timeOut = window.setTimeout(() => {
3319
- this._options.onElementSeen(target);
3320
- }, delay);
3321
- this._intersectionTimers.set(target, timeOut);
3186
+ var classof = classofRaw$2;
3187
+
3188
+ // `IsArray` abstract operation
3189
+ // https://tc39.es/ecma262/#sec-isarray
3190
+ // eslint-disable-next-line es/no-array-isarray -- safe
3191
+ var isArray$2 = Array.isArray || function isArray(argument) {
3192
+ return classof(argument) == 'Array';
3193
+ };
3194
+
3195
+ var $TypeError$1 = TypeError;
3196
+ var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991
3197
+
3198
+ var doesNotExceedSafeInteger$1 = function (it) {
3199
+ if (it > MAX_SAFE_INTEGER) throw $TypeError$1('Maximum allowed index exceeded');
3200
+ return it;
3201
+ };
3202
+
3203
+ var isArray$1 = isArray$2;
3204
+ var lengthOfArrayLike$2 = lengthOfArrayLike$5;
3205
+ var doesNotExceedSafeInteger = doesNotExceedSafeInteger$1;
3206
+ var bind = functionBindContext;
3207
+
3208
+ // `FlattenIntoArray` abstract operation
3209
+ // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
3210
+ var flattenIntoArray$1 = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {
3211
+ var targetIndex = start;
3212
+ var sourceIndex = 0;
3213
+ var mapFn = mapper ? bind(mapper, thisArg) : false;
3214
+ var element, elementLen;
3215
+
3216
+ while (sourceIndex < sourceLen) {
3217
+ if (sourceIndex in source) {
3218
+ element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
3219
+
3220
+ if (depth > 0 && isArray$1(element)) {
3221
+ elementLen = lengthOfArrayLike$2(element);
3222
+ targetIndex = flattenIntoArray$1(target, original, element, elementLen, targetIndex, depth - 1) - 1;
3322
3223
  } else {
3323
- const timeOut = this._intersectionTimers.get(target);
3324
- if (typeof timeOut !== 'undefined') {
3325
- window.clearTimeout(timeOut);
3326
- }
3224
+ doesNotExceedSafeInteger(targetIndex + 1);
3225
+ target[targetIndex] = element;
3327
3226
  }
3328
- });
3329
- }
3330
- observe(element, options) {
3331
- var _a, _b;
3332
- this._elementDelays.set(element, (_a = options === null || options === void 0 ? void 0 : options.delay) !== null && _a !== void 0 ? _a : 2000);
3333
- (_b = this._intersectionObserver) === null || _b === void 0 ? void 0 : _b.observe(element);
3334
- }
3335
- unobserve(element) {
3336
- var _a;
3337
- (_a = this._intersectionObserver) === null || _a === void 0 ? void 0 : _a.unobserve(element);
3227
+
3228
+ targetIndex++;
3229
+ }
3230
+ sourceIndex++;
3338
3231
  }
3339
- }
3232
+ return targetIndex;
3233
+ };
3234
+
3235
+ var flattenIntoArray_1 = flattenIntoArray$1;
3236
+
3237
+ var isArray = isArray$2;
3238
+ var isConstructor = isConstructor$2;
3239
+ var isObject = isObject$a;
3240
+ var wellKnownSymbol = wellKnownSymbol$h;
3241
+
3242
+ var SPECIES = wellKnownSymbol('species');
3243
+ var $Array = Array;
3340
3244
 
3341
- const acceptsCredentials = plugin => {
3342
- return typeof plugin === 'object' && plugin !== null && 'setCredentials' in plugin && typeof plugin.setCredentials === 'function';
3245
+ // a part of `ArraySpeciesCreate` abstract operation
3246
+ // https://tc39.es/ecma262/#sec-arrayspeciescreate
3247
+ var arraySpeciesConstructor$1 = function (originalArray) {
3248
+ var C;
3249
+ if (isArray(originalArray)) {
3250
+ C = originalArray.constructor;
3251
+ // cross-realm fallback
3252
+ if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;
3253
+ else if (isObject(C)) {
3254
+ C = C[SPECIES];
3255
+ if (C === null) C = undefined;
3256
+ }
3257
+ } return C === undefined ? $Array : C;
3343
3258
  };
3344
3259
 
3345
- const isInterestedInHiddenPage = arg => {
3346
- return typeof arg === 'object' && arg !== null && PAGE_HIDDEN in arg && typeof arg[PAGE_HIDDEN] === 'function';
3260
+ var arraySpeciesConstructor = arraySpeciesConstructor$1;
3261
+
3262
+ // `ArraySpeciesCreate` abstract operation
3263
+ // https://tc39.es/ecma262/#sec-arrayspeciescreate
3264
+ var arraySpeciesCreate$1 = function (originalArray, length) {
3265
+ return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
3347
3266
  };
3348
3267
 
3268
+ var $$2 = _export;
3269
+ var flattenIntoArray = flattenIntoArray_1;
3270
+ var toObject$1 = toObject$5;
3271
+ var lengthOfArrayLike$1 = lengthOfArrayLike$5;
3272
+ var toIntegerOrInfinity = toIntegerOrInfinity$3;
3273
+ var arraySpeciesCreate = arraySpeciesCreate$1;
3274
+
3275
+ // `Array.prototype.flat` method
3276
+ // https://tc39.es/ecma262/#sec-array.prototype.flat
3277
+ $$2({ target: 'Array', proto: true }, {
3278
+ flat: function flat(/* depthArg = 1 */) {
3279
+ var depthArg = arguments.length ? arguments[0] : undefined;
3280
+ var O = toObject$1(this);
3281
+ var sourceLen = lengthOfArrayLike$1(O);
3282
+ var A = arraySpeciesCreate(O, 0);
3283
+ A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));
3284
+ return A;
3285
+ }
3286
+ });
3287
+
3288
+ // this method was added to unscopables after implementation
3289
+ // in popular engines, so it's moved to a separate module
3290
+ var addToUnscopables = addToUnscopables$3;
3291
+
3292
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
3293
+ addToUnscopables('flat');
3294
+
3349
3295
  class Ninetailed {
3350
3296
  constructor(ninetailedApiClientInstanceOrOptions, {
3351
3297
  plugins,
3352
3298
  url,
3353
- profile,
3354
3299
  locale,
3355
3300
  requestTimeout,
3356
3301
  onLog,
@@ -3401,28 +3346,6 @@ class Ninetailed {
3401
3346
  type: HAS_SEEN_EXPERIENCE
3402
3347
  }));
3403
3348
  };
3404
- this.observeElement = (payload, options) => {
3405
- const {
3406
- element
3407
- } = payload,
3408
- remaingPayload = __rest(payload, ["element"]);
3409
- this.observedElements.set(element, remaingPayload);
3410
- this.elementSeenObserver.observe(element, options);
3411
- };
3412
- this.unobserveElement = element => {
3413
- this.observedElements.delete(element);
3414
- this.elementSeenObserver.unobserve(element);
3415
- };
3416
- this.onElementSeen = element => {
3417
- const payload = this.observedElements.get(element);
3418
- if (typeof payload !== 'undefined') {
3419
- this.instance.dispatch(Object.assign(Object.assign({
3420
- element
3421
- }, payload), {
3422
- type: HAS_SEEN_ELEMENT
3423
- }));
3424
- }
3425
- };
3426
3349
  this.identify = (uid, traits, options) => __awaiter(this, void 0, void 0, function* () {
3427
3350
  try {
3428
3351
  const result = Traits.default({}).safeParse(traits);
@@ -3461,12 +3384,14 @@ class Ninetailed {
3461
3384
  cb(Object.assign(Object.assign({}, this._profileState), {
3462
3385
  status: 'error',
3463
3386
  profile: payload.profile,
3387
+ experiences: payload.experiences,
3464
3388
  error: payload.error
3465
3389
  }));
3466
3390
  } else {
3467
3391
  cb(Object.assign(Object.assign({}, this._profileState), {
3468
3392
  status: 'success',
3469
3393
  profile: payload.profile,
3394
+ experiences: payload.experiences,
3470
3395
  error: null
3471
3396
  }));
3472
3397
  }
@@ -3490,18 +3415,6 @@ class Ninetailed {
3490
3415
  this.onIsInitialized(resolve);
3491
3416
  });
3492
3417
  };
3493
- this.onVisibilityChange = () => {
3494
- if (typeof document === 'undefined') {
3495
- return;
3496
- }
3497
- document.addEventListener('visibilitychange', () => {
3498
- if (document.visibilityState === 'hidden') {
3499
- this.instance.dispatch({
3500
- type: PAGE_HIDDEN
3501
- });
3502
- }
3503
- });
3504
- };
3505
3418
  if (ninetailedApiClientInstanceOrOptions instanceof NinetailedApiClient) {
3506
3419
  this.apiClient = ninetailedApiClientInstanceOrOptions;
3507
3420
  } else {
@@ -3519,30 +3432,22 @@ class Ninetailed {
3519
3432
  preview
3520
3433
  });
3521
3434
  }
3522
- this.plugins = (plugins !== null && plugins !== void 0 ? plugins : []).flat();
3523
- this.plugins.forEach(plugin => {
3524
- if (acceptsCredentials(plugin) && this.clientId && this.environment) {
3525
- plugin.setCredentials({
3435
+ this.plugins = [...(plugins || []).map(plugin => {
3436
+ if ('setCredentials' in plugin && typeof plugin['setCredentials'] === 'function') {
3437
+ plugin['setCredentials']({
3526
3438
  clientId: this.clientId,
3527
3439
  environment: this.environment
3528
3440
  });
3529
3441
  }
3530
- });
3531
- if (profile) {
3532
- this._profileState = {
3533
- status: 'success',
3534
- profile,
3535
- error: null,
3536
- from: 'hydrated'
3537
- };
3538
- } else {
3539
- this._profileState = {
3540
- status: 'loading',
3541
- profile: null,
3542
- error: null,
3543
- from: 'api'
3544
- };
3545
- }
3442
+ return plugin;
3443
+ }).flat()];
3444
+ this._profileState = {
3445
+ status: 'loading',
3446
+ profile: null,
3447
+ experiences: null,
3448
+ error: null,
3449
+ from: 'api'
3450
+ };
3546
3451
  if (typeof onLog === 'function') {
3547
3452
  logger.addSink(new OnLogLogSink(onLog));
3548
3453
  }
@@ -3552,7 +3457,6 @@ class Ninetailed {
3552
3457
  this.logger = logger;
3553
3458
  this.eventQueue = ninetailedPlugin({
3554
3459
  apiClient: this.apiClient,
3555
- profile,
3556
3460
  locale,
3557
3461
  requestTimeout,
3558
3462
  ninetailed: this
@@ -3571,18 +3475,11 @@ class Ninetailed {
3571
3475
  this._profileState = profileState;
3572
3476
  if (typeof window !== 'undefined') {
3573
3477
  window.ninetailed = Object.assign({}, window.ninetailed, {
3574
- profile: this.profileState.profile
3478
+ profile: this.profileState.profile,
3479
+ experiences: this.profileState.experiences
3575
3480
  });
3576
3481
  }
3577
3482
  });
3578
- this.observedElements = new WeakMap();
3579
- this.elementSeenObserver = new ElementSeenObserver({
3580
- onElementSeen: this.onElementSeen.bind(this)
3581
- });
3582
- const hasPluginsInterestedInHiddenPage = this.plugins.some(isInterestedInHiddenPage);
3583
- if (hasPluginsInterestedInHiddenPage) {
3584
- this.onVisibilityChange();
3585
- }
3586
3483
  this.registerWindowHandlers();
3587
3484
  }
3588
3485
  get profileState() {
@@ -3981,4 +3878,4 @@ const makeExperienceSelectMiddleware = ({
3981
3878
  };
3982
3879
  };
3983
3880
 
3984
- export { ANONYMOUS_ID, CONSENT, DEBUG_FLAG, EMPTY_MERGE_ID, HAS_SEEN_COMPONENT, HAS_SEEN_ELEMENT, HAS_SEEN_EXPERIENCE, LEGACY_ANONYMOUS_ID, Ninetailed, NinetailedPlugin, OnChangeEmitter, PAGE_HIDDEN, PLUGIN_NAME, PROFILE_CHANGE, PROFILE_FALLBACK_CACHE, PROFILE_RESET, SET_ENABLED_FEATURES, TrackComponentProperties, TrackExperienceProperties, buildClientNinetailedRequestContext, decodeExperienceVariantsMap, makeExperienceSelectMiddleware, ninetailedPlugin, selectPluginsHavingExperienceSelectionMiddleware, selectPluginsHavingOnChangeEmitter, selectVariant };
3881
+ export { ANONYMOUS_ID, CONSENT, DEBUG_FLAG, EMPTY_MERGE_ID, EXPERIENCES_FALLBACK_CACHE, HAS_SEEN_COMPONENT, HAS_SEEN_EXPERIENCE, LEGACY_ANONYMOUS_ID, Ninetailed, NinetailedPlugin, OnChangeEmitter, PLUGIN_NAME, PROFILE_CHANGE, PROFILE_FALLBACK_CACHE, PROFILE_RESET, SET_ENABLED_FEATURES, TrackComponentProperties, TrackExperienceProperties, decodeExperienceVariantsMap, makeExperienceSelectMiddleware, ninetailedPlugin, selectPluginsHavingExperienceSelectionMiddleware, selectPluginsHavingOnChangeEmitter, selectVariant };