@mparticle/web-sdk 2.17.4 → 2.18.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.
package/dist/mparticle.js CHANGED
@@ -708,6 +708,10 @@ var mParticle = (function () {
708
708
  var ApplicationTransitionType$1 = {
709
709
  AppInit: 1
710
710
  };
711
+ var Environment = {
712
+ Production: 'production',
713
+ Development: 'development'
714
+ };
711
715
  var Types = {
712
716
  MessageType: MessageType$1,
713
717
  EventType: EventType,
@@ -717,10 +721,11 @@ var mParticle = (function () {
717
721
  ApplicationTransitionType: ApplicationTransitionType$1,
718
722
  ProductActionType: ProductActionType,
719
723
  PromotionActionType: PromotionActionType,
720
- TriggerUploadType: TriggerUploadType
724
+ TriggerUploadType: TriggerUploadType,
725
+ Environment: Environment
721
726
  };
722
727
 
723
- var version = "2.17.4";
728
+ var version = "2.18.1";
724
729
 
725
730
  var Constants = {
726
731
  sdkVersion: version,
@@ -1930,6 +1935,173 @@ var mParticle = (function () {
1930
1935
  }
1931
1936
  }
1932
1937
 
1938
+ var slugify$1 = {exports: {}};
1939
+
1940
+ (function (module, exports) {
1941
+ (function (name, root, factory) {
1942
+ {
1943
+ module.exports = factory();
1944
+ module.exports['default'] = factory();
1945
+ }
1946
+ }('slugify', commonjsGlobal, function () {
1947
+ var charMap = JSON.parse('{"$":"dollar","%":"percent","&":"and","<":"less",">":"greater","|":"or","¢":"cent","£":"pound","¤":"currency","¥":"yen","©":"(c)","ª":"a","®":"(r)","º":"o","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","þ":"th","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"DJ","đ":"dj","Ē":"E","ē":"e","Ė":"E","ė":"e","Ę":"e","ę":"e","Ě":"E","ě":"e","Ğ":"G","ğ":"g","Ģ":"G","ģ":"g","Ĩ":"I","ĩ":"i","Ī":"i","ī":"i","Į":"I","į":"i","İ":"I","ı":"i","Ķ":"k","ķ":"k","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ł":"L","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","Ō":"O","ō":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ũ":"U","ũ":"u","Ū":"u","ū":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","Ə":"E","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Lj":"LJ","lj":"lj","Nj":"NJ","nj":"nj","Ș":"S","ș":"s","Ț":"T","ț":"t","ə":"e","˚":"o","Ά":"A","Έ":"E","Ή":"H","Ί":"I","Ό":"O","Ύ":"Y","Ώ":"W","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"H","Θ":"8","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"3","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"W","Ϊ":"I","Ϋ":"Y","ά":"a","έ":"e","ή":"h","ί":"i","ΰ":"y","α":"a","β":"b","γ":"g","δ":"d","ε":"e","ζ":"z","η":"h","θ":"8","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"3","ο":"o","π":"p","ρ":"r","ς":"s","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"w","ϊ":"i","ϋ":"y","ό":"o","ύ":"y","ώ":"w","Ё":"Yo","Ђ":"DJ","Є":"Ye","І":"I","Ї":"Yi","Ј":"J","Љ":"LJ","Њ":"NJ","Ћ":"C","Џ":"DZ","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ж":"Zh","З":"Z","И":"I","Й":"J","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"H","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"U","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya","а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ж":"zh","з":"z","и":"i","й":"j","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"u","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","ё":"yo","ђ":"dj","є":"ye","і":"i","ї":"yi","ј":"j","љ":"lj","њ":"nj","ћ":"c","ѝ":"u","џ":"dz","Ґ":"G","ґ":"g","Ғ":"GH","ғ":"gh","Қ":"KH","қ":"kh","Ң":"NG","ң":"ng","Ү":"UE","ү":"ue","Ұ":"U","ұ":"u","Һ":"H","һ":"h","Ә":"AE","ә":"ae","Ө":"OE","ө":"oe","Ա":"A","Բ":"B","Գ":"G","Դ":"D","Ե":"E","Զ":"Z","Է":"E\'","Ը":"Y\'","Թ":"T\'","Ժ":"JH","Ի":"I","Լ":"L","Խ":"X","Ծ":"C\'","Կ":"K","Հ":"H","Ձ":"D\'","Ղ":"GH","Ճ":"TW","Մ":"M","Յ":"Y","Ն":"N","Շ":"SH","Չ":"CH","Պ":"P","Ջ":"J","Ռ":"R\'","Ս":"S","Վ":"V","Տ":"T","Ր":"R","Ց":"C","Փ":"P\'","Ք":"Q\'","Օ":"O\'\'","Ֆ":"F","և":"EV","ء":"a","آ":"aa","أ":"a","ؤ":"u","إ":"i","ئ":"e","ا":"a","ب":"b","ة":"h","ت":"t","ث":"th","ج":"j","ح":"h","خ":"kh","د":"d","ذ":"th","ر":"r","ز":"z","س":"s","ش":"sh","ص":"s","ض":"dh","ط":"t","ظ":"z","ع":"a","غ":"gh","ف":"f","ق":"q","ك":"k","ل":"l","م":"m","ن":"n","ه":"h","و":"w","ى":"a","ي":"y","ً":"an","ٌ":"on","ٍ":"en","َ":"a","ُ":"u","ِ":"e","ْ":"","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","پ":"p","چ":"ch","ژ":"zh","ک":"k","گ":"g","ی":"y","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","฿":"baht","ა":"a","ბ":"b","გ":"g","დ":"d","ე":"e","ვ":"v","ზ":"z","თ":"t","ი":"i","კ":"k","ლ":"l","მ":"m","ნ":"n","ო":"o","პ":"p","ჟ":"zh","რ":"r","ს":"s","ტ":"t","უ":"u","ფ":"f","ქ":"k","ღ":"gh","ყ":"q","შ":"sh","ჩ":"ch","ც":"ts","ძ":"dz","წ":"ts","ჭ":"ch","ხ":"kh","ჯ":"j","ჰ":"h","Ṣ":"S","ṣ":"s","Ẁ":"W","ẁ":"w","Ẃ":"W","ẃ":"w","Ẅ":"W","ẅ":"w","ẞ":"SS","Ạ":"A","ạ":"a","Ả":"A","ả":"a","Ấ":"A","ấ":"a","Ầ":"A","ầ":"a","Ẩ":"A","ẩ":"a","Ẫ":"A","ẫ":"a","Ậ":"A","ậ":"a","Ắ":"A","ắ":"a","Ằ":"A","ằ":"a","Ẳ":"A","ẳ":"a","Ẵ":"A","ẵ":"a","Ặ":"A","ặ":"a","Ẹ":"E","ẹ":"e","Ẻ":"E","ẻ":"e","Ẽ":"E","ẽ":"e","Ế":"E","ế":"e","Ề":"E","ề":"e","Ể":"E","ể":"e","Ễ":"E","ễ":"e","Ệ":"E","ệ":"e","Ỉ":"I","ỉ":"i","Ị":"I","ị":"i","Ọ":"O","ọ":"o","Ỏ":"O","ỏ":"o","Ố":"O","ố":"o","Ồ":"O","ồ":"o","Ổ":"O","ổ":"o","Ỗ":"O","ỗ":"o","Ộ":"O","ộ":"o","Ớ":"O","ớ":"o","Ờ":"O","ờ":"o","Ở":"O","ở":"o","Ỡ":"O","ỡ":"o","Ợ":"O","ợ":"o","Ụ":"U","ụ":"u","Ủ":"U","ủ":"u","Ứ":"U","ứ":"u","Ừ":"U","ừ":"u","Ử":"U","ử":"u","Ữ":"U","ữ":"u","Ự":"U","ự":"u","Ỳ":"Y","ỳ":"y","Ỵ":"Y","ỵ":"y","Ỷ":"Y","ỷ":"y","Ỹ":"Y","ỹ":"y","–":"-","‘":"\'","’":"\'","“":"\\\"","”":"\\\"","„":"\\\"","†":"+","•":"*","…":"...","₠":"ecu","₢":"cruzeiro","₣":"french franc","₤":"lira","₥":"mill","₦":"naira","₧":"peseta","₨":"rupee","₩":"won","₪":"new shequel","₫":"dong","€":"euro","₭":"kip","₮":"tugrik","₯":"drachma","₰":"penny","₱":"peso","₲":"guarani","₳":"austral","₴":"hryvnia","₵":"cedi","₸":"kazakhstani tenge","₹":"indian rupee","₺":"turkish lira","₽":"russian ruble","₿":"bitcoin","℠":"sm","™":"tm","∂":"d","∆":"delta","∑":"sum","∞":"infinity","♥":"love","元":"yuan","円":"yen","﷼":"rial","ﻵ":"laa","ﻷ":"laa","ﻹ":"lai","ﻻ":"la"}');
1948
+ var locales = JSON.parse('{"bg":{"Й":"Y","Ц":"Ts","Щ":"Sht","Ъ":"A","Ь":"Y","й":"y","ц":"ts","щ":"sht","ъ":"a","ь":"y"},"de":{"Ä":"AE","ä":"ae","Ö":"OE","ö":"oe","Ü":"UE","ü":"ue","ß":"ss","%":"prozent","&":"und","|":"oder","∑":"summe","∞":"unendlich","♥":"liebe"},"es":{"%":"por ciento","&":"y","<":"menor que",">":"mayor que","|":"o","¢":"centavos","£":"libras","¤":"moneda","₣":"francos","∑":"suma","∞":"infinito","♥":"amor"},"fr":{"%":"pourcent","&":"et","<":"plus petit",">":"plus grand","|":"ou","¢":"centime","£":"livre","¤":"devise","₣":"franc","∑":"somme","∞":"infini","♥":"amour"},"pt":{"%":"porcento","&":"e","<":"menor",">":"maior","|":"ou","¢":"centavo","∑":"soma","£":"libra","∞":"infinito","♥":"amor"},"uk":{"И":"Y","и":"y","Й":"Y","й":"y","Ц":"Ts","ц":"ts","Х":"Kh","х":"kh","Щ":"Shch","щ":"shch","Г":"H","г":"h"},"vi":{"Đ":"D","đ":"d"},"da":{"Ø":"OE","ø":"oe","Å":"AA","å":"aa","%":"procent","&":"og","|":"eller","$":"dollar","<":"mindre end",">":"større end"},"nb":{"&":"og","Å":"AA","Æ":"AE","Ø":"OE","å":"aa","æ":"ae","ø":"oe"},"it":{"&":"e"},"nl":{"&":"en"},"sv":{"&":"och","Å":"AA","Ä":"AE","Ö":"OE","å":"aa","ä":"ae","ö":"oe"}}');
1949
+
1950
+ function replace (string, options) {
1951
+ if (typeof string !== 'string') {
1952
+ throw new Error('slugify: string argument expected')
1953
+ }
1954
+
1955
+ options = (typeof options === 'string')
1956
+ ? {replacement: options}
1957
+ : options || {};
1958
+
1959
+ var locale = locales[options.locale] || {};
1960
+
1961
+ var replacement = options.replacement === undefined ? '-' : options.replacement;
1962
+
1963
+ var trim = options.trim === undefined ? true : options.trim;
1964
+
1965
+ var slug = string.normalize().split('')
1966
+ // replace characters based on charMap
1967
+ .reduce(function (result, ch) {
1968
+ var appendChar = locale[ch] || charMap[ch] || ch;
1969
+ if (appendChar === replacement) {
1970
+ appendChar = ' ';
1971
+ }
1972
+ return result + appendChar
1973
+ // remove not allowed characters
1974
+ .replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]+/g, '')
1975
+ }, '');
1976
+
1977
+ if (options.strict) {
1978
+ slug = slug.replace(/[^A-Za-z0-9\s]/g, '');
1979
+ }
1980
+
1981
+ if (trim) {
1982
+ slug = slug.trim();
1983
+ }
1984
+
1985
+ // Replace spaces with replacement character, treating multiple consecutive
1986
+ // spaces as a single space.
1987
+ slug = slug.replace(/\s+/g, replacement);
1988
+
1989
+ if (options.lower) {
1990
+ slug = slug.toLowerCase();
1991
+ }
1992
+
1993
+ return slug
1994
+ }
1995
+
1996
+ replace.extend = function (customMap) {
1997
+ Object.assign(charMap, customMap);
1998
+ };
1999
+
2000
+ return replace
2001
+ }));
2002
+ } (slugify$1));
2003
+
2004
+ var slugify = slugify$1.exports;
2005
+
2006
+ var inArray = function inArray(items, name) {
2007
+ var i = 0;
2008
+
2009
+ if (Array.prototype.indexOf) {
2010
+ return items.indexOf(name, 0) >= 0;
2011
+ } else {
2012
+ for (var n = items.length; i < n; i++) {
2013
+ if (i in items && items[i] === name) {
2014
+ return true;
2015
+ }
2016
+ }
2017
+ }
2018
+
2019
+ return false;
2020
+ };
2021
+
2022
+ var findKeyInObject = function findKeyInObject(obj, key) {
2023
+ if (key && obj) {
2024
+ for (var prop in obj) {
2025
+ if (obj.hasOwnProperty(prop) && prop.toLowerCase() === key.toLowerCase()) {
2026
+ return prop;
2027
+ }
2028
+ }
2029
+ }
2030
+
2031
+ return null;
2032
+ };
2033
+
2034
+ var isObject = function isObject(value) {
2035
+ var objType = Object.prototype.toString.call(value);
2036
+ return objType === '[object Object]' || objType === '[object Error]';
2037
+ };
2038
+
2039
+ var parseNumber = function parseNumber(value) {
2040
+ if (isNaN(value) || !isFinite(value)) {
2041
+ return 0;
2042
+ }
2043
+
2044
+ var floatValue = parseFloat(value);
2045
+ return isNaN(floatValue) ? 0 : floatValue;
2046
+ };
2047
+
2048
+ var parseStringOrNumber = function parseStringOrNumber(value) {
2049
+ if (isStringOrNumber(value)) {
2050
+ return value;
2051
+ } else {
2052
+ return null;
2053
+ }
2054
+ }; // FIXME: REFACTOR for V3
2055
+ // only used in store.js to sanitize server-side formatting of
2056
+ // booleans when checking for `isDevelopmentMode`
2057
+ // Should be removed in v3
2058
+
2059
+
2060
+ var returnConvertedBoolean = function returnConvertedBoolean(data) {
2061
+ if (data === 'false' || data === '0') {
2062
+ return false;
2063
+ } else {
2064
+ return Boolean(data);
2065
+ }
2066
+ };
2067
+
2068
+ var decoded = function decoded(s) {
2069
+ return decodeURIComponent(s.replace(/\+/g, ' '));
2070
+ };
2071
+
2072
+ var converted = function converted(s) {
2073
+ if (s.indexOf('"') === 0) {
2074
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
2075
+ }
2076
+
2077
+ return s;
2078
+ };
2079
+
2080
+ var isString = function isString(value) {
2081
+ return typeof value === 'string';
2082
+ };
2083
+
2084
+ var isNumber = function isNumber(value) {
2085
+ return typeof value === 'number';
2086
+ };
2087
+
2088
+ var isFunction = function isFunction(fn) {
2089
+ return typeof fn === 'function';
2090
+ }; // TODO: Refactor this to a regex
2091
+
2092
+
2093
+ var isDataPlanSlug = function isDataPlanSlug(str) {
2094
+ return isString(str) && str === slugify(str);
2095
+ };
2096
+
2097
+ var isStringOrNumber = function isStringOrNumber(value) {
2098
+ return isString(value) || isNumber(value);
2099
+ };
2100
+
2101
+ var isEmpty = function isEmpty(value) {
2102
+ return value == null || !(Object.keys(value) || value).length;
2103
+ };
2104
+
1933
2105
  var BatchUploader =
1934
2106
  /** @class */
1935
2107
  function () {
@@ -1982,7 +2154,7 @@ var mParticle = (function () {
1982
2154
  };
1983
2155
 
1984
2156
  BatchUploader.prototype.queueEvent = function (event) {
1985
- if (event) {
2157
+ if (!isEmpty(event)) {
1986
2158
  this.pendingEvents.push(event);
1987
2159
  this.mpInstance.Logger.verbose("Queuing event: ".concat(JSON.stringify(event)));
1988
2160
  this.mpInstance.Logger.verbose("Queued event count: ".concat(this.pendingEvents.length));
@@ -2128,13 +2300,17 @@ var mParticle = (function () {
2128
2300
  });
2129
2301
  };
2130
2302
 
2131
- BatchUploader.prototype.upload = function (logger, uploads, useBeacon) {
2303
+ BatchUploader.prototype.upload = function (logger, _uploads, useBeacon) {
2132
2304
  return __awaiter(this, void 0, void 0, function () {
2133
- var uploader, i, fetchPayload, blob, response, e_1;
2305
+ var uploader, uploads, i, fetchPayload, blob, response, e_1;
2134
2306
  return __generator(this, function (_a) {
2135
2307
  switch (_a.label) {
2136
2308
  case 0:
2137
- if (!uploads || uploads.length < 1) {
2309
+ uploads = _uploads.filter(function (upload) {
2310
+ return !isEmpty(upload.events);
2311
+ });
2312
+
2313
+ if (isEmpty(uploads)) {
2138
2314
  return [2
2139
2315
  /*return*/
2140
2316
  , null];
@@ -2555,169 +2731,17 @@ var mParticle = (function () {
2555
2731
  };
2556
2732
  }
2557
2733
 
2558
- var slugify$1 = {exports: {}};
2559
-
2560
- (function (module, exports) {
2561
- (function (name, root, factory) {
2562
- {
2563
- module.exports = factory();
2564
- module.exports['default'] = factory();
2565
- }
2566
- }('slugify', commonjsGlobal, function () {
2567
- var charMap = JSON.parse('{"$":"dollar","%":"percent","&":"and","<":"less",">":"greater","|":"or","¢":"cent","£":"pound","¤":"currency","¥":"yen","©":"(c)","ª":"a","®":"(r)","º":"o","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","þ":"th","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"DJ","đ":"dj","Ē":"E","ē":"e","Ė":"E","ė":"e","Ę":"e","ę":"e","Ě":"E","ě":"e","Ğ":"G","ğ":"g","Ģ":"G","ģ":"g","Ĩ":"I","ĩ":"i","Ī":"i","ī":"i","Į":"I","į":"i","İ":"I","ı":"i","Ķ":"k","ķ":"k","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ł":"L","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","Ō":"O","ō":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ũ":"U","ũ":"u","Ū":"u","ū":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","Ə":"E","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Lj":"LJ","lj":"lj","Nj":"NJ","nj":"nj","Ș":"S","ș":"s","Ț":"T","ț":"t","ə":"e","˚":"o","Ά":"A","Έ":"E","Ή":"H","Ί":"I","Ό":"O","Ύ":"Y","Ώ":"W","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"H","Θ":"8","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"3","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"W","Ϊ":"I","Ϋ":"Y","ά":"a","έ":"e","ή":"h","ί":"i","ΰ":"y","α":"a","β":"b","γ":"g","δ":"d","ε":"e","ζ":"z","η":"h","θ":"8","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"3","ο":"o","π":"p","ρ":"r","ς":"s","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"w","ϊ":"i","ϋ":"y","ό":"o","ύ":"y","ώ":"w","Ё":"Yo","Ђ":"DJ","Є":"Ye","І":"I","Ї":"Yi","Ј":"J","Љ":"LJ","Њ":"NJ","Ћ":"C","Џ":"DZ","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ж":"Zh","З":"Z","И":"I","Й":"J","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"H","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"U","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya","а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ж":"zh","з":"z","и":"i","й":"j","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"u","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","ё":"yo","ђ":"dj","є":"ye","і":"i","ї":"yi","ј":"j","љ":"lj","њ":"nj","ћ":"c","ѝ":"u","џ":"dz","Ґ":"G","ґ":"g","Ғ":"GH","ғ":"gh","Қ":"KH","қ":"kh","Ң":"NG","ң":"ng","Ү":"UE","ү":"ue","Ұ":"U","ұ":"u","Һ":"H","һ":"h","Ә":"AE","ә":"ae","Ө":"OE","ө":"oe","Ա":"A","Բ":"B","Գ":"G","Դ":"D","Ե":"E","Զ":"Z","Է":"E\'","Ը":"Y\'","Թ":"T\'","Ժ":"JH","Ի":"I","Լ":"L","Խ":"X","Ծ":"C\'","Կ":"K","Հ":"H","Ձ":"D\'","Ղ":"GH","Ճ":"TW","Մ":"M","Յ":"Y","Ն":"N","Շ":"SH","Չ":"CH","Պ":"P","Ջ":"J","Ռ":"R\'","Ս":"S","Վ":"V","Տ":"T","Ր":"R","Ց":"C","Փ":"P\'","Ք":"Q\'","Օ":"O\'\'","Ֆ":"F","և":"EV","ء":"a","آ":"aa","أ":"a","ؤ":"u","إ":"i","ئ":"e","ا":"a","ب":"b","ة":"h","ت":"t","ث":"th","ج":"j","ح":"h","خ":"kh","د":"d","ذ":"th","ر":"r","ز":"z","س":"s","ش":"sh","ص":"s","ض":"dh","ط":"t","ظ":"z","ع":"a","غ":"gh","ف":"f","ق":"q","ك":"k","ل":"l","م":"m","ن":"n","ه":"h","و":"w","ى":"a","ي":"y","ً":"an","ٌ":"on","ٍ":"en","َ":"a","ُ":"u","ِ":"e","ْ":"","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","پ":"p","چ":"ch","ژ":"zh","ک":"k","گ":"g","ی":"y","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","฿":"baht","ა":"a","ბ":"b","გ":"g","დ":"d","ე":"e","ვ":"v","ზ":"z","თ":"t","ი":"i","კ":"k","ლ":"l","მ":"m","ნ":"n","ო":"o","პ":"p","ჟ":"zh","რ":"r","ს":"s","ტ":"t","უ":"u","ფ":"f","ქ":"k","ღ":"gh","ყ":"q","შ":"sh","ჩ":"ch","ც":"ts","ძ":"dz","წ":"ts","ჭ":"ch","ხ":"kh","ჯ":"j","ჰ":"h","Ṣ":"S","ṣ":"s","Ẁ":"W","ẁ":"w","Ẃ":"W","ẃ":"w","Ẅ":"W","ẅ":"w","ẞ":"SS","Ạ":"A","ạ":"a","Ả":"A","ả":"a","Ấ":"A","ấ":"a","Ầ":"A","ầ":"a","Ẩ":"A","ẩ":"a","Ẫ":"A","ẫ":"a","Ậ":"A","ậ":"a","Ắ":"A","ắ":"a","Ằ":"A","ằ":"a","Ẳ":"A","ẳ":"a","Ẵ":"A","ẵ":"a","Ặ":"A","ặ":"a","Ẹ":"E","ẹ":"e","Ẻ":"E","ẻ":"e","Ẽ":"E","ẽ":"e","Ế":"E","ế":"e","Ề":"E","ề":"e","Ể":"E","ể":"e","Ễ":"E","ễ":"e","Ệ":"E","ệ":"e","Ỉ":"I","ỉ":"i","Ị":"I","ị":"i","Ọ":"O","ọ":"o","Ỏ":"O","ỏ":"o","Ố":"O","ố":"o","Ồ":"O","ồ":"o","Ổ":"O","ổ":"o","Ỗ":"O","ỗ":"o","Ộ":"O","ộ":"o","Ớ":"O","ớ":"o","Ờ":"O","ờ":"o","Ở":"O","ở":"o","Ỡ":"O","ỡ":"o","Ợ":"O","ợ":"o","Ụ":"U","ụ":"u","Ủ":"U","ủ":"u","Ứ":"U","ứ":"u","Ừ":"U","ừ":"u","Ử":"U","ử":"u","Ữ":"U","ữ":"u","Ự":"U","ự":"u","Ỳ":"Y","ỳ":"y","Ỵ":"Y","ỵ":"y","Ỷ":"Y","ỷ":"y","Ỹ":"Y","ỹ":"y","–":"-","‘":"\'","’":"\'","“":"\\\"","”":"\\\"","„":"\\\"","†":"+","•":"*","…":"...","₠":"ecu","₢":"cruzeiro","₣":"french franc","₤":"lira","₥":"mill","₦":"naira","₧":"peseta","₨":"rupee","₩":"won","₪":"new shequel","₫":"dong","€":"euro","₭":"kip","₮":"tugrik","₯":"drachma","₰":"penny","₱":"peso","₲":"guarani","₳":"austral","₴":"hryvnia","₵":"cedi","₸":"kazakhstani tenge","₹":"indian rupee","₺":"turkish lira","₽":"russian ruble","₿":"bitcoin","℠":"sm","™":"tm","∂":"d","∆":"delta","∑":"sum","∞":"infinity","♥":"love","元":"yuan","円":"yen","﷼":"rial","ﻵ":"laa","ﻷ":"laa","ﻹ":"lai","ﻻ":"la"}');
2568
- var locales = JSON.parse('{"bg":{"Й":"Y","Ц":"Ts","Щ":"Sht","Ъ":"A","Ь":"Y","й":"y","ц":"ts","щ":"sht","ъ":"a","ь":"y"},"de":{"Ä":"AE","ä":"ae","Ö":"OE","ö":"oe","Ü":"UE","ü":"ue","ß":"ss","%":"prozent","&":"und","|":"oder","∑":"summe","∞":"unendlich","♥":"liebe"},"es":{"%":"por ciento","&":"y","<":"menor que",">":"mayor que","|":"o","¢":"centavos","£":"libras","¤":"moneda","₣":"francos","∑":"suma","∞":"infinito","♥":"amor"},"fr":{"%":"pourcent","&":"et","<":"plus petit",">":"plus grand","|":"ou","¢":"centime","£":"livre","¤":"devise","₣":"franc","∑":"somme","∞":"infini","♥":"amour"},"pt":{"%":"porcento","&":"e","<":"menor",">":"maior","|":"ou","¢":"centavo","∑":"soma","£":"libra","∞":"infinito","♥":"amor"},"uk":{"И":"Y","и":"y","Й":"Y","й":"y","Ц":"Ts","ц":"ts","Х":"Kh","х":"kh","Щ":"Shch","щ":"shch","Г":"H","г":"h"},"vi":{"Đ":"D","đ":"d"},"da":{"Ø":"OE","ø":"oe","Å":"AA","å":"aa","%":"procent","&":"og","|":"eller","$":"dollar","<":"mindre end",">":"større end"},"nb":{"&":"og","Å":"AA","Æ":"AE","Ø":"OE","å":"aa","æ":"ae","ø":"oe"},"it":{"&":"e"},"nl":{"&":"en"},"sv":{"&":"och","Å":"AA","Ä":"AE","Ö":"OE","å":"aa","ä":"ae","ö":"oe"}}');
2569
-
2570
- function replace (string, options) {
2571
- if (typeof string !== 'string') {
2572
- throw new Error('slugify: string argument expected')
2573
- }
2574
-
2575
- options = (typeof options === 'string')
2576
- ? {replacement: options}
2577
- : options || {};
2578
-
2579
- var locale = locales[options.locale] || {};
2580
-
2581
- var replacement = options.replacement === undefined ? '-' : options.replacement;
2582
-
2583
- var trim = options.trim === undefined ? true : options.trim;
2584
-
2585
- var slug = string.normalize().split('')
2586
- // replace characters based on charMap
2587
- .reduce(function (result, ch) {
2588
- var appendChar = locale[ch] || charMap[ch] || ch;
2589
- if (appendChar === replacement) {
2590
- appendChar = ' ';
2591
- }
2592
- return result + appendChar
2593
- // remove not allowed characters
2594
- .replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]+/g, '')
2595
- }, '');
2596
-
2597
- if (options.strict) {
2598
- slug = slug.replace(/[^A-Za-z0-9\s]/g, '');
2599
- }
2600
-
2601
- if (trim) {
2602
- slug = slug.trim();
2603
- }
2604
-
2605
- // Replace spaces with replacement character, treating multiple consecutive
2606
- // spaces as a single space.
2607
- slug = slug.replace(/\s+/g, replacement);
2608
-
2609
- if (options.lower) {
2610
- slug = slug.toLowerCase();
2611
- }
2612
-
2613
- return slug
2614
- }
2615
-
2616
- replace.extend = function (customMap) {
2617
- Object.assign(charMap, customMap);
2618
- };
2619
-
2620
- return replace
2621
- }));
2622
- } (slugify$1));
2623
-
2624
- var slugify = slugify$1.exports;
2625
-
2626
- var inArray = function inArray(items, name) {
2627
- var i = 0;
2628
-
2629
- if (Array.prototype.indexOf) {
2630
- return items.indexOf(name, 0) >= 0;
2631
- } else {
2632
- for (var n = items.length; i < n; i++) {
2633
- if (i in items && items[i] === name) {
2634
- return true;
2635
- }
2636
- }
2637
- }
2638
-
2639
- return false;
2640
- };
2641
-
2642
- var findKeyInObject = function findKeyInObject(obj, key) {
2643
- if (key && obj) {
2644
- for (var prop in obj) {
2645
- if (obj.hasOwnProperty(prop) && prop.toLowerCase() === key.toLowerCase()) {
2646
- return prop;
2647
- }
2648
- }
2649
- }
2650
-
2651
- return null;
2652
- };
2653
-
2654
- var isObject = function isObject(value) {
2655
- var objType = Object.prototype.toString.call(value);
2656
- return objType === '[object Object]' || objType === '[object Error]';
2657
- };
2658
-
2659
- var parseNumber = function parseNumber(value) {
2660
- if (isNaN(value) || !isFinite(value)) {
2661
- return 0;
2662
- }
2663
-
2664
- var floatValue = parseFloat(value);
2665
- return isNaN(floatValue) ? 0 : floatValue;
2666
- }; // FIXME: REFACTOR for V3
2667
- // only used in store.js to sanitize server-side formatting of
2668
- // booleans when checking for `isDevelopmentMode`
2669
- // Should be removed in v3
2670
-
2671
-
2672
- var returnConvertedBoolean = function returnConvertedBoolean(data) {
2673
- if (data === 'false' || data === '0') {
2674
- return false;
2675
- } else {
2676
- return Boolean(data);
2677
- }
2678
- };
2679
-
2680
- var decoded = function decoded(s) {
2681
- return decodeURIComponent(s.replace(/\+/g, ' '));
2682
- };
2683
-
2684
- var converted = function converted(s) {
2685
- if (s.indexOf('"') === 0) {
2686
- s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
2687
- }
2688
-
2689
- return s;
2690
- };
2691
-
2692
- var isString = function isString(value) {
2693
- return typeof value === 'string';
2694
- };
2695
-
2696
- var isNumber = function isNumber(value) {
2697
- return typeof value === 'number';
2698
- };
2699
-
2700
- var isFunction = function isFunction(fn) {
2701
- return typeof fn === 'function';
2702
- }; // TODO: Refactor this to a regex
2703
-
2704
-
2705
- var isDataPlanSlug = function isDataPlanSlug(str) {
2706
- return isString(str) && str === slugify(str);
2707
- };
2708
-
2709
- var isStringOrNumber = function isStringOrNumber(value) {
2710
- return isString(value) || isNumber(value);
2711
- };
2712
-
2713
2734
  var Validators = {
2714
2735
  // From ./utils
2736
+ // Utility Functions for backwards compatability
2715
2737
  isNumber: isNumber,
2716
2738
  isFunction: isFunction,
2717
2739
  isStringOrNumber: isStringOrNumber,
2740
+ // Validator Functions
2718
2741
  isValidAttributeValue: function isValidAttributeValue(value) {
2719
2742
  return value !== undefined && !isObject(value) && !Array.isArray(value);
2720
2743
  },
2744
+ // Validator Functions
2721
2745
  // Neither null nor undefined can be a valid Key
2722
2746
  isValidKeyValue: function isValidKeyValue(key) {
2723
2747
  return Boolean(key && !isObject(key) && !Array.isArray(key) && !this.isFunction(key));
@@ -3148,14 +3172,6 @@ var mParticle = (function () {
3148
3172
  return false;
3149
3173
  };
3150
3174
 
3151
- this.parseStringOrNumber = function (value) {
3152
- if (Validators.isStringOrNumber(value)) {
3153
- return value;
3154
- } else {
3155
- return null;
3156
- }
3157
- };
3158
-
3159
3175
  this.generateHash = function (name) {
3160
3176
  var hash = 0,
3161
3177
  i = 0,
@@ -3245,7 +3261,8 @@ var mParticle = (function () {
3245
3261
  this.inArray = inArray;
3246
3262
  this.isObject = isObject;
3247
3263
  this.decoded = decoded;
3248
- this.returnConvertedBoolean = returnConvertedBoolean; // Imported Validators
3264
+ this.returnConvertedBoolean = returnConvertedBoolean;
3265
+ this.parseStringOrNumber = parseStringOrNumber; // Imported Validators
3249
3266
 
3250
3267
  this.Validators = Validators;
3251
3268
  }
@@ -4171,7 +4188,8 @@ var mParticle = (function () {
4171
4188
  }
4172
4189
 
4173
4190
  return sdkConfig;
4174
- }
4191
+ } // TODO: Merge this with SDKStoreApi in sdkRuntimeModels
4192
+
4175
4193
 
4176
4194
  function Store(config, mpInstance) {
4177
4195
  var defaultStore = {
@@ -6498,35 +6516,65 @@ var mParticle = (function () {
6498
6516
  };
6499
6517
  }
6500
6518
 
6501
- var MessageType = Types.MessageType,
6502
- ApplicationTransitionType = Types.ApplicationTransitionType;
6503
- function ServerModel(mpInstance) {
6504
- var self = this;
6519
+ // TODO: This file is no longer the server model because the web SDK payload
6520
+ var MessageType = Types.MessageType;
6521
+ var ApplicationTransitionType = Types.ApplicationTransitionType; // TODO: Make this a pure function that returns a new object
6505
6522
 
6506
- function convertCustomFlags(event, dto) {
6507
- var valueArray = [];
6508
- dto.flags = {};
6523
+ function convertCustomFlags(event, dto) {
6524
+ var valueArray = [];
6525
+ dto.flags = {};
6509
6526
 
6510
- for (var prop in event.CustomFlags) {
6511
- valueArray = [];
6527
+ for (var prop in event.CustomFlags) {
6528
+ valueArray = [];
6512
6529
 
6513
- if (event.CustomFlags.hasOwnProperty(prop)) {
6514
- if (Array.isArray(event.CustomFlags[prop])) {
6515
- event.CustomFlags[prop].forEach(function (customFlagProperty) {
6516
- if (typeof customFlagProperty === 'number' || typeof customFlagProperty === 'string' || typeof customFlagProperty === 'boolean') {
6517
- valueArray.push(customFlagProperty.toString());
6518
- }
6519
- });
6520
- } else if (typeof event.CustomFlags[prop] === 'number' || typeof event.CustomFlags[prop] === 'string' || typeof event.CustomFlags[prop] === 'boolean') {
6521
- valueArray.push(event.CustomFlags[prop].toString());
6522
- }
6530
+ if (event.CustomFlags.hasOwnProperty(prop)) {
6531
+ if (Array.isArray(event.CustomFlags[prop])) {
6532
+ event.CustomFlags[prop].forEach(function (customFlagProperty) {
6533
+ // TODO: Can we use our utility functions here?
6534
+ if (typeof customFlagProperty === 'number' || typeof customFlagProperty === 'string' || typeof customFlagProperty === 'boolean') {
6535
+ valueArray.push(customFlagProperty.toString());
6536
+ }
6537
+ });
6538
+ } else if ( // TODO: Can we use our utility functions here?
6539
+ typeof event.CustomFlags[prop] === 'number' || typeof event.CustomFlags[prop] === 'string' || typeof event.CustomFlags[prop] === 'boolean') {
6540
+ valueArray.push(event.CustomFlags[prop].toString());
6541
+ }
6523
6542
 
6524
- if (valueArray.length) {
6525
- dto.flags[prop] = valueArray;
6526
- }
6543
+ if (valueArray.length) {
6544
+ dto.flags[prop] = valueArray;
6527
6545
  }
6528
6546
  }
6529
6547
  }
6548
+ }
6549
+
6550
+ function convertProductToDTO(product) {
6551
+ return {
6552
+ id: parseStringOrNumber(product.Sku),
6553
+ nm: parseStringOrNumber(product.Name),
6554
+ pr: parseNumber(product.Price),
6555
+ qt: parseNumber(product.Quantity),
6556
+ br: parseStringOrNumber(product.Brand),
6557
+ va: parseStringOrNumber(product.Variant),
6558
+ ca: parseStringOrNumber(product.Category),
6559
+ ps: parseNumber(product.Position),
6560
+ cc: parseStringOrNumber(product.CouponCode),
6561
+ tpa: parseNumber(product.TotalAmount),
6562
+ attrs: product.Attributes
6563
+ };
6564
+ }
6565
+
6566
+ function convertProductListToDTO(productList) {
6567
+ if (!productList) {
6568
+ return [];
6569
+ }
6570
+
6571
+ return productList.map(function (product) {
6572
+ return convertProductToDTO(product);
6573
+ });
6574
+ }
6575
+
6576
+ function ServerModel(mpInstance) {
6577
+ var self = this; // TODO: Can we refactor this to not mutate the event?
6530
6578
 
6531
6579
  this.appendUserInfo = function (user, event) {
6532
6580
  if (!event) {
@@ -6575,32 +6623,6 @@ var mParticle = (function () {
6575
6623
  event.UserIdentities = validUserIdentities;
6576
6624
  };
6577
6625
 
6578
- function convertProductListToDTO(productList) {
6579
- if (!productList) {
6580
- return [];
6581
- }
6582
-
6583
- return productList.map(function (product) {
6584
- return convertProductToDTO(product);
6585
- });
6586
- }
6587
-
6588
- function convertProductToDTO(product) {
6589
- return {
6590
- id: mpInstance._Helpers.parseStringOrNumber(product.Sku),
6591
- nm: mpInstance._Helpers.parseStringOrNumber(product.Name),
6592
- pr: mpInstance._Helpers.parseNumber(product.Price),
6593
- qt: mpInstance._Helpers.parseNumber(product.Quantity),
6594
- br: mpInstance._Helpers.parseStringOrNumber(product.Brand),
6595
- va: mpInstance._Helpers.parseStringOrNumber(product.Variant),
6596
- ca: mpInstance._Helpers.parseStringOrNumber(product.Category),
6597
- ps: mpInstance._Helpers.parseNumber(product.Position),
6598
- cc: mpInstance._Helpers.parseStringOrNumber(product.CouponCode),
6599
- tpa: mpInstance._Helpers.parseNumber(product.TotalAmount),
6600
- attrs: product.Attributes
6601
- };
6602
- }
6603
-
6604
6626
  this.convertToConsentStateDTO = function (state) {
6605
6627
  if (!state) {
6606
6628
  return null;
@@ -6660,14 +6682,21 @@ var mParticle = (function () {
6660
6682
 
6661
6683
  this.createEventObject = function (event, user) {
6662
6684
  var uploadObject = {};
6663
- var eventObject = {};
6664
- var optOut = event.messageType === Types.MessageType.OptOut ? !mpInstance._Store.isEnabled : null;
6685
+ var eventObject = {}; // The `optOut` variable is passed later in this method to the `uploadObject`
6686
+ // so that it can be used to denote whether or not a user has "opted out" of being
6687
+ // tracked. If this is an `optOut` Event, we set `optOut` to the inverse of the SDK's
6688
+ // `isEnabled` boolean which is controlled via `MPInstanceManager.setOptOut`.
6689
+
6690
+ var optOut = event.messageType === Types.MessageType.OptOut ? !mpInstance._Store.isEnabled : null; // TODO: Why is Webview Bridge Enabled or Opt Out necessary here?
6665
6691
 
6666
- if (mpInstance._Store.sessionId || event.messageType == Types.MessageType.OptOut || mpInstance._Store.webviewBridgeEnabled) {
6692
+ if (mpInstance._Store.sessionId || event.messageType === Types.MessageType.OptOut || mpInstance._Store.webviewBridgeEnabled) {
6667
6693
  if (event.hasOwnProperty('toEventAPIObject')) {
6668
6694
  eventObject = event.toEventAPIObject();
6669
6695
  } else {
6670
6696
  eventObject = {
6697
+ // This is an artifact from v2 events where SessionStart/End and AST event
6698
+ // names are numbers (1, 2, or 10), but going forward with v3, these lifecycle
6699
+ // events do not have names, but are denoted by their `event_type`
6671
6700
  EventName: event.name || event.messageType,
6672
6701
  EventCategory: event.eventType,
6673
6702
  EventAttributes: mpInstance._Helpers.sanitizeAttributes(event.data, event.name),
@@ -6677,13 +6706,15 @@ var mParticle = (function () {
6677
6706
  UserAttributeChanges: event.userAttributeChanges,
6678
6707
  UserIdentityChanges: event.userIdentityChanges
6679
6708
  };
6680
- }
6709
+ } // TODO: Should we move this side effect outside of this method?
6710
+
6681
6711
 
6682
6712
  if (event.messageType !== Types.MessageType.SessionEnd) {
6683
6713
  mpInstance._Store.dateLastEventSent = new Date();
6684
6714
  }
6685
6715
 
6686
6716
  uploadObject = {
6717
+ // FIXME: Deprecate when we get rid of V2
6687
6718
  Store: mpInstance._Store.serverSettings,
6688
6719
  SDKVersion: Constants.sdkVersion,
6689
6720
  SessionId: mpInstance._Store.sessionId,
@@ -6705,7 +6736,8 @@ var mParticle = (function () {
6705
6736
  if (eventObject.EventDataType === MessageType.AppStateTransition) {
6706
6737
  eventObject.IsFirstRun = mpInstance._Store.isFirstRun;
6707
6738
  eventObject.LaunchReferral = window.location.href || null;
6708
- }
6739
+ } // FIXME: Remove duplicate occurence
6740
+
6709
6741
 
6710
6742
  eventObject.CurrencyCode = mpInstance._Store.currencyCode;
6711
6743
  var currentUser = user || mpInstance.Identity.getCurrentUser();
@@ -6713,8 +6745,13 @@ var mParticle = (function () {
6713
6745
 
6714
6746
  if (event.messageType === Types.MessageType.SessionEnd) {
6715
6747
  eventObject.SessionLength = mpInstance._Store.dateLastEventSent.getTime() - mpInstance._Store.sessionStartDate.getTime();
6716
- eventObject.currentSessionMPIDs = mpInstance._Store.currentSessionMPIDs;
6717
- eventObject.EventAttributes = mpInstance._Store.sessionAttributes;
6748
+ eventObject.currentSessionMPIDs = mpInstance._Store.currentSessionMPIDs; // Session attributes are assigned on a session level, but only uploaded
6749
+ // when a session ends. As there is no way to attach event attributes to
6750
+ // a `SessionEnd` event, we are uploading the session level attributes
6751
+ // as event level attributes in a `SessionEnd` event.
6752
+
6753
+ eventObject.EventAttributes = mpInstance._Store.sessionAttributes; // TODO: We should move this out of here to avoid side effects
6754
+
6718
6755
  mpInstance._Store.currentSessionMPIDs = [];
6719
6756
  mpInstance._Store.sessionStartDate = null;
6720
6757
  }
@@ -6770,7 +6807,9 @@ var mParticle = (function () {
6770
6807
  dto.fr = event.IsFirstRun;
6771
6808
  dto.iu = false;
6772
6809
  dto.at = ApplicationTransitionType.AppInit;
6773
- dto.lr = event.LaunchReferral;
6810
+ dto.lr = event.LaunchReferral; // Nullify Attributes in case AST Was logged manually or
6811
+ // via logBaseEvent. AST should not have any attributes
6812
+
6774
6813
  dto.attrs = null;
6775
6814
  }
6776
6815
 
@@ -6779,7 +6818,7 @@ var mParticle = (function () {
6779
6818
  }
6780
6819
 
6781
6820
  if (event.EventDataType === MessageType.Commerce) {
6782
- dto.cu = event.CurrencyCode;
6821
+ dto.cu = event.CurrencyCode; // TODO: If Cart is deprecated, we should deprecate this too
6783
6822
 
6784
6823
  if (event.ShoppingCart) {
6785
6824
  dto.sc = {
@@ -9371,6 +9410,16 @@ var mParticle = (function () {
9371
9410
  self._preInit.readyQueue.push(f);
9372
9411
  }
9373
9412
  };
9413
+ /**
9414
+ * Returns the current mParticle environment setting
9415
+ * @method getEnvironment
9416
+ * @returns {String} mParticle environment setting
9417
+ */
9418
+
9419
+
9420
+ this.getEnvironment = function () {
9421
+ return self._Store.SDKConfig.isDevelopmentMode ? Types.Environment.Development : Types.Environment.Production;
9422
+ };
9374
9423
  /**
9375
9424
  * Returns the mParticle SDK version number
9376
9425
  * @method getVersion
@@ -10250,9 +10299,44 @@ var mParticle = (function () {
10250
10299
  this._getIntegrationDelays = function () {
10251
10300
  return self._preInit.integrationDelays;
10252
10301
  };
10302
+ /*
10303
+ An integration delay is a workaround that prevents events from being sent when it is necessary to do so.
10304
+ Some server side integrations require a client side value to be included in the payload to successfully
10305
+ forward. This value can only be pulled from the client side partner SDK.
10306
+ During the kit initialization, the kit:
10307
+ * sets an integration delay to `true`
10308
+ * grabs the required value from the partner SDK,
10309
+ * sets it via `setIntegrationAttribute`
10310
+ * sets the integration delay to `false`
10311
+ The core SDK can then read via `isDelayedByIntegration` to no longer delay sending events.
10312
+ This integration attribute is now on the batch payload for the server side to read.
10313
+ If there is no delay, then the events sent before an integration attribute is included would not
10314
+ be forwarded successfully server side.
10315
+ */
10316
+
10317
+
10318
+ this._setIntegrationDelay = function (module, shouldDelayIntegration) {
10319
+ self._preInit.integrationDelays[module] = shouldDelayIntegration; // If the integration delay is set to true, no further action needed
10320
+
10321
+ if (shouldDelayIntegration === true) {
10322
+ return;
10323
+ } // If the integration delay is set to false, check to see if there are any
10324
+ // other integration delays set to true. It not, process the queued events/.
10325
+
10326
+
10327
+ var integrationDelaysKeys = Object.keys(self._preInit.integrationDelays);
10328
+
10329
+ if (integrationDelaysKeys.length === 0) {
10330
+ return;
10331
+ }
10332
+
10333
+ var hasIntegrationDelays = integrationDelaysKeys.some(function (integration) {
10334
+ return self._preInit.integrationDelays[integration] === true;
10335
+ });
10253
10336
 
10254
- this._setIntegrationDelay = function (module, _boolean) {
10255
- self._preInit.integrationDelays[module] = _boolean;
10337
+ if (!hasIntegrationDelays) {
10338
+ self._APIClient.processQueuedEvents();
10339
+ }
10256
10340
  };
10257
10341
  } // Some (server) config settings need to be returned before they are set on SDKConfig in a self hosted environment
10258
10342
 
@@ -10514,6 +10598,10 @@ var mParticle = (function () {
10514
10598
 
10515
10599
  // This file is used ONLY for the mParticle ESLint plugin. It should NOT be used otherwise!
10516
10600
 
10601
+ var mockFunction = function mockFunction() {
10602
+ return null;
10603
+ };
10604
+
10517
10605
  var _BatchValidator =
10518
10606
  /** @class */
10519
10607
  function () {
@@ -10527,23 +10615,90 @@ var mParticle = (function () {
10527
10615
  generateUniqueId: function generateUniqueId() {
10528
10616
  return 'mockId';
10529
10617
  },
10530
- extend: window.mParticle.getInstance()._Helpers.extend
10618
+ extend: window.mParticle.getInstance()._Helpers.extend,
10619
+ createServiceUrl: mockFunction,
10620
+ parseNumber: mockFunction,
10621
+ isObject: mockFunction,
10622
+ returnConvertedBoolean: mockFunction,
10623
+ Validators: null
10531
10624
  },
10625
+ _resetForTests: mockFunction,
10626
+ _APIClient: null,
10627
+ _Consent: null,
10628
+ _ServerModel: null,
10629
+ _SessionManager: null,
10532
10630
  _Store: {
10533
10631
  sessionId: 'mockSessionId',
10534
- SDKConfig: {}
10632
+ devToken: 'test_dev_token',
10633
+ isFirstRun: true,
10634
+ isEnabled: true,
10635
+ sessionAttributes: {},
10636
+ currentSessionMPIDs: [],
10637
+ consentState: null,
10638
+ clientId: null,
10639
+ deviceId: null,
10640
+ migrationData: {},
10641
+ serverSettings: {},
10642
+ dateLastEventSent: null,
10643
+ sessionStartDate: null,
10644
+ currentPosition: null,
10645
+ isTracking: false,
10646
+ watchPositionId: null,
10647
+ cartProducts: [],
10648
+ eventQueue: [],
10649
+ currencyCode: null,
10650
+ globalTimer: null,
10651
+ context: null,
10652
+ configurationLoaded: false,
10653
+ identityCallInFlight: false,
10654
+ migratingToIDSyncCookies: false,
10655
+ nonCurrentUserMPIDs: {},
10656
+ identifyCalled: false,
10657
+ isLoggedIn: false,
10658
+ cookieSyncDates: {},
10659
+ integrationAttributes: {},
10660
+ requireDelay: true,
10661
+ isLocalStorageAvailable: null,
10662
+ integrationDelayTimeoutStart: null,
10663
+ storageName: null,
10664
+ prodStorageName: null,
10665
+ activeForwarders: [],
10666
+ kits: {},
10667
+ configuredForwarders: [],
10668
+ pixelConfigurations: [],
10669
+ SDKConfig: {
10670
+ isDevelopmentMode: false,
10671
+ onCreateBatch: mockFunction
10672
+ }
10535
10673
  },
10674
+ config: null,
10675
+ eCommerce: null,
10536
10676
  Identity: {
10537
- getCurrentUser: function getCurrentUser() {
10538
- return null;
10539
- }
10677
+ getCurrentUser: mockFunction,
10678
+ IdentityAPI: {},
10679
+ identify: mockFunction,
10680
+ login: mockFunction,
10681
+ logout: mockFunction,
10682
+ modify: mockFunction
10540
10683
  },
10541
- getAppVersion: function getAppVersion() {
10542
- return null;
10684
+ Logger: {
10685
+ verbose: mockFunction,
10686
+ error: mockFunction,
10687
+ warning: mockFunction
10543
10688
  },
10544
- getAppName: function getAppName() {
10545
- return null;
10546
- }
10689
+ ProductActionType: null,
10690
+ ServerModel: null,
10691
+ addForwarder: mockFunction,
10692
+ generateHash: mockFunction,
10693
+ getAppVersion: mockFunction,
10694
+ getAppName: mockFunction,
10695
+ getInstance: mockFunction,
10696
+ init: mockFunction,
10697
+ logBaseEvent: mockFunction,
10698
+ logEvent: mockFunction,
10699
+ logLevel: 'none',
10700
+ setPosition: mockFunction,
10701
+ upload: mockFunction
10547
10702
  };
10548
10703
  };
10549
10704
 
@@ -10685,6 +10840,10 @@ var mParticle = (function () {
10685
10840
  return self.getInstance().getAppVersion();
10686
10841
  };
10687
10842
 
10843
+ this.getEnvironment = function () {
10844
+ return self.getInstance().getEnvironment();
10845
+ };
10846
+
10688
10847
  this.stopTrackingLocation = function () {
10689
10848
  self.getInstance().stopTrackingLocation();
10690
10849
  };