@mparticle/web-sdk 2.28.2 → 2.29.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
@@ -393,7 +393,7 @@ var mParticle = (function () {
393
393
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
394
394
  };
395
395
 
396
- var version = "2.28.2";
396
+ var version = "2.29.0";
397
397
 
398
398
  var Constants = {
399
399
  sdkVersion: version,
@@ -552,7 +552,8 @@ var mParticle = (function () {
552
552
  OfflineStorage: 'offlineStorage',
553
553
  DirectUrlRouting: 'directURLRouting',
554
554
  CacheIdentity: 'cacheIdentity',
555
- AudienceAPI: 'audienceAPI'
555
+ AudienceAPI: 'audienceAPI',
556
+ CaptureIntegrationSpecificIds: 'captureIntegrationSpecificIds'
556
557
  },
557
558
  DefaultInstance: 'default_instance',
558
559
  CCPAPurpose: 'data_sale_opt_out',
@@ -566,9 +567,11 @@ var mParticle = (function () {
566
567
  // https://go.mparticle.com/work/SQDSDKS-6080
567
568
  var ONE_DAY_IN_SECONDS = 60 * 60 * 24;
568
569
  var MILLIS_IN_ONE_SEC = 1000;
570
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
571
+ var HTTP_OK = 200;
572
+ var HTTP_ACCEPTED = 202;
569
573
 
570
- var Messages$9 = Constants.Messages;
571
- var HTTP_SUCCESS = 200;
574
+ var Messages$a = Constants.Messages;
572
575
  var createCookieString = function createCookieString(value) {
573
576
  return replaceCommasWithPipes(replaceQuotesWithApostrophes(value));
574
577
  };
@@ -599,10 +602,10 @@ var mParticle = (function () {
599
602
  return null;
600
603
  };
601
604
  var generateDeprecationMessage = function generateDeprecationMessage(methodName, alternateMethod) {
602
- var messageArray = [methodName, Messages$9.DeprecationMessages.MethodIsDeprecatedPostfix];
605
+ var messageArray = [methodName, Messages$a.DeprecationMessages.MethodIsDeprecatedPostfix];
603
606
  if (alternateMethod) {
604
607
  messageArray.push(alternateMethod);
605
- messageArray.push(Messages$9.DeprecationMessages.MethodIsDeprecatedPostfix);
608
+ messageArray.push(Messages$a.DeprecationMessages.MethodIsDeprecatedPostfix);
606
609
  }
607
610
  return messageArray.join(' ');
608
611
  };
@@ -753,6 +756,91 @@ var mParticle = (function () {
753
756
  var moveElementToEnd = function moveElementToEnd(array, index) {
754
757
  return array.slice(0, index).concat(array.slice(index + 1), array[index]);
755
758
  };
759
+ var queryStringParser = function queryStringParser(url, keys) {
760
+ if (keys === void 0) {
761
+ keys = [];
762
+ }
763
+ var urlParams;
764
+ var results = {};
765
+ if (!url) return results;
766
+ if (typeof URL !== 'undefined' && typeof URLSearchParams !== 'undefined') {
767
+ var urlObject = new URL(url);
768
+ urlParams = new URLSearchParams(urlObject.search);
769
+ } else {
770
+ urlParams = queryStringParserFallback(url);
771
+ }
772
+ if (isEmpty(keys)) {
773
+ urlParams.forEach(function (value, key) {
774
+ results[key] = value;
775
+ });
776
+ } else {
777
+ keys.forEach(function (key) {
778
+ var value = urlParams.get(key);
779
+ if (value) {
780
+ results[key] = value;
781
+ }
782
+ });
783
+ }
784
+ return results;
785
+ };
786
+ var queryStringParserFallback = function queryStringParserFallback(url) {
787
+ var params = {};
788
+ var queryString = url.split('?')[1] || '';
789
+ var pairs = queryString.split('&');
790
+ pairs.forEach(function (pair) {
791
+ var _a = pair.split('='),
792
+ key = _a[0],
793
+ value = _a[1];
794
+ if (key && value) {
795
+ params[key] = decodeURIComponent(value || '');
796
+ }
797
+ });
798
+ return {
799
+ get: function get(key) {
800
+ return params[key];
801
+ },
802
+ forEach: function forEach(callback) {
803
+ for (var key in params) {
804
+ if (params.hasOwnProperty(key)) {
805
+ callback(params[key], key);
806
+ }
807
+ }
808
+ }
809
+ };
810
+ };
811
+ // Get cookies as a dictionary
812
+ var getCookies = function getCookies(keys) {
813
+ // Helper function to parse cookies from document.cookie
814
+ var parseCookies = function parseCookies() {
815
+ if (typeof window === 'undefined') {
816
+ return [];
817
+ }
818
+ return window.document.cookie.split(';').map(function (cookie) {
819
+ return cookie.trim();
820
+ });
821
+ };
822
+ // Helper function to filter cookies by keys
823
+ var filterCookies = function filterCookies(cookies, keys) {
824
+ var results = {};
825
+ for (var _i = 0, cookies_1 = cookies; _i < cookies_1.length; _i++) {
826
+ var cookie = cookies_1[_i];
827
+ var _a = cookie.split('='),
828
+ key = _a[0],
829
+ value = _a[1];
830
+ if (!keys || keys.includes(key)) {
831
+ results[key] = value;
832
+ }
833
+ }
834
+ return results;
835
+ };
836
+ // Parse cookies from document.cookie
837
+ var parsedCookies = parseCookies();
838
+ // Filter cookies by keys if provided
839
+ return filterCookies(parsedCookies, keys);
840
+ };
841
+ var getHref = function getHref() {
842
+ return typeof window !== 'undefined' && window.location ? window.location.href : '';
843
+ };
756
844
 
757
845
  function getNewIdentitiesByName(newIdentitiesByType) {
758
846
  var newIdentitiesByName = {};
@@ -2121,6 +2209,7 @@ var mParticle = (function () {
2121
2209
  // 2 HEADERS_RECEIVED send() has been called, and headers and status are available.
2122
2210
  // 3 LOADING Downloading; responseText holds partial data.
2123
2211
  // 4 DONE The operation is complete.
2212
+ // https://go.mparticle.com/work/SQDSDKS-6736
2124
2213
  XHRUploader.prototype.makeRequest = function (url, data, method) {
2125
2214
  if (method === void 0) {
2126
2215
  method = 'post';
@@ -2133,11 +2222,13 @@ var mParticle = (function () {
2133
2222
  xhr.onreadystatechange = function () {
2134
2223
  if (xhr.readyState !== 4) return;
2135
2224
  // Process the response
2136
- if (xhr.status >= 200 && xhr.status < 300) {
2137
- resolve(xhr);
2138
- } else {
2139
- reject(xhr);
2140
- }
2225
+ // We resolve all xhr responses whose ready state is 4 regardless of HTTP codes that may be errors (400+)
2226
+ // because these are valid HTTP responses.
2227
+ resolve(xhr);
2228
+ };
2229
+ // Reject a promise only when there is an xhr error
2230
+ xhr.onerror = function () {
2231
+ reject(xhr);
2141
2232
  };
2142
2233
  xhr.open(method, url);
2143
2234
  xhr.send(data);
@@ -3060,7 +3151,7 @@ var mParticle = (function () {
3060
3151
  this.Validators = Validators;
3061
3152
  }
3062
3153
 
3063
- var Messages$8 = Constants.Messages;
3154
+ var Messages$9 = Constants.Messages;
3064
3155
  var androidBridgeNameBase = 'mParticleAndroid';
3065
3156
  var iosBridgeNameBase = 'mParticle';
3066
3157
  function NativeSdkHelpers(mpInstance) {
@@ -3143,10 +3234,10 @@ var mParticle = (function () {
3143
3234
  };
3144
3235
  this.sendViaBridgeV1 = function (path, value) {
3145
3236
  if (window.mParticleAndroid && window.mParticleAndroid.hasOwnProperty(path)) {
3146
- mpInstance.Logger.verbose(Messages$8.InformationMessages.SendAndroid + path);
3237
+ mpInstance.Logger.verbose(Messages$9.InformationMessages.SendAndroid + path);
3147
3238
  window.mParticleAndroid[path](value);
3148
3239
  } else if (mpInstance._Store.SDKConfig.isIOS) {
3149
- mpInstance.Logger.verbose(Messages$8.InformationMessages.SendIOS + path);
3240
+ mpInstance.Logger.verbose(Messages$9.InformationMessages.SendIOS + path);
3150
3241
  self.sendViaIframeToIOS(path, value);
3151
3242
  }
3152
3243
  };
@@ -3172,23 +3263,23 @@ var mParticle = (function () {
3172
3263
  iOSBridgeNonMessageHandler = mpInstance[iosBridgeName];
3173
3264
  }
3174
3265
  if (androidBridge && androidBridge.hasOwnProperty(path)) {
3175
- mpInstance.Logger.verbose(Messages$8.InformationMessages.SendAndroid + path);
3266
+ mpInstance.Logger.verbose(Messages$9.InformationMessages.SendAndroid + path);
3176
3267
  androidBridge[path](value);
3177
3268
  return;
3178
3269
  } else if (iOSBridgeMessageHandler) {
3179
- mpInstance.Logger.verbose(Messages$8.InformationMessages.SendIOS + path);
3270
+ mpInstance.Logger.verbose(Messages$9.InformationMessages.SendIOS + path);
3180
3271
  iOSBridgeMessageHandler.postMessage(JSON.stringify({
3181
3272
  path: path,
3182
3273
  value: value ? JSON.parse(value) : null
3183
3274
  }));
3184
3275
  } else if (iOSBridgeNonMessageHandler) {
3185
- mpInstance.Logger.verbose(Messages$8.InformationMessages.SendIOS + path);
3276
+ mpInstance.Logger.verbose(Messages$9.InformationMessages.SendIOS + path);
3186
3277
  self.sendViaIframeToIOS(path, value);
3187
3278
  }
3188
3279
  };
3189
3280
  }
3190
3281
 
3191
- var Messages$7 = Constants.Messages;
3282
+ var Messages$8 = Constants.Messages;
3192
3283
  function cookieSyncManager(mpInstance) {
3193
3284
  var self = this;
3194
3285
 
@@ -3297,7 +3388,7 @@ var mParticle = (function () {
3297
3388
  // function polls the user object and consent multiple times.
3298
3389
  if (mpInstance._Consent.isEnabledForUserConsent(filteringConsentRuleValues, mpInstance.Identity.getCurrentUser())) {
3299
3390
  var img = document.createElement('img');
3300
- mpInstance.Logger.verbose(Messages$7.InformationMessages.CookieSync);
3391
+ mpInstance.Logger.verbose(Messages$8.InformationMessages.CookieSync);
3301
3392
  img.onload = function () {
3302
3393
  // TODO: Break this out into a convenience method so we can unit test
3303
3394
  cookieSyncDates[moduleId.toString()] = new Date().getTime();
@@ -3308,7 +3399,7 @@ var mParticle = (function () {
3308
3399
  };
3309
3400
  }
3310
3401
 
3311
- var Messages$6 = Constants.Messages;
3402
+ var Messages$7 = Constants.Messages;
3312
3403
  function SessionManager(mpInstance) {
3313
3404
  var self = this;
3314
3405
  this.initialize = function () {
@@ -3339,7 +3430,7 @@ var mParticle = (function () {
3339
3430
  return mpInstance._Store.sessionId;
3340
3431
  };
3341
3432
  this.startNewSession = function () {
3342
- mpInstance.Logger.verbose(Messages$6.InformationMessages.StartingNewSession);
3433
+ mpInstance.Logger.verbose(Messages$7.InformationMessages.StartingNewSession);
3343
3434
  if (mpInstance._Helpers.canLog()) {
3344
3435
  mpInstance._Store.sessionId = mpInstance._Helpers.generateUniqueId().toUpperCase();
3345
3436
  var currentUser = mpInstance.Identity.getCurrentUser();
@@ -3362,12 +3453,12 @@ var mParticle = (function () {
3362
3453
  messageType: Types.MessageType.SessionStart
3363
3454
  });
3364
3455
  } else {
3365
- mpInstance.Logger.verbose(Messages$6.InformationMessages.AbandonStartSession);
3456
+ mpInstance.Logger.verbose(Messages$7.InformationMessages.AbandonStartSession);
3366
3457
  }
3367
3458
  };
3368
3459
  this.endSession = function (override) {
3369
3460
  var _a;
3370
- mpInstance.Logger.verbose(Messages$6.InformationMessages.StartingEndSession);
3461
+ mpInstance.Logger.verbose(Messages$7.InformationMessages.StartingEndSession);
3371
3462
  if (override) {
3372
3463
  mpInstance._Events.logEvent({
3373
3464
  messageType: Types.MessageType.SessionEnd
@@ -3380,14 +3471,14 @@ var mParticle = (function () {
3380
3471
  // - the SDK's store is not enabled because mParticle.setOptOut was called
3381
3472
  // - the devToken is undefined
3382
3473
  // - webviewBridgeEnabled is set to false
3383
- mpInstance.Logger.verbose(Messages$6.InformationMessages.AbandonEndSession);
3474
+ mpInstance.Logger.verbose(Messages$7.InformationMessages.AbandonEndSession);
3384
3475
  return;
3385
3476
  }
3386
3477
  var sessionTimeoutInMilliseconds;
3387
3478
  var timeSinceLastEventSent;
3388
3479
  var cookies = mpInstance._Persistence.getPersistence();
3389
3480
  if (!cookies || cookies.gs && !cookies.gs.sid) {
3390
- mpInstance.Logger.verbose(Messages$6.InformationMessages.NoSessionToEnd);
3481
+ mpInstance.Logger.verbose(Messages$7.InformationMessages.NoSessionToEnd);
3391
3482
  return;
3392
3483
  }
3393
3484
  // sessionId is not equal to cookies.sid if cookies.sid is changed in another tab
@@ -3442,7 +3533,7 @@ var mParticle = (function () {
3442
3533
  };
3443
3534
  }
3444
3535
 
3445
- var Messages$5 = Constants.Messages;
3536
+ var Messages$6 = Constants.Messages;
3446
3537
  function Ecommerce(mpInstance) {
3447
3538
  var self = this;
3448
3539
  this.convertTransactionAttributesToProductAction = function (transactionAttributes, productAction) {
@@ -3674,7 +3765,7 @@ var mParticle = (function () {
3674
3765
  };
3675
3766
  this.createPromotion = function (id, creative, name, position) {
3676
3767
  if (!mpInstance._Helpers.Validators.isStringOrNumber(id)) {
3677
- mpInstance.Logger.error(Messages$5.ErrorMessages.PromotionIdRequired);
3768
+ mpInstance.Logger.error(Messages$6.ErrorMessages.PromotionIdRequired);
3678
3769
  return null;
3679
3770
  }
3680
3771
  return {
@@ -3700,7 +3791,7 @@ var mParticle = (function () {
3700
3791
  };
3701
3792
  this.createTransactionAttributes = function (id, affiliation, couponCode, revenue, shipping, tax) {
3702
3793
  if (!mpInstance._Helpers.Validators.isStringOrNumber(id)) {
3703
- mpInstance.Logger.error(Messages$5.ErrorMessages.TransactionIdRequired);
3794
+ mpInstance.Logger.error(Messages$6.ErrorMessages.TransactionIdRequired);
3704
3795
  return null;
3705
3796
  }
3706
3797
  return {
@@ -3814,7 +3905,7 @@ var mParticle = (function () {
3814
3905
  };
3815
3906
  this.createCommerceEventObject = function (customFlags, options) {
3816
3907
  var baseEvent;
3817
- mpInstance.Logger.verbose(Messages$5.InformationMessages.StartingLogCommerceEvent);
3908
+ mpInstance.Logger.verbose(Messages$6.InformationMessages.StartingLogCommerceEvent);
3818
3909
  if (mpInstance._Helpers.canLog()) {
3819
3910
  baseEvent = mpInstance._ServerModel.createEventObject({
3820
3911
  messageType: Types.MessageType.Commerce,
@@ -3826,7 +3917,7 @@ var mParticle = (function () {
3826
3917
  baseEvent.CustomFlags = customFlags;
3827
3918
  return baseEvent;
3828
3919
  } else {
3829
- mpInstance.Logger.verbose(Messages$5.InformationMessages.AbandonLogEvent);
3920
+ mpInstance.Logger.verbose(Messages$6.InformationMessages.AbandonLogEvent);
3830
3921
  }
3831
3922
  return null;
3832
3923
  };
@@ -4212,7 +4303,8 @@ var mParticle = (function () {
4212
4303
  OfflineStorage = _a.OfflineStorage,
4213
4304
  DirectUrlRouting = _a.DirectUrlRouting,
4214
4305
  CacheIdentity = _a.CacheIdentity,
4215
- AudienceAPI = _a.AudienceAPI;
4306
+ AudienceAPI = _a.AudienceAPI,
4307
+ CaptureIntegrationSpecificIds = _a.CaptureIntegrationSpecificIds;
4216
4308
  if (!config.flags) {
4217
4309
  return {};
4218
4310
  }
@@ -4225,6 +4317,7 @@ var mParticle = (function () {
4225
4317
  flags[DirectUrlRouting] = config.flags[DirectUrlRouting] === 'True';
4226
4318
  flags[CacheIdentity] = config.flags[CacheIdentity] === 'True';
4227
4319
  flags[AudienceAPI] = config.flags[AudienceAPI] === 'True';
4320
+ flags[CaptureIntegrationSpecificIds] = config.flags[CaptureIntegrationSpecificIds] === 'True';
4228
4321
  return flags;
4229
4322
  }
4230
4323
  function processBaseUrls(config, flags, apiKey) {
@@ -4332,7 +4425,7 @@ var mParticle = (function () {
4332
4425
  }
4333
4426
 
4334
4427
  var Base64 = Polyfill.Base64,
4335
- Messages$4 = Constants.Messages,
4428
+ Messages$5 = Constants.Messages,
4336
4429
  Base64CookieKeys = Constants.Base64CookieKeys,
4337
4430
  SDKv2NonMPIDCookieKeys = Constants.SDKv2NonMPIDCookieKeys,
4338
4431
  StorageNames = Constants.StorageNames;
@@ -4455,7 +4548,7 @@ var mParticle = (function () {
4455
4548
  try {
4456
4549
  mpInstance._Store.cartProducts = products[mpid] && products[mpid].cp ? products[mpid].cp : [];
4457
4550
  } catch (e) {
4458
- mpInstance.Logger.error(Messages$4.ErrorMessages.CookieParseError);
4551
+ mpInstance.Logger.error(Messages$5.ErrorMessages.CookieParseError);
4459
4552
  }
4460
4553
  }
4461
4554
  };
@@ -4464,7 +4557,7 @@ var mParticle = (function () {
4464
4557
  this.storeDataInMemory = function (obj, currentMPID) {
4465
4558
  try {
4466
4559
  if (!obj) {
4467
- mpInstance.Logger.verbose(Messages$4.InformationMessages.CookieNotFound);
4560
+ mpInstance.Logger.verbose(Messages$5.InformationMessages.CookieNotFound);
4468
4561
  mpInstance._Store.clientId = mpInstance._Store.clientId || mpInstance._Helpers.generateUniqueId();
4469
4562
  mpInstance._Store.deviceId = mpInstance._Store.deviceId || mpInstance._Helpers.generateUniqueId();
4470
4563
  } else {
@@ -4509,7 +4602,7 @@ var mParticle = (function () {
4509
4602
  }
4510
4603
  }
4511
4604
  } catch (e) {
4512
- mpInstance.Logger.error(Messages$4.ErrorMessages.CookieParseError);
4605
+ mpInstance.Logger.error(Messages$5.ErrorMessages.CookieParseError);
4513
4606
  }
4514
4607
  };
4515
4608
 
@@ -4682,7 +4775,7 @@ var mParticle = (function () {
4682
4775
  name,
4683
4776
  cookie,
4684
4777
  result = key ? undefined : {};
4685
- mpInstance.Logger.verbose(Messages$4.InformationMessages.CookieSearch);
4778
+ mpInstance.Logger.verbose(Messages$5.InformationMessages.CookieSearch);
4686
4779
  for (i = 0, l = cookies.length; i < l; i++) {
4687
4780
  try {
4688
4781
  parts = cookies[i].split('=');
@@ -4700,7 +4793,7 @@ var mParticle = (function () {
4700
4793
  }
4701
4794
  }
4702
4795
  if (result) {
4703
- mpInstance.Logger.verbose(Messages$4.InformationMessages.CookieFound);
4796
+ mpInstance.Logger.verbose(Messages$5.InformationMessages.CookieFound);
4704
4797
  return JSON.parse(self.decodePersistence(result));
4705
4798
  } else {
4706
4799
  return null;
@@ -4742,7 +4835,7 @@ var mParticle = (function () {
4742
4835
  mpInstance._Store.nonCurrentUserMPIDs = {};
4743
4836
  }
4744
4837
  encodedCookiesWithExpirationAndPath = self.reduceAndEncodePersistence(cookies, expires, domain, mpInstance._Store.SDKConfig.maxCookieSize);
4745
- mpInstance.Logger.verbose(Messages$4.InformationMessages.CookieSet);
4838
+ mpInstance.Logger.verbose(Messages$5.InformationMessages.CookieSet);
4746
4839
  window.document.cookie = encodeURIComponent(key) + '=' + encodedCookiesWithExpirationAndPath;
4747
4840
  };
4748
4841
 
@@ -5136,16 +5229,16 @@ var mParticle = (function () {
5136
5229
  };
5137
5230
  }
5138
5231
 
5139
- var Messages$3 = Constants.Messages;
5232
+ var Messages$4 = Constants.Messages;
5140
5233
  function Events(mpInstance) {
5141
5234
  var self = this;
5142
5235
  this.logEvent = function (event, options) {
5143
- mpInstance.Logger.verbose(Messages$3.InformationMessages.StartingLogEvent + ': ' + event.name);
5236
+ mpInstance.Logger.verbose(Messages$4.InformationMessages.StartingLogEvent + ': ' + event.name);
5144
5237
  if (mpInstance._Helpers.canLog()) {
5145
5238
  var uploadObject = mpInstance._ServerModel.createEventObject(event);
5146
5239
  mpInstance._APIClient.sendEventToServer(uploadObject, options);
5147
5240
  } else {
5148
- mpInstance.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent);
5241
+ mpInstance.Logger.verbose(Messages$4.InformationMessages.AbandonLogEvent);
5149
5242
  }
5150
5243
  };
5151
5244
  this.startTracking = function (callback) {
@@ -5201,7 +5294,7 @@ var mParticle = (function () {
5201
5294
  }
5202
5295
  };
5203
5296
  this.logOptOut = function () {
5204
- mpInstance.Logger.verbose(Messages$3.InformationMessages.StartingLogOptOut);
5297
+ mpInstance.Logger.verbose(Messages$4.InformationMessages.StartingLogOptOut);
5205
5298
  var event = mpInstance._ServerModel.createEventObject({
5206
5299
  messageType: Types.MessageType.OptOut,
5207
5300
  eventType: Types.EventType.Other
@@ -5272,7 +5365,7 @@ var mParticle = (function () {
5272
5365
  };
5273
5366
  this.logRefundEvent = function (transactionAttributes, product, attrs, customFlags) {
5274
5367
  if (!transactionAttributes) {
5275
- mpInstance.Logger.error(Messages$3.ErrorMessages.TransactionRequired);
5368
+ mpInstance.Logger.error(Messages$4.ErrorMessages.TransactionRequired);
5276
5369
  return;
5277
5370
  }
5278
5371
  var event = mpInstance._Ecommerce.createCommerceEventObject(customFlags);
@@ -5318,7 +5411,7 @@ var mParticle = (function () {
5318
5411
  }
5319
5412
  };
5320
5413
  this.logCommerceEvent = function (commerceEvent, attrs, options) {
5321
- mpInstance.Logger.verbose(Messages$3.InformationMessages.StartingLogCommerceEvent);
5414
+ mpInstance.Logger.verbose(Messages$4.InformationMessages.StartingLogCommerceEvent);
5322
5415
 
5323
5416
  // If a developer typos the ProductActionType, the event category will be
5324
5417
  // null, resulting in kit forwarding errors on the server.
@@ -5342,7 +5435,7 @@ var mParticle = (function () {
5342
5435
  // https://go.mparticle.com/work/SQDSDKS-6038
5343
5436
  mpInstance._Persistence.update();
5344
5437
  } else {
5345
- mpInstance.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent);
5438
+ mpInstance.Logger.verbose(Messages$4.InformationMessages.AbandonLogEvent);
5346
5439
  }
5347
5440
  };
5348
5441
  this.addEventHandler = function (domEvent, selector, eventName, data, eventType) {
@@ -6505,6 +6598,15 @@ var mParticle = (function () {
6505
6598
  var optOut = event.messageType === Types.MessageType.OptOut ? !mpInstance._Store.isEnabled : null;
6506
6599
  // TODO: Why is Webview Bridge Enabled or Opt Out necessary here?
6507
6600
  if (mpInstance._Store.sessionId || event.messageType === Types.MessageType.OptOut || mpInstance._Store.webviewBridgeEnabled) {
6601
+ var customFlags = __assign({}, event.customFlags);
6602
+ // https://go.mparticle.com/work/SQDSDKS-5053
6603
+ if (mpInstance._Helpers.getFeatureFlag && mpInstance._Helpers.getFeatureFlag(Constants.FeatureFlags.CaptureIntegrationSpecificIds)) {
6604
+ // Attempt to recapture click IDs in case a third party integration
6605
+ // has added or updated new click IDs since the last event was sent.
6606
+ mpInstance._IntegrationCapture.capture();
6607
+ var transformedClickIDs = mpInstance._IntegrationCapture.getClickIdsAsCustomFlags();
6608
+ customFlags = __assign(__assign({}, transformedClickIDs), customFlags);
6609
+ }
6508
6610
  if (event.hasOwnProperty('toEventAPIObject')) {
6509
6611
  eventObject = event.toEventAPIObject();
6510
6612
  } else {
@@ -6517,7 +6619,7 @@ var mParticle = (function () {
6517
6619
  EventAttributes: mpInstance._Helpers.sanitizeAttributes(event.data, event.name),
6518
6620
  SourceMessageId: event.sourceMessageId || mpInstance._Helpers.generateUniqueId(),
6519
6621
  EventDataType: event.messageType,
6520
- CustomFlags: event.customFlags || {},
6622
+ CustomFlags: customFlags,
6521
6623
  UserAttributeChanges: event.userAttributeChanges,
6522
6624
  UserIdentityChanges: event.userIdentityChanges
6523
6625
  };
@@ -6952,11 +7054,11 @@ var mParticle = (function () {
6952
7054
  return !prevUser || prevUser.getMPID() && identityApiResult.mpid && identityApiResult.mpid !== prevUser.getMPID();
6953
7055
  }
6954
7056
 
6955
- var Messages$2 = Constants.Messages,
6956
- HTTPCodes$2 = Constants.HTTPCodes,
7057
+ var Messages$3 = Constants.Messages,
7058
+ HTTPCodes$3 = Constants.HTTPCodes,
6957
7059
  FeatureFlags$1 = Constants.FeatureFlags,
6958
7060
  IdentityMethods = Constants.IdentityMethods;
6959
- var ErrorMessages = Messages$2.ErrorMessages;
7061
+ var ErrorMessages = Messages$3.ErrorMessages;
6960
7062
  var CacheIdentity = FeatureFlags$1.CacheIdentity;
6961
7063
  var Identify = IdentityMethods.Identify,
6962
7064
  Modify$1 = IdentityMethods.Modify,
@@ -6973,7 +7075,7 @@ var mParticle = (function () {
6973
7075
  // https://go.mparticle.com/work/SQDSDKS-6353
6974
7076
  this.IdentityRequest = {
6975
7077
  preProcessIdentityRequest: function preProcessIdentityRequest(identityApiData, callback, method) {
6976
- mpInstance.Logger.verbose(Messages$2.InformationMessages.StartingLogEvent + ': ' + method);
7078
+ mpInstance.Logger.verbose(Messages$3.InformationMessages.StartingLogEvent + ': ' + method);
6977
7079
  var identityValidationResult = mpInstance._Helpers.Validators.validateIdentities(identityApiData, method);
6978
7080
  if (!identityValidationResult.valid) {
6979
7081
  mpInstance.Logger.error('ERROR: ' + identityValidationResult.error);
@@ -7098,7 +7200,7 @@ var mParticle = (function () {
7098
7200
  * @class mParticle.Identity
7099
7201
  */
7100
7202
  this.IdentityAPI = {
7101
- HTTPCodes: HTTPCodes$2,
7203
+ HTTPCodes: HTTPCodes$3,
7102
7204
  /**
7103
7205
  * Initiate a logout request to the mParticle server
7104
7206
  * @method identify
@@ -7124,16 +7226,16 @@ var mParticle = (function () {
7124
7226
  if (mpInstance._Helpers.canLog()) {
7125
7227
  if (mpInstance._Store.webviewBridgeEnabled) {
7126
7228
  mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Identify, JSON.stringify(mpInstance._Identity.IdentityRequest.convertToNative(identityApiData)));
7127
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.nativeIdentityRequest, 'Identify request sent to native sdk');
7229
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.nativeIdentityRequest, 'Identify request sent to native sdk');
7128
7230
  } else {
7129
7231
  mpInstance._IdentityAPIClient.sendIdentityRequest(identityApiRequest, Identify, callback, identityApiData, self.parseIdentityResponse, mpid, identityApiRequest.known_identities);
7130
7232
  }
7131
7233
  } else {
7132
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.loggingDisabledOrMissingAPIKey, Messages$2.InformationMessages.AbandonLogEvent);
7133
- mpInstance.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent);
7234
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.loggingDisabledOrMissingAPIKey, Messages$3.InformationMessages.AbandonLogEvent);
7235
+ mpInstance.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent);
7134
7236
  }
7135
7237
  } else {
7136
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.validationIssue, preProcessResult.error);
7238
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.validationIssue, preProcessResult.error);
7137
7239
  mpInstance.Logger.verbose(preProcessResult);
7138
7240
  }
7139
7241
  },
@@ -7157,7 +7259,7 @@ var mParticle = (function () {
7157
7259
  if (mpInstance._Helpers.canLog()) {
7158
7260
  if (mpInstance._Store.webviewBridgeEnabled) {
7159
7261
  mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Logout, JSON.stringify(mpInstance._Identity.IdentityRequest.convertToNative(identityApiData)));
7160
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.nativeIdentityRequest, 'Logout request sent to native sdk');
7262
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.nativeIdentityRequest, 'Logout request sent to native sdk');
7161
7263
  } else {
7162
7264
  mpInstance._IdentityAPIClient.sendIdentityRequest(identityApiRequest, Logout, callback, identityApiData, self.parseIdentityResponse, mpid);
7163
7265
  evt = mpInstance._ServerModel.createEventObject({
@@ -7173,11 +7275,11 @@ var mParticle = (function () {
7173
7275
  }
7174
7276
  }
7175
7277
  } else {
7176
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.loggingDisabledOrMissingAPIKey, Messages$2.InformationMessages.AbandonLogEvent);
7177
- mpInstance.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent);
7278
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.loggingDisabledOrMissingAPIKey, Messages$3.InformationMessages.AbandonLogEvent);
7279
+ mpInstance.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent);
7178
7280
  }
7179
7281
  } else {
7180
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.validationIssue, preProcessResult.error);
7282
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.validationIssue, preProcessResult.error);
7181
7283
  mpInstance.Logger.verbose(preProcessResult);
7182
7284
  }
7183
7285
  },
@@ -7206,16 +7308,16 @@ var mParticle = (function () {
7206
7308
  if (mpInstance._Helpers.canLog()) {
7207
7309
  if (mpInstance._Store.webviewBridgeEnabled) {
7208
7310
  mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Login, JSON.stringify(mpInstance._Identity.IdentityRequest.convertToNative(identityApiData)));
7209
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.nativeIdentityRequest, 'Login request sent to native sdk');
7311
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.nativeIdentityRequest, 'Login request sent to native sdk');
7210
7312
  } else {
7211
7313
  mpInstance._IdentityAPIClient.sendIdentityRequest(identityApiRequest, Login, callback, identityApiData, self.parseIdentityResponse, mpid, identityApiRequest.known_identities);
7212
7314
  }
7213
7315
  } else {
7214
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.loggingDisabledOrMissingAPIKey, Messages$2.InformationMessages.AbandonLogEvent);
7215
- mpInstance.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent);
7316
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.loggingDisabledOrMissingAPIKey, Messages$3.InformationMessages.AbandonLogEvent);
7317
+ mpInstance.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent);
7216
7318
  }
7217
7319
  } else {
7218
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.validationIssue, preProcessResult.error);
7320
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.validationIssue, preProcessResult.error);
7219
7321
  mpInstance.Logger.verbose(preProcessResult);
7220
7322
  }
7221
7323
  },
@@ -7239,16 +7341,16 @@ var mParticle = (function () {
7239
7341
  if (mpInstance._Helpers.canLog()) {
7240
7342
  if (mpInstance._Store.webviewBridgeEnabled) {
7241
7343
  mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Modify, JSON.stringify(mpInstance._Identity.IdentityRequest.convertToNative(identityApiData)));
7242
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.nativeIdentityRequest, 'Modify request sent to native sdk');
7344
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.nativeIdentityRequest, 'Modify request sent to native sdk');
7243
7345
  } else {
7244
7346
  mpInstance._IdentityAPIClient.sendIdentityRequest(identityApiRequest, Modify$1, callback, identityApiData, self.parseIdentityResponse, mpid, identityApiRequest.known_identities);
7245
7347
  }
7246
7348
  } else {
7247
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.loggingDisabledOrMissingAPIKey, Messages$2.InformationMessages.AbandonLogEvent);
7248
- mpInstance.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent);
7349
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.loggingDisabledOrMissingAPIKey, Messages$3.InformationMessages.AbandonLogEvent);
7350
+ mpInstance.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent);
7249
7351
  }
7250
7352
  } else {
7251
- mpInstance._Helpers.invokeCallback(callback, HTTPCodes$2.validationIssue, preProcessResult.error);
7353
+ mpInstance._Helpers.invokeCallback(callback, HTTPCodes$3.validationIssue, preProcessResult.error);
7252
7354
  mpInstance.Logger.verbose(preProcessResult);
7253
7355
  }
7254
7356
  },
@@ -7327,34 +7429,34 @@ var mParticle = (function () {
7327
7429
  aliasUsers: function aliasUsers(aliasRequest, callback) {
7328
7430
  var message;
7329
7431
  if (!aliasRequest.destinationMpid || !aliasRequest.sourceMpid) {
7330
- message = Messages$2.ValidationMessages.AliasMissingMpid;
7432
+ message = Messages$3.ValidationMessages.AliasMissingMpid;
7331
7433
  }
7332
7434
  if (aliasRequest.destinationMpid === aliasRequest.sourceMpid) {
7333
- message = Messages$2.ValidationMessages.AliasNonUniqueMpid;
7435
+ message = Messages$3.ValidationMessages.AliasNonUniqueMpid;
7334
7436
  }
7335
7437
  if (!aliasRequest.startTime || !aliasRequest.endTime) {
7336
- message = Messages$2.ValidationMessages.AliasMissingTime;
7438
+ message = Messages$3.ValidationMessages.AliasMissingTime;
7337
7439
  }
7338
7440
  if (aliasRequest.startTime > aliasRequest.endTime) {
7339
- message = Messages$2.ValidationMessages.AliasStartBeforeEndTime;
7441
+ message = Messages$3.ValidationMessages.AliasStartBeforeEndTime;
7340
7442
  }
7341
7443
  if (message) {
7342
7444
  mpInstance.Logger.warning(message);
7343
- mpInstance._Helpers.invokeAliasCallback(callback, HTTPCodes$2.validationIssue, message);
7445
+ mpInstance._Helpers.invokeAliasCallback(callback, HTTPCodes$3.validationIssue, message);
7344
7446
  return;
7345
7447
  }
7346
7448
  if (mpInstance._Helpers.canLog()) {
7347
7449
  if (mpInstance._Store.webviewBridgeEnabled) {
7348
7450
  mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Alias, JSON.stringify(mpInstance._Identity.IdentityRequest.convertAliasToNative(aliasRequest)));
7349
- mpInstance._Helpers.invokeAliasCallback(callback, HTTPCodes$2.nativeIdentityRequest, 'Alias request sent to native sdk');
7451
+ mpInstance._Helpers.invokeAliasCallback(callback, HTTPCodes$3.nativeIdentityRequest, 'Alias request sent to native sdk');
7350
7452
  } else {
7351
- mpInstance.Logger.verbose(Messages$2.InformationMessages.StartingAliasRequest + ': ' + aliasRequest.sourceMpid + ' -> ' + aliasRequest.destinationMpid);
7453
+ mpInstance.Logger.verbose(Messages$3.InformationMessages.StartingAliasRequest + ': ' + aliasRequest.sourceMpid + ' -> ' + aliasRequest.destinationMpid);
7352
7454
  var aliasRequestMessage = mpInstance._Identity.IdentityRequest.createAliasNetworkRequest(aliasRequest);
7353
7455
  mpInstance._IdentityAPIClient.sendAliasRequest(aliasRequestMessage, callback);
7354
7456
  }
7355
7457
  } else {
7356
- mpInstance._Helpers.invokeAliasCallback(callback, HTTPCodes$2.loggingDisabledOrMissingAPIKey, Messages$2.InformationMessages.AbandonAliasUsers);
7357
- mpInstance.Logger.verbose(Messages$2.InformationMessages.AbandonAliasUsers);
7458
+ mpInstance._Helpers.invokeAliasCallback(callback, HTTPCodes$3.loggingDisabledOrMissingAPIKey, Messages$3.InformationMessages.AbandonAliasUsers);
7459
+ mpInstance.Logger.verbose(Messages$3.InformationMessages.AbandonAliasUsers);
7358
7460
  }
7359
7461
  },
7360
7462
  /**
@@ -7449,7 +7551,7 @@ var mParticle = (function () {
7449
7551
  */
7450
7552
  setUserTag: function setUserTag(tagName) {
7451
7553
  if (!mpInstance._Helpers.Validators.isValidKeyValue(tagName)) {
7452
- mpInstance.Logger.error(Messages$2.ErrorMessages.BadKey);
7554
+ mpInstance.Logger.error(Messages$3.ErrorMessages.BadKey);
7453
7555
  return;
7454
7556
  }
7455
7557
  this.setUserAttribute(tagName, null);
@@ -7461,7 +7563,7 @@ var mParticle = (function () {
7461
7563
  */
7462
7564
  removeUserTag: function removeUserTag(tagName) {
7463
7565
  if (!mpInstance._Helpers.Validators.isValidKeyValue(tagName)) {
7464
- mpInstance.Logger.error(Messages$2.ErrorMessages.BadKey);
7566
+ mpInstance.Logger.error(Messages$3.ErrorMessages.BadKey);
7465
7567
  return;
7466
7568
  }
7467
7569
  this.removeUserAttribute(tagName);
@@ -7478,11 +7580,11 @@ var mParticle = (function () {
7478
7580
  mpInstance._SessionManager.resetSessionTimer();
7479
7581
  if (mpInstance._Helpers.canLog()) {
7480
7582
  if (!mpInstance._Helpers.Validators.isValidAttributeValue(newValue)) {
7481
- mpInstance.Logger.error(Messages$2.ErrorMessages.BadAttribute);
7583
+ mpInstance.Logger.error(Messages$3.ErrorMessages.BadAttribute);
7482
7584
  return;
7483
7585
  }
7484
7586
  if (!mpInstance._Helpers.Validators.isValidKeyValue(key)) {
7485
- mpInstance.Logger.error(Messages$2.ErrorMessages.BadKey);
7587
+ mpInstance.Logger.error(Messages$3.ErrorMessages.BadKey);
7486
7588
  return;
7487
7589
  }
7488
7590
  if (mpInstance._Store.webviewBridgeEnabled) {
@@ -7539,7 +7641,7 @@ var mParticle = (function () {
7539
7641
  var cookies, userAttributes;
7540
7642
  mpInstance._SessionManager.resetSessionTimer();
7541
7643
  if (!mpInstance._Helpers.Validators.isValidKeyValue(key)) {
7542
- mpInstance.Logger.error(Messages$2.ErrorMessages.BadKey);
7644
+ mpInstance.Logger.error(Messages$3.ErrorMessages.BadKey);
7543
7645
  return;
7544
7646
  }
7545
7647
  if (mpInstance._Store.webviewBridgeEnabled) {
@@ -7575,7 +7677,7 @@ var mParticle = (function () {
7575
7677
  setUserAttributeList: function setUserAttributeList(key, newValue) {
7576
7678
  mpInstance._SessionManager.resetSessionTimer();
7577
7679
  if (!mpInstance._Helpers.Validators.isValidKeyValue(key)) {
7578
- mpInstance.Logger.error(Messages$2.ErrorMessages.BadKey);
7680
+ mpInstance.Logger.error(Messages$3.ErrorMessages.BadKey);
7579
7681
  return;
7580
7682
  }
7581
7683
  if (!Array.isArray(newValue)) {
@@ -7889,7 +7991,7 @@ var mParticle = (function () {
7889
7991
  // https://go.mparticle.com/work/SQDSDKS-6329
7890
7992
  mpInstance._Persistence.setFirstSeenTime(identityApiResult.mpid);
7891
7993
  }
7892
- if (identityResponse.status === HTTP_SUCCESS) {
7994
+ if (identityResponse.status === HTTP_OK) {
7893
7995
  if (getFeatureFlag(CacheIdentity)) {
7894
7996
  var identityResponseForCache = xhrIdentityResponseAdapter(identityResponse);
7895
7997
  cacheOrClearIdCache(method, knownIdentities, self.idCache, identityResponseForCache, parsingCachedResponse);
@@ -7941,7 +8043,7 @@ var mParticle = (function () {
7941
8043
  self.sendUserIdentityChangeEvent(newIdentitiesByName, method, identityApiResult.mpid, uiByName);
7942
8044
  }
7943
8045
  if (callback) {
7944
- var callbackCode = identityResponse.status === 0 ? HTTPCodes$2.noHttpCoverage : identityResponse.status;
8046
+ var callbackCode = identityResponse.status === 0 ? HTTPCodes$3.noHttpCoverage : identityResponse.status;
7945
8047
  mpInstance._Helpers.invokeCallback(callback, callbackCode, identityApiResult || null, newUser);
7946
8048
  } else if (identityApiResult && !isEmpty(identityApiResult.errors)) {
7947
8049
  // https://go.mparticle.com/work/SQDSDKS-6500
@@ -8882,42 +8984,108 @@ var mParticle = (function () {
8882
8984
  };
8883
8985
  }
8884
8986
 
8987
+ var HTTPCodes$2 = Constants.HTTPCodes,
8988
+ Messages$2 = Constants.Messages;
8989
+ function sendAliasRequest(mpInstance, aliasRequest, aliasCallback) {
8990
+ return __awaiter(this, void 0, void 0, function () {
8991
+ var _a, verbose, error, invokeAliasCallback, aliasUrl, apiKey, uploadUrl, uploader, uploadPayload, response, message, aliasResponseBody, xhrResponse, errorMessage, e_2, err;
8992
+ return __generator(this, function (_b) {
8993
+ switch (_b.label) {
8994
+ case 0:
8995
+ _a = mpInstance.Logger, verbose = _a.verbose, error = _a.error;
8996
+ invokeAliasCallback = mpInstance._Helpers.invokeAliasCallback;
8997
+ aliasUrl = mpInstance._Store.SDKConfig.aliasUrl;
8998
+ apiKey = mpInstance._Store.devToken;
8999
+ verbose(Messages$2.InformationMessages.SendAliasHttp);
9000
+ uploadUrl = "https://".concat(aliasUrl).concat(apiKey, "/Alias");
9001
+ uploader = window.fetch ? new FetchUploader(uploadUrl) : new XHRUploader(uploadUrl);
9002
+ uploadPayload = {
9003
+ method: 'post',
9004
+ headers: {
9005
+ Accept: 'text/plain;charset=UTF-8',
9006
+ 'Content-Type': 'application/json'
9007
+ },
9008
+ body: JSON.stringify(aliasRequest)
9009
+ };
9010
+ _b.label = 1;
9011
+ case 1:
9012
+ _b.trys.push([1, 9,, 10]);
9013
+ return [4 /*yield*/, uploader.upload(uploadPayload)];
9014
+ case 2:
9015
+ response = _b.sent();
9016
+ message = void 0;
9017
+ aliasResponseBody = void 0;
9018
+ if (!response.json) return [3 /*break*/, 7];
9019
+ _b.label = 3;
9020
+ case 3:
9021
+ _b.trys.push([3, 5,, 6]);
9022
+ return [4 /*yield*/, response.json()];
9023
+ case 4:
9024
+ aliasResponseBody = _b.sent();
9025
+ return [3 /*break*/, 6];
9026
+ case 5:
9027
+ _b.sent();
9028
+ verbose('The request has no response body');
9029
+ return [3 /*break*/, 6];
9030
+ case 6:
9031
+ return [3 /*break*/, 8];
9032
+ case 7:
9033
+ xhrResponse = response;
9034
+ // debugger;
9035
+ aliasResponseBody = xhrResponse.responseText ? JSON.parse(xhrResponse.responseText) : '';
9036
+ _b.label = 8;
9037
+ case 8:
9038
+ errorMessage = void 0;
9039
+ switch (response.status) {
9040
+ case HTTP_OK:
9041
+ case HTTP_ACCEPTED:
9042
+ // https://go.mparticle.com/work/SQDSDKS-6670
9043
+ message = 'Successfully sent forwarding stats to mParticle Servers';
9044
+ break;
9045
+ default:
9046
+ // 400 has an error message, but 403 doesn't
9047
+ if (aliasResponseBody === null || aliasResponseBody === void 0 ? void 0 : aliasResponseBody.message) {
9048
+ errorMessage = aliasResponseBody.message;
9049
+ }
9050
+ message = 'Issue with sending Alias Request to mParticle Servers, received HTTP Code of ' + response.status;
9051
+ }
9052
+ verbose(message);
9053
+ invokeAliasCallback(aliasCallback, response.status, errorMessage);
9054
+ return [3 /*break*/, 10];
9055
+ case 9:
9056
+ e_2 = _b.sent();
9057
+ err = e_2;
9058
+ error('Error sending alias request to mParticle servers. ' + err);
9059
+ invokeAliasCallback(aliasCallback, HTTPCodes$2.noHttpCoverage, err.message);
9060
+ return [3 /*break*/, 10];
9061
+ case 10:
9062
+ return [2 /*return*/];
9063
+ }
9064
+ });
9065
+ });
9066
+ }
9067
+
8885
9068
  var HTTPCodes$1 = Constants.HTTPCodes,
8886
9069
  Messages$1 = Constants.Messages;
8887
9070
  var Modify = Constants.IdentityMethods.Modify;
8888
9071
  function IdentityAPIClient(mpInstance) {
8889
- this.sendAliasRequest = function (aliasRequest, callback) {
8890
- var xhr,
8891
- xhrCallback = function xhrCallback() {
8892
- if (xhr.readyState === 4) {
8893
- // https://go.mparticle.com/work/SQDSDKS-6368
8894
- mpInstance.Logger.verbose('Received ' + xhr.statusText + ' from server');
8895
- //only parse error messages from failing requests
8896
- if (xhr.status !== 200 && xhr.status !== 202) {
8897
- if (xhr.responseText) {
8898
- var response = JSON.parse(xhr.responseText);
8899
- if (response.hasOwnProperty('message')) {
8900
- var errorMessage = response.message;
8901
- mpInstance._Helpers.invokeAliasCallback(callback, xhr.status, errorMessage);
8902
- return;
8903
- }
8904
- }
8905
- }
8906
- mpInstance._Helpers.invokeAliasCallback(callback, xhr.status);
9072
+ this.sendAliasRequest = /*#__PURE__*/function () {
9073
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(aliasRequest, callback) {
9074
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
9075
+ while (1) switch (_context.prev = _context.next) {
9076
+ case 0:
9077
+ _context.next = 2;
9078
+ return sendAliasRequest(mpInstance, aliasRequest, callback);
9079
+ case 2:
9080
+ case "end":
9081
+ return _context.stop();
8907
9082
  }
8908
- };
8909
- mpInstance.Logger.verbose(Messages$1.InformationMessages.SendAliasHttp);
8910
- xhr = mpInstance._Helpers.createXHR(xhrCallback);
8911
- if (xhr) {
8912
- try {
8913
- xhr.open('post', mpInstance._Helpers.createServiceUrl(mpInstance._Store.SDKConfig.aliasUrl, mpInstance._Store.devToken) + '/Alias');
8914
- xhr.send(JSON.stringify(aliasRequest));
8915
- } catch (e) {
8916
- mpInstance._Helpers.invokeAliasCallback(callback, HTTPCodes$1.noHttpCoverage, e);
8917
- mpInstance.Logger.error('Error sending alias request to mParticle servers. ' + e);
8918
- }
8919
- }
8920
- };
9083
+ }, _callee);
9084
+ }));
9085
+ return function (_x, _x2) {
9086
+ return _ref.apply(this, arguments);
9087
+ };
9088
+ }();
8921
9089
  this.sendIdentityRequest = function (identityApiRequest, method, callback, originalIdentityApiData, parseIdentityResponse, mpid, knownIdentities) {
8922
9090
  var xhr,
8923
9091
  previousMPID,
@@ -8963,10 +9131,129 @@ var mParticle = (function () {
8963
9131
  };
8964
9132
  }
8965
9133
 
9134
+ // Facebook Click ID has specific formatting rules
9135
+ // The formatted ClickID value must be of the form version.subdomainIndex.creationTime.<fbclid>, where:
9136
+ // - version is always this prefix: fb
9137
+ // - subdomainIndex is which domain the cookie is defined on ('com' = 0, 'example.com' = 1, 'www.example.com' = 2)
9138
+ // - creationTime is the UNIX time since epoch in milliseconds when the _fbc was stored. If you don't save the _fbc cookie, use the timestamp when you first observed or received this fbclid value
9139
+ // - <fbclid> is the value for the fbclid query parameter in the page URL.
9140
+ // https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc
9141
+ var facebookClickIdProcessor = function facebookClickIdProcessor(clickId, url, timestamp) {
9142
+ if (!clickId || !url) {
9143
+ return '';
9144
+ }
9145
+ var urlSegments = url === null || url === void 0 ? void 0 : url.split('//');
9146
+ if (!urlSegments) {
9147
+ return '';
9148
+ }
9149
+ var urlParts = urlSegments[1].split('/');
9150
+ var domainParts = urlParts[0].split('.');
9151
+ var subdomainIndex = 1;
9152
+ // The rules for subdomainIndex are for parsing the domain portion
9153
+ // of the URL for cookies, but in this case we are parsing the URL
9154
+ // itself, so we can ignore the use of 0 for 'com'
9155
+ if (domainParts.length >= 3) {
9156
+ subdomainIndex = 2;
9157
+ }
9158
+ // If timestamp is not provided, use the current time
9159
+ var _timestamp = timestamp || Date.now();
9160
+ return "fb.".concat(subdomainIndex, ".").concat(_timestamp, ".").concat(clickId);
9161
+ };
9162
+ var integrationMapping = {
9163
+ fbclid: {
9164
+ mappedKey: 'Facebook.ClickId',
9165
+ processor: facebookClickIdProcessor
9166
+ },
9167
+ _fbp: {
9168
+ mappedKey: 'Facebook.BrowserId'
9169
+ },
9170
+ _fbc: {
9171
+ mappedKey: 'Facebook.ClickId'
9172
+ }
9173
+ };
9174
+ var IntegrationCapture = /** @class */function () {
9175
+ function IntegrationCapture() {
9176
+ this.initialTimestamp = Date.now();
9177
+ }
9178
+ /**
9179
+ * Captures Integration Ids from cookies and query params and stores them in clickIds object
9180
+ */
9181
+ IntegrationCapture.prototype.capture = function () {
9182
+ var queryParams = this.captureQueryParams() || {};
9183
+ var cookies = this.captureCookies() || {};
9184
+ // Exclude _fbc if fbclid is present
9185
+ // https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc#retrieve-from-fbclid-url-query-parameter
9186
+ if (queryParams['fbclid'] && cookies['_fbc']) {
9187
+ delete cookies['_fbc'];
9188
+ }
9189
+ this.clickIds = __assign(__assign(__assign({}, this.clickIds), queryParams), cookies);
9190
+ };
9191
+ /**
9192
+ * Captures cookies based on the integration ID mapping.
9193
+ */
9194
+ IntegrationCapture.prototype.captureCookies = function () {
9195
+ var cookies = getCookies(Object.keys(integrationMapping));
9196
+ return this.applyProcessors(cookies);
9197
+ };
9198
+ /**
9199
+ * Captures query parameters based on the integration ID mapping.
9200
+ */
9201
+ IntegrationCapture.prototype.captureQueryParams = function () {
9202
+ var queryParams = this.getQueryParams();
9203
+ return this.applyProcessors(queryParams, getHref(), this.initialTimestamp);
9204
+ };
9205
+ /**
9206
+ * Gets the query parameters based on the integration ID mapping.
9207
+ * @returns {Dictionary<string>} The query parameters.
9208
+ */
9209
+ IntegrationCapture.prototype.getQueryParams = function () {
9210
+ return queryStringParser(getHref(), Object.keys(integrationMapping));
9211
+ };
9212
+ /**
9213
+ * Converts captured click IDs to custom flags for SDK events.
9214
+ * @returns {SDKEventCustomFlags} The custom flags.
9215
+ */
9216
+ IntegrationCapture.prototype.getClickIdsAsCustomFlags = function () {
9217
+ var _a;
9218
+ var customFlags = {};
9219
+ if (!this.clickIds) {
9220
+ return customFlags;
9221
+ }
9222
+ for (var _i = 0, _b = Object.entries(this.clickIds); _i < _b.length; _i++) {
9223
+ var _c = _b[_i],
9224
+ key = _c[0],
9225
+ value = _c[1];
9226
+ var mappedKey = (_a = integrationMapping[key]) === null || _a === void 0 ? void 0 : _a.mappedKey;
9227
+ if (!isEmpty(mappedKey)) {
9228
+ customFlags[mappedKey] = value;
9229
+ }
9230
+ }
9231
+ return customFlags;
9232
+ };
9233
+ IntegrationCapture.prototype.applyProcessors = function (clickIds, url, timestamp) {
9234
+ var _a;
9235
+ var processedClickIds = {};
9236
+ for (var _i = 0, _b = Object.entries(clickIds); _i < _b.length; _i++) {
9237
+ var _c = _b[_i],
9238
+ key = _c[0],
9239
+ value = _c[1];
9240
+ var processor = (_a = integrationMapping[key]) === null || _a === void 0 ? void 0 : _a.processor;
9241
+ if (processor) {
9242
+ processedClickIds[key] = processor(value, url, timestamp);
9243
+ } else {
9244
+ processedClickIds[key] = value;
9245
+ }
9246
+ }
9247
+ return processedClickIds;
9248
+ };
9249
+ return IntegrationCapture;
9250
+ }();
9251
+
8966
9252
  var Messages = Constants.Messages,
8967
9253
  HTTPCodes = Constants.HTTPCodes,
8968
9254
  FeatureFlags = Constants.FeatureFlags;
8969
- var ReportBatching = FeatureFlags.ReportBatching;
9255
+ var ReportBatching = FeatureFlags.ReportBatching,
9256
+ CaptureIntegrationSpecificIds = FeatureFlags.CaptureIntegrationSpecificIds;
8970
9257
  var StartingInitialization = Messages.InformationMessages.StartingInitialization;
8971
9258
 
8972
9259
  /**
@@ -9002,6 +9289,7 @@ var mParticle = (function () {
9002
9289
  integrationDelays: {},
9003
9290
  forwarderConstructors: []
9004
9291
  };
9292
+ this._IntegrationCapture = new IntegrationCapture();
9005
9293
 
9006
9294
  // required for forwarders once they reference the mparticle instance
9007
9295
  this.IdentityType = Types.IdentityType;
@@ -9942,6 +10230,9 @@ var mParticle = (function () {
9942
10230
  if (mpInstance._Helpers.getFeatureFlag(ReportBatching)) {
9943
10231
  mpInstance._ForwardingStatsUploader.startForwardingStatsTimer();
9944
10232
  }
10233
+ if (mpInstance._Helpers.getFeatureFlag(CaptureIntegrationSpecificIds)) {
10234
+ mpInstance._IntegrationCapture.capture();
10235
+ }
9945
10236
  mpInstance._Forwarders.processForwarders(config, mpInstance._APIClient.prepareForwardingStats);
9946
10237
  mpInstance._Forwarders.processPixelConfigs(config);
9947
10238