@mparticle/web-sdk 2.63.0 → 2.64.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
@@ -203,7 +203,7 @@ var mParticle = (function () {
203
203
  Base64: Base64$1
204
204
  };
205
205
 
206
- var version = "2.63.0";
206
+ var version = "2.64.0";
207
207
 
208
208
  var Constants = {
209
209
  sdkVersion: version,
@@ -918,6 +918,96 @@ var mParticle = (function () {
918
918
  var obfuscateDevData = function obfuscateDevData(data, isDevelopmentMode) {
919
919
  return isDevelopmentMode ? data : obfuscateData(data);
920
920
  };
921
+ // Standalone version of jQuery.extend, from https://github.com/dansdom/extend
922
+ // https://go.mparticle.com/work/SQDSDKS-6047
923
+ function extend() {
924
+ var args = [];
925
+ for (var _i = 0; _i < arguments.length; _i++) {
926
+ args[_i] = arguments[_i];
927
+ }
928
+ var objectHelper = {
929
+ hasOwn: Object.prototype.hasOwnProperty,
930
+ class2type: {},
931
+ type: function type(obj) {
932
+ return obj == null ? String(obj) : objectHelper.class2type[Object.prototype.toString.call(obj)] || 'object';
933
+ },
934
+ isPlainObject: function isPlainObject(obj) {
935
+ if (!obj || objectHelper.type(obj) !== 'object' || obj.nodeType || objectHelper.isWindow(obj)) {
936
+ return false;
937
+ }
938
+ try {
939
+ if (obj.constructor && !objectHelper.hasOwn.call(obj, 'constructor') && !objectHelper.hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
940
+ return false;
941
+ }
942
+ } catch (e) {
943
+ return false;
944
+ }
945
+ var key;
946
+ for (key in obj) {} // eslint-disable-line no-empty
947
+ return key === undefined || objectHelper.hasOwn.call(obj, key);
948
+ },
949
+ isArray: Array.isArray || function (obj) {
950
+ return objectHelper.type(obj) === 'array';
951
+ },
952
+ isFunction: function isFunction(obj) {
953
+ return objectHelper.type(obj) === 'function';
954
+ },
955
+ isWindow: function isWindow(obj) {
956
+ return obj != null && obj == obj.window;
957
+ }
958
+ };
959
+ var options,
960
+ name,
961
+ src,
962
+ copy,
963
+ copyIsArray,
964
+ clone,
965
+ target = args[0] || {},
966
+ i = 1,
967
+ deep = false;
968
+ var length = args.length;
969
+ if (typeof target === 'boolean') {
970
+ deep = target;
971
+ target = args[1] || {};
972
+ i = 2;
973
+ }
974
+ if (_typeof$1(target) !== 'object' && !objectHelper.isFunction(target)) {
975
+ target = {};
976
+ }
977
+ if (length === i) {
978
+ target = {};
979
+ --i;
980
+ }
981
+ for (; i < length; i++) {
982
+ if ((options = args[i]) != null) {
983
+ for (name in options) {
984
+ if (name === '__proto__' || name === 'constructor' || name === 'prototype') {
985
+ continue;
986
+ }
987
+ if (!Object.prototype.hasOwnProperty.call(options, name)) {
988
+ continue;
989
+ }
990
+ src = target[name];
991
+ copy = options[name];
992
+ if (target === copy) {
993
+ continue;
994
+ }
995
+ if (deep && copy && (objectHelper.isPlainObject(copy) || (copyIsArray = objectHelper.isArray(copy)))) {
996
+ if (copyIsArray) {
997
+ copyIsArray = false;
998
+ clone = src && objectHelper.isArray(src) ? src : [];
999
+ } else {
1000
+ clone = src && objectHelper.isPlainObject(src) ? src : {};
1001
+ }
1002
+ target[name] = extend(deep, clone, copy);
1003
+ } else if (copy !== undefined) {
1004
+ target[name] = copy;
1005
+ }
1006
+ }
1007
+ }
1008
+ }
1009
+ return target;
1010
+ }
921
1011
 
922
1012
  var MessageType$1 = {
923
1013
  SessionStart: 1,
@@ -1285,6 +1375,131 @@ var mParticle = (function () {
1285
1375
  JointSdkSelectPlacements: 'mp:jointSdkSelectPlacements',
1286
1376
  JointSdkRoktKitInit: 'mp:jointSdkRoktKitInit'
1287
1377
  };
1378
+ function getMessageTypeFromEventType(eventType) {
1379
+ switch (eventType) {
1380
+ case 'custom_event':
1381
+ return MessageType$1.PageEvent;
1382
+ case 'screen_view':
1383
+ return MessageType$1.PageView;
1384
+ case 'commerce_event':
1385
+ return MessageType$1.Commerce;
1386
+ case 'session_start':
1387
+ return MessageType$1.SessionStart;
1388
+ case 'session_end':
1389
+ return MessageType$1.SessionEnd;
1390
+ case 'crash_report':
1391
+ return MessageType$1.CrashReport;
1392
+ case 'opt_out':
1393
+ return MessageType$1.OptOut;
1394
+ case 'application_state_transition':
1395
+ return MessageType$1.AppStateTransition;
1396
+ case 'user_attribute_change':
1397
+ return MessageType$1.UserAttributeChange;
1398
+ case 'user_identity_change':
1399
+ return MessageType$1.UserIdentityChange;
1400
+ default:
1401
+ return -1;
1402
+ }
1403
+ }
1404
+ function getEventCategoryFromCustomEventType(customEventType) {
1405
+ switch (customEventType) {
1406
+ case 'navigation':
1407
+ return EventType.Navigation;
1408
+ case 'location':
1409
+ return EventType.Location;
1410
+ case 'search':
1411
+ return EventType.Search;
1412
+ case 'transaction':
1413
+ return EventType.Transaction;
1414
+ case 'user_content':
1415
+ return EventType.UserContent;
1416
+ case 'user_preference':
1417
+ return EventType.UserPreference;
1418
+ case 'social':
1419
+ return EventType.Social;
1420
+ case 'other':
1421
+ return EventType.Other;
1422
+ case 'media':
1423
+ return EventType.Media;
1424
+ case 'add_to_cart':
1425
+ return CommerceEventType.ProductAddToCart;
1426
+ case 'remove_from_cart':
1427
+ return CommerceEventType.ProductRemoveFromCart;
1428
+ case 'checkout':
1429
+ return CommerceEventType.ProductCheckout;
1430
+ case 'checkout_option':
1431
+ return CommerceEventType.ProductCheckoutOption;
1432
+ case 'click':
1433
+ return CommerceEventType.ProductClick;
1434
+ case 'view_detail':
1435
+ return CommerceEventType.ProductViewDetail;
1436
+ case 'purchase':
1437
+ return CommerceEventType.ProductPurchase;
1438
+ case 'refund':
1439
+ return CommerceEventType.ProductRefund;
1440
+ case 'promotion_view':
1441
+ return CommerceEventType.PromotionView;
1442
+ case 'promotion_click':
1443
+ return CommerceEventType.PromotionClick;
1444
+ case 'add_to_wishlist':
1445
+ return CommerceEventType.ProductAddToWishlist;
1446
+ case 'remove_from_wishlist':
1447
+ case 'remove_from_wish_list':
1448
+ return CommerceEventType.ProductRemoveFromWishlist;
1449
+ case 'impression':
1450
+ return CommerceEventType.ProductImpression;
1451
+ default:
1452
+ return EventType.Unknown;
1453
+ }
1454
+ }
1455
+ function getIdentityTypeFromBatchKey(key) {
1456
+ switch (key) {
1457
+ case 'other':
1458
+ return IdentityType.Other;
1459
+ case 'customer_id':
1460
+ return IdentityType.CustomerId;
1461
+ case 'facebook':
1462
+ return IdentityType.Facebook;
1463
+ case 'twitter':
1464
+ return IdentityType.Twitter;
1465
+ case 'google':
1466
+ return IdentityType.Google;
1467
+ case 'microsoft':
1468
+ return IdentityType.Microsoft;
1469
+ case 'yahoo':
1470
+ return IdentityType.Yahoo;
1471
+ case 'email':
1472
+ return IdentityType.Email;
1473
+ case 'facebook_custom_audience_id':
1474
+ return IdentityType.FacebookCustomAudienceId;
1475
+ case 'other_id_2':
1476
+ return IdentityType.Other2;
1477
+ case 'other_id_3':
1478
+ return IdentityType.Other3;
1479
+ case 'other_id_4':
1480
+ return IdentityType.Other4;
1481
+ case 'other_id_5':
1482
+ return IdentityType.Other5;
1483
+ case 'other_id_6':
1484
+ return IdentityType.Other6;
1485
+ case 'other_id_7':
1486
+ return IdentityType.Other7;
1487
+ case 'other_id_8':
1488
+ return IdentityType.Other8;
1489
+ case 'other_id_9':
1490
+ return IdentityType.Other9;
1491
+ case 'other_id_10':
1492
+ return IdentityType.Other10;
1493
+ case 'mobile_number':
1494
+ return IdentityType.MobileNumber;
1495
+ case 'phone_number_2':
1496
+ return IdentityType.PhoneNumber2;
1497
+ case 'phone_number_3':
1498
+ return IdentityType.PhoneNumber3;
1499
+ default:
1500
+ return -1;
1501
+ }
1502
+ }
1288
1503
  var Types = {
1289
1504
  MessageType: MessageType$1,
1290
1505
  EventType: EventType,
@@ -2186,6 +2401,44 @@ var mParticle = (function () {
2186
2401
  return dist.IdentityTypeEnum.phoneNumber3;
2187
2402
  }
2188
2403
  }
2404
+ function getEventNameFromBatchEvent(batchEvent) {
2405
+ if (!batchEvent || !batchEvent.data) {
2406
+ return '';
2407
+ }
2408
+ if (batchEvent.event_type === 'screen_view') {
2409
+ return batchEvent.data.screen_name || '';
2410
+ }
2411
+ return batchEvent.data.event_name || '';
2412
+ }
2413
+ function getEventCategoryFromBatchEvent(batchEvent) {
2414
+ if (!batchEvent || !batchEvent.data) {
2415
+ return Types.EventType.Unknown;
2416
+ }
2417
+ var data = batchEvent.data;
2418
+ if (data.custom_event_type) {
2419
+ return getEventCategoryFromCustomEventType(data.custom_event_type);
2420
+ }
2421
+ if (batchEvent.event_type === 'commerce_event') {
2422
+ return getCommerceEventCategory(data);
2423
+ }
2424
+ return Types.EventType.Unknown;
2425
+ }
2426
+ function getCommerceEventCategory(data) {
2427
+ if (data.product_action && data.product_action.action) {
2428
+ return getEventCategoryFromCustomEventType(data.product_action.action);
2429
+ }
2430
+ var promoAction = data.promotion_action && data.promotion_action.action;
2431
+ if (promoAction === 'view') {
2432
+ return Types.CommerceEventType.PromotionView;
2433
+ }
2434
+ if (promoAction === 'click') {
2435
+ return Types.CommerceEventType.PromotionClick;
2436
+ }
2437
+ if (data.product_impressions) {
2438
+ return Types.CommerceEventType.ProductImpression;
2439
+ }
2440
+ return Types.EventType.Unknown;
2441
+ }
2189
2442
 
2190
2443
  var BaseVault = /** @class */function () {
2191
2444
  /**
@@ -3071,7 +3324,7 @@ var mParticle = (function () {
3071
3324
  var defaultOptions = {
3072
3325
  shouldUploadEvent: true
3073
3326
  };
3074
- var options = mpInstance._Helpers.extend(defaultOptions, _options);
3327
+ var options = extend(defaultOptions, _options);
3075
3328
  if (mpInstance._Store.webviewBridgeEnabled) {
3076
3329
  mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.LogEvent, JSON.stringify(event));
3077
3330
  return;
@@ -3400,118 +3653,7 @@ var mParticle = (function () {
3400
3653
  mpInstance.Logger.error('There was an error with your callback: ' + e);
3401
3654
  }
3402
3655
  };
3403
-
3404
- // https://go.mparticle.com/work/SQDSDKS-6047
3405
- // Standalone version of jQuery.extend, from https://github.com/dansdom/extend
3406
- this.extend = function () {
3407
- var options,
3408
- name,
3409
- src,
3410
- copy,
3411
- copyIsArray,
3412
- clone,
3413
- target = arguments[0] || {},
3414
- i = 1,
3415
- length = arguments.length,
3416
- deep = false,
3417
- // helper which replicates the jquery internal functions
3418
- objectHelper = {
3419
- hasOwn: Object.prototype.hasOwnProperty,
3420
- class2type: {},
3421
- type: function type(obj) {
3422
- return obj == null ? String(obj) : objectHelper.class2type[Object.prototype.toString.call(obj)] || 'object';
3423
- },
3424
- isPlainObject: function isPlainObject(obj) {
3425
- if (!obj || objectHelper.type(obj) !== 'object' || obj.nodeType || objectHelper.isWindow(obj)) {
3426
- return false;
3427
- }
3428
- try {
3429
- if (obj.constructor && !objectHelper.hasOwn.call(obj, 'constructor') && !objectHelper.hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
3430
- return false;
3431
- }
3432
- } catch (e) {
3433
- return false;
3434
- }
3435
- var key;
3436
- for (key in obj) {} // eslint-disable-line no-empty
3437
-
3438
- return key === undefined || objectHelper.hasOwn.call(obj, key);
3439
- },
3440
- isArray: Array.isArray || function (obj) {
3441
- return objectHelper.type(obj) === 'array';
3442
- },
3443
- isFunction: function isFunction(obj) {
3444
- return objectHelper.type(obj) === 'function';
3445
- },
3446
- isWindow: function isWindow(obj) {
3447
- return obj != null && obj == obj.window;
3448
- }
3449
- }; // end of objectHelper
3450
-
3451
- // Handle a deep copy situation
3452
- if (typeof target === 'boolean') {
3453
- deep = target;
3454
- target = arguments[1] || {};
3455
- // skip the boolean and the target
3456
- i = 2;
3457
- }
3458
-
3459
- // Handle case when target is a string or something (possible in deep copy)
3460
- if (_typeof$1(target) !== 'object' && !objectHelper.isFunction(target)) {
3461
- target = {};
3462
- }
3463
-
3464
- // If no second argument is used then this can extend an object that is using this method
3465
- if (length === i) {
3466
- target = this;
3467
- --i;
3468
- }
3469
- for (; i < length; i++) {
3470
- // Only deal with non-null/undefined values
3471
- if ((options = arguments[i]) != null) {
3472
- // Extend the base object
3473
- for (name in options) {
3474
- // Prevent prototype pollution
3475
- // https://github.com/advisories/GHSA-jf85-cpcp-j695
3476
- if (name === '__proto__' || name === 'constructor' || name === 'prototype') {
3477
- continue;
3478
- }
3479
-
3480
- // Only copy own properties
3481
- if (!Object.prototype.hasOwnProperty.call(options, name)) {
3482
- continue;
3483
- }
3484
- src = target[name];
3485
- copy = options[name];
3486
-
3487
- // Prevent never-ending loop
3488
- if (target === copy) {
3489
- continue;
3490
- }
3491
-
3492
- // Recurse if we're merging plain objects or arrays
3493
- if (deep && copy && (objectHelper.isPlainObject(copy) || (copyIsArray = objectHelper.isArray(copy)))) {
3494
- if (copyIsArray) {
3495
- copyIsArray = false;
3496
- clone = src && objectHelper.isArray(src) ? src : [];
3497
- } else {
3498
- clone = src && objectHelper.isPlainObject(src) ? src : {};
3499
- }
3500
-
3501
- // Never move original objects, clone them
3502
- target[name] = self.extend(deep, clone, copy);
3503
-
3504
- // Don't bring in undefined values
3505
- } else if (copy !== undefined) {
3506
- target[name] = copy;
3507
- }
3508
- }
3509
- }
3510
- }
3511
-
3512
- // Return the modified object
3513
- return target;
3514
- };
3656
+ this.extend = extend;
3515
3657
  this.createServiceUrl = function (secureServiceUrl, devToken) {
3516
3658
  var serviceScheme = window.mParticle && mpInstance._Store.SDKConfig.forceHttps ? 'https://' : window.location.protocol + '//';
3517
3659
  var baseUrl;
@@ -4312,7 +4454,7 @@ var mParticle = (function () {
4312
4454
  commerceEvent.ProductImpressions.forEach(function (productImpression) {
4313
4455
  if (productImpression.ProductList) {
4314
4456
  productImpression.ProductList.forEach(function (product) {
4315
- var attributes = mpInstance._Helpers.extend(false, {}, commerceEvent.EventAttributes);
4457
+ var attributes = extend(false, {}, commerceEvent.EventAttributes);
4316
4458
  if (product.Attributes) {
4317
4459
  for (var attribute in product.Attributes) {
4318
4460
  attributes[attribute] = product.Attributes[attribute];
@@ -4347,7 +4489,7 @@ var mParticle = (function () {
4347
4489
  }
4348
4490
  var promotions = commerceEvent.PromotionAction.PromotionList;
4349
4491
  promotions.forEach(function (promotion) {
4350
- var attributes = mpInstance._Helpers.extend(false, {}, commerceEvent.EventAttributes);
4492
+ var attributes = extend(false, {}, commerceEvent.EventAttributes);
4351
4493
  self.extractPromotionAttributes(attributes, promotion);
4352
4494
  var appEvent = mpInstance._ServerModel.createEventObject({
4353
4495
  messageType: Types.MessageType.PageEvent,
@@ -4366,7 +4508,7 @@ var mParticle = (function () {
4366
4508
  }
4367
4509
  var shouldExtractActionAttributes = false;
4368
4510
  if (commerceEvent.ProductAction.ProductActionType === Types.ProductActionType.Purchase || commerceEvent.ProductAction.ProductActionType === Types.ProductActionType.Refund) {
4369
- var attributes = mpInstance._Helpers.extend(false, {}, commerceEvent.EventAttributes);
4511
+ var attributes = extend(false, {}, commerceEvent.EventAttributes);
4370
4512
  attributes['Product Count'] = commerceEvent.ProductAction.ProductList ? commerceEvent.ProductAction.ProductList.length : 0;
4371
4513
  self.extractActionAttributes(attributes, commerceEvent.ProductAction);
4372
4514
  if (commerceEvent.CurrencyCode) {
@@ -4387,7 +4529,7 @@ var mParticle = (function () {
4387
4529
  return appEvents;
4388
4530
  }
4389
4531
  products.forEach(function (product) {
4390
- var attributes = mpInstance._Helpers.extend(false, commerceEvent.EventAttributes, product.Attributes);
4532
+ var attributes = extend(false, commerceEvent.EventAttributes, product.Attributes);
4391
4533
  if (shouldExtractActionAttributes) {
4392
4534
  self.extractActionAttributes(attributes, commerceEvent.ProductAction);
4393
4535
  } else {
@@ -4858,7 +5000,7 @@ var mParticle = (function () {
4858
5000
  };
4859
5001
  this.syncPersistenceData = function () {
4860
5002
  var persistenceData = mpInstance._Persistence.getPersistence();
4861
- _this.persistenceData = mpInstance._Helpers.extend({}, _this.persistenceData, persistenceData);
5003
+ _this.persistenceData = extend({}, _this.persistenceData, persistenceData);
4862
5004
  };
4863
5005
  this.getUserAttributes = function (mpid) {
4864
5006
  return _this._getFromPersistence(mpid, 'ua') || {};
@@ -5121,7 +5263,7 @@ var mParticle = (function () {
5121
5263
  if (localStorageData) {
5122
5264
  if (cookies) {
5123
5265
  // https://go.mparticle.com/work/SQDSDKS-6047
5124
- allData = mpInstance._Helpers.extend(false, localStorageData, cookies);
5266
+ allData = extend(false, localStorageData, cookies);
5125
5267
  } else {
5126
5268
  allData = localStorageData;
5127
5269
  }
@@ -5136,7 +5278,7 @@ var mParticle = (function () {
5136
5278
  if (cookies) {
5137
5279
  if (localStorageData) {
5138
5280
  // https://go.mparticle.com/work/SQDSDKS-6047
5139
- allData = mpInstance._Helpers.extend(false, localStorageData, cookies);
5281
+ allData = extend(false, localStorageData, cookies);
5140
5282
  } else {
5141
5283
  allData = cookies;
5142
5284
  }
@@ -5276,7 +5418,7 @@ var mParticle = (function () {
5276
5418
  localStorageData.cu = mpid;
5277
5419
  }
5278
5420
  if (Object.keys(mpInstance._Store.nonCurrentUserMPIDs).length) {
5279
- localStorageData = mpInstance._Helpers.extend({}, localStorageData, mpInstance._Store.nonCurrentUserMPIDs);
5421
+ localStorageData = extend({}, localStorageData, mpInstance._Store.nonCurrentUserMPIDs);
5280
5422
  mpInstance._Store.nonCurrentUserMPIDs = {};
5281
5423
  }
5282
5424
  localStorageData = setGlobalStorageAttributes(localStorageData);
@@ -5419,7 +5561,7 @@ var mParticle = (function () {
5419
5561
  cookies.l = mpInstance._Store.isLoggedIn ? 1 : 0;
5420
5562
  cookies = setGlobalStorageAttributes(cookies);
5421
5563
  if (Object.keys(mpInstance._Store.nonCurrentUserMPIDs).length) {
5422
- cookies = mpInstance._Helpers.extend({}, cookies, mpInstance._Store.nonCurrentUserMPIDs);
5564
+ cookies = extend({}, cookies, mpInstance._Store.nonCurrentUserMPIDs);
5423
5565
  mpInstance._Store.nonCurrentUserMPIDs = {};
5424
5566
  }
5425
5567
  encodedCookiesWithExpirationAndPath = self.reduceAndEncodePersistence(cookies, expires, domain, mpInstance._Store.SDKConfig.maxCookieSize);
@@ -6505,6 +6647,117 @@ var mParticle = (function () {
6505
6647
  };
6506
6648
  }
6507
6649
 
6650
+ var FORWARDING_RULE_MESSAGE_TYPES = [Types.MessageType.PageEvent, Types.MessageType.PageView, Types.MessageType.Commerce];
6651
+ function inFilteredList(filterList, hash) {
6652
+ if (filterList && filterList.length) {
6653
+ return inArray(filterList, hash);
6654
+ }
6655
+ return false;
6656
+ }
6657
+ function isBlockedByForwardingRule(messageType, attributes, forwarder) {
6658
+ if (!FORWARDING_RULE_MESSAGE_TYPES.includes(messageType) || !forwarder.filteringEventAttributeValue || !forwarder.filteringEventAttributeValue.eventAttributeName || !forwarder.filteringEventAttributeValue.eventAttributeValue) {
6659
+ return false;
6660
+ }
6661
+ var foundProp = null;
6662
+ if (attributes) {
6663
+ for (var prop in attributes) {
6664
+ if (attributes.hasOwnProperty(prop)) {
6665
+ var hashedName = KitFilterHelper.hashAttributeConditionalForwarding(prop);
6666
+ if (hashedName === forwarder.filteringEventAttributeValue.eventAttributeName) {
6667
+ foundProp = {
6668
+ name: hashedName,
6669
+ value: KitFilterHelper.hashAttributeConditionalForwarding(attributes[prop])
6670
+ };
6671
+ break;
6672
+ }
6673
+ }
6674
+ }
6675
+ }
6676
+ var isMatch = foundProp !== null && foundProp.value === forwarder.filteringEventAttributeValue.eventAttributeValue;
6677
+ var shouldInclude = forwarder.filteringEventAttributeValue.includeOnMatch === true ? isMatch : !isMatch;
6678
+ return !shouldInclude;
6679
+ }
6680
+ function isBlockedByEventFilter(messageType, hashedEventName, hashedEventType, forwarder) {
6681
+ if (messageType === Types.MessageType.PageEvent && (inFilteredList(forwarder.eventNameFilters, hashedEventName) || inFilteredList(forwarder.eventTypeFilters, hashedEventType))) {
6682
+ return true;
6683
+ } else if (messageType === Types.MessageType.Commerce && inFilteredList(forwarder.eventTypeFilters, hashedEventType)) {
6684
+ return true;
6685
+ } else if (messageType === Types.MessageType.PageView && inFilteredList(forwarder.screenNameFilters, hashedEventName)) {
6686
+ return true;
6687
+ }
6688
+ return false;
6689
+ }
6690
+ function filterEventAttributes(messageType, eventCategory, eventName, attributes, forwarder) {
6691
+ if (!attributes) {
6692
+ return attributes;
6693
+ }
6694
+ var filterList;
6695
+ if (messageType === Types.MessageType.PageEvent) {
6696
+ filterList = forwarder.attributeFilters;
6697
+ } else if (messageType === Types.MessageType.PageView) {
6698
+ filterList = forwarder.screenAttributeFilters;
6699
+ }
6700
+ if (!filterList) {
6701
+ return attributes;
6702
+ }
6703
+ var filtered = {};
6704
+ for (var attrName in attributes) {
6705
+ if (attributes.hasOwnProperty(attrName)) {
6706
+ var hash = KitFilterHelper.hashEventAttributeKey(eventCategory, eventName, attrName);
6707
+ if (!inArray(filterList, hash)) {
6708
+ filtered[attrName] = attributes[attrName];
6709
+ }
6710
+ }
6711
+ }
6712
+ return filtered;
6713
+ }
6714
+ function filterUserIdentities(userIdentities, filterList) {
6715
+ if (!userIdentities || !userIdentities.length) {
6716
+ return userIdentities || [];
6717
+ }
6718
+ return userIdentities.filter(function (userIdentity) {
6719
+ return !inArray(filterList, KitFilterHelper.hashUserIdentity(userIdentity.Type));
6720
+ });
6721
+ }
6722
+ function isBatchEventAllowed(batchEvent, forwarder) {
6723
+ if (!batchEvent || !batchEvent.data) {
6724
+ return true;
6725
+ }
6726
+ var messageType = getMessageTypeFromEventType(batchEvent.event_type);
6727
+ var eventName = getEventNameFromBatchEvent(batchEvent);
6728
+ var eventCategory = getEventCategoryFromBatchEvent(batchEvent);
6729
+ if (isBlockedByForwardingRule(messageType, batchEvent.data.custom_attributes, forwarder)) {
6730
+ return false;
6731
+ }
6732
+ var hashedEventName = KitFilterHelper.hashEventName(eventName, eventCategory);
6733
+ var hashedEventType = KitFilterHelper.hashEventType(eventCategory);
6734
+ return !isBlockedByEventFilter(messageType, hashedEventName, hashedEventType, forwarder);
6735
+ }
6736
+ function filterBatchEventAttributes(batchEvent, forwarder) {
6737
+ if (!batchEvent || !batchEvent.data) {
6738
+ return;
6739
+ }
6740
+ var messageType = getMessageTypeFromEventType(batchEvent.event_type);
6741
+ var eventName = getEventNameFromBatchEvent(batchEvent);
6742
+ var eventCategory = getEventCategoryFromBatchEvent(batchEvent);
6743
+ batchEvent.data.custom_attributes = filterEventAttributes(messageType, eventCategory, eventName, batchEvent.data.custom_attributes, forwarder);
6744
+ }
6745
+ function filterBatchIdentities(userIdentities, filterList) {
6746
+ if (!userIdentities || !filterList) {
6747
+ return userIdentities;
6748
+ }
6749
+ var filtered = {};
6750
+ for (var key in userIdentities) {
6751
+ if (userIdentities.hasOwnProperty(key)) {
6752
+ var identityType = getIdentityTypeFromBatchKey(key);
6753
+ if (identityType === -1 || !inArray(filterList, identityType)) {
6754
+ filtered[key] = userIdentities[key];
6755
+ }
6756
+ }
6757
+ }
6758
+ return filtered;
6759
+ }
6760
+
6508
6761
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
6509
6762
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6510
6763
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -6541,7 +6794,7 @@ var mParticle = (function () {
6541
6794
  return false;
6542
6795
  }
6543
6796
  var filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(userIdentities, forwarder.userIdentityFilters);
6544
- var filteredUserAttributes = mpInstance._Helpers.filterUserAttributes(user ? user.getAllUserAttributes() : {}, forwarder.userAttributeFilters);
6797
+ var filteredUserAttributes = KitFilterHelper.filterUserAttributes(user ? user.getAllUserAttributes() : {}, forwarder.userAttributeFilters);
6545
6798
  if (!forwarder.initialized) {
6546
6799
  forwarder.logger = mpInstance.Logger;
6547
6800
  forwarder.init(forwarder.settings, forwardingStatsCallback, false, null, filteredUserAttributes, filteredUserIdentities, mpInstance._Store.SDKConfig.appVersion, mpInstance._Store.SDKConfig.appName, mpInstance._Store.SDKConfig.customFlags, mpInstance._Store.clientId);
@@ -6611,109 +6864,33 @@ var mParticle = (function () {
6611
6864
  }
6612
6865
  };
6613
6866
  this.sendEventToForwarders = function (event) {
6614
- var clonedEvent,
6615
- hashedEventName,
6616
- hashedEventType,
6617
- filterUserIdentities = function filterUserIdentities(event, filterList) {
6618
- if (event.UserIdentities && event.UserIdentities.length) {
6619
- event.UserIdentities.forEach(function (userIdentity, i) {
6620
- if (mpInstance._Helpers.inArray(filterList, KitFilterHelper.hashUserIdentity(userIdentity.Type))) {
6621
- event.UserIdentities.splice(i, 1);
6622
- if (i > 0) {
6623
- i--;
6624
- }
6625
- }
6626
- });
6627
- }
6628
- },
6629
- filterAttributes = function filterAttributes(event, filterList) {
6630
- var hash;
6631
- if (!filterList) {
6632
- return;
6633
- }
6634
- for (var attrName in event.EventAttributes) {
6635
- if (event.EventAttributes.hasOwnProperty(attrName)) {
6636
- hash = KitFilterHelper.hashEventAttributeKey(event.EventCategory, event.EventName, attrName);
6637
- if (mpInstance._Helpers.inArray(filterList, hash)) {
6638
- delete event.EventAttributes[attrName];
6639
- }
6640
- }
6641
- }
6642
- },
6643
- inFilteredList = function inFilteredList(filterList, hash) {
6644
- if (filterList && filterList.length) {
6645
- if (mpInstance._Helpers.inArray(filterList, hash)) {
6646
- return true;
6647
- }
6648
- }
6649
- return false;
6650
- },
6651
- forwardingRuleMessageTypes = [Types.MessageType.PageEvent, Types.MessageType.PageView, Types.MessageType.Commerce];
6867
+ var clonedEvent;
6868
+ var hashedEventName;
6869
+ var hashedEventType;
6652
6870
  if (!mpInstance._Store.webviewBridgeEnabled && mpInstance._Store.activeForwarders) {
6653
6871
  hashedEventName = KitFilterHelper.hashEventName(event.EventName, event.EventCategory);
6654
6872
  hashedEventType = KitFilterHelper.hashEventType(event.EventCategory);
6655
6873
  for (var i = 0; i < mpInstance._Store.activeForwarders.length; i++) {
6656
- // Check attribute forwarding rule. This rule allows users to only forward an event if a
6657
- // specific attribute exists and has a specific value. Alternatively, they can specify
6658
- // that an event not be forwarded if the specified attribute name and value exists.
6659
- // The two cases are controlled by the "includeOnMatch" boolean value.
6660
- // Supported message types for attribute forwarding rules are defined in the forwardingRuleMessageTypes array
6661
-
6662
- if (forwardingRuleMessageTypes.indexOf(event.EventDataType) > -1 && mpInstance._Store.activeForwarders[i].filteringEventAttributeValue && mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeName && mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeValue) {
6663
- var foundProp = null;
6664
-
6665
- // Attempt to find the attribute in the collection of event attributes
6666
- if (event.EventAttributes) {
6667
- for (var prop in event.EventAttributes) {
6668
- var hashedEventAttributeName;
6669
- hashedEventAttributeName = KitFilterHelper.hashAttributeConditionalForwarding(prop);
6670
- if (hashedEventAttributeName === mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeName) {
6671
- foundProp = {
6672
- name: hashedEventAttributeName,
6673
- value: KitFilterHelper.hashAttributeConditionalForwarding(event.EventAttributes[prop])
6674
- };
6675
- }
6676
- if (foundProp) {
6677
- break;
6678
- }
6679
- }
6680
- }
6681
- var isMatch = foundProp !== null && foundProp.value === mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeValue;
6682
- var shouldInclude = mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.includeOnMatch === true ? isMatch : !isMatch;
6683
- if (!shouldInclude) {
6684
- continue;
6685
- }
6874
+ var forwarder = mpInstance._Store.activeForwarders[i];
6875
+ if (isBlockedByForwardingRule(event.EventDataType, event.EventAttributes, forwarder)) {
6876
+ continue;
6686
6877
  }
6687
6878
 
6688
6879
  // Clone the event object, as we could be sending different attributes to each forwarder
6689
- clonedEvent = {};
6690
- clonedEvent = mpInstance._Helpers.extend(true, clonedEvent, event);
6691
- // Check event filtering rules
6692
- if (event.EventDataType === Types.MessageType.PageEvent && (inFilteredList(mpInstance._Store.activeForwarders[i].eventNameFilters, hashedEventName) || inFilteredList(mpInstance._Store.activeForwarders[i].eventTypeFilters, hashedEventType))) {
6880
+ clonedEvent = extend(true, {}, event);
6881
+ if (isBlockedByEventFilter(event.EventDataType, hashedEventName, hashedEventType, forwarder)) {
6693
6882
  continue;
6694
- } else if (event.EventDataType === Types.MessageType.Commerce && inFilteredList(mpInstance._Store.activeForwarders[i].eventTypeFilters, hashedEventType)) {
6695
- continue;
6696
- } else if (event.EventDataType === Types.MessageType.PageView && inFilteredList(mpInstance._Store.activeForwarders[i].screenNameFilters, hashedEventName)) {
6697
- continue;
6698
- }
6699
-
6700
- // Check attribute filtering rules
6701
- if (clonedEvent.EventAttributes) {
6702
- if (event.EventDataType === Types.MessageType.PageEvent) {
6703
- filterAttributes(clonedEvent, mpInstance._Store.activeForwarders[i].attributeFilters);
6704
- } else if (event.EventDataType === Types.MessageType.PageView) {
6705
- filterAttributes(clonedEvent, mpInstance._Store.activeForwarders[i].screenAttributeFilters);
6706
- }
6707
6883
  }
6884
+ clonedEvent.EventAttributes = filterEventAttributes(event.EventDataType, event.EventCategory, event.EventName, clonedEvent.EventAttributes, forwarder);
6708
6885
 
6709
6886
  // Check user identity filtering rules
6710
- filterUserIdentities(clonedEvent, mpInstance._Store.activeForwarders[i].userIdentityFilters);
6887
+ clonedEvent.UserIdentities = filterUserIdentities(clonedEvent.UserIdentities, forwarder.userIdentityFilters);
6711
6888
 
6712
6889
  // Check user attribute filtering rules
6713
- clonedEvent.UserAttributes = mpInstance._Helpers.filterUserAttributes(clonedEvent.UserAttributes, mpInstance._Store.activeForwarders[i].userAttributeFilters);
6714
- if (mpInstance._Store.activeForwarders[i].process) {
6715
- mpInstance.Logger.verbose('Sending message to forwarder: ' + mpInstance._Store.activeForwarders[i].name);
6716
- var result = mpInstance._Store.activeForwarders[i].process(clonedEvent);
6890
+ clonedEvent.UserAttributes = KitFilterHelper.filterUserAttributes(clonedEvent.UserAttributes, forwarder.userAttributeFilters);
6891
+ if (forwarder.process) {
6892
+ mpInstance.Logger.verbose('Sending message to forwarder: ' + forwarder.name);
6893
+ var result = forwarder.process(clonedEvent);
6717
6894
  if (result) {
6718
6895
  mpInstance.Logger.verbose(result);
6719
6896
  }
@@ -6728,11 +6905,28 @@ var mParticle = (function () {
6728
6905
  var _iterator = _createForOfIteratorHelper(mpInstance._Store.activeForwarders),
6729
6906
  _step;
6730
6907
  try {
6731
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
6732
- var forwarder = _step.value;
6733
- if (forwarder.processBatch) {
6908
+ var _loop = function _loop() {
6909
+ var forwarder = _step.value;
6910
+ if (!forwarder.processBatch) {
6911
+ return 0; // continue
6912
+ }
6734
6913
  try {
6735
- var batchCopy = mpInstance._Helpers.extend(true, {}, batch);
6914
+ var batchCopy = extend(true, {}, batch);
6915
+ if (batchCopy.events) {
6916
+ batchCopy.events = batchCopy.events.filter(function (batchEvent) {
6917
+ return isBatchEventAllowed(batchEvent, forwarder);
6918
+ });
6919
+ batchCopy.events.forEach(function (batchEvent) {
6920
+ filterBatchEventAttributes(batchEvent, forwarder);
6921
+ });
6922
+ }
6923
+ batchCopy.user_identities = filterBatchIdentities(batchCopy.user_identities, forwarder.userIdentityFilters);
6924
+ if (batchCopy.user_attributes) {
6925
+ batchCopy.user_attributes = KitFilterHelper.filterUserAttributes(batchCopy.user_attributes, forwarder.userAttributeFilters);
6926
+ }
6927
+ if (!batchCopy.events || batchCopy.events.length === 0) {
6928
+ return 0; // continue
6929
+ }
6736
6930
  var result = forwarder.processBatch(batchCopy);
6737
6931
  if (result) {
6738
6932
  mpInstance.Logger.verbose(result);
@@ -6740,7 +6934,11 @@ var mParticle = (function () {
6740
6934
  } catch (e) {
6741
6935
  mpInstance.Logger.verbose(e);
6742
6936
  }
6743
- }
6937
+ },
6938
+ _ret;
6939
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
6940
+ _ret = _loop();
6941
+ if (_ret === 0) continue;
6744
6942
  }
6745
6943
  } catch (err) {
6746
6944
  _iterator.e(err);
@@ -7237,7 +7435,7 @@ var mParticle = (function () {
7237
7435
  mpInstance._Store.sessionStartDate = null;
7238
7436
  }
7239
7437
  uploadObject.Timestamp = mpInstance._Store.dateLastEventSent.getTime();
7240
- return mpInstance._Helpers.extend({}, eventObject, uploadObject);
7438
+ return extend({}, eventObject, uploadObject);
7241
7439
  }
7242
7440
  return null;
7243
7441
  };
@@ -10634,7 +10832,7 @@ var mParticle = (function () {
10634
10832
  if (!config.hasOwnProperty('requestConfig') || config.requestConfig) {
10635
10833
  var configApiClient = new ConfigAPIClient(apiKey, config, this);
10636
10834
  configApiClient.getSDKConfiguration().then(function (result) {
10637
- var mergedConfig = _this._Helpers.extend({}, config, result);
10835
+ var mergedConfig = extend({}, config, result);
10638
10836
  completeSDKInitialization(apiKey, mergedConfig, _this);
10639
10837
  });
10640
10838
  } else {
@@ -11760,7 +11958,7 @@ var mParticle = (function () {
11760
11958
  generateUniqueId: function generateUniqueId() {
11761
11959
  return 'mockId';
11762
11960
  },
11763
- extend: window.mParticle.getInstance()._Helpers.extend,
11961
+ extend: extend,
11764
11962
  createServiceUrl: mockFunction,
11765
11963
  parseNumber: mockFunction,
11766
11964
  isObject: mockFunction,