@mparticle/web-sdk 2.18.2 → 2.19.0

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
@@ -725,7 +725,7 @@ var mParticle = (function () {
725
725
  Environment: Environment
726
726
  };
727
727
 
728
- var version = "2.18.2";
728
+ var version = "2.19.0";
729
729
 
730
730
  var Constants = {
731
731
  sdkVersion: version,
@@ -1244,6 +1244,173 @@ var mParticle = (function () {
1244
1244
  })(exports.UserIdentityChangeEventEventTypeEnum || (exports.UserIdentityChangeEventEventTypeEnum = {}));
1245
1245
  } (dist));
1246
1246
 
1247
+ var slugify$1 = {exports: {}};
1248
+
1249
+ (function (module, exports) {
1250
+ (function (name, root, factory) {
1251
+ {
1252
+ module.exports = factory();
1253
+ module.exports['default'] = factory();
1254
+ }
1255
+ }('slugify', commonjsGlobal, function () {
1256
+ 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"}');
1257
+ 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"}}');
1258
+
1259
+ function replace (string, options) {
1260
+ if (typeof string !== 'string') {
1261
+ throw new Error('slugify: string argument expected')
1262
+ }
1263
+
1264
+ options = (typeof options === 'string')
1265
+ ? {replacement: options}
1266
+ : options || {};
1267
+
1268
+ var locale = locales[options.locale] || {};
1269
+
1270
+ var replacement = options.replacement === undefined ? '-' : options.replacement;
1271
+
1272
+ var trim = options.trim === undefined ? true : options.trim;
1273
+
1274
+ var slug = string.normalize().split('')
1275
+ // replace characters based on charMap
1276
+ .reduce(function (result, ch) {
1277
+ var appendChar = locale[ch] || charMap[ch] || ch;
1278
+ if (appendChar === replacement) {
1279
+ appendChar = ' ';
1280
+ }
1281
+ return result + appendChar
1282
+ // remove not allowed characters
1283
+ .replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]+/g, '')
1284
+ }, '');
1285
+
1286
+ if (options.strict) {
1287
+ slug = slug.replace(/[^A-Za-z0-9\s]/g, '');
1288
+ }
1289
+
1290
+ if (trim) {
1291
+ slug = slug.trim();
1292
+ }
1293
+
1294
+ // Replace spaces with replacement character, treating multiple consecutive
1295
+ // spaces as a single space.
1296
+ slug = slug.replace(/\s+/g, replacement);
1297
+
1298
+ if (options.lower) {
1299
+ slug = slug.toLowerCase();
1300
+ }
1301
+
1302
+ return slug
1303
+ }
1304
+
1305
+ replace.extend = function (customMap) {
1306
+ Object.assign(charMap, customMap);
1307
+ };
1308
+
1309
+ return replace
1310
+ }));
1311
+ } (slugify$1));
1312
+
1313
+ var slugify = slugify$1.exports;
1314
+
1315
+ var inArray = function inArray(items, name) {
1316
+ var i = 0;
1317
+
1318
+ if (Array.prototype.indexOf) {
1319
+ return items.indexOf(name, 0) >= 0;
1320
+ } else {
1321
+ for (var n = items.length; i < n; i++) {
1322
+ if (i in items && items[i] === name) {
1323
+ return true;
1324
+ }
1325
+ }
1326
+ }
1327
+
1328
+ return false;
1329
+ };
1330
+
1331
+ var findKeyInObject = function findKeyInObject(obj, key) {
1332
+ if (key && obj) {
1333
+ for (var prop in obj) {
1334
+ if (obj.hasOwnProperty(prop) && prop.toLowerCase() === key.toLowerCase()) {
1335
+ return prop;
1336
+ }
1337
+ }
1338
+ }
1339
+
1340
+ return null;
1341
+ };
1342
+
1343
+ var isObject = function isObject(value) {
1344
+ var objType = Object.prototype.toString.call(value);
1345
+ return objType === '[object Object]' || objType === '[object Error]';
1346
+ };
1347
+
1348
+ var parseNumber = function parseNumber(value) {
1349
+ if (isNaN(value) || !isFinite(value)) {
1350
+ return 0;
1351
+ }
1352
+
1353
+ var floatValue = parseFloat(value);
1354
+ return isNaN(floatValue) ? 0 : floatValue;
1355
+ };
1356
+
1357
+ var parseStringOrNumber = function parseStringOrNumber(value) {
1358
+ if (isStringOrNumber(value)) {
1359
+ return value;
1360
+ } else {
1361
+ return null;
1362
+ }
1363
+ }; // FIXME: REFACTOR for V3
1364
+ // only used in store.js to sanitize server-side formatting of
1365
+ // booleans when checking for `isDevelopmentMode`
1366
+ // Should be removed in v3
1367
+
1368
+
1369
+ var returnConvertedBoolean = function returnConvertedBoolean(data) {
1370
+ if (data === 'false' || data === '0') {
1371
+ return false;
1372
+ } else {
1373
+ return Boolean(data);
1374
+ }
1375
+ };
1376
+
1377
+ var decoded = function decoded(s) {
1378
+ return decodeURIComponent(s.replace(/\+/g, ' '));
1379
+ };
1380
+
1381
+ var converted = function converted(s) {
1382
+ if (s.indexOf('"') === 0) {
1383
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
1384
+ }
1385
+
1386
+ return s;
1387
+ };
1388
+
1389
+ var isString = function isString(value) {
1390
+ return typeof value === 'string';
1391
+ };
1392
+
1393
+ var isNumber = function isNumber(value) {
1394
+ return typeof value === 'number';
1395
+ };
1396
+
1397
+ var isFunction = function isFunction(fn) {
1398
+ return typeof fn === 'function';
1399
+ }; // TODO: Refactor this to a regex
1400
+
1401
+
1402
+ var isDataPlanSlug = function isDataPlanSlug(str) {
1403
+ return isString(str) && str === slugify(str);
1404
+ };
1405
+
1406
+ var isStringOrNumber = function isStringOrNumber(value) {
1407
+ return isString(value) || isNumber(value);
1408
+ };
1409
+
1410
+ var isEmpty = function isEmpty(value) {
1411
+ return value == null || !(Object.keys(value) || value).length;
1412
+ };
1413
+
1247
1414
  function convertEvents(mpid, sdkEvents, mpInstance) {
1248
1415
  if (!mpid) {
1249
1416
  return null;
@@ -1253,6 +1420,7 @@ var mParticle = (function () {
1253
1420
  return null;
1254
1421
  }
1255
1422
 
1423
+ var user = mpInstance.Identity.getCurrentUser();
1256
1424
  var uploadEvents = [];
1257
1425
  var lastEvent = null;
1258
1426
 
@@ -1273,6 +1441,14 @@ var mParticle = (function () {
1273
1441
  return null;
1274
1442
  }
1275
1443
 
1444
+ var currentConsentState = null; // Add the consent state from either the Last Event or the user
1445
+
1446
+ if (!isEmpty(lastEvent.ConsentState)) {
1447
+ currentConsentState = lastEvent.ConsentState;
1448
+ } else if (!isEmpty(user)) {
1449
+ currentConsentState = user.getConsentState();
1450
+ }
1451
+
1276
1452
  var upload = {
1277
1453
  source_request_id: mpInstance._Helpers.generateUniqueId(),
1278
1454
  mpid: mpid,
@@ -1293,7 +1469,7 @@ var mParticle = (function () {
1293
1469
  },
1294
1470
  user_attributes: lastEvent.UserAttributes,
1295
1471
  user_identities: convertUserIdentities(lastEvent.UserIdentities),
1296
- consent_state: convertConsentState(lastEvent.ConsentState),
1472
+ consent_state: convertConsentState(currentConsentState),
1297
1473
  integration_attributes: lastEvent.IntegrationAttributes
1298
1474
  };
1299
1475
 
@@ -1309,7 +1485,7 @@ var mParticle = (function () {
1309
1485
  return upload;
1310
1486
  }
1311
1487
  function convertConsentState(sdkConsentState) {
1312
- if (!sdkConsentState) {
1488
+ if (isEmpty(sdkConsentState)) {
1313
1489
  return null;
1314
1490
  }
1315
1491
 
@@ -1935,179 +2111,27 @@ var mParticle = (function () {
1935
2111
  }
1936
2112
  }
1937
2113
 
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
- };
2114
+ /**
2115
+ * BatchUploader contains all the logic to upload batches to mParticle.
2116
+ * It queues events as they come in and at set intervals turns them into batches.
2117
+ * It then attempts to upload them to mParticle.
2118
+ *
2119
+ * These uploads happen on an interval basis using window.fetch or XHR
2120
+ * requests, depending on what is available in the browser.
2121
+ *
2122
+ * Uploads can also be triggered on browser visibility/focus changes via an
2123
+ * event listener, which then uploads to mPartice via the browser's Beacon API.
2124
+ */
2104
2125
 
2105
2126
  var BatchUploader =
2106
2127
  /** @class */
2107
2128
  function () {
2129
+ /**
2130
+ * Creates an instance of a BatchUploader
2131
+ * @param {MParticleWebSDK} mpInstance - the mParticle SDK instance
2132
+ * @param {number} uploadInterval - the desired upload interval in milliseconds
2133
+ */
2108
2134
  function BatchUploader(mpInstance, uploadInterval) {
2109
- var _this_1 = this;
2110
-
2111
2135
  this.mpInstance = mpInstance;
2112
2136
  this.uploadIntervalMillis = uploadInterval;
2113
2137
  this.batchingEnabled = uploadInterval >= BatchUploader.MINIMUM_INTERVAL_MILLIS;
@@ -2116,8 +2140,8 @@ var mParticle = (function () {
2116
2140
  this.uploadIntervalMillis = BatchUploader.MINIMUM_INTERVAL_MILLIS;
2117
2141
  }
2118
2142
 
2119
- this.pendingEvents = [];
2120
- this.pendingUploads = [];
2143
+ this.eventsQueuedForProcessing = [];
2144
+ this.batchesQueuedForProcessing = [];
2121
2145
  var _a = this.mpInstance._Store,
2122
2146
  SDKConfig = _a.SDKConfig,
2123
2147
  devToken = _a.devToken;
@@ -2125,14 +2149,16 @@ var mParticle = (function () {
2125
2149
  var baseUrl = this.mpInstance._Helpers.createServiceUrl(SDKConfig.v3SecureServiceUrl, devToken);
2126
2150
 
2127
2151
  this.uploadUrl = "".concat(baseUrl, "/events");
2128
- setTimeout(function () {
2129
- _this_1.prepareAndUpload(true, false);
2130
- }, this.uploadIntervalMillis);
2152
+ this.uploader = window.fetch ? new FetchUploader(this.uploadUrl) : new XHRUploader(this.uploadUrl);
2153
+ this.triggerUploadInterval(true, false);
2131
2154
  this.addEventListeners();
2132
- }
2155
+ } // Adds listeners to be used trigger Navigator.sendBeacon if the browser
2156
+ // loses focus for any reason, such as closing browser tab or minimizing window
2157
+
2133
2158
 
2134
2159
  BatchUploader.prototype.addEventListeners = function () {
2135
- var _this = this;
2160
+ var _this = this; // visibility change is a document property, not window
2161
+
2136
2162
 
2137
2163
  document.addEventListener('visibilitychange', function () {
2138
2164
  _this.prepareAndUpload(false, _this.isBeaconAvailable());
@@ -2151,13 +2177,36 @@ var mParticle = (function () {
2151
2177
  }
2152
2178
 
2153
2179
  return false;
2180
+ }; // Triggers a setTimeout for prepareAndUpload
2181
+
2182
+
2183
+ BatchUploader.prototype.triggerUploadInterval = function (triggerFuture, useBeacon) {
2184
+ var _this_1 = this;
2185
+
2186
+ if (triggerFuture === void 0) {
2187
+ triggerFuture = false;
2188
+ }
2189
+
2190
+ if (useBeacon === void 0) {
2191
+ useBeacon = false;
2192
+ }
2193
+
2194
+ setTimeout(function () {
2195
+ _this_1.prepareAndUpload(triggerFuture, useBeacon);
2196
+ }, this.uploadIntervalMillis);
2154
2197
  };
2198
+ /**
2199
+ * This method will queue a single Event which will eventually be processed into a Batch
2200
+ * @param event event that should be queued
2201
+ */
2202
+
2155
2203
 
2156
2204
  BatchUploader.prototype.queueEvent = function (event) {
2157
2205
  if (!isEmpty(event)) {
2158
- this.pendingEvents.push(event);
2206
+ this.eventsQueuedForProcessing.push(event);
2159
2207
  this.mpInstance.Logger.verbose("Queuing event: ".concat(JSON.stringify(event)));
2160
- this.mpInstance.Logger.verbose("Queued event count: ".concat(this.pendingEvents.length));
2208
+ this.mpInstance.Logger.verbose("Queued event count: ".concat(this.eventsQueuedForProcessing.length)); // TODO: Remove this check once the v2 code path is removed
2209
+ // https://go.mparticle.com/work/SQDSDKS-3720
2161
2210
 
2162
2211
  if (!this.batchingEnabled || Types.TriggerUploadType[event.EventDataType]) {
2163
2212
  this.prepareAndUpload(false, false);
@@ -2175,7 +2224,7 @@ var mParticle = (function () {
2175
2224
  */
2176
2225
 
2177
2226
 
2178
- BatchUploader.createNewUploads = function (sdkEvents, defaultUser, mpInstance) {
2227
+ BatchUploader.createNewBatches = function (sdkEvents, defaultUser, mpInstance) {
2179
2228
  if (!defaultUser || !sdkEvents || !sdkEvents.length) {
2180
2229
  return null;
2181
2230
  } //bucket by MPID, and then by session, ordered by timestamp
@@ -2255,157 +2304,139 @@ var mParticle = (function () {
2255
2304
 
2256
2305
  BatchUploader.prototype.prepareAndUpload = function (triggerFuture, useBeacon) {
2257
2306
  return __awaiter(this, void 0, void 0, function () {
2258
- var currentUser, currentEvents, newUploads, currentUploads, remainingUploads;
2307
+ var currentUser, currentEvents, newBatches, batchesToUpload, batchesThatDidNotUpload, promises;
2259
2308
 
2260
- var _a, _b;
2309
+ var _a;
2261
2310
 
2262
2311
  var _this_1 = this;
2263
2312
 
2264
- return __generator(this, function (_c) {
2265
- switch (_c.label) {
2266
- case 0:
2267
- currentUser = this.mpInstance.Identity.getCurrentUser();
2268
- currentEvents = this.pendingEvents;
2269
- this.pendingEvents = [];
2270
- newUploads = BatchUploader.createNewUploads(currentEvents, currentUser, this.mpInstance);
2313
+ return __generator(this, function (_b) {
2314
+ currentUser = this.mpInstance.Identity.getCurrentUser();
2315
+ currentEvents = this.eventsQueuedForProcessing;
2316
+ this.eventsQueuedForProcessing = [];
2317
+ newBatches = BatchUploader.createNewBatches(currentEvents, currentUser, this.mpInstance);
2271
2318
 
2272
- if (newUploads && newUploads.length) {
2273
- (_a = this.pendingUploads).push.apply(_a, newUploads);
2274
- }
2319
+ if (!isEmpty(newBatches)) {
2320
+ (_a = this.batchesQueuedForProcessing).push.apply(_a, newBatches);
2321
+ }
2275
2322
 
2276
- currentUploads = this.pendingUploads;
2277
- this.pendingUploads = [];
2278
- return [4
2279
- /*yield*/
2280
- , this.upload(this.mpInstance.Logger, currentUploads, useBeacon)];
2323
+ batchesToUpload = this.batchesQueuedForProcessing;
2324
+ batchesThatDidNotUpload = [];
2325
+ this.batchesQueuedForProcessing = [];
2326
+ promises = batchesToUpload.map(function (upload) {
2327
+ return _this_1.upload(_this_1.mpInstance.Logger, upload, useBeacon);
2328
+ }); // Iterate through fulfilled promises and store any remaining batches
2329
+ // for future re-transmission attempts
2281
2330
 
2282
- case 1:
2283
- remainingUploads = _c.sent();
2331
+ if (!isEmpty(promises)) {
2332
+ Promise.all(promises).then(function (batchResponses) {
2333
+ batchResponses.forEach(function (batch) {
2334
+ return !isEmpty(batch) ? batchesThatDidNotUpload.push(batch) : null;
2335
+ });
2336
+ })["catch"](function (error) {
2337
+ _this_1.mpInstance.Logger.error("Error processing batches during upload attempt: ".concat(error));
2338
+ })["finally"](function () {
2339
+ var _a; // Any batches that did not upload should be put back into the queue for processing
2284
2340
 
2285
- if (remainingUploads && remainingUploads.length) {
2286
- (_b = this.pendingUploads).unshift.apply(_b, remainingUploads);
2287
- }
2288
2341
 
2289
- if (triggerFuture) {
2290
- setTimeout(function () {
2291
- _this_1.prepareAndUpload(true, false);
2292
- }, this.uploadIntervalMillis);
2342
+ if (!isEmpty(batchesThatDidNotUpload)) {
2343
+ (_a = _this_1.batchesQueuedForProcessing).unshift.apply(_a, batchesThatDidNotUpload);
2293
2344
  }
2345
+ });
2346
+ }
2294
2347
 
2295
- return [2
2296
- /*return*/
2297
- ];
2348
+ if (triggerFuture) {
2349
+ this.triggerUploadInterval(triggerFuture, false);
2298
2350
  }
2351
+
2352
+ return [2
2353
+ /*return*/
2354
+ ];
2299
2355
  });
2300
2356
  });
2301
2357
  };
2302
2358
 
2303
- BatchUploader.prototype.upload = function (logger, _uploads, useBeacon) {
2359
+ BatchUploader.prototype.upload = function (logger, batch, useBeacon) {
2304
2360
  return __awaiter(this, void 0, void 0, function () {
2305
- var uploader, uploads, i, fetchPayload, blob, response, e_1;
2361
+ var fetchPayload, blob, response, error_1;
2306
2362
  return __generator(this, function (_a) {
2307
2363
  switch (_a.label) {
2308
2364
  case 0:
2309
- uploads = _uploads.filter(function (upload) {
2310
- return !isEmpty(upload.events);
2311
- });
2312
-
2313
- if (isEmpty(uploads)) {
2365
+ if (isEmpty(batch) || isEmpty(batch.events)) {
2314
2366
  return [2
2315
2367
  /*return*/
2316
2368
  , null];
2317
2369
  }
2318
2370
 
2319
- logger.verbose("Uploading batches: ".concat(JSON.stringify(uploads)));
2320
- logger.verbose("Batch count: ".concat(uploads.length));
2321
- i = 0;
2322
- _a.label = 1;
2323
-
2324
- case 1:
2325
- if (!(i < uploads.length)) return [3
2326
- /*break*/
2327
- , 7];
2371
+ logger.verbose("Uploading batches: ".concat(JSON.stringify(batch)));
2328
2372
  fetchPayload = {
2329
2373
  method: 'POST',
2330
2374
  headers: {
2331
2375
  Accept: BatchUploader.CONTENT_TYPE,
2332
2376
  'Content-Type': 'text/plain;charset=UTF-8'
2333
2377
  },
2334
- body: JSON.stringify(uploads[i])
2378
+ body: JSON.stringify(batch)
2335
2379
  };
2336
2380
  if (!(useBeacon && this.isBeaconAvailable())) return [3
2337
2381
  /*break*/
2338
- , 2];
2382
+ , 1];
2339
2383
  blob = new Blob([fetchPayload.body], {
2340
2384
  type: 'text/plain;charset=UTF-8'
2341
2385
  });
2342
2386
  navigator.sendBeacon(this.uploadUrl, blob);
2343
2387
  return [3
2344
2388
  /*break*/
2345
- , 6];
2346
-
2347
- case 2:
2348
- if (!uploader) {
2349
- if (window.fetch) {
2350
- uploader = new FetchUploader(this.uploadUrl, logger);
2351
- } else {
2352
- uploader = new XHRUploader(this.uploadUrl, logger);
2353
- }
2354
- }
2389
+ , 4];
2355
2390
 
2356
- _a.label = 3;
2357
-
2358
- case 3:
2359
- _a.trys.push([3, 5,, 6]);
2391
+ case 1:
2392
+ _a.trys.push([1, 3,, 4]);
2360
2393
 
2361
2394
  return [4
2362
2395
  /*yield*/
2363
- , uploader.upload(fetchPayload, uploads, i)];
2396
+ , this.uploader.upload(fetchPayload)];
2364
2397
 
2365
- case 4:
2366
- response = _a.sent();
2398
+ case 2:
2399
+ response = _a.sent(); // TODO: Should we make this a switch statement instead?
2367
2400
 
2368
2401
  if (response.status >= 200 && response.status < 300) {
2369
- logger.verbose("Upload success for request ID: ".concat(uploads[i].source_request_id));
2402
+ logger.verbose("Upload success for request ID: ".concat(batch.source_request_id));
2403
+ return [2
2404
+ /*return*/
2405
+ , null];
2370
2406
  } else if (response.status >= 500 || response.status === 429) {
2371
- logger.error("HTTP error status ".concat(response.status, " received")); //server error, add back current events and try again later
2407
+ logger.error("HTTP error status ".concat(response.status, " received")); // Server error, return current batch and try again later
2372
2408
 
2373
2409
  return [2
2374
2410
  /*return*/
2375
- , uploads.slice(i, uploads.length)];
2411
+ , batch];
2376
2412
  } else if (response.status >= 401) {
2377
- logger.error("HTTP error status ".concat(response.status, " while uploading - please verify your API key.")); //if we're getting a 401, assume we'll keep getting a 401 and clear the uploads.
2413
+ logger.error("HTTP error status ".concat(response.status, " while uploading - please verify your API key.")); // if we're getting a 401, assume we'll keep getting a 401
2414
+ // so return the upload so it can be stored for later use
2378
2415
 
2379
2416
  return [2
2380
2417
  /*return*/
2381
- , null];
2418
+ , batch];
2382
2419
  }
2383
2420
 
2384
2421
  return [3
2385
2422
  /*break*/
2386
- , 6];
2423
+ , 4];
2387
2424
 
2388
- case 5:
2389
- e_1 = _a.sent();
2390
- logger.error("Error sending event to mParticle servers. ".concat(e_1));
2425
+ case 3:
2426
+ error_1 = _a.sent();
2427
+ logger.error("Error sending event to mParticle servers. ".concat(error_1));
2391
2428
  return [2
2392
2429
  /*return*/
2393
- , uploads.slice(i, uploads.length)];
2430
+ , batch];
2394
2431
 
2395
- case 6:
2396
- i++;
2397
- return [3
2398
- /*break*/
2399
- , 1];
2400
-
2401
- case 7:
2432
+ case 4:
2402
2433
  return [2
2403
2434
  /*return*/
2404
2435
  , null];
2405
2436
  }
2406
2437
  });
2407
2438
  });
2408
- }; //we upload JSON, but this content type is required to avoid a CORS preflight request
2439
+ }; // We upload JSON, but this content type is required to avoid a CORS preflight request
2409
2440
 
2410
2441
 
2411
2442
  BatchUploader.CONTENT_TYPE = 'text/plain;charset=UTF-8';
@@ -2416,9 +2447,8 @@ var mParticle = (function () {
2416
2447
  var AsyncUploader =
2417
2448
  /** @class */
2418
2449
  function () {
2419
- function AsyncUploader(url, logger) {
2450
+ function AsyncUploader(url) {
2420
2451
  this.url = url;
2421
- this.logger = logger;
2422
2452
  }
2423
2453
 
2424
2454
  return AsyncUploader;
@@ -2433,7 +2463,7 @@ var mParticle = (function () {
2433
2463
  return _super !== null && _super.apply(this, arguments) || this;
2434
2464
  }
2435
2465
 
2436
- FetchUploader.prototype.upload = function (fetchPayload, uploads, i) {
2466
+ FetchUploader.prototype.upload = function (fetchPayload) {
2437
2467
  return __awaiter(this, void 0, void 0, function () {
2438
2468
  var response;
2439
2469
  return __generator(this, function (_a) {
@@ -2465,7 +2495,7 @@ var mParticle = (function () {
2465
2495
  return _super !== null && _super.apply(this, arguments) || this;
2466
2496
  }
2467
2497
 
2468
- XHRUploader.prototype.upload = function (fetchPayload, uploads, i) {
2498
+ XHRUploader.prototype.upload = function (fetchPayload) {
2469
2499
  return __awaiter(this, void 0, void 0, function () {
2470
2500
  var response;
2471
2501
  return __generator(this, function (_a) {
@@ -2473,7 +2503,7 @@ var mParticle = (function () {
2473
2503
  case 0:
2474
2504
  return [4
2475
2505
  /*yield*/
2476
- , this.makeRequest(this.url, this.logger, fetchPayload.body)];
2506
+ , this.makeRequest(this.url, fetchPayload.body)];
2477
2507
 
2478
2508
  case 1:
2479
2509
  response = _a.sent();
@@ -2485,7 +2515,7 @@ var mParticle = (function () {
2485
2515
  });
2486
2516
  };
2487
2517
 
2488
- XHRUploader.prototype.makeRequest = function (url, logger, data) {
2518
+ XHRUploader.prototype.makeRequest = function (url, data) {
2489
2519
  return __awaiter(this, void 0, void 0, function () {
2490
2520
  var xhr;
2491
2521
  return __generator(this, function (_a) {
@@ -2657,7 +2687,8 @@ var mParticle = (function () {
2657
2687
  };
2658
2688
 
2659
2689
  this.sendBatchForwardingStatsToServer = function (forwardingStatsData, xhr) {
2660
- var url, data;
2690
+ var url;
2691
+ var data;
2661
2692
 
2662
2693
  try {
2663
2694
  url = mpInstance._Helpers.createServiceUrl(mpInstance._Store.SDKConfig.v2SecureServiceUrl, mpInstance._Store.devToken);
@@ -2676,25 +2707,26 @@ var mParticle = (function () {
2676
2707
  };
2677
2708
 
2678
2709
  this.sendSingleForwardingStatsToServer = function (forwardingStatsData) {
2679
- var url, data;
2710
+ var url;
2711
+ var data;
2680
2712
 
2681
2713
  try {
2682
2714
  var xhrCallback = function xhrCallback() {
2683
- if (xhr.readyState === 4) {
2684
- if (xhr.status === 202) {
2685
- mpInstance.Logger.verbose('Successfully sent ' + xhr.statusText + ' from server');
2715
+ if (xhr_1.readyState === 4) {
2716
+ if (xhr_1.status === 202) {
2717
+ mpInstance.Logger.verbose('Successfully sent ' + xhr_1.statusText + ' from server');
2686
2718
  }
2687
2719
  }
2688
2720
  };
2689
2721
 
2690
- var xhr = mpInstance._Helpers.createXHR(xhrCallback);
2722
+ var xhr_1 = mpInstance._Helpers.createXHR(xhrCallback);
2691
2723
 
2692
2724
  url = mpInstance._Helpers.createServiceUrl(mpInstance._Store.SDKConfig.v1SecureServiceUrl, mpInstance._Store.devToken);
2693
2725
  data = forwardingStatsData;
2694
2726
 
2695
- if (xhr) {
2696
- xhr.open('post', url + '/Forwarding');
2697
- xhr.send(JSON.stringify(data));
2727
+ if (xhr_1) {
2728
+ xhr_1.open('post', url + '/Forwarding');
2729
+ xhr_1.send(JSON.stringify(data));
2698
2730
  }
2699
2731
  } catch (e) {
2700
2732
  mpInstance.Logger.error('Error sending forwarding stats to mParticle servers.');
@@ -2702,8 +2734,9 @@ var mParticle = (function () {
2702
2734
  };
2703
2735
 
2704
2736
  this.prepareForwardingStats = function (forwarder, event) {
2705
- var forwardingStatsData,
2706
- queue = mpInstance._Forwarders.getForwarderStatsQueue();
2737
+ var forwardingStatsData;
2738
+
2739
+ var queue = mpInstance._Forwarders.getForwarderStatsQueue();
2707
2740
 
2708
2741
  if (forwarder && forwarder.isVisible) {
2709
2742
  forwardingStatsData = {
@@ -10646,6 +10679,11 @@ var mParticle = (function () {
10646
10679
  _resetForTests: mockFunction,
10647
10680
  _APIClient: null,
10648
10681
  _Consent: null,
10682
+ _Forwarders: null,
10683
+ _NativeSdkHelpers: null,
10684
+ _Persistence: null,
10685
+ _preInit: null,
10686
+ Consent: null,
10649
10687
  _ServerModel: null,
10650
10688
  _SessionManager: null,
10651
10689
  _Store: {