@mparticle/web-sdk 2.62.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.62.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
  /**
@@ -2664,6 +2917,13 @@ var mParticle = (function () {
2664
2917
  for (var _d = 0, _e = Array.from(eventsBySession.entries()); _d < _e.length; _d++) {
2665
2918
  var entry_1 = _e[_d];
2666
2919
  var uploadBatchObject = convertEvents(mpid, entry_1[1], mpInstance);
2920
+ if (uploadBatchObject) {
2921
+ try {
2922
+ mpInstance._Forwarders.sendBatchToForwarders(uploadBatchObject);
2923
+ } catch (e) {
2924
+ mpInstance.Logger.error("Error forwarding batch to kits. ".concat(e));
2925
+ }
2926
+ }
2667
2927
  var onCreateBatchCallback = mpInstance._Store.SDKConfig.onCreateBatch;
2668
2928
  if (onCreateBatchCallback) {
2669
2929
  uploadBatchObject = onCreateBatchCallback(uploadBatchObject);
@@ -3064,7 +3324,7 @@ var mParticle = (function () {
3064
3324
  var defaultOptions = {
3065
3325
  shouldUploadEvent: true
3066
3326
  };
3067
- var options = mpInstance._Helpers.extend(defaultOptions, _options);
3327
+ var options = extend(defaultOptions, _options);
3068
3328
  if (mpInstance._Store.webviewBridgeEnabled) {
3069
3329
  mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.LogEvent, JSON.stringify(event));
3070
3330
  return;
@@ -3393,118 +3653,7 @@ var mParticle = (function () {
3393
3653
  mpInstance.Logger.error('There was an error with your callback: ' + e);
3394
3654
  }
3395
3655
  };
3396
-
3397
- // https://go.mparticle.com/work/SQDSDKS-6047
3398
- // Standalone version of jQuery.extend, from https://github.com/dansdom/extend
3399
- this.extend = function () {
3400
- var options,
3401
- name,
3402
- src,
3403
- copy,
3404
- copyIsArray,
3405
- clone,
3406
- target = arguments[0] || {},
3407
- i = 1,
3408
- length = arguments.length,
3409
- deep = false,
3410
- // helper which replicates the jquery internal functions
3411
- objectHelper = {
3412
- hasOwn: Object.prototype.hasOwnProperty,
3413
- class2type: {},
3414
- type: function type(obj) {
3415
- return obj == null ? String(obj) : objectHelper.class2type[Object.prototype.toString.call(obj)] || 'object';
3416
- },
3417
- isPlainObject: function isPlainObject(obj) {
3418
- if (!obj || objectHelper.type(obj) !== 'object' || obj.nodeType || objectHelper.isWindow(obj)) {
3419
- return false;
3420
- }
3421
- try {
3422
- if (obj.constructor && !objectHelper.hasOwn.call(obj, 'constructor') && !objectHelper.hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
3423
- return false;
3424
- }
3425
- } catch (e) {
3426
- return false;
3427
- }
3428
- var key;
3429
- for (key in obj) {} // eslint-disable-line no-empty
3430
-
3431
- return key === undefined || objectHelper.hasOwn.call(obj, key);
3432
- },
3433
- isArray: Array.isArray || function (obj) {
3434
- return objectHelper.type(obj) === 'array';
3435
- },
3436
- isFunction: function isFunction(obj) {
3437
- return objectHelper.type(obj) === 'function';
3438
- },
3439
- isWindow: function isWindow(obj) {
3440
- return obj != null && obj == obj.window;
3441
- }
3442
- }; // end of objectHelper
3443
-
3444
- // Handle a deep copy situation
3445
- if (typeof target === 'boolean') {
3446
- deep = target;
3447
- target = arguments[1] || {};
3448
- // skip the boolean and the target
3449
- i = 2;
3450
- }
3451
-
3452
- // Handle case when target is a string or something (possible in deep copy)
3453
- if (_typeof$1(target) !== 'object' && !objectHelper.isFunction(target)) {
3454
- target = {};
3455
- }
3456
-
3457
- // If no second argument is used then this can extend an object that is using this method
3458
- if (length === i) {
3459
- target = this;
3460
- --i;
3461
- }
3462
- for (; i < length; i++) {
3463
- // Only deal with non-null/undefined values
3464
- if ((options = arguments[i]) != null) {
3465
- // Extend the base object
3466
- for (name in options) {
3467
- // Prevent prototype pollution
3468
- // https://github.com/advisories/GHSA-jf85-cpcp-j695
3469
- if (name === '__proto__' || name === 'constructor' || name === 'prototype') {
3470
- continue;
3471
- }
3472
-
3473
- // Only copy own properties
3474
- if (!Object.prototype.hasOwnProperty.call(options, name)) {
3475
- continue;
3476
- }
3477
- src = target[name];
3478
- copy = options[name];
3479
-
3480
- // Prevent never-ending loop
3481
- if (target === copy) {
3482
- continue;
3483
- }
3484
-
3485
- // Recurse if we're merging plain objects or arrays
3486
- if (deep && copy && (objectHelper.isPlainObject(copy) || (copyIsArray = objectHelper.isArray(copy)))) {
3487
- if (copyIsArray) {
3488
- copyIsArray = false;
3489
- clone = src && objectHelper.isArray(src) ? src : [];
3490
- } else {
3491
- clone = src && objectHelper.isPlainObject(src) ? src : {};
3492
- }
3493
-
3494
- // Never move original objects, clone them
3495
- target[name] = self.extend(deep, clone, copy);
3496
-
3497
- // Don't bring in undefined values
3498
- } else if (copy !== undefined) {
3499
- target[name] = copy;
3500
- }
3501
- }
3502
- }
3503
- }
3504
-
3505
- // Return the modified object
3506
- return target;
3507
- };
3656
+ this.extend = extend;
3508
3657
  this.createServiceUrl = function (secureServiceUrl, devToken) {
3509
3658
  var serviceScheme = window.mParticle && mpInstance._Store.SDKConfig.forceHttps ? 'https://' : window.location.protocol + '//';
3510
3659
  var baseUrl;
@@ -4305,7 +4454,7 @@ var mParticle = (function () {
4305
4454
  commerceEvent.ProductImpressions.forEach(function (productImpression) {
4306
4455
  if (productImpression.ProductList) {
4307
4456
  productImpression.ProductList.forEach(function (product) {
4308
- var attributes = mpInstance._Helpers.extend(false, {}, commerceEvent.EventAttributes);
4457
+ var attributes = extend(false, {}, commerceEvent.EventAttributes);
4309
4458
  if (product.Attributes) {
4310
4459
  for (var attribute in product.Attributes) {
4311
4460
  attributes[attribute] = product.Attributes[attribute];
@@ -4340,7 +4489,7 @@ var mParticle = (function () {
4340
4489
  }
4341
4490
  var promotions = commerceEvent.PromotionAction.PromotionList;
4342
4491
  promotions.forEach(function (promotion) {
4343
- var attributes = mpInstance._Helpers.extend(false, {}, commerceEvent.EventAttributes);
4492
+ var attributes = extend(false, {}, commerceEvent.EventAttributes);
4344
4493
  self.extractPromotionAttributes(attributes, promotion);
4345
4494
  var appEvent = mpInstance._ServerModel.createEventObject({
4346
4495
  messageType: Types.MessageType.PageEvent,
@@ -4359,7 +4508,7 @@ var mParticle = (function () {
4359
4508
  }
4360
4509
  var shouldExtractActionAttributes = false;
4361
4510
  if (commerceEvent.ProductAction.ProductActionType === Types.ProductActionType.Purchase || commerceEvent.ProductAction.ProductActionType === Types.ProductActionType.Refund) {
4362
- var attributes = mpInstance._Helpers.extend(false, {}, commerceEvent.EventAttributes);
4511
+ var attributes = extend(false, {}, commerceEvent.EventAttributes);
4363
4512
  attributes['Product Count'] = commerceEvent.ProductAction.ProductList ? commerceEvent.ProductAction.ProductList.length : 0;
4364
4513
  self.extractActionAttributes(attributes, commerceEvent.ProductAction);
4365
4514
  if (commerceEvent.CurrencyCode) {
@@ -4380,7 +4529,7 @@ var mParticle = (function () {
4380
4529
  return appEvents;
4381
4530
  }
4382
4531
  products.forEach(function (product) {
4383
- var attributes = mpInstance._Helpers.extend(false, commerceEvent.EventAttributes, product.Attributes);
4532
+ var attributes = extend(false, commerceEvent.EventAttributes, product.Attributes);
4384
4533
  if (shouldExtractActionAttributes) {
4385
4534
  self.extractActionAttributes(attributes, commerceEvent.ProductAction);
4386
4535
  } else {
@@ -4851,7 +5000,7 @@ var mParticle = (function () {
4851
5000
  };
4852
5001
  this.syncPersistenceData = function () {
4853
5002
  var persistenceData = mpInstance._Persistence.getPersistence();
4854
- _this.persistenceData = mpInstance._Helpers.extend({}, _this.persistenceData, persistenceData);
5003
+ _this.persistenceData = extend({}, _this.persistenceData, persistenceData);
4855
5004
  };
4856
5005
  this.getUserAttributes = function (mpid) {
4857
5006
  return _this._getFromPersistence(mpid, 'ua') || {};
@@ -5114,7 +5263,7 @@ var mParticle = (function () {
5114
5263
  if (localStorageData) {
5115
5264
  if (cookies) {
5116
5265
  // https://go.mparticle.com/work/SQDSDKS-6047
5117
- allData = mpInstance._Helpers.extend(false, localStorageData, cookies);
5266
+ allData = extend(false, localStorageData, cookies);
5118
5267
  } else {
5119
5268
  allData = localStorageData;
5120
5269
  }
@@ -5129,7 +5278,7 @@ var mParticle = (function () {
5129
5278
  if (cookies) {
5130
5279
  if (localStorageData) {
5131
5280
  // https://go.mparticle.com/work/SQDSDKS-6047
5132
- allData = mpInstance._Helpers.extend(false, localStorageData, cookies);
5281
+ allData = extend(false, localStorageData, cookies);
5133
5282
  } else {
5134
5283
  allData = cookies;
5135
5284
  }
@@ -5269,7 +5418,7 @@ var mParticle = (function () {
5269
5418
  localStorageData.cu = mpid;
5270
5419
  }
5271
5420
  if (Object.keys(mpInstance._Store.nonCurrentUserMPIDs).length) {
5272
- localStorageData = mpInstance._Helpers.extend({}, localStorageData, mpInstance._Store.nonCurrentUserMPIDs);
5421
+ localStorageData = extend({}, localStorageData, mpInstance._Store.nonCurrentUserMPIDs);
5273
5422
  mpInstance._Store.nonCurrentUserMPIDs = {};
5274
5423
  }
5275
5424
  localStorageData = setGlobalStorageAttributes(localStorageData);
@@ -5412,7 +5561,7 @@ var mParticle = (function () {
5412
5561
  cookies.l = mpInstance._Store.isLoggedIn ? 1 : 0;
5413
5562
  cookies = setGlobalStorageAttributes(cookies);
5414
5563
  if (Object.keys(mpInstance._Store.nonCurrentUserMPIDs).length) {
5415
- cookies = mpInstance._Helpers.extend({}, cookies, mpInstance._Store.nonCurrentUserMPIDs);
5564
+ cookies = extend({}, cookies, mpInstance._Store.nonCurrentUserMPIDs);
5416
5565
  mpInstance._Store.nonCurrentUserMPIDs = {};
5417
5566
  }
5418
5567
  encodedCookiesWithExpirationAndPath = self.reduceAndEncodePersistence(cookies, expires, domain, mpInstance._Store.SDKConfig.maxCookieSize);
@@ -6498,6 +6647,120 @@ var mParticle = (function () {
6498
6647
  };
6499
6648
  }
6500
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
+
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; } } }; }
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); }
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; }
6501
6764
  var _Constants$IdentityMe = Constants.IdentityMethods,
6502
6765
  Modify$2 = _Constants$IdentityMe.Modify,
6503
6766
  Identify$1 = _Constants$IdentityMe.Identify,
@@ -6531,7 +6794,7 @@ var mParticle = (function () {
6531
6794
  return false;
6532
6795
  }
6533
6796
  var filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(userIdentities, forwarder.userIdentityFilters);
6534
- var filteredUserAttributes = mpInstance._Helpers.filterUserAttributes(user ? user.getAllUserAttributes() : {}, forwarder.userAttributeFilters);
6797
+ var filteredUserAttributes = KitFilterHelper.filterUserAttributes(user ? user.getAllUserAttributes() : {}, forwarder.userAttributeFilters);
6535
6798
  if (!forwarder.initialized) {
6536
6799
  forwarder.logger = mpInstance.Logger;
6537
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);
@@ -6601,109 +6864,33 @@ var mParticle = (function () {
6601
6864
  }
6602
6865
  };
6603
6866
  this.sendEventToForwarders = function (event) {
6604
- var clonedEvent,
6605
- hashedEventName,
6606
- hashedEventType,
6607
- filterUserIdentities = function filterUserIdentities(event, filterList) {
6608
- if (event.UserIdentities && event.UserIdentities.length) {
6609
- event.UserIdentities.forEach(function (userIdentity, i) {
6610
- if (mpInstance._Helpers.inArray(filterList, KitFilterHelper.hashUserIdentity(userIdentity.Type))) {
6611
- event.UserIdentities.splice(i, 1);
6612
- if (i > 0) {
6613
- i--;
6614
- }
6615
- }
6616
- });
6617
- }
6618
- },
6619
- filterAttributes = function filterAttributes(event, filterList) {
6620
- var hash;
6621
- if (!filterList) {
6622
- return;
6623
- }
6624
- for (var attrName in event.EventAttributes) {
6625
- if (event.EventAttributes.hasOwnProperty(attrName)) {
6626
- hash = KitFilterHelper.hashEventAttributeKey(event.EventCategory, event.EventName, attrName);
6627
- if (mpInstance._Helpers.inArray(filterList, hash)) {
6628
- delete event.EventAttributes[attrName];
6629
- }
6630
- }
6631
- }
6632
- },
6633
- inFilteredList = function inFilteredList(filterList, hash) {
6634
- if (filterList && filterList.length) {
6635
- if (mpInstance._Helpers.inArray(filterList, hash)) {
6636
- return true;
6637
- }
6638
- }
6639
- return false;
6640
- },
6641
- forwardingRuleMessageTypes = [Types.MessageType.PageEvent, Types.MessageType.PageView, Types.MessageType.Commerce];
6867
+ var clonedEvent;
6868
+ var hashedEventName;
6869
+ var hashedEventType;
6642
6870
  if (!mpInstance._Store.webviewBridgeEnabled && mpInstance._Store.activeForwarders) {
6643
6871
  hashedEventName = KitFilterHelper.hashEventName(event.EventName, event.EventCategory);
6644
6872
  hashedEventType = KitFilterHelper.hashEventType(event.EventCategory);
6645
6873
  for (var i = 0; i < mpInstance._Store.activeForwarders.length; i++) {
6646
- // Check attribute forwarding rule. This rule allows users to only forward an event if a
6647
- // specific attribute exists and has a specific value. Alternatively, they can specify
6648
- // that an event not be forwarded if the specified attribute name and value exists.
6649
- // The two cases are controlled by the "includeOnMatch" boolean value.
6650
- // Supported message types for attribute forwarding rules are defined in the forwardingRuleMessageTypes array
6651
-
6652
- if (forwardingRuleMessageTypes.indexOf(event.EventDataType) > -1 && mpInstance._Store.activeForwarders[i].filteringEventAttributeValue && mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeName && mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeValue) {
6653
- var foundProp = null;
6654
-
6655
- // Attempt to find the attribute in the collection of event attributes
6656
- if (event.EventAttributes) {
6657
- for (var prop in event.EventAttributes) {
6658
- var hashedEventAttributeName;
6659
- hashedEventAttributeName = KitFilterHelper.hashAttributeConditionalForwarding(prop);
6660
- if (hashedEventAttributeName === mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeName) {
6661
- foundProp = {
6662
- name: hashedEventAttributeName,
6663
- value: KitFilterHelper.hashAttributeConditionalForwarding(event.EventAttributes[prop])
6664
- };
6665
- }
6666
- if (foundProp) {
6667
- break;
6668
- }
6669
- }
6670
- }
6671
- var isMatch = foundProp !== null && foundProp.value === mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.eventAttributeValue;
6672
- var shouldInclude = mpInstance._Store.activeForwarders[i].filteringEventAttributeValue.includeOnMatch === true ? isMatch : !isMatch;
6673
- if (!shouldInclude) {
6674
- continue;
6675
- }
6874
+ var forwarder = mpInstance._Store.activeForwarders[i];
6875
+ if (isBlockedByForwardingRule(event.EventDataType, event.EventAttributes, forwarder)) {
6876
+ continue;
6676
6877
  }
6677
6878
 
6678
6879
  // Clone the event object, as we could be sending different attributes to each forwarder
6679
- clonedEvent = {};
6680
- clonedEvent = mpInstance._Helpers.extend(true, clonedEvent, event);
6681
- // Check event filtering rules
6682
- 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)) {
6683
6882
  continue;
6684
- } else if (event.EventDataType === Types.MessageType.Commerce && inFilteredList(mpInstance._Store.activeForwarders[i].eventTypeFilters, hashedEventType)) {
6685
- continue;
6686
- } else if (event.EventDataType === Types.MessageType.PageView && inFilteredList(mpInstance._Store.activeForwarders[i].screenNameFilters, hashedEventName)) {
6687
- continue;
6688
- }
6689
-
6690
- // Check attribute filtering rules
6691
- if (clonedEvent.EventAttributes) {
6692
- if (event.EventDataType === Types.MessageType.PageEvent) {
6693
- filterAttributes(clonedEvent, mpInstance._Store.activeForwarders[i].attributeFilters);
6694
- } else if (event.EventDataType === Types.MessageType.PageView) {
6695
- filterAttributes(clonedEvent, mpInstance._Store.activeForwarders[i].screenAttributeFilters);
6696
- }
6697
6883
  }
6884
+ clonedEvent.EventAttributes = filterEventAttributes(event.EventDataType, event.EventCategory, event.EventName, clonedEvent.EventAttributes, forwarder);
6698
6885
 
6699
6886
  // Check user identity filtering rules
6700
- filterUserIdentities(clonedEvent, mpInstance._Store.activeForwarders[i].userIdentityFilters);
6887
+ clonedEvent.UserIdentities = filterUserIdentities(clonedEvent.UserIdentities, forwarder.userIdentityFilters);
6701
6888
 
6702
6889
  // Check user attribute filtering rules
6703
- clonedEvent.UserAttributes = mpInstance._Helpers.filterUserAttributes(clonedEvent.UserAttributes, mpInstance._Store.activeForwarders[i].userAttributeFilters);
6704
- if (mpInstance._Store.activeForwarders[i].process) {
6705
- mpInstance.Logger.verbose('Sending message to forwarder: ' + mpInstance._Store.activeForwarders[i].name);
6706
- 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);
6707
6894
  if (result) {
6708
6895
  mpInstance.Logger.verbose(result);
6709
6896
  }
@@ -6711,6 +6898,54 @@ var mParticle = (function () {
6711
6898
  }
6712
6899
  }
6713
6900
  };
6901
+ this.sendBatchToForwarders = function (batch) {
6902
+ if (mpInstance._Store.webviewBridgeEnabled || !mpInstance._Store.activeForwarders) {
6903
+ return;
6904
+ }
6905
+ var _iterator = _createForOfIteratorHelper(mpInstance._Store.activeForwarders),
6906
+ _step;
6907
+ try {
6908
+ var _loop = function _loop() {
6909
+ var forwarder = _step.value;
6910
+ if (!forwarder.processBatch) {
6911
+ return 0; // continue
6912
+ }
6913
+ try {
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
+ }
6930
+ var result = forwarder.processBatch(batchCopy);
6931
+ if (result) {
6932
+ mpInstance.Logger.verbose(result);
6933
+ }
6934
+ } catch (e) {
6935
+ mpInstance.Logger.verbose(e);
6936
+ }
6937
+ },
6938
+ _ret;
6939
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
6940
+ _ret = _loop();
6941
+ if (_ret === 0) continue;
6942
+ }
6943
+ } catch (err) {
6944
+ _iterator.e(err);
6945
+ } finally {
6946
+ _iterator.f();
6947
+ }
6948
+ };
6714
6949
  this.handleForwarderUserAttributes = function (functionNameKey, key, value) {
6715
6950
  if (kitBlocker && kitBlocker.isAttributeKeyBlocked(key) || !mpInstance._Store.activeForwarders.length) {
6716
6951
  return;
@@ -7200,7 +7435,7 @@ var mParticle = (function () {
7200
7435
  mpInstance._Store.sessionStartDate = null;
7201
7436
  }
7202
7437
  uploadObject.Timestamp = mpInstance._Store.dateLastEventSent.getTime();
7203
- return mpInstance._Helpers.extend({}, eventObject, uploadObject);
7438
+ return extend({}, eventObject, uploadObject);
7204
7439
  }
7205
7440
  return null;
7206
7441
  };
@@ -10019,113 +10254,105 @@ var mParticle = (function () {
10019
10254
  * });
10020
10255
  */
10021
10256
  RoktManager.prototype.selectPlacements = function (options) {
10022
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
10257
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
10023
10258
  return __awaiter(this, void 0, void 0, function () {
10024
- var attributes, sandboxValue, mappedAttributes, attributesToLog, currentUserIdentities_1, currentEmail, newEmail, currentHashedEmail, newHashedEmail, isValidHashedEmailIdentityType, emailChanged, hashedEmailChanged, newIdentities_1, msg, msg, error_1, errorMessage, finalUserIdentities, enrichedAttributes, hashedEmail, enrichedOptions, error_2;
10259
+ var attributes, sandboxValue, mappedAttributes, attributesToLog, currentUserIdentities, currentEmail, newEmail, currentHashedEmail, newHashedEmail, isValidHashedEmailIdentityType, emailChanged, hashedEmailChanged, newIdentities, msg, msg, errorMessage, finalUserIdentities, enrichedAttributes, hashedEmail, enrichedOptions;
10025
10260
  var _this = this;
10026
- return __generator(this, function (_m) {
10027
- switch (_m.label) {
10028
- case 0:
10029
- (_a = this.captureTiming) === null || _a === void 0 ? void 0 : _a.call(this, PerformanceMarkType.JointSdkSelectPlacements);
10030
- // Queue if kit isn't ready OR if identity is in flight
10031
- if (!this.isReady() || ((_b = this.store) === null || _b === void 0 ? void 0 : _b.identityCallInFlight)) {
10032
- return [2 /*return*/, this.deferredCall('selectPlacements', options)];
10033
- }
10034
- _m.label = 1;
10035
- case 1:
10036
- _m.trys.push([1, 6,, 7]);
10037
- attributes = options.attributes;
10038
- sandboxValue = (attributes === null || attributes === void 0 ? void 0 : attributes.sandbox) || null;
10039
- mappedAttributes = this.mapPlacementAttributes(attributes, this.placementAttributesMapping);
10040
- if ((_c = this.logger) === null || _c === void 0 ? void 0 : _c.isVerbose()) {
10041
- attributesToLog = obfuscateDevData(attributes, (_e = (_d = this.store) === null || _d === void 0 ? void 0 : _d.SDKConfig) === null || _e === void 0 ? void 0 : _e.isDevelopmentMode);
10042
- this.logger.verbose("mParticle.Rokt selectPlacements called with attributes:\n".concat(JSON.stringify(attributesToLog, null, 2)));
10043
- }
10044
- this.currentUser = this.identityService.getCurrentUser();
10045
- currentUserIdentities_1 = ((_g = (_f = this.currentUser) === null || _f === void 0 ? void 0 : _f.getUserIdentities()) === null || _g === void 0 ? void 0 : _g.userIdentities) || {};
10046
- currentEmail = currentUserIdentities_1.email;
10047
- newEmail = mappedAttributes.email;
10048
- currentHashedEmail = void 0;
10049
- newHashedEmail = void 0;
10050
- isValidHashedEmailIdentityType = this.mappedEmailShaIdentityType && IdentityType.getIdentityType(this.mappedEmailShaIdentityType) !== false;
10051
- if (isValidHashedEmailIdentityType) {
10052
- currentHashedEmail = currentUserIdentities_1[this.mappedEmailShaIdentityType];
10053
- newHashedEmail = mappedAttributes['emailsha256'] || mappedAttributes[this.mappedEmailShaIdentityType] || undefined;
10054
- }
10055
- emailChanged = this.hasIdentityChanged(currentEmail, newEmail);
10056
- hashedEmailChanged = this.hasIdentityChanged(currentHashedEmail, newHashedEmail);
10057
- newIdentities_1 = {};
10058
- if (emailChanged) {
10059
- newIdentities_1.email = newEmail;
10060
- if (newEmail) {
10061
- msg = 'Email mismatch detected. Current email differs from email passed to selectPlacements call. Proceeding to call identify with email from selectPlacements call. Please verify your implementation.';
10062
- this.logger.warning(msg);
10063
- (_h = this.errorReporter) === null || _h === void 0 ? void 0 : _h.report({
10064
- message: msg,
10065
- code: ErrorCodes.IDENTITY_MISMATCH,
10066
- severity: WSDKErrorSeverity.WARNING
10067
- });
10068
- }
10069
- }
10070
- if (hashedEmailChanged) {
10071
- newIdentities_1[this.mappedEmailShaIdentityType] = newHashedEmail;
10072
- msg = 'emailsha256 mismatch detected. Current mParticle hashedEmail differs from hashedEmail passed to selectPlacements call. Proceeding to call identify with hashedEmail from selectPlacements call. Please verify your implementation.';
10261
+ return __generator(this, function (_k) {
10262
+ (_a = this.captureTiming) === null || _a === void 0 ? void 0 : _a.call(this, PerformanceMarkType.JointSdkSelectPlacements);
10263
+ // Queue if kit isn't ready OR if identity is in flight
10264
+ if (!this.isReady() || ((_b = this.store) === null || _b === void 0 ? void 0 : _b.identityCallInFlight)) {
10265
+ return [2 /*return*/, this.deferredCall('selectPlacements', options)];
10266
+ }
10267
+ try {
10268
+ attributes = options.attributes;
10269
+ sandboxValue = (attributes === null || attributes === void 0 ? void 0 : attributes.sandbox) || null;
10270
+ mappedAttributes = this.mapPlacementAttributes(attributes, this.placementAttributesMapping);
10271
+ if ((_c = this.logger) === null || _c === void 0 ? void 0 : _c.isVerbose()) {
10272
+ attributesToLog = obfuscateDevData(attributes, (_e = (_d = this.store) === null || _d === void 0 ? void 0 : _d.SDKConfig) === null || _e === void 0 ? void 0 : _e.isDevelopmentMode);
10273
+ this.logger.verbose("mParticle.Rokt selectPlacements called with attributes:\n".concat(JSON.stringify(attributesToLog, null, 2)));
10274
+ }
10275
+ this.currentUser = this.identityService.getCurrentUser();
10276
+ currentUserIdentities = ((_g = (_f = this.currentUser) === null || _f === void 0 ? void 0 : _f.getUserIdentities()) === null || _g === void 0 ? void 0 : _g.userIdentities) || {};
10277
+ currentEmail = currentUserIdentities.email;
10278
+ newEmail = mappedAttributes.email;
10279
+ currentHashedEmail = void 0;
10280
+ newHashedEmail = void 0;
10281
+ isValidHashedEmailIdentityType = this.mappedEmailShaIdentityType && IdentityType.getIdentityType(this.mappedEmailShaIdentityType) !== false;
10282
+ if (isValidHashedEmailIdentityType) {
10283
+ currentHashedEmail = currentUserIdentities[this.mappedEmailShaIdentityType];
10284
+ newHashedEmail = mappedAttributes['emailsha256'] || mappedAttributes[this.mappedEmailShaIdentityType] || undefined;
10285
+ }
10286
+ emailChanged = this.hasIdentityChanged(currentEmail, newEmail);
10287
+ hashedEmailChanged = this.hasIdentityChanged(currentHashedEmail, newHashedEmail);
10288
+ newIdentities = {};
10289
+ if (emailChanged) {
10290
+ newIdentities.email = newEmail;
10291
+ if (newEmail) {
10292
+ msg = 'Email mismatch detected. Current email differs from email passed to selectPlacements call. Proceeding to call identify with email from selectPlacements call. Please verify your implementation.';
10073
10293
  this.logger.warning(msg);
10074
- (_j = this.errorReporter) === null || _j === void 0 ? void 0 : _j.report({
10294
+ (_h = this.errorReporter) === null || _h === void 0 ? void 0 : _h.report({
10075
10295
  message: msg,
10076
10296
  code: ErrorCodes.IDENTITY_MISMATCH,
10077
10297
  severity: WSDKErrorSeverity.WARNING
10078
10298
  });
10079
10299
  }
10080
- if (!!isEmpty(newIdentities_1)) return [3 /*break*/, 5];
10081
- _m.label = 2;
10082
- case 2:
10083
- _m.trys.push([2, 4,, 5]);
10084
- return [4 /*yield*/, new Promise(function (resolve, reject) {
10085
- _this.identityService.identify({
10086
- userIdentities: __assign(__assign({}, currentUserIdentities_1), newIdentities_1)
10087
- }, function () {
10088
- resolve();
10300
+ }
10301
+ if (hashedEmailChanged) {
10302
+ newIdentities[this.mappedEmailShaIdentityType] = newHashedEmail;
10303
+ msg = 'emailsha256 mismatch detected. Current mParticle hashedEmail differs from hashedEmail passed to selectPlacements call. Proceeding to call identify with hashedEmail from selectPlacements call. Please verify your implementation.';
10304
+ this.logger.warning(msg);
10305
+ (_j = this.errorReporter) === null || _j === void 0 ? void 0 : _j.report({
10306
+ message: msg,
10307
+ code: ErrorCodes.IDENTITY_MISMATCH,
10308
+ severity: WSDKErrorSeverity.WARNING
10309
+ });
10310
+ }
10311
+ if (!isEmpty(newIdentities)) {
10312
+ // Fire-and-forget identify — best-effort, does not block selectPlacements
10313
+ try {
10314
+ this.identityService.identify({
10315
+ userIdentities: __assign(__assign({}, currentUserIdentities), newIdentities)
10316
+ }, function (result) {
10317
+ var httpCode = Number(result === null || result === void 0 ? void 0 : result.httpCode);
10318
+ if (httpCode && (httpCode >= 400 || httpCode < 0)) {
10319
+ _this.logger.error('Background identify failed with HTTP ' + httpCode);
10320
+ }
10321
+ // Drain any selectPlacements calls that were deferred while
10322
+ // identify was in-flight. By the time this callback fires,
10323
+ // identityCallInFlight has already been reset to false.
10324
+ _this.processMessageQueue();
10089
10325
  });
10090
- })];
10091
- case 3:
10092
- _m.sent();
10093
- return [3 /*break*/, 5];
10094
- case 4:
10095
- error_1 = _m.sent();
10096
- errorMessage = error_1 instanceof Error ? error_1.message : JSON.stringify(error_1);
10097
- this.logger.error('Failed to identify user with updated identities: ' + errorMessage);
10098
- return [3 /*break*/, 5];
10099
- case 5:
10100
- // Refresh current user identities to ensure we have the latest values before building enrichedAttributes
10101
- this.currentUser = this.identityService.getCurrentUser();
10102
- finalUserIdentities = ((_l = (_k = this.currentUser) === null || _k === void 0 ? void 0 : _k.getUserIdentities()) === null || _l === void 0 ? void 0 : _l.userIdentities) || {};
10103
- this.setUserAttributes(mappedAttributes);
10104
- enrichedAttributes = __assign(__assign({}, mappedAttributes), sandboxValue !== null ? {
10105
- sandbox: sandboxValue
10106
- } : {});
10107
- // Propagate email from current user identities if not already in attributes
10108
- if (finalUserIdentities.email && !enrichedAttributes.email) {
10109
- enrichedAttributes.email = finalUserIdentities.email;
10326
+ } catch (error) {
10327
+ errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
10328
+ this.logger.error('Background identify threw an error: ' + errorMessage);
10110
10329
  }
10111
- // Propagate emailsha256 from current user identities if not already in attributes
10112
- if (isValidHashedEmailIdentityType) {
10113
- hashedEmail = finalUserIdentities[this.mappedEmailShaIdentityType];
10114
- if (hashedEmail && !enrichedAttributes.emailsha256 && !enrichedAttributes[this.mappedEmailShaIdentityType]) {
10115
- enrichedAttributes.emailsha256 = hashedEmail;
10116
- }
10330
+ }
10331
+ finalUserIdentities = __assign(__assign({}, currentUserIdentities), newIdentities);
10332
+ this.setUserAttributes(mappedAttributes);
10333
+ enrichedAttributes = __assign(__assign({}, mappedAttributes), sandboxValue !== null ? {
10334
+ sandbox: sandboxValue
10335
+ } : {});
10336
+ // Propagate email from current user identities if not already in attributes
10337
+ if (finalUserIdentities.email && !enrichedAttributes.email) {
10338
+ enrichedAttributes.email = finalUserIdentities.email;
10339
+ }
10340
+ // Propagate emailsha256 from current user identities if not already in attributes
10341
+ if (isValidHashedEmailIdentityType) {
10342
+ hashedEmail = finalUserIdentities[this.mappedEmailShaIdentityType];
10343
+ if (hashedEmail && !enrichedAttributes.emailsha256 && !enrichedAttributes[this.mappedEmailShaIdentityType]) {
10344
+ enrichedAttributes.emailsha256 = hashedEmail;
10117
10345
  }
10118
- this.filters.filteredUser = this.currentUser || this.filters.filteredUser || null;
10119
- enrichedOptions = __assign(__assign({}, options), {
10120
- attributes: enrichedAttributes
10121
- });
10122
- return [2 /*return*/, this.kit.selectPlacements(enrichedOptions)];
10123
- case 6:
10124
- error_2 = _m.sent();
10125
- return [2 /*return*/, Promise.reject(error_2 instanceof Error ? error_2 : new Error('Unknown error occurred'))];
10126
- case 7:
10127
- return [2 /*return*/];
10346
+ }
10347
+ this.filters.filteredUser = this.currentUser || this.filters.filteredUser || null;
10348
+ enrichedOptions = __assign(__assign({}, options), {
10349
+ attributes: enrichedAttributes
10350
+ });
10351
+ return [2 /*return*/, this.kit.selectPlacements(enrichedOptions)];
10352
+ } catch (error) {
10353
+ return [2 /*return*/, Promise.reject(error instanceof Error ? error : new Error('Unknown error occurred'))];
10128
10354
  }
10355
+ return [2 /*return*/];
10129
10356
  });
10130
10357
  });
10131
10358
  };
@@ -10140,7 +10367,7 @@ var mParticle = (function () {
10140
10367
  */
10141
10368
  RoktManager.prototype.hashAttributes = function (attributes) {
10142
10369
  return __awaiter(this, void 0, void 0, function () {
10143
- var keys, hashPromises, results, hashedAttributes, _i, results_1, _a, key, attributeValue, hashedValue, error_3, errorMessage;
10370
+ var keys, hashPromises, results, hashedAttributes, _i, results_1, _a, key, attributeValue, hashedValue, error_1, errorMessage;
10144
10371
  var _this = this;
10145
10372
  return __generator(this, function (_b) {
10146
10373
  switch (_b.label) {
@@ -10185,8 +10412,8 @@ var mParticle = (function () {
10185
10412
  }
10186
10413
  return [2 /*return*/, hashedAttributes];
10187
10414
  case 2:
10188
- error_3 = _b.sent();
10189
- errorMessage = error_3 instanceof Error ? error_3.message : String(error_3);
10415
+ error_1 = _b.sent();
10416
+ errorMessage = error_1 instanceof Error ? error_1.message : String(error_1);
10190
10417
  this.logger.error("Failed to hashAttributes, returning an empty object: ".concat(errorMessage));
10191
10418
  return [2 /*return*/, {}];
10192
10419
  case 3:
@@ -10227,7 +10454,7 @@ var mParticle = (function () {
10227
10454
  */
10228
10455
  RoktManager.prototype.hashSha256 = function (attribute) {
10229
10456
  return __awaiter(this, void 0, void 0, function () {
10230
- var normalizedValue, error_4, errorMessage;
10457
+ var normalizedValue, error_2, errorMessage;
10231
10458
  return __generator(this, function (_a) {
10232
10459
  switch (_a.label) {
10233
10460
  case 0:
@@ -10243,8 +10470,8 @@ var mParticle = (function () {
10243
10470
  case 2:
10244
10471
  return [2 /*return*/, _a.sent()];
10245
10472
  case 3:
10246
- error_4 = _a.sent();
10247
- errorMessage = error_4 instanceof Error ? error_4.message : String(error_4);
10473
+ error_2 = _a.sent();
10474
+ errorMessage = error_2 instanceof Error ? error_2.message : String(error_2);
10248
10475
  this.logger.error("Failed to hashSha256, returning undefined: ".concat(errorMessage));
10249
10476
  return [2 /*return*/, undefined];
10250
10477
  case 4:
@@ -10605,7 +10832,7 @@ var mParticle = (function () {
10605
10832
  if (!config.hasOwnProperty('requestConfig') || config.requestConfig) {
10606
10833
  var configApiClient = new ConfigAPIClient(apiKey, config, this);
10607
10834
  configApiClient.getSDKConfiguration().then(function (result) {
10608
- var mergedConfig = _this._Helpers.extend({}, config, result);
10835
+ var mergedConfig = extend({}, config, result);
10609
10836
  completeSDKInitialization(apiKey, mergedConfig, _this);
10610
10837
  });
10611
10838
  } else {
@@ -11731,7 +11958,7 @@ var mParticle = (function () {
11731
11958
  generateUniqueId: function generateUniqueId() {
11732
11959
  return 'mockId';
11733
11960
  },
11734
- extend: window.mParticle.getInstance()._Helpers.extend,
11961
+ extend: extend,
11735
11962
  createServiceUrl: mockFunction,
11736
11963
  parseNumber: mockFunction,
11737
11964
  isObject: mockFunction,