@mparticle/web-sdk 3.4.0 → 3.6.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.common.js +19 -12
- package/dist/mparticle.esm.js +19 -12
- package/dist/mparticle.js +44 -10
- package/dist/types/src/apiClient.d.ts +1 -2
- package/dist/types/src/filteredMparticleUser.d.ts +1 -0
- package/dist/types/src/mp-instance.d.ts +2 -1
- package/package.json +1 -1
- package/src/apiClient.ts +1 -2
- package/src/filteredMparticleUser.ts +1 -1
- package/src/forwarders.ts +44 -7
- package/src/helpers.ts +8 -0
- package/src/identity.ts +8 -4
- package/src/kitBlocking.ts +5 -1
- package/src/mp-instance.ts +4 -1
- package/src/persistence.ts +16 -1
package/dist/mparticle.common.js
CHANGED
|
@@ -15,7 +15,7 @@ map:function map(a,b){var c,d,e;if(null===this)throw new TypeError(" this is nul
|
|
|
15
15
|
filter:function filter(a/*, thisArg*/){if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=[],e=2<=arguments.length?arguments[1]:void 0,f=0;f<c;f++)if(f in b){var g=b[f];a.call(e,g,f,b)&&d.push(g);}return d},// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
|
|
16
16
|
isArray:function isArray(a){return "[object Array]"===Object.prototype.toString.call(a)},Base64:Base64$1};
|
|
17
17
|
|
|
18
|
-
var version = "3.
|
|
18
|
+
var version = "3.6.0";
|
|
19
19
|
|
|
20
20
|
var Constants={sdkVersion:version,sdkVendor:"mparticle",platform:"web",Messages:{DeprecationMessages:{MethodHasBeenDeprecated:"has been deprecated.",MethodMarkedForDeprecationPostfix:"is a deprecated method and will be removed in future releases.",AlternativeMethodPrefix:"Please use the alternate method:"},ErrorMessages:{NoToken:"A token must be specified.",EventNameInvalidType:"Event name must be a valid string value.",EventDataInvalidType:"Event data must be a valid object hash.",LoggingDisabled:"Event logging is currently disabled.",CookieParseError:"Could not parse cookie",EventEmpty:"Event object is null or undefined, cancelling send",APIRequestEmpty:"APIRequest is null or undefined, cancelling send",NoEventType:"Event type must be specified.",TransactionIdRequired:"Transaction ID is required",TransactionRequired:"A transaction attributes object is required",PromotionIdRequired:"Promotion ID is required",BadAttribute:"Attribute value cannot be object or array",BadKey:"Key value cannot be object or array",BadLogPurchase:"Transaction attributes and a product are both required to log a purchase, https://docs.mparticle.com/?javascript#measuring-transactions",AudienceAPINotEnabled:"Your workspace is not enabled to retrieve user audiences."},InformationMessages:{CookieSearch:"Searching for cookie",CookieFound:"Cookie found, parsing values",CookieNotFound:"Cookies not found",CookieSet:"Setting cookie",CookieSync:"Performing cookie sync",SendBegin:"Starting to send event",SendIdentityBegin:"Starting to send event to identity server",SendWindowsPhone:"Sending event to Windows Phone container",SendIOS:"Calling iOS path: ",SendAndroid:"Calling Android JS interface method: ",SendHttp:"Sending event to mParticle HTTP service",SendAliasHttp:"Sending alias request to mParticle HTTP service",SendIdentityHttp:"Sending event to mParticle HTTP service",StartingNewSession:"Starting new Session",StartingLogEvent:"Starting to log event",StartingLogOptOut:"Starting to log user opt in/out",StartingEndSession:"Starting to end session",StartingInitialization:"Starting to initialize",StartingLogCommerceEvent:"Starting to log commerce event",StartingAliasRequest:"Starting to Alias MPIDs",LoadingConfig:"Loading configuration options",AbandonLogEvent:"Cannot log event, logging disabled or developer token not set",AbandonAliasUsers:"Cannot Alias Users, logging disabled or developer token not set",AbandonStartSession:"Cannot start session, logging disabled or developer token not set",AbandonEndSession:"Cannot end session, logging disabled or developer token not set",NoSessionToEnd:"Cannot end session, no active session found"},ValidationMessages:{ModifyIdentityRequestUserIdentitiesPresent:"identityRequests to modify require userIdentities to be present. Request not sent to server. Please fix and try again",IdentityRequesetInvalidKey:"There is an invalid key on your identityRequest object. It can only contain a `userIdentities` object and a `onUserAlias` function. Request not sent to server. Please fix and try again.",OnUserAliasType:"The onUserAlias value must be a function.",UserIdentities:"The userIdentities key must be an object with keys of identityTypes and values of strings. Request not sent to server. Please fix and try again.",UserIdentitiesInvalidKey:"There is an invalid identity key on your `userIdentities` object within the identityRequest. Request not sent to server. Please fix and try again.",UserIdentitiesInvalidValues:"All user identity values must be strings or null. Request not sent to server. Please fix and try again.",AliasMissingMpid:"Alias Request must contain both a destinationMpid and a sourceMpid",AliasNonUniqueMpid:"Alias Request's destinationMpid and sourceMpid must be unique",AliasMissingTime:"Alias Request must have both a startTime and an endTime",AliasStartBeforeEndTime:"Alias Request's endTime must be later than its startTime"}},NativeSdkPaths:{LogEvent:"logEvent",SetUserTag:"setUserTag",RemoveUserTag:"removeUserTag",SetUserAttribute:"setUserAttribute",RemoveUserAttribute:"removeUserAttribute",SetSessionAttribute:"setSessionAttribute",LogOut:"logOut",SetUserAttributeList:"setUserAttributeList",RemoveAllUserAttributes:"removeAllUserAttributes",GetUserAttributesLists:"getUserAttributesLists",GetAllUserAttributes:"getAllUserAttributes",Identify:"identify",Logout:"logout",Login:"login",Modify:"modify",Alias:"aliasUsers",Upload:"upload"},StorageNames:{localStorageName:"mprtcl-api",localStorageNameV3:"mprtcl-v3",cookieName:"mprtcl-api",cookieNameV2:"mprtcl-v2",cookieNameV3:"mprtcl-v3",localStorageNameV4:"mprtcl-v4",cookieNameV4:"mprtcl-v4",currentStorageName:"mprtcl-v4"},DefaultConfig:{cookieDomain:null,cookieExpiration:365,logLevel:null,timeout:300,sessionTimeout:30,forwarderStatsTimeout:5e3,integrationDelayTimeout:5e3,maxCookieSize:3e3,aliasMaxWindow:90,uploadInterval:0// Maximum milliseconds in between batch uploads, below 500 will mean immediate upload. The server returns this as a string, but we are using it as a number internally
|
|
21
21
|
},DefaultBaseUrls:{v1SecureServiceUrl:"jssdks.mparticle.com/v1/JS/",v2SecureServiceUrl:"jssdks.mparticle.com/v2/JS/",v3SecureServiceUrl:"jssdks.mparticle.com/v3/JS/",configUrl:"jssdkcdns.mparticle.com/JS/v2/",identityUrl:"identity.mparticle.com/v1/",aliasUrl:"jssdks.mparticle.com/v1/identity/",userAudienceUrl:"nativesdks.mparticle.com/v1/"},// These are the paths that are used to construct the CNAME urls
|
|
@@ -623,7 +623,9 @@ if(!g||a._Store.requireDelay||!a._Store.configurationLoaded)return a.Logger.verb
|
|
|
623
623
|
|
|
624
624
|
var KitFilterHelper=/** @class */function(){function a(){}a.hashEventType=function(a){return generateHash(a)},a.hashEventName=function(a,b){return generateHash(b+a)},a.hashEventAttributeKey=function(a,b,c){return generateHash(a+b+c)},a.hashUserAttribute=function(a){return generateHash(a)},a.hashUserIdentity=function(a){return a},a.hashConsentPurpose=function(a,b){return generateHash(a+b)},a.hashAttributeConditionalForwarding=function(a){return generateHash(a).toString()},a.hashConsentPurposeConditionalForwarding=function(a,b){return this.hashConsentPurpose(a,b).toString()};var b;return b=a,a.filterUserAttributes=function(a,c){return filterDictionaryWithHash(a,c,function(a){return b.hashUserAttribute(a)})},a.filterUserIdentities=function(a,c){return filterDictionaryWithHash(a,c,function(a){return b.hashUserIdentity(IdentityType.getIdentityType(a))})},a.isFilteredUserAttribute=function(a,c){var d=b.hashUserAttribute(a);return c&&inArray(c,d)},a}();
|
|
625
625
|
|
|
626
|
-
var StorageNames$1=Constants.StorageNames;function appendFilteredUserIdentity(a,b,c){c===Types.IdentityType.CustomerId?a.unshift(b):a.push(b);}function buildFilteredUserIdentities$1(a,b,c){var d=[];if(!a||!Object.keys(a).length)return d;for(var e in a)if(a.hasOwnProperty(e)){
|
|
626
|
+
var StorageNames$1=Constants.StorageNames;function appendFilteredUserIdentity(a,b,c){c===Types.IdentityType.CustomerId?a.unshift(b):a.push(b);}function buildFilteredUserIdentities$1(a,b,c){var d=[];if(!a||!Object.keys(a).length)return d;for(var e in a)if(a.hasOwnProperty(e)){// Must be `=== false`: IdentityType.Other is 0, so a falsy check would
|
|
627
|
+
// drop a valid type.
|
|
628
|
+
var f=Types.IdentityType.getIdentityType(e),g=!1===f;g||c(b,f)||appendFilteredUserIdentity(d,{Type:f,Identity:a[e]},f);}return d}function Helpers(a){var b=this;// TODO: Refactor SDK to directly use these methods
|
|
627
629
|
// https://go.mparticle.com/work/SQDSDKS-5239
|
|
628
630
|
// Utility Functions
|
|
629
631
|
// Imported Validators
|
|
@@ -766,9 +768,11 @@ function k(b){var c=a._Store;return b.gs.sid=c.sessionId,b.gs.ie=c.isEnabled,b.g
|
|
|
766
768
|
a. Remove at random MPIDs on the cookie that are not part of the currentSessionMPIDs
|
|
767
769
|
b. Then remove MPIDs based on order in currentSessionMPIDs array, which
|
|
768
770
|
stores MPIDs based on earliest login.
|
|
769
|
-
*/function l(a,b){return a.length>b}function m(a,b,c,d){var e;for(var f in a)a.hasOwnProperty(f)&&(e=r(a,b,c),!!l(e,d))&&(SDKv2NonMPIDCookieKeys[f]||f===a.cu||delete a[f]);return e}function n(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(SDKv2NonMPIDCookieKeys[c]||c===a.cu||(b[c]=1));return b}function o(a,b,c,d,e,f){var g;for(var h in b)(g=r(a,d,e),!!l(g,f))&&b.hasOwnProperty(h)&&-1===c.indexOf(h)&&delete a[h];return g}function p(b,c,d){return b[c]?(a.Logger.verbose("Size of new encoded cookie is larger than maxCookieSize setting of "+d+". Removing from cookie the earliest logged in MPID containing: "+JSON.stringify(b[c],null,2)),void delete b[c]):void a.Logger.error("Unable to save MPID data to cookies because the resulting encoded cookie is larger than the maxCookieSize setting of "+d+". We recommend using a maxCookieSize of 1500.")}function q(a,b,c,d,e){for(var f,g=0;g<b.length&&(f=r(a,c,d),!!l(f,e));g++)p(a,b[g],e);return f}function r(a,b,c){return E.encodePersistence(JSON.stringify(a))+";expires="+b+";path=/"+c}function s(a,b,c){for(var d in a)if(b===d&&c===a[d])return !0;return !1}function t(
|
|
771
|
+
*/function l(a,b){return a.length>b}function m(a,b,c,d){var e;for(var f in a)a.hasOwnProperty(f)&&(e=r(a,b,c),!!l(e,d))&&(SDKv2NonMPIDCookieKeys[f]||f===a.cu||delete a[f]);return e}function n(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(SDKv2NonMPIDCookieKeys[c]||c===a.cu||(b[c]=1));return b}function o(a,b,c,d,e,f){var g;for(var h in b)(g=r(a,d,e),!!l(g,f))&&b.hasOwnProperty(h)&&-1===c.indexOf(h)&&delete a[h];return g}function p(b,c,d){return b[c]?(a.Logger.verbose("Size of new encoded cookie is larger than maxCookieSize setting of "+d+". Removing from cookie the earliest logged in MPID containing: "+JSON.stringify(b[c],null,2)),void delete b[c]):void a.Logger.error("Unable to save MPID data to cookies because the resulting encoded cookie is larger than the maxCookieSize setting of "+d+". We recommend using a maxCookieSize of 1500.")}function q(a,b,c,d,e){for(var f,g=0;g<b.length&&(f=r(a,c,d),!!l(f,e));g++)p(a,b[g],e);return f}function r(a,b,c){return E.encodePersistence(JSON.stringify(a))+";expires="+b+";path=/"+c}function s(a,b,c){for(var d in a)if(b===d&&c===a[d])return !0;return !1}function t(b,c,d){var e;for(var f in b)// any value in persistence that has an MPID key will be an MPID to search through
|
|
770
772
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
771
|
-
a[
|
|
773
|
+
a._Helpers.isObject(b[f])&&b[f].mpid&&s(b[f].ui,c,d)&&(e=f);return e}function u(a,b){var c;for(var d in b.userIdentities)if(a&&Object.keys(a).length){var e=t(a,d,b.userIdentities[d]);e&&(c=e);}return c}function v(b){return Array.isArray(b)?0<b.length:!!a._Helpers.isObject(b)&&0<Object.keys(b).length}function w(a,b){return a[b]&&v(a[b])?void(a[b]=Base64.encode(JSON.stringify(a[b]))):void delete a[b]}function x(a){for(var b in a)if(a.hasOwnProperty(b)){if(Base64CookieKeys[b]){w(a,b);continue}if("ie"==b){a[b]=a[b]?1:0;continue}a[b]||delete a[b];}}function y(b,c){var d=b[c];return a._Helpers.isObject(d)&&Object.keys(d).length?void(b[c]=Base64.encode(JSON.stringify(d))):void delete b[c]}function z(a){for(var b in a)a.hasOwnProperty(b)&&Base64CookieKeys[b]&&y(a,b);}function A(a){for(var b in a)a.hasOwnProperty(b)&&(SDKv2NonMPIDCookieKeys[b]||z(a[b]));}function B(a){for(var b in a)if(a.hasOwnProperty(b)){if(Base64CookieKeys[b]){a[b]=JSON.parse(Base64.decode(a[b])),"csm"!==b||Array.isArray(a[b])||delete a[b];continue}"ie"==b&&(a[b]=!!a[b]);}}function C(a){for(var b in a)a.hasOwnProperty(b)&&Base64CookieKeys[b]&&a[b].length&&(a[b]=JSON.parse(Base64.decode(a[b])));}function D(b){for(var c in b)if(b.hasOwnProperty(c)){if(!SDKv2NonMPIDCookieKeys[c]){// Written as an object by encodeMpidRecords, then read as one by
|
|
774
|
+
// findMpidForRequestedIdentity and copied by copyNonCurrentUserMpids.
|
|
775
|
+
if(!a._Helpers.isObject(b[c])){delete b[c];continue}C(b[c]);continue}"l"==c&&(b[c]=!!b[c]);}}// TODO: This should actually be decodePersistenceString or
|
|
772
776
|
// we should refactor this to take a string and return an object
|
|
773
777
|
var E=this;// https://go.mparticle.com/work/SQDSDKS-5022
|
|
774
778
|
// https://go.mparticle.com/work/SQDSDKS-5022
|
|
@@ -936,7 +940,7 @@ function isAttributeKeyAllowed(a,b){return !(null!==a&&void 0!==a)||!a.isAttribu
|
|
|
936
940
|
var FORWARDING_RULE_MESSAGE_TYPES=[Types.MessageType.PageEvent,Types.MessageType.PageView,Types.MessageType.Commerce];function inFilteredList(a,b){return !!(a&&a.length)&&inArray(a,b)}function isBlockedByForwardingRule(a,b,c){if(!FORWARDING_RULE_MESSAGE_TYPES.includes(a)||!c.filteringEventAttributeValue||!c.filteringEventAttributeValue.eventAttributeName||!c.filteringEventAttributeValue.eventAttributeValue)return !1;var d=null;if(b)for(var e in b)if(b.hasOwnProperty(e)){var f=KitFilterHelper.hashAttributeConditionalForwarding(e);if(f===c.filteringEventAttributeValue.eventAttributeName){d={name:f,value:KitFilterHelper.hashAttributeConditionalForwarding(b[e])};break}}var g=null!==d&&d.value===c.filteringEventAttributeValue.eventAttributeValue,h=!0===c.filteringEventAttributeValue.includeOnMatch?g:!g;return !h}function isBlockedByEventFilter(a,b,c,d){if(a===Types.MessageType.PageEvent&&(inFilteredList(d.eventNameFilters,b)||inFilteredList(d.eventTypeFilters,c)))return !0;return !!(a===Types.MessageType.Commerce&&inFilteredList(d.eventTypeFilters,c))||!!(a===Types.MessageType.PageView&&inFilteredList(d.screenNameFilters,b))}function filterEventAttributes(a,b,c,d,e){if(!d)return d;var f;if(a===Types.MessageType.PageEvent?f=e.attributeFilters:a===Types.MessageType.PageView&&(f=e.screenAttributeFilters),!f)return d;var g={};for(var h in d)if(d.hasOwnProperty(h)){var i=KitFilterHelper.hashEventAttributeKey(b,c,h);inArray(f,i)||(g[h]=d[h]);}return g}function filterUserIdentities(a,b){return a&&a.length?a.filter(function(a){return !inArray(b,KitFilterHelper.hashUserIdentity(a.Type))}):a||[]}
|
|
937
941
|
|
|
938
942
|
var _a;var _b=Constants.IdentityMethods,Modify$2=_b.Modify,Identify$1=_b.Identify,Login$1=_b.Login,Logout$1=_b.Logout,identityCompleteKitMethods=(_a={},_a[Identify$1]="onIdentifyComplete",_a[Login$1]="onLoginComplete",_a[Logout$1]="onLogoutComplete",_a[Modify$2]="onModifyComplete",_a);// Maps an identity method to the kit callback that reports its completion.
|
|
939
|
-
function userAttributesMatchFilter(a,b){for(var c in a)if(a.hasOwnProperty(c)){var d=KitFilterHelper.hashAttributeConditionalForwarding(c),e=KitFilterHelper.hashAttributeConditionalForwarding(a[c]);if(d===b.userAttributeName&&e===b.userAttributeValue)return !0}return !1}function Forwarders(a,b){var c=this,d=this;this.forwarderStatsUploader=new APIClient(a,b).initializeForwarderStatsUploader();var e={setUserAttribute:"setUserAttribute",removeUserAttribute:"removeUserAttribute"};// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
943
|
+
function removeBlockedUserIdentities(a,b){var c=a,d={};for(var e in c)c.hasOwnProperty(e)&&isIdentityAllowed(b,e)&&(d[e]=c[e]);return d}function userAttributesMatchFilter(a,b){for(var c in a)if(a.hasOwnProperty(c)){var d=KitFilterHelper.hashAttributeConditionalForwarding(c),e=KitFilterHelper.hashAttributeConditionalForwarding(a[c]);if(d===b.userAttributeName&&e===b.userAttributeValue)return !0}return !1}function Forwarders(a,b){var c=this,d=this;this.forwarderStatsUploader=new APIClient(a,b).initializeForwarderStatsUploader();var e={setUserAttribute:"setUserAttribute",removeUserAttribute:"removeUserAttribute"};// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
940
944
|
// Processing forwarders is a 2 step process:
|
|
941
945
|
// 1. Configure the kit
|
|
942
946
|
// 2. Initialize the kit
|
|
@@ -956,10 +960,11 @@ function userAttributesMatchFilter(a,b){for(var c in a)if(a.hasOwnProperty(c)){v
|
|
|
956
960
|
// there being a separate process for MP configured kits and
|
|
957
961
|
// sideloaded kits, this will need to be refactored.
|
|
958
962
|
// kits can be included via mParticle UI, or via sideloaded kit config API
|
|
959
|
-
this.initForwarders=function(
|
|
963
|
+
this.initForwarders=function(c,e){var f=a.Identity.getCurrentUser();if(!a._Store.webviewBridgeEnabled&&a._Store.configuredForwarders){var g=removeBlockedUserIdentities(c,b);// Some js libraries require that they be loaded first, or last, etc
|
|
964
|
+
a._Store.configuredForwarders.sort(function(a,b){return a.settings.PriorityValue=a.settings.PriorityValue||0,b.settings.PriorityValue=b.settings.PriorityValue||0,-1*(a.settings.PriorityValue-b.settings.PriorityValue)}),a._Store.activeForwarders=a._Store.configuredForwarders.filter(function(c){if(!a._Consent.isEnabledForUserConsent(c.filteringConsentRuleValues,f))return !1;if(!d.isEnabledForUserAttributes(c.filteringUserAttributeValue,f))return !1;if(!d.isEnabledForUnknownUser(c.excludeAnonymousUser,f))return !1;var h=a._Helpers.filterUserIdentities(g,c.userIdentityFilters),i=f?filteredMparticleUser(f.getMPID(),c,a,b).getAllUserAttributes():{};return c.initialized||(c.logger=a.Logger,c.init(c.settings,e,!1,null,i,h,a._Store.SDKConfig.appVersion,a._Store.SDKConfig.appName,a._Store.SDKConfig.customFlags,a._Store.clientId),c.initialized=!0),!0});}},this.isEnabledForUserAttributes=function(b,c){if(!b||!a._Helpers.isObject(b)||!Object.keys(b).length)return !0;if(!c)return !1;var d=c.getAllUserAttributes();try{var e=d&&a._Helpers.isObject(d)&&0<Object.keys(d).length,f=!!e&&userAttributesMatchFilter(d,b);return b.includeOnMatch===f}catch(a){// in any error scenario, err on side of returning true and forwarding event
|
|
960
965
|
return !0}},this.isEnabledForUnknownUser=function(a,b){return !!(b&&b.isLoggedIn()||!a)},this.applyToForwarders=function(b,c){a._Store.activeForwarders.length&&a._Store.activeForwarders.forEach(function(d){var e=d[b];if(e)try{var f=d[b](c);f&&a.Logger.verbose(f);}catch(b){a.Logger.verbose(b);}});},this.sendEventToForwarders=function(b){if(!a._Store.webviewBridgeEnabled&&a._Store.activeForwarders){// Not for...of: the downleveled loop is miscompiled in cjs/esm builds.
|
|
961
966
|
var c=KitFilterHelper.hashEventName(b.EventName,b.EventCategory),d=KitFilterHelper.hashEventType(b.EventCategory),e=function(e){if(!isBlockedByForwardingRule(b.EventDataType,b.EventAttributes,e)){// Clone the event object, as we could be sending different attributes to each forwarder
|
|
962
|
-
var f=extend(!0,{},b);if(!isBlockedByEventFilter(b.EventDataType,c,d,e)&&(f.EventAttributes=filterEventAttributes(b.EventDataType,b.EventCategory,b.EventName,f.EventAttributes,e),f.UserIdentities=filterUserIdentities(f.UserIdentities,e.userIdentityFilters),f.UserAttributes=KitFilterHelper.filterUserAttributes(f.UserAttributes,e.userAttributeFilters),!!e.process)){a.Logger.verbose("Sending message to forwarder: "+e.name);var g=e.process(f);g&&a.Logger.verbose(g);}}};a._Store.activeForwarders.forEach(function(a){e(a);});}},this.handleForwarderUserAttributes=function(c,d,f){b&&b.isAttributeKeyBlocked(d)||!a._Store.activeForwarders.length||a._Store.activeForwarders.forEach(function(b){var g=b[c];if(g&&!KitFilterHelper.isFilteredUserAttribute(d,b.userAttributeFilters))try{var h;c===e.setUserAttribute?h=b.setUserAttribute(d,f):c===e.removeUserAttribute&&(h=b.removeUserAttribute(d)),h&&a.Logger.verbose(h);}catch(b){a.Logger.error(b);}});},this.setForwarderUserIdentities=function(b)
|
|
967
|
+
var f=extend(!0,{},b);if(!isBlockedByEventFilter(b.EventDataType,c,d,e)&&(f.EventAttributes=filterEventAttributes(b.EventDataType,b.EventCategory,b.EventName,f.EventAttributes,e),f.UserIdentities=filterUserIdentities(f.UserIdentities,e.userIdentityFilters),f.UserAttributes=KitFilterHelper.filterUserAttributes(f.UserAttributes,e.userAttributeFilters),!!e.process)){a.Logger.verbose("Sending message to forwarder: "+e.name);var g=e.process(f);g&&a.Logger.verbose(g);}}};a._Store.activeForwarders.forEach(function(a){e(a);});}},this.handleForwarderUserAttributes=function(c,d,f){b&&b.isAttributeKeyBlocked(d)||!a._Store.activeForwarders.length||a._Store.activeForwarders.forEach(function(b){var g=b[c];if(g&&!KitFilterHelper.isFilteredUserAttribute(d,b.userAttributeFilters))try{var h;c===e.setUserAttribute?h=b.setUserAttribute(d,f):c===e.removeUserAttribute&&(h=b.removeUserAttribute(d)),h&&a.Logger.verbose(h);}catch(b){a.Logger.error(b);}});},this.setForwarderUserIdentities=function(c){var d=removeBlockedUserIdentities(c,b);a._Store.activeForwarders.forEach(function(b){var c=a._Helpers.filterUserIdentities(d,b.userIdentityFilters);b.setUserIdentity&&c.forEach(function(c){var d=b.setUserIdentity(c.Identity,c.Type);d&&a.Logger.verbose(d);});});},this.setForwarderOnUserIdentified=function(c){a._Store.activeForwarders.forEach(function(d){var e=filteredMparticleUser(c.getMPID(),d,a,b);if(d.onUserIdentified){var f=d.onUserIdentified(e);f&&a.Logger.verbose(f);}});},this.setForwarderOnIdentityComplete=function(c,d){var e=identityCompleteKitMethods[d];e&&a._Store.activeForwarders.forEach(function(d){var f=d[e];if(f){var g=filteredMparticleUser(c.getMPID(),d,a,b),h=f.call(d,g,g.getUserIdentities());h&&a.Logger.verbose(h);}});},this.getForwarderStatsQueue=function(){return a._Persistence.forwardingStatsBatches.forwardingStatsEventQueue},this.setForwarderStatsQueue=function(b){a._Persistence.forwardingStatsBatches.forwardingStatsEventQueue=b;},this.processForwarders=function(b,c){b?(this.processUIEnabledKits(b),this.processSideloadedKits(b),d.initForwarders(a._Store.SDKConfig.identifyRequest.userIdentities,c)):a.Logger.warning("No config was passed. Cannot process forwarders");},this.processUIEnabledKits=function(b){var c=this.returnKitConstructors();try{Array.isArray(b.kitConfigs)&&b.kitConfigs.length&&b.kitConfigs.forEach(function(a){d.configureUIEnabledKit(a,c);});}catch(b){a.Logger.error("MP Kits not configured propertly. Kits may not be initialized. "+b);}},this.returnKitConstructors=function(){var b={};// If there are kits inside of mpInstance._Store.SDKConfig.kits, then mParticle is self hosted
|
|
963
968
|
return isEmpty(a._Store.SDKConfig.kits)?!isEmpty(a._preInit.forwarderConstructors)&&a._preInit.forwarderConstructors.forEach(function(a){// A suffix is added to a kitConstructor and kit config if there are multiple different
|
|
964
969
|
// versions of a client kit. This matches the suffix in the DB. As an example
|
|
965
970
|
// the GA4 kit has a client kit and a server side kit which has a client side
|
|
@@ -1129,7 +1134,7 @@ return e<f&&(e=f,g<e&&a.Logger.warning("Source User has not been seen in the las
|
|
|
1129
1134
|
* @param {String} value
|
|
1130
1135
|
*/ // https://go.mparticle.com/work/SQDSDKS-4576
|
|
1131
1136
|
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
1132
|
-
setUserAttribute:function setUserAttribute(c,d){if(a._SessionManager.resetSessionTimer(),a._Helpers.canLog()){if(!a._Helpers.Validators.isValidAttributeValue(d))return void a.Logger.error(Messages$2.ErrorMessages.BadAttribute);if(!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttribute,JSON.stringify({key:c,value:d}));else {var f=this.getAllUserAttributes(),g=void 0,h=void 0,i=a._Helpers.findKeyInObject(f,c);i?(h=!1,g=f[i],delete f[i]):h=!0,f[c]=d,a._Store.setUserAttributes(b,f),e.sendUserAttributeChangeEvent(c,d,g,h,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,d);}}},/**
|
|
1137
|
+
setUserAttribute:function setUserAttribute(c,d){if(a._SessionManager.resetSessionTimer(),a._Helpers.canLog()){if(!a._Helpers.Validators.isValidAttributeValue(d))return void a.Logger.error(Messages$2.ErrorMessages.BadAttribute);if(!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttribute,JSON.stringify({key:c,value:d}));else {var f=this.getAllUserAttributes(),g=void 0,h=void 0,i=a._Helpers.findKeyInObject(f,c);i?(h=!1,g=f[i],delete f[i]):h=!0,f[c]=d,a._Store.setUserAttributes(b,f),e.sendUserAttributeChangeEvent(c,d,g,h,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,d);}}},/**
|
|
1133
1138
|
* Set multiple user attributes
|
|
1134
1139
|
* @method setUserAttributes
|
|
1135
1140
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
@@ -1138,7 +1143,7 @@ setUserAttributes:function setUserAttributes(b){if(a._SessionManager.resetSessio
|
|
|
1138
1143
|
* Removes a specific user attribute
|
|
1139
1144
|
* @method removeUserAttribute
|
|
1140
1145
|
* @param {String} key
|
|
1141
|
-
*/removeUserAttribute:function removeUserAttribute(c){var d,f;if(a._SessionManager.resetSessionTimer(),!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:c,value:null}));else {d=a._Persistence.getPersistence(),f=this.getAllUserAttributes();var g=a._Helpers.findKeyInObject(f,c);g&&(c=g);var h=f[c]?f[c].toString():null;delete f[c],d&&d[b]&&(d[b].ua=f,a._Persistence.savePersistence(d)),e.sendUserAttributeChangeEvent(c,null,h,!1,!0,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null);}},/**
|
|
1146
|
+
*/removeUserAttribute:function removeUserAttribute(c){var d,f;if(a._SessionManager.resetSessionTimer(),!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:c,value:null}));else {d=a._Persistence.getPersistence(),f=this.getAllUserAttributes();var g=a._Helpers.findKeyInObject(f,c);g&&(c=g);var h=f[c]?f[c].toString():null;delete f[c],d&&d[b]&&(d[b].ua=f,a._Persistence.savePersistence(d)),e.sendUserAttributeChangeEvent(c,null,h,!1,!0,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null);}},/**
|
|
1142
1147
|
* Sets a list of user attributes
|
|
1143
1148
|
* @method setUserAttributeList
|
|
1144
1149
|
* @param {String} key
|
|
@@ -1147,10 +1152,10 @@ setUserAttributes:function setUserAttributes(b){if(a._SessionManager.resetSessio
|
|
|
1147
1152
|
setUserAttributeList:function setUserAttributeList(c,d){if(a._SessionManager.resetSessionTimer(),!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(!Array.isArray(d))return void a.Logger.error("The value you passed in to setUserAttributeList must be an array. You passed in a "+_typeof(d));var f=d.slice();if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttributeList,JSON.stringify({key:c,value:f}));else {var g=this.getAllUserAttributes(),h=void 0,j=void 0,k=void 0,l=a._Helpers.findKeyInObject(g,c);// If the new attributeList length is different than the previous, then there is a change event.
|
|
1148
1153
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
1149
1154
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
1150
|
-
if(l?(j=!1,h=g[l],delete g[l]):j=!0,g[c]=f,a._Store.setUserAttributes(b,g),!h||!Array.isArray(h))k=!0;else if(d.length!==h.length)k=!0;else for(var m=0;m<d.length;m++)if(h[m]!==d[m]){k=!0;break}k&&e.sendUserAttributeChangeEvent(c,d,h,j,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,f);}},/**
|
|
1155
|
+
if(l?(j=!1,h=g[l],delete g[l]):j=!0,g[c]=f,a._Store.setUserAttributes(b,g),!h||!Array.isArray(h))k=!0;else if(d.length!==h.length)k=!0;else for(var m=0;m<d.length;m++)if(h[m]!==d[m]){k=!0;break}k&&e.sendUserAttributeChangeEvent(c,d,h,j,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,f);}},/**
|
|
1151
1156
|
* Removes all user attributes
|
|
1152
1157
|
* @method removeAllUserAttributes
|
|
1153
|
-
*/removeAllUserAttributes:function removeAllUserAttributes(){var b;if(a._SessionManager.resetSessionTimer(),a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveAllUserAttributes);else if(b=this.getAllUserAttributes(),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),b)for(var c in b)b.hasOwnProperty(c)&&a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null),this.removeUserAttribute(c);},/**
|
|
1158
|
+
*/removeAllUserAttributes:function removeAllUserAttributes(){var b;if(a._SessionManager.resetSessionTimer(),a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveAllUserAttributes);else if(b=this.getAllUserAttributes(),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),b)for(var c in b)b.hasOwnProperty(c)&&a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null),this.removeUserAttribute(c);},/**
|
|
1154
1159
|
* Returns all user attribute keys that have values that are arrays
|
|
1155
1160
|
* @method getUserAttributesLists
|
|
1156
1161
|
* @return {Object} an object of only keys with array values. Example: { attr1: [1, 2, 3], attr2: ['a', 'b', 'c'] }
|
|
@@ -1268,7 +1273,9 @@ if(v=null===(u=null===(t=null===(s=null===(r=null===(q=null===(p=null===(o=null=
|
|
|
1268
1273
|
// will be a boolean, otherwise it will return an object
|
|
1269
1274
|
return !("boolean"==typeof b&&b)&&"object"===_typeof(b)&&!0!==b[a];// When "Block unplanned user attributes" is enabled and "Allow unplanned user
|
|
1270
1275
|
// attributes" is also enabled in the UI, allowing unplanned user attributes will be prioritized
|
|
1271
|
-
},a.prototype.isIdentityBlocked=function(a){/* used when an attribute is added to the user */if(!this.blockUserIdentities)return !1;if(this.blockUserIdentities){var b=this.dataPlanMatchLookups.user_identities
|
|
1276
|
+
},a.prototype.isIdentityBlocked=function(a){/* used when an attribute is added to the user */if(!this.blockUserIdentities)return !1;if(this.blockUserIdentities){var b=this.dataPlanMatchLookups.user_identities;// The lookup is absent, not empty, when the plan carries no
|
|
1277
|
+
// user_identities data point, and indexing it would throw.
|
|
1278
|
+
if(!0===b||!b)return !1;if(!b[a])return !0}else return !1;return !1},a.prototype.transformUserIdentities=function(a){var b,c=this,d=__assign({},a);/*
|
|
1272
1279
|
If the user identity is not found in matchedIdentities
|
|
1273
1280
|
then remove it from event.UserIdentities as it is blocked.
|
|
1274
1281
|
event.UserIdentities is of type [{Identity: 'id1', Type: 7}, ...]
|
package/dist/mparticle.esm.js
CHANGED
|
@@ -15,7 +15,7 @@ map:function map(a,b){var c,d,e;if(null===this)throw new TypeError(" this is nul
|
|
|
15
15
|
filter:function filter(a/*, thisArg*/){if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=[],e=2<=arguments.length?arguments[1]:void 0,f=0;f<c;f++)if(f in b){var g=b[f];a.call(e,g,f,b)&&d.push(g);}return d},// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
|
|
16
16
|
isArray:function isArray(a){return "[object Array]"===Object.prototype.toString.call(a)},Base64:Base64$1};
|
|
17
17
|
|
|
18
|
-
var version = "3.
|
|
18
|
+
var version = "3.6.0";
|
|
19
19
|
|
|
20
20
|
var Constants={sdkVersion:version,sdkVendor:"mparticle",platform:"web",Messages:{DeprecationMessages:{MethodHasBeenDeprecated:"has been deprecated.",MethodMarkedForDeprecationPostfix:"is a deprecated method and will be removed in future releases.",AlternativeMethodPrefix:"Please use the alternate method:"},ErrorMessages:{NoToken:"A token must be specified.",EventNameInvalidType:"Event name must be a valid string value.",EventDataInvalidType:"Event data must be a valid object hash.",LoggingDisabled:"Event logging is currently disabled.",CookieParseError:"Could not parse cookie",EventEmpty:"Event object is null or undefined, cancelling send",APIRequestEmpty:"APIRequest is null or undefined, cancelling send",NoEventType:"Event type must be specified.",TransactionIdRequired:"Transaction ID is required",TransactionRequired:"A transaction attributes object is required",PromotionIdRequired:"Promotion ID is required",BadAttribute:"Attribute value cannot be object or array",BadKey:"Key value cannot be object or array",BadLogPurchase:"Transaction attributes and a product are both required to log a purchase, https://docs.mparticle.com/?javascript#measuring-transactions",AudienceAPINotEnabled:"Your workspace is not enabled to retrieve user audiences."},InformationMessages:{CookieSearch:"Searching for cookie",CookieFound:"Cookie found, parsing values",CookieNotFound:"Cookies not found",CookieSet:"Setting cookie",CookieSync:"Performing cookie sync",SendBegin:"Starting to send event",SendIdentityBegin:"Starting to send event to identity server",SendWindowsPhone:"Sending event to Windows Phone container",SendIOS:"Calling iOS path: ",SendAndroid:"Calling Android JS interface method: ",SendHttp:"Sending event to mParticle HTTP service",SendAliasHttp:"Sending alias request to mParticle HTTP service",SendIdentityHttp:"Sending event to mParticle HTTP service",StartingNewSession:"Starting new Session",StartingLogEvent:"Starting to log event",StartingLogOptOut:"Starting to log user opt in/out",StartingEndSession:"Starting to end session",StartingInitialization:"Starting to initialize",StartingLogCommerceEvent:"Starting to log commerce event",StartingAliasRequest:"Starting to Alias MPIDs",LoadingConfig:"Loading configuration options",AbandonLogEvent:"Cannot log event, logging disabled or developer token not set",AbandonAliasUsers:"Cannot Alias Users, logging disabled or developer token not set",AbandonStartSession:"Cannot start session, logging disabled or developer token not set",AbandonEndSession:"Cannot end session, logging disabled or developer token not set",NoSessionToEnd:"Cannot end session, no active session found"},ValidationMessages:{ModifyIdentityRequestUserIdentitiesPresent:"identityRequests to modify require userIdentities to be present. Request not sent to server. Please fix and try again",IdentityRequesetInvalidKey:"There is an invalid key on your identityRequest object. It can only contain a `userIdentities` object and a `onUserAlias` function. Request not sent to server. Please fix and try again.",OnUserAliasType:"The onUserAlias value must be a function.",UserIdentities:"The userIdentities key must be an object with keys of identityTypes and values of strings. Request not sent to server. Please fix and try again.",UserIdentitiesInvalidKey:"There is an invalid identity key on your `userIdentities` object within the identityRequest. Request not sent to server. Please fix and try again.",UserIdentitiesInvalidValues:"All user identity values must be strings or null. Request not sent to server. Please fix and try again.",AliasMissingMpid:"Alias Request must contain both a destinationMpid and a sourceMpid",AliasNonUniqueMpid:"Alias Request's destinationMpid and sourceMpid must be unique",AliasMissingTime:"Alias Request must have both a startTime and an endTime",AliasStartBeforeEndTime:"Alias Request's endTime must be later than its startTime"}},NativeSdkPaths:{LogEvent:"logEvent",SetUserTag:"setUserTag",RemoveUserTag:"removeUserTag",SetUserAttribute:"setUserAttribute",RemoveUserAttribute:"removeUserAttribute",SetSessionAttribute:"setSessionAttribute",LogOut:"logOut",SetUserAttributeList:"setUserAttributeList",RemoveAllUserAttributes:"removeAllUserAttributes",GetUserAttributesLists:"getUserAttributesLists",GetAllUserAttributes:"getAllUserAttributes",Identify:"identify",Logout:"logout",Login:"login",Modify:"modify",Alias:"aliasUsers",Upload:"upload"},StorageNames:{localStorageName:"mprtcl-api",localStorageNameV3:"mprtcl-v3",cookieName:"mprtcl-api",cookieNameV2:"mprtcl-v2",cookieNameV3:"mprtcl-v3",localStorageNameV4:"mprtcl-v4",cookieNameV4:"mprtcl-v4",currentStorageName:"mprtcl-v4"},DefaultConfig:{cookieDomain:null,cookieExpiration:365,logLevel:null,timeout:300,sessionTimeout:30,forwarderStatsTimeout:5e3,integrationDelayTimeout:5e3,maxCookieSize:3e3,aliasMaxWindow:90,uploadInterval:0// Maximum milliseconds in between batch uploads, below 500 will mean immediate upload. The server returns this as a string, but we are using it as a number internally
|
|
21
21
|
},DefaultBaseUrls:{v1SecureServiceUrl:"jssdks.mparticle.com/v1/JS/",v2SecureServiceUrl:"jssdks.mparticle.com/v2/JS/",v3SecureServiceUrl:"jssdks.mparticle.com/v3/JS/",configUrl:"jssdkcdns.mparticle.com/JS/v2/",identityUrl:"identity.mparticle.com/v1/",aliasUrl:"jssdks.mparticle.com/v1/identity/",userAudienceUrl:"nativesdks.mparticle.com/v1/"},// These are the paths that are used to construct the CNAME urls
|
|
@@ -623,7 +623,9 @@ if(!g||a._Store.requireDelay||!a._Store.configurationLoaded)return a.Logger.verb
|
|
|
623
623
|
|
|
624
624
|
var KitFilterHelper=/** @class */function(){function a(){}a.hashEventType=function(a){return generateHash(a)},a.hashEventName=function(a,b){return generateHash(b+a)},a.hashEventAttributeKey=function(a,b,c){return generateHash(a+b+c)},a.hashUserAttribute=function(a){return generateHash(a)},a.hashUserIdentity=function(a){return a},a.hashConsentPurpose=function(a,b){return generateHash(a+b)},a.hashAttributeConditionalForwarding=function(a){return generateHash(a).toString()},a.hashConsentPurposeConditionalForwarding=function(a,b){return this.hashConsentPurpose(a,b).toString()};var b;return b=a,a.filterUserAttributes=function(a,c){return filterDictionaryWithHash(a,c,function(a){return b.hashUserAttribute(a)})},a.filterUserIdentities=function(a,c){return filterDictionaryWithHash(a,c,function(a){return b.hashUserIdentity(IdentityType.getIdentityType(a))})},a.isFilteredUserAttribute=function(a,c){var d=b.hashUserAttribute(a);return c&&inArray(c,d)},a}();
|
|
625
625
|
|
|
626
|
-
var StorageNames$1=Constants.StorageNames;function appendFilteredUserIdentity(a,b,c){c===Types.IdentityType.CustomerId?a.unshift(b):a.push(b);}function buildFilteredUserIdentities$1(a,b,c){var d=[];if(!a||!Object.keys(a).length)return d;for(var e in a)if(a.hasOwnProperty(e)){
|
|
626
|
+
var StorageNames$1=Constants.StorageNames;function appendFilteredUserIdentity(a,b,c){c===Types.IdentityType.CustomerId?a.unshift(b):a.push(b);}function buildFilteredUserIdentities$1(a,b,c){var d=[];if(!a||!Object.keys(a).length)return d;for(var e in a)if(a.hasOwnProperty(e)){// Must be `=== false`: IdentityType.Other is 0, so a falsy check would
|
|
627
|
+
// drop a valid type.
|
|
628
|
+
var f=Types.IdentityType.getIdentityType(e),g=!1===f;g||c(b,f)||appendFilteredUserIdentity(d,{Type:f,Identity:a[e]},f);}return d}function Helpers(a){var b=this;// TODO: Refactor SDK to directly use these methods
|
|
627
629
|
// https://go.mparticle.com/work/SQDSDKS-5239
|
|
628
630
|
// Utility Functions
|
|
629
631
|
// Imported Validators
|
|
@@ -766,9 +768,11 @@ function k(b){var c=a._Store;return b.gs.sid=c.sessionId,b.gs.ie=c.isEnabled,b.g
|
|
|
766
768
|
a. Remove at random MPIDs on the cookie that are not part of the currentSessionMPIDs
|
|
767
769
|
b. Then remove MPIDs based on order in currentSessionMPIDs array, which
|
|
768
770
|
stores MPIDs based on earliest login.
|
|
769
|
-
*/function l(a,b){return a.length>b}function m(a,b,c,d){var e;for(var f in a)a.hasOwnProperty(f)&&(e=r(a,b,c),!!l(e,d))&&(SDKv2NonMPIDCookieKeys[f]||f===a.cu||delete a[f]);return e}function n(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(SDKv2NonMPIDCookieKeys[c]||c===a.cu||(b[c]=1));return b}function o(a,b,c,d,e,f){var g;for(var h in b)(g=r(a,d,e),!!l(g,f))&&b.hasOwnProperty(h)&&-1===c.indexOf(h)&&delete a[h];return g}function p(b,c,d){return b[c]?(a.Logger.verbose("Size of new encoded cookie is larger than maxCookieSize setting of "+d+". Removing from cookie the earliest logged in MPID containing: "+JSON.stringify(b[c],null,2)),void delete b[c]):void a.Logger.error("Unable to save MPID data to cookies because the resulting encoded cookie is larger than the maxCookieSize setting of "+d+". We recommend using a maxCookieSize of 1500.")}function q(a,b,c,d,e){for(var f,g=0;g<b.length&&(f=r(a,c,d),!!l(f,e));g++)p(a,b[g],e);return f}function r(a,b,c){return E.encodePersistence(JSON.stringify(a))+";expires="+b+";path=/"+c}function s(a,b,c){for(var d in a)if(b===d&&c===a[d])return !0;return !1}function t(
|
|
771
|
+
*/function l(a,b){return a.length>b}function m(a,b,c,d){var e;for(var f in a)a.hasOwnProperty(f)&&(e=r(a,b,c),!!l(e,d))&&(SDKv2NonMPIDCookieKeys[f]||f===a.cu||delete a[f]);return e}function n(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(SDKv2NonMPIDCookieKeys[c]||c===a.cu||(b[c]=1));return b}function o(a,b,c,d,e,f){var g;for(var h in b)(g=r(a,d,e),!!l(g,f))&&b.hasOwnProperty(h)&&-1===c.indexOf(h)&&delete a[h];return g}function p(b,c,d){return b[c]?(a.Logger.verbose("Size of new encoded cookie is larger than maxCookieSize setting of "+d+". Removing from cookie the earliest logged in MPID containing: "+JSON.stringify(b[c],null,2)),void delete b[c]):void a.Logger.error("Unable to save MPID data to cookies because the resulting encoded cookie is larger than the maxCookieSize setting of "+d+". We recommend using a maxCookieSize of 1500.")}function q(a,b,c,d,e){for(var f,g=0;g<b.length&&(f=r(a,c,d),!!l(f,e));g++)p(a,b[g],e);return f}function r(a,b,c){return E.encodePersistence(JSON.stringify(a))+";expires="+b+";path=/"+c}function s(a,b,c){for(var d in a)if(b===d&&c===a[d])return !0;return !1}function t(b,c,d){var e;for(var f in b)// any value in persistence that has an MPID key will be an MPID to search through
|
|
770
772
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
771
|
-
a[
|
|
773
|
+
a._Helpers.isObject(b[f])&&b[f].mpid&&s(b[f].ui,c,d)&&(e=f);return e}function u(a,b){var c;for(var d in b.userIdentities)if(a&&Object.keys(a).length){var e=t(a,d,b.userIdentities[d]);e&&(c=e);}return c}function v(b){return Array.isArray(b)?0<b.length:!!a._Helpers.isObject(b)&&0<Object.keys(b).length}function w(a,b){return a[b]&&v(a[b])?void(a[b]=Base64.encode(JSON.stringify(a[b]))):void delete a[b]}function x(a){for(var b in a)if(a.hasOwnProperty(b)){if(Base64CookieKeys[b]){w(a,b);continue}if("ie"==b){a[b]=a[b]?1:0;continue}a[b]||delete a[b];}}function y(b,c){var d=b[c];return a._Helpers.isObject(d)&&Object.keys(d).length?void(b[c]=Base64.encode(JSON.stringify(d))):void delete b[c]}function z(a){for(var b in a)a.hasOwnProperty(b)&&Base64CookieKeys[b]&&y(a,b);}function A(a){for(var b in a)a.hasOwnProperty(b)&&(SDKv2NonMPIDCookieKeys[b]||z(a[b]));}function B(a){for(var b in a)if(a.hasOwnProperty(b)){if(Base64CookieKeys[b]){a[b]=JSON.parse(Base64.decode(a[b])),"csm"!==b||Array.isArray(a[b])||delete a[b];continue}"ie"==b&&(a[b]=!!a[b]);}}function C(a){for(var b in a)a.hasOwnProperty(b)&&Base64CookieKeys[b]&&a[b].length&&(a[b]=JSON.parse(Base64.decode(a[b])));}function D(b){for(var c in b)if(b.hasOwnProperty(c)){if(!SDKv2NonMPIDCookieKeys[c]){// Written as an object by encodeMpidRecords, then read as one by
|
|
774
|
+
// findMpidForRequestedIdentity and copied by copyNonCurrentUserMpids.
|
|
775
|
+
if(!a._Helpers.isObject(b[c])){delete b[c];continue}C(b[c]);continue}"l"==c&&(b[c]=!!b[c]);}}// TODO: This should actually be decodePersistenceString or
|
|
772
776
|
// we should refactor this to take a string and return an object
|
|
773
777
|
var E=this;// https://go.mparticle.com/work/SQDSDKS-5022
|
|
774
778
|
// https://go.mparticle.com/work/SQDSDKS-5022
|
|
@@ -936,7 +940,7 @@ function isAttributeKeyAllowed(a,b){return !(null!==a&&void 0!==a)||!a.isAttribu
|
|
|
936
940
|
var FORWARDING_RULE_MESSAGE_TYPES=[Types.MessageType.PageEvent,Types.MessageType.PageView,Types.MessageType.Commerce];function inFilteredList(a,b){return !!(a&&a.length)&&inArray(a,b)}function isBlockedByForwardingRule(a,b,c){if(!FORWARDING_RULE_MESSAGE_TYPES.includes(a)||!c.filteringEventAttributeValue||!c.filteringEventAttributeValue.eventAttributeName||!c.filteringEventAttributeValue.eventAttributeValue)return !1;var d=null;if(b)for(var e in b)if(b.hasOwnProperty(e)){var f=KitFilterHelper.hashAttributeConditionalForwarding(e);if(f===c.filteringEventAttributeValue.eventAttributeName){d={name:f,value:KitFilterHelper.hashAttributeConditionalForwarding(b[e])};break}}var g=null!==d&&d.value===c.filteringEventAttributeValue.eventAttributeValue,h=!0===c.filteringEventAttributeValue.includeOnMatch?g:!g;return !h}function isBlockedByEventFilter(a,b,c,d){if(a===Types.MessageType.PageEvent&&(inFilteredList(d.eventNameFilters,b)||inFilteredList(d.eventTypeFilters,c)))return !0;return !!(a===Types.MessageType.Commerce&&inFilteredList(d.eventTypeFilters,c))||!!(a===Types.MessageType.PageView&&inFilteredList(d.screenNameFilters,b))}function filterEventAttributes(a,b,c,d,e){if(!d)return d;var f;if(a===Types.MessageType.PageEvent?f=e.attributeFilters:a===Types.MessageType.PageView&&(f=e.screenAttributeFilters),!f)return d;var g={};for(var h in d)if(d.hasOwnProperty(h)){var i=KitFilterHelper.hashEventAttributeKey(b,c,h);inArray(f,i)||(g[h]=d[h]);}return g}function filterUserIdentities(a,b){return a&&a.length?a.filter(function(a){return !inArray(b,KitFilterHelper.hashUserIdentity(a.Type))}):a||[]}
|
|
937
941
|
|
|
938
942
|
var _a;var _b=Constants.IdentityMethods,Modify$2=_b.Modify,Identify$1=_b.Identify,Login$1=_b.Login,Logout$1=_b.Logout,identityCompleteKitMethods=(_a={},_a[Identify$1]="onIdentifyComplete",_a[Login$1]="onLoginComplete",_a[Logout$1]="onLogoutComplete",_a[Modify$2]="onModifyComplete",_a);// Maps an identity method to the kit callback that reports its completion.
|
|
939
|
-
function userAttributesMatchFilter(a,b){for(var c in a)if(a.hasOwnProperty(c)){var d=KitFilterHelper.hashAttributeConditionalForwarding(c),e=KitFilterHelper.hashAttributeConditionalForwarding(a[c]);if(d===b.userAttributeName&&e===b.userAttributeValue)return !0}return !1}function Forwarders(a,b){var c=this,d=this;this.forwarderStatsUploader=new APIClient(a,b).initializeForwarderStatsUploader();var e={setUserAttribute:"setUserAttribute",removeUserAttribute:"removeUserAttribute"};// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
943
|
+
function removeBlockedUserIdentities(a,b){var c=a,d={};for(var e in c)c.hasOwnProperty(e)&&isIdentityAllowed(b,e)&&(d[e]=c[e]);return d}function userAttributesMatchFilter(a,b){for(var c in a)if(a.hasOwnProperty(c)){var d=KitFilterHelper.hashAttributeConditionalForwarding(c),e=KitFilterHelper.hashAttributeConditionalForwarding(a[c]);if(d===b.userAttributeName&&e===b.userAttributeValue)return !0}return !1}function Forwarders(a,b){var c=this,d=this;this.forwarderStatsUploader=new APIClient(a,b).initializeForwarderStatsUploader();var e={setUserAttribute:"setUserAttribute",removeUserAttribute:"removeUserAttribute"};// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
940
944
|
// Processing forwarders is a 2 step process:
|
|
941
945
|
// 1. Configure the kit
|
|
942
946
|
// 2. Initialize the kit
|
|
@@ -956,10 +960,11 @@ function userAttributesMatchFilter(a,b){for(var c in a)if(a.hasOwnProperty(c)){v
|
|
|
956
960
|
// there being a separate process for MP configured kits and
|
|
957
961
|
// sideloaded kits, this will need to be refactored.
|
|
958
962
|
// kits can be included via mParticle UI, or via sideloaded kit config API
|
|
959
|
-
this.initForwarders=function(
|
|
963
|
+
this.initForwarders=function(c,e){var f=a.Identity.getCurrentUser();if(!a._Store.webviewBridgeEnabled&&a._Store.configuredForwarders){var g=removeBlockedUserIdentities(c,b);// Some js libraries require that they be loaded first, or last, etc
|
|
964
|
+
a._Store.configuredForwarders.sort(function(a,b){return a.settings.PriorityValue=a.settings.PriorityValue||0,b.settings.PriorityValue=b.settings.PriorityValue||0,-1*(a.settings.PriorityValue-b.settings.PriorityValue)}),a._Store.activeForwarders=a._Store.configuredForwarders.filter(function(c){if(!a._Consent.isEnabledForUserConsent(c.filteringConsentRuleValues,f))return !1;if(!d.isEnabledForUserAttributes(c.filteringUserAttributeValue,f))return !1;if(!d.isEnabledForUnknownUser(c.excludeAnonymousUser,f))return !1;var h=a._Helpers.filterUserIdentities(g,c.userIdentityFilters),i=f?filteredMparticleUser(f.getMPID(),c,a,b).getAllUserAttributes():{};return c.initialized||(c.logger=a.Logger,c.init(c.settings,e,!1,null,i,h,a._Store.SDKConfig.appVersion,a._Store.SDKConfig.appName,a._Store.SDKConfig.customFlags,a._Store.clientId),c.initialized=!0),!0});}},this.isEnabledForUserAttributes=function(b,c){if(!b||!a._Helpers.isObject(b)||!Object.keys(b).length)return !0;if(!c)return !1;var d=c.getAllUserAttributes();try{var e=d&&a._Helpers.isObject(d)&&0<Object.keys(d).length,f=!!e&&userAttributesMatchFilter(d,b);return b.includeOnMatch===f}catch(a){// in any error scenario, err on side of returning true and forwarding event
|
|
960
965
|
return !0}},this.isEnabledForUnknownUser=function(a,b){return !!(b&&b.isLoggedIn()||!a)},this.applyToForwarders=function(b,c){a._Store.activeForwarders.length&&a._Store.activeForwarders.forEach(function(d){var e=d[b];if(e)try{var f=d[b](c);f&&a.Logger.verbose(f);}catch(b){a.Logger.verbose(b);}});},this.sendEventToForwarders=function(b){if(!a._Store.webviewBridgeEnabled&&a._Store.activeForwarders){// Not for...of: the downleveled loop is miscompiled in cjs/esm builds.
|
|
961
966
|
var c=KitFilterHelper.hashEventName(b.EventName,b.EventCategory),d=KitFilterHelper.hashEventType(b.EventCategory),e=function(e){if(!isBlockedByForwardingRule(b.EventDataType,b.EventAttributes,e)){// Clone the event object, as we could be sending different attributes to each forwarder
|
|
962
|
-
var f=extend(!0,{},b);if(!isBlockedByEventFilter(b.EventDataType,c,d,e)&&(f.EventAttributes=filterEventAttributes(b.EventDataType,b.EventCategory,b.EventName,f.EventAttributes,e),f.UserIdentities=filterUserIdentities(f.UserIdentities,e.userIdentityFilters),f.UserAttributes=KitFilterHelper.filterUserAttributes(f.UserAttributes,e.userAttributeFilters),!!e.process)){a.Logger.verbose("Sending message to forwarder: "+e.name);var g=e.process(f);g&&a.Logger.verbose(g);}}};a._Store.activeForwarders.forEach(function(a){e(a);});}},this.handleForwarderUserAttributes=function(c,d,f){b&&b.isAttributeKeyBlocked(d)||!a._Store.activeForwarders.length||a._Store.activeForwarders.forEach(function(b){var g=b[c];if(g&&!KitFilterHelper.isFilteredUserAttribute(d,b.userAttributeFilters))try{var h;c===e.setUserAttribute?h=b.setUserAttribute(d,f):c===e.removeUserAttribute&&(h=b.removeUserAttribute(d)),h&&a.Logger.verbose(h);}catch(b){a.Logger.error(b);}});},this.setForwarderUserIdentities=function(b)
|
|
967
|
+
var f=extend(!0,{},b);if(!isBlockedByEventFilter(b.EventDataType,c,d,e)&&(f.EventAttributes=filterEventAttributes(b.EventDataType,b.EventCategory,b.EventName,f.EventAttributes,e),f.UserIdentities=filterUserIdentities(f.UserIdentities,e.userIdentityFilters),f.UserAttributes=KitFilterHelper.filterUserAttributes(f.UserAttributes,e.userAttributeFilters),!!e.process)){a.Logger.verbose("Sending message to forwarder: "+e.name);var g=e.process(f);g&&a.Logger.verbose(g);}}};a._Store.activeForwarders.forEach(function(a){e(a);});}},this.handleForwarderUserAttributes=function(c,d,f){b&&b.isAttributeKeyBlocked(d)||!a._Store.activeForwarders.length||a._Store.activeForwarders.forEach(function(b){var g=b[c];if(g&&!KitFilterHelper.isFilteredUserAttribute(d,b.userAttributeFilters))try{var h;c===e.setUserAttribute?h=b.setUserAttribute(d,f):c===e.removeUserAttribute&&(h=b.removeUserAttribute(d)),h&&a.Logger.verbose(h);}catch(b){a.Logger.error(b);}});},this.setForwarderUserIdentities=function(c){var d=removeBlockedUserIdentities(c,b);a._Store.activeForwarders.forEach(function(b){var c=a._Helpers.filterUserIdentities(d,b.userIdentityFilters);b.setUserIdentity&&c.forEach(function(c){var d=b.setUserIdentity(c.Identity,c.Type);d&&a.Logger.verbose(d);});});},this.setForwarderOnUserIdentified=function(c){a._Store.activeForwarders.forEach(function(d){var e=filteredMparticleUser(c.getMPID(),d,a,b);if(d.onUserIdentified){var f=d.onUserIdentified(e);f&&a.Logger.verbose(f);}});},this.setForwarderOnIdentityComplete=function(c,d){var e=identityCompleteKitMethods[d];e&&a._Store.activeForwarders.forEach(function(d){var f=d[e];if(f){var g=filteredMparticleUser(c.getMPID(),d,a,b),h=f.call(d,g,g.getUserIdentities());h&&a.Logger.verbose(h);}});},this.getForwarderStatsQueue=function(){return a._Persistence.forwardingStatsBatches.forwardingStatsEventQueue},this.setForwarderStatsQueue=function(b){a._Persistence.forwardingStatsBatches.forwardingStatsEventQueue=b;},this.processForwarders=function(b,c){b?(this.processUIEnabledKits(b),this.processSideloadedKits(b),d.initForwarders(a._Store.SDKConfig.identifyRequest.userIdentities,c)):a.Logger.warning("No config was passed. Cannot process forwarders");},this.processUIEnabledKits=function(b){var c=this.returnKitConstructors();try{Array.isArray(b.kitConfigs)&&b.kitConfigs.length&&b.kitConfigs.forEach(function(a){d.configureUIEnabledKit(a,c);});}catch(b){a.Logger.error("MP Kits not configured propertly. Kits may not be initialized. "+b);}},this.returnKitConstructors=function(){var b={};// If there are kits inside of mpInstance._Store.SDKConfig.kits, then mParticle is self hosted
|
|
963
968
|
return isEmpty(a._Store.SDKConfig.kits)?!isEmpty(a._preInit.forwarderConstructors)&&a._preInit.forwarderConstructors.forEach(function(a){// A suffix is added to a kitConstructor and kit config if there are multiple different
|
|
964
969
|
// versions of a client kit. This matches the suffix in the DB. As an example
|
|
965
970
|
// the GA4 kit has a client kit and a server side kit which has a client side
|
|
@@ -1129,7 +1134,7 @@ return e<f&&(e=f,g<e&&a.Logger.warning("Source User has not been seen in the las
|
|
|
1129
1134
|
* @param {String} value
|
|
1130
1135
|
*/ // https://go.mparticle.com/work/SQDSDKS-4576
|
|
1131
1136
|
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
1132
|
-
setUserAttribute:function setUserAttribute(c,d){if(a._SessionManager.resetSessionTimer(),a._Helpers.canLog()){if(!a._Helpers.Validators.isValidAttributeValue(d))return void a.Logger.error(Messages$2.ErrorMessages.BadAttribute);if(!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttribute,JSON.stringify({key:c,value:d}));else {var f=this.getAllUserAttributes(),g=void 0,h=void 0,i=a._Helpers.findKeyInObject(f,c);i?(h=!1,g=f[i],delete f[i]):h=!0,f[c]=d,a._Store.setUserAttributes(b,f),e.sendUserAttributeChangeEvent(c,d,g,h,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,d);}}},/**
|
|
1137
|
+
setUserAttribute:function setUserAttribute(c,d){if(a._SessionManager.resetSessionTimer(),a._Helpers.canLog()){if(!a._Helpers.Validators.isValidAttributeValue(d))return void a.Logger.error(Messages$2.ErrorMessages.BadAttribute);if(!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttribute,JSON.stringify({key:c,value:d}));else {var f=this.getAllUserAttributes(),g=void 0,h=void 0,i=a._Helpers.findKeyInObject(f,c);i?(h=!1,g=f[i],delete f[i]):h=!0,f[c]=d,a._Store.setUserAttributes(b,f),e.sendUserAttributeChangeEvent(c,d,g,h,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,d);}}},/**
|
|
1133
1138
|
* Set multiple user attributes
|
|
1134
1139
|
* @method setUserAttributes
|
|
1135
1140
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
@@ -1138,7 +1143,7 @@ setUserAttributes:function setUserAttributes(b){if(a._SessionManager.resetSessio
|
|
|
1138
1143
|
* Removes a specific user attribute
|
|
1139
1144
|
* @method removeUserAttribute
|
|
1140
1145
|
* @param {String} key
|
|
1141
|
-
*/removeUserAttribute:function removeUserAttribute(c){var d,f;if(a._SessionManager.resetSessionTimer(),!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:c,value:null}));else {d=a._Persistence.getPersistence(),f=this.getAllUserAttributes();var g=a._Helpers.findKeyInObject(f,c);g&&(c=g);var h=f[c]?f[c].toString():null;delete f[c],d&&d[b]&&(d[b].ua=f,a._Persistence.savePersistence(d)),e.sendUserAttributeChangeEvent(c,null,h,!1,!0,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null);}},/**
|
|
1146
|
+
*/removeUserAttribute:function removeUserAttribute(c){var d,f;if(a._SessionManager.resetSessionTimer(),!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:c,value:null}));else {d=a._Persistence.getPersistence(),f=this.getAllUserAttributes();var g=a._Helpers.findKeyInObject(f,c);g&&(c=g);var h=f[c]?f[c].toString():null;delete f[c],d&&d[b]&&(d[b].ua=f,a._Persistence.savePersistence(d)),e.sendUserAttributeChangeEvent(c,null,h,!1,!0,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null);}},/**
|
|
1142
1147
|
* Sets a list of user attributes
|
|
1143
1148
|
* @method setUserAttributeList
|
|
1144
1149
|
* @param {String} key
|
|
@@ -1147,10 +1152,10 @@ setUserAttributes:function setUserAttributes(b){if(a._SessionManager.resetSessio
|
|
|
1147
1152
|
setUserAttributeList:function setUserAttributeList(c,d){if(a._SessionManager.resetSessionTimer(),!a._Helpers.Validators.isValidKeyValue(c))return void a.Logger.error(Messages$2.ErrorMessages.BadKey);if(!Array.isArray(d))return void a.Logger.error("The value you passed in to setUserAttributeList must be an array. You passed in a "+_typeof(d));var f=d.slice();if(a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttributeList,JSON.stringify({key:c,value:f}));else {var g=this.getAllUserAttributes(),h=void 0,j=void 0,k=void 0,l=a._Helpers.findKeyInObject(g,c);// If the new attributeList length is different than the previous, then there is a change event.
|
|
1148
1153
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
1149
1154
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
1150
|
-
if(l?(j=!1,h=g[l],delete g[l]):j=!0,g[c]=f,a._Store.setUserAttributes(b,g),!h||!Array.isArray(h))k=!0;else if(d.length!==h.length)k=!0;else for(var m=0;m<d.length;m++)if(h[m]!==d[m]){k=!0;break}k&&e.sendUserAttributeChangeEvent(c,d,h,j,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,f);}},/**
|
|
1155
|
+
if(l?(j=!1,h=g[l],delete g[l]):j=!0,g[c]=f,a._Store.setUserAttributes(b,g),!h||!Array.isArray(h))k=!0;else if(d.length!==h.length)k=!0;else for(var m=0;m<d.length;m++)if(h[m]!==d[m]){k=!0;break}k&&e.sendUserAttributeChangeEvent(c,d,h,j,!1,this),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),a._Forwarders.handleForwarderUserAttributes("setUserAttribute",c,f);}},/**
|
|
1151
1156
|
* Removes all user attributes
|
|
1152
1157
|
* @method removeAllUserAttributes
|
|
1153
|
-
*/removeAllUserAttributes:function removeAllUserAttributes(){var b;if(a._SessionManager.resetSessionTimer(),a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveAllUserAttributes);else if(b=this.getAllUserAttributes(),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities(),a._APIClient.prepareForwardingStats),b)for(var c in b)b.hasOwnProperty(c)&&a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null),this.removeUserAttribute(c);},/**
|
|
1158
|
+
*/removeAllUserAttributes:function removeAllUserAttributes(){var b;if(a._SessionManager.resetSessionTimer(),a._Store.webviewBridgeEnabled)a._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveAllUserAttributes);else if(b=this.getAllUserAttributes(),a._Forwarders.initForwarders(e.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities,a._APIClient.prepareForwardingStats),b)for(var c in b)b.hasOwnProperty(c)&&a._Forwarders.handleForwarderUserAttributes("removeUserAttribute",c,null),this.removeUserAttribute(c);},/**
|
|
1154
1159
|
* Returns all user attribute keys that have values that are arrays
|
|
1155
1160
|
* @method getUserAttributesLists
|
|
1156
1161
|
* @return {Object} an object of only keys with array values. Example: { attr1: [1, 2, 3], attr2: ['a', 'b', 'c'] }
|
|
@@ -1268,7 +1273,9 @@ if(v=null===(u=null===(t=null===(s=null===(r=null===(q=null===(p=null===(o=null=
|
|
|
1268
1273
|
// will be a boolean, otherwise it will return an object
|
|
1269
1274
|
return !("boolean"==typeof b&&b)&&"object"===_typeof(b)&&!0!==b[a];// When "Block unplanned user attributes" is enabled and "Allow unplanned user
|
|
1270
1275
|
// attributes" is also enabled in the UI, allowing unplanned user attributes will be prioritized
|
|
1271
|
-
},a.prototype.isIdentityBlocked=function(a){/* used when an attribute is added to the user */if(!this.blockUserIdentities)return !1;if(this.blockUserIdentities){var b=this.dataPlanMatchLookups.user_identities
|
|
1276
|
+
},a.prototype.isIdentityBlocked=function(a){/* used when an attribute is added to the user */if(!this.blockUserIdentities)return !1;if(this.blockUserIdentities){var b=this.dataPlanMatchLookups.user_identities;// The lookup is absent, not empty, when the plan carries no
|
|
1277
|
+
// user_identities data point, and indexing it would throw.
|
|
1278
|
+
if(!0===b||!b)return !1;if(!b[a])return !0}else return !1;return !1},a.prototype.transformUserIdentities=function(a){var b,c=this,d=__assign({},a);/*
|
|
1272
1279
|
If the user identity is not found in matchedIdentities
|
|
1273
1280
|
then remove it from event.UserIdentities as it is blocked.
|
|
1274
1281
|
event.UserIdentities is of type [{Identity: 'id1', Type: 7}, ...]
|
package/dist/mparticle.js
CHANGED
|
@@ -204,7 +204,7 @@ var mParticle = (function () {
|
|
|
204
204
|
Base64: Base64$1
|
|
205
205
|
};
|
|
206
206
|
|
|
207
|
-
var version = "3.
|
|
207
|
+
var version = "3.6.0";
|
|
208
208
|
|
|
209
209
|
var Constants = {
|
|
210
210
|
sdkVersion: version,
|
|
@@ -3869,6 +3869,12 @@ var mParticle = (function () {
|
|
|
3869
3869
|
continue;
|
|
3870
3870
|
}
|
|
3871
3871
|
var userIdentityType = Types.IdentityType.getIdentityType(userIdentityName);
|
|
3872
|
+
// Must be `=== false`: IdentityType.Other is 0, so a falsy check would
|
|
3873
|
+
// drop a valid type.
|
|
3874
|
+
var isUnrecognisedIdentityName = userIdentityType === false;
|
|
3875
|
+
if (isUnrecognisedIdentityName) {
|
|
3876
|
+
continue;
|
|
3877
|
+
}
|
|
3872
3878
|
if (inArray(filterList, userIdentityType)) {
|
|
3873
3879
|
continue;
|
|
3874
3880
|
}
|
|
@@ -6025,7 +6031,7 @@ var mParticle = (function () {
|
|
|
6025
6031
|
for (var key in persistence) {
|
|
6026
6032
|
// any value in persistence that has an MPID key will be an MPID to search through
|
|
6027
6033
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
6028
|
-
if (!persistence[key].mpid) {
|
|
6034
|
+
if (!mpInstance._Helpers.isObject(persistence[key]) || !persistence[key].mpid) {
|
|
6029
6035
|
continue;
|
|
6030
6036
|
}
|
|
6031
6037
|
if (cookieUiMatchesRequestedIdentity(persistence[key].ui, requestedIdentityType, requestedValue)) {
|
|
@@ -6133,6 +6139,11 @@ var mParticle = (function () {
|
|
|
6133
6139
|
}
|
|
6134
6140
|
if (Base64CookieKeys[key]) {
|
|
6135
6141
|
gs[key] = JSON.parse(Base64.decode(gs[key]));
|
|
6142
|
+
// Written as an array of MPIDs by encodeGsBase64Field, then read
|
|
6143
|
+
// as one by addMpidToSessionHistory and reduceAndEncodePersistence.
|
|
6144
|
+
if (key === 'csm' && !Array.isArray(gs[key])) {
|
|
6145
|
+
delete gs[key];
|
|
6146
|
+
}
|
|
6136
6147
|
continue;
|
|
6137
6148
|
}
|
|
6138
6149
|
if (key === 'ie') {
|
|
@@ -6159,6 +6170,12 @@ var mParticle = (function () {
|
|
|
6159
6170
|
continue;
|
|
6160
6171
|
}
|
|
6161
6172
|
if (!SDKv2NonMPIDCookieKeys[mpid]) {
|
|
6173
|
+
// Written as an object by encodeMpidRecords, then read as one by
|
|
6174
|
+
// findMpidForRequestedIdentity and copied by copyNonCurrentUserMpids.
|
|
6175
|
+
if (!mpInstance._Helpers.isObject(persistence[mpid])) {
|
|
6176
|
+
delete persistence[mpid];
|
|
6177
|
+
continue;
|
|
6178
|
+
}
|
|
6162
6179
|
decodeMpidRecord(persistence[mpid]);
|
|
6163
6180
|
continue;
|
|
6164
6181
|
}
|
|
@@ -7215,6 +7232,17 @@ var mParticle = (function () {
|
|
|
7215
7232
|
Logout$1 = _b.Logout;
|
|
7216
7233
|
// Maps an identity method to the kit callback that reports its completion.
|
|
7217
7234
|
var identityCompleteKitMethods = (_a = {}, _a[Identify$1] = 'onIdentifyComplete', _a[Login$1] = 'onLoginComplete', _a[Logout$1] = 'onLogoutComplete', _a[Modify$2] = 'onModifyComplete', _a);
|
|
7235
|
+
function removeBlockedUserIdentities(userIdentities, kitBlocker) {
|
|
7236
|
+
var identitiesByName = userIdentities;
|
|
7237
|
+
var allowedUserIdentities = {};
|
|
7238
|
+
for (var identityName in identitiesByName) {
|
|
7239
|
+
if (!identitiesByName.hasOwnProperty(identityName) || !isIdentityAllowed(kitBlocker, identityName)) {
|
|
7240
|
+
continue;
|
|
7241
|
+
}
|
|
7242
|
+
allowedUserIdentities[identityName] = identitiesByName[identityName];
|
|
7243
|
+
}
|
|
7244
|
+
return allowedUserIdentities;
|
|
7245
|
+
}
|
|
7218
7246
|
function userAttributesMatchFilter(userAttributes, filterObject) {
|
|
7219
7247
|
for (var attrName in userAttributes) {
|
|
7220
7248
|
if (!userAttributes.hasOwnProperty(attrName)) {
|
|
@@ -7239,6 +7267,7 @@ var mParticle = (function () {
|
|
|
7239
7267
|
this.initForwarders = function (userIdentities, forwardingStatsCallback) {
|
|
7240
7268
|
var user = mpInstance.Identity.getCurrentUser();
|
|
7241
7269
|
if (!mpInstance._Store.webviewBridgeEnabled && mpInstance._Store.configuredForwarders) {
|
|
7270
|
+
var allowedUserIdentities_1 = removeBlockedUserIdentities(userIdentities, kitBlocker);
|
|
7242
7271
|
// Some js libraries require that they be loaded first, or last, etc
|
|
7243
7272
|
mpInstance._Store.configuredForwarders.sort(function (x, y) {
|
|
7244
7273
|
x.settings.PriorityValue = x.settings.PriorityValue || 0;
|
|
@@ -7255,8 +7284,8 @@ var mParticle = (function () {
|
|
|
7255
7284
|
if (!self.isEnabledForUnknownUser(forwarder.excludeAnonymousUser, user)) {
|
|
7256
7285
|
return false;
|
|
7257
7286
|
}
|
|
7258
|
-
var filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(
|
|
7259
|
-
var filteredUserAttributes =
|
|
7287
|
+
var filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(allowedUserIdentities_1, forwarder.userIdentityFilters);
|
|
7288
|
+
var filteredUserAttributes = user ? filteredMparticleUser(user.getMPID(), forwarder, mpInstance, kitBlocker).getAllUserAttributes() : {};
|
|
7260
7289
|
if (!forwarder.initialized) {
|
|
7261
7290
|
forwarder.logger = mpInstance.Logger;
|
|
7262
7291
|
forwarder.init(forwarder.settings, forwardingStatsCallback, false, null, filteredUserAttributes, filteredUserIdentities, mpInstance._Store.SDKConfig.appVersion, mpInstance._Store.SDKConfig.appName, mpInstance._Store.SDKConfig.customFlags, mpInstance._Store.clientId);
|
|
@@ -7368,8 +7397,9 @@ var mParticle = (function () {
|
|
|
7368
7397
|
};
|
|
7369
7398
|
// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
7370
7399
|
this.setForwarderUserIdentities = function (userIdentities) {
|
|
7400
|
+
var allowedUserIdentities = removeBlockedUserIdentities(userIdentities, kitBlocker);
|
|
7371
7401
|
mpInstance._Store.activeForwarders.forEach(function (forwarder) {
|
|
7372
|
-
var filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(
|
|
7402
|
+
var filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(allowedUserIdentities, forwarder.userIdentityFilters);
|
|
7373
7403
|
if (forwarder.setUserIdentity) {
|
|
7374
7404
|
filteredUserIdentities.forEach(function (identity) {
|
|
7375
7405
|
var result = forwarder.setUserIdentity(identity.Identity, identity.Type);
|
|
@@ -8645,7 +8675,7 @@ var mParticle = (function () {
|
|
|
8645
8675
|
userAttributes[key] = newValue;
|
|
8646
8676
|
mpInstance._Store.setUserAttributes(mpid, userAttributes);
|
|
8647
8677
|
self.sendUserAttributeChangeEvent(key, newValue, previousUserAttributeValue, isNewAttribute, false, this);
|
|
8648
|
-
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities(), mpInstance._APIClient.prepareForwardingStats);
|
|
8678
|
+
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities, mpInstance._APIClient.prepareForwardingStats);
|
|
8649
8679
|
mpInstance._Forwarders.handleForwarderUserAttributes('setUserAttribute', key, newValue);
|
|
8650
8680
|
}
|
|
8651
8681
|
}
|
|
@@ -8702,7 +8732,7 @@ var mParticle = (function () {
|
|
|
8702
8732
|
mpInstance._Persistence.savePersistence(cookies);
|
|
8703
8733
|
}
|
|
8704
8734
|
self.sendUserAttributeChangeEvent(key, null, deletedUAKeyCopy, false, true, this);
|
|
8705
|
-
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities(), mpInstance._APIClient.prepareForwardingStats);
|
|
8735
|
+
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities, mpInstance._APIClient.prepareForwardingStats);
|
|
8706
8736
|
mpInstance._Forwarders.handleForwarderUserAttributes('removeUserAttribute', key, null);
|
|
8707
8737
|
}
|
|
8708
8738
|
},
|
|
@@ -8762,7 +8792,7 @@ var mParticle = (function () {
|
|
|
8762
8792
|
if (userAttributeChange) {
|
|
8763
8793
|
self.sendUserAttributeChangeEvent(key, newValue, previousUserAttributeValue, isNewAttribute, false, this);
|
|
8764
8794
|
}
|
|
8765
|
-
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities(), mpInstance._APIClient.prepareForwardingStats);
|
|
8795
|
+
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities, mpInstance._APIClient.prepareForwardingStats);
|
|
8766
8796
|
mpInstance._Forwarders.handleForwarderUserAttributes('setUserAttribute', key, arrayCopy);
|
|
8767
8797
|
}
|
|
8768
8798
|
},
|
|
@@ -8777,7 +8807,7 @@ var mParticle = (function () {
|
|
|
8777
8807
|
mpInstance._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveAllUserAttributes);
|
|
8778
8808
|
} else {
|
|
8779
8809
|
userAttributes = this.getAllUserAttributes();
|
|
8780
|
-
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities(), mpInstance._APIClient.prepareForwardingStats);
|
|
8810
|
+
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities().userIdentities, mpInstance._APIClient.prepareForwardingStats);
|
|
8781
8811
|
if (userAttributes) {
|
|
8782
8812
|
for (var prop in userAttributes) {
|
|
8783
8813
|
if (userAttributes.hasOwnProperty(prop)) {
|
|
@@ -9783,7 +9813,11 @@ var mParticle = (function () {
|
|
|
9783
9813
|
}
|
|
9784
9814
|
if (this.blockUserIdentities) {
|
|
9785
9815
|
var matchedIdentities = this.dataPlanMatchLookups['user_identities'];
|
|
9786
|
-
|
|
9816
|
+
var unplannedIdentitiesAllowed = matchedIdentities === true;
|
|
9817
|
+
// The lookup is absent, not empty, when the plan carries no
|
|
9818
|
+
// user_identities data point, and indexing it would throw.
|
|
9819
|
+
var planHasNoIdentityDataPoint = !matchedIdentities;
|
|
9820
|
+
if (unplannedIdentitiesAllowed || planHasNoIdentityDataPoint) {
|
|
9787
9821
|
return false;
|
|
9788
9822
|
}
|
|
9789
9823
|
if (!matchedIdentities[key]) {
|
|
@@ -2,7 +2,6 @@ import { BatchUploader } from './batchUploader';
|
|
|
2
2
|
import { SDKEvent, SDKDataPlan } from './sdkRuntimeModels';
|
|
3
3
|
import KitBlocker from './kitBlocking';
|
|
4
4
|
import { Dictionary } from './utils';
|
|
5
|
-
import { IUploadObject } from './serverModel';
|
|
6
5
|
import { MPForwarder } from './forwarders.interfaces';
|
|
7
6
|
import { IMParticleUser, ISDKUserAttributes } from './identity-user-interfaces';
|
|
8
7
|
import { AsyncUploader } from './uploaders';
|
|
@@ -16,7 +15,7 @@ export interface IAPIClient {
|
|
|
16
15
|
sendSingleEventToServer: (event: SDKEvent) => void;
|
|
17
16
|
sendBatchForwardingStatsToServer: (forwardingStatsData: IForwardingStatsData, xhr: XMLHttpRequest) => void;
|
|
18
17
|
initializeForwarderStatsUploader: () => AsyncUploader;
|
|
19
|
-
prepareForwardingStats: (forwarder: MPForwarder, event:
|
|
18
|
+
prepareForwardingStats: (forwarder: MPForwarder, event: SDKEvent) => void;
|
|
20
19
|
}
|
|
21
20
|
export interface IForwardingStatsData {
|
|
22
21
|
mid: number;
|
|
@@ -11,6 +11,7 @@ export interface IFilteredMparticleUser {
|
|
|
11
11
|
getUserAttributesLists(forwarder: MPForwarder): Dictionary<string[]>;
|
|
12
12
|
getAllUserAttributes(): Dictionary;
|
|
13
13
|
}
|
|
14
|
+
export declare function isIdentityAllowed(kitBlocker: KitBlocker | undefined, identityName: string): boolean;
|
|
14
15
|
export default function filteredMparticleUser(mpid: MPID, forwarder: MPForwarder | {
|
|
15
16
|
userAttributeFilters: number[];
|
|
16
17
|
}, mpInstance: IMParticleWebSDKInstance, kitBlocker?: KitBlocker): IFilteredMparticleUser;
|
|
@@ -2,6 +2,7 @@ import { IAPIClient } from './apiClient';
|
|
|
2
2
|
import { ICookieSyncManager } from './cookieSyncManager';
|
|
3
3
|
import { ISessionManager } from './sessionManager';
|
|
4
4
|
import { IStore } from './store';
|
|
5
|
+
import { IForwarders } from './forwarders.interfaces';
|
|
5
6
|
import { IServerModel } from './serverModel';
|
|
6
7
|
import { IForwardingStatsUploader } from './forwardingStatsUploader';
|
|
7
8
|
import { IConsent } from './consent';
|
|
@@ -38,7 +39,7 @@ export interface IMParticleWebSDKInstance extends MParticleWebSDK {
|
|
|
38
39
|
_CookieSyncManager: ICookieSyncManager;
|
|
39
40
|
_Ecommerce: IECommerce;
|
|
40
41
|
_Events: IEvents;
|
|
41
|
-
_Forwarders: any
|
|
42
|
+
_Forwarders: Pick<IForwarders, 'initForwarders'> & Record<Exclude<keyof IForwarders, 'initForwarders'>, any>;
|
|
42
43
|
_ForwardingStatsUploader: IForwardingStatsUploader;
|
|
43
44
|
_Helpers: SDKHelpersApi;
|
|
44
45
|
_Identity: IIdentity;
|
package/package.json
CHANGED
package/src/apiClient.ts
CHANGED
|
@@ -4,7 +4,6 @@ import { BatchUploader } from './batchUploader';
|
|
|
4
4
|
import { SDKEvent, SDKDataPlan } from './sdkRuntimeModels';
|
|
5
5
|
import KitBlocker from './kitBlocking';
|
|
6
6
|
import { Dictionary, isEmpty, parseNumber, extend } from './utils';
|
|
7
|
-
import { IUploadObject } from './serverModel';
|
|
8
7
|
import { MPForwarder } from './forwarders.interfaces';
|
|
9
8
|
import { IMParticleUser, ISDKUserAttributes } from './identity-user-interfaces';
|
|
10
9
|
import { AsyncUploader, FetchUploader, XHRUploader } from './uploaders';
|
|
@@ -26,7 +25,7 @@ export interface IAPIClient {
|
|
|
26
25
|
initializeForwarderStatsUploader: () => AsyncUploader;
|
|
27
26
|
prepareForwardingStats: (
|
|
28
27
|
forwarder: MPForwarder,
|
|
29
|
-
event:
|
|
28
|
+
event: SDKEvent
|
|
30
29
|
) => void;
|
|
31
30
|
}
|
|
32
31
|
|
package/src/forwarders.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import filteredMparticleUser
|
|
1
|
+
import filteredMparticleUser, {
|
|
2
|
+
isIdentityAllowed,
|
|
3
|
+
} from './filteredMparticleUser';
|
|
2
4
|
import { isEmpty, extend, Dictionary } from './utils';
|
|
3
5
|
import KitFilterHelper from './kitFilterHelper';
|
|
4
6
|
import Constants from './constants';
|
|
@@ -41,6 +43,27 @@ const identityCompleteKitMethods: Dictionary<
|
|
|
41
43
|
[Modify]: 'onModifyComplete',
|
|
42
44
|
};
|
|
43
45
|
|
|
46
|
+
function removeBlockedUserIdentities(
|
|
47
|
+
userIdentities: UserIdentities,
|
|
48
|
+
kitBlocker: KitBlocker | undefined
|
|
49
|
+
): UserIdentities {
|
|
50
|
+
const identitiesByName = userIdentities as Dictionary<string>;
|
|
51
|
+
const allowedUserIdentities: Dictionary<string> = {};
|
|
52
|
+
|
|
53
|
+
for (const identityName in identitiesByName) {
|
|
54
|
+
if (
|
|
55
|
+
!identitiesByName.hasOwnProperty(identityName) ||
|
|
56
|
+
!isIdentityAllowed(kitBlocker, identityName)
|
|
57
|
+
) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
allowedUserIdentities[identityName] = identitiesByName[identityName];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return allowedUserIdentities as UserIdentities;
|
|
65
|
+
}
|
|
66
|
+
|
|
44
67
|
function userAttributesMatchFilter(
|
|
45
68
|
userAttributes: Dictionary,
|
|
46
69
|
filterObject: Partial<IFilteringUserAttributeValue>
|
|
@@ -93,6 +116,11 @@ export default function Forwarders(
|
|
|
93
116
|
!mpInstance._Store.webviewBridgeEnabled &&
|
|
94
117
|
mpInstance._Store.configuredForwarders
|
|
95
118
|
) {
|
|
119
|
+
const allowedUserIdentities = removeBlockedUserIdentities(
|
|
120
|
+
userIdentities,
|
|
121
|
+
kitBlocker
|
|
122
|
+
);
|
|
123
|
+
|
|
96
124
|
// Some js libraries require that they be loaded first, or last, etc
|
|
97
125
|
mpInstance._Store.configuredForwarders.sort(function(x, y) {
|
|
98
126
|
x.settings.PriorityValue = x.settings.PriorityValue || 0;
|
|
@@ -130,13 +158,17 @@ export default function Forwarders(
|
|
|
130
158
|
}
|
|
131
159
|
|
|
132
160
|
const filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(
|
|
133
|
-
|
|
161
|
+
allowedUserIdentities,
|
|
134
162
|
forwarder.userIdentityFilters
|
|
135
163
|
);
|
|
136
|
-
const filteredUserAttributes =
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
164
|
+
const filteredUserAttributes = user
|
|
165
|
+
? filteredMparticleUser(
|
|
166
|
+
user.getMPID(),
|
|
167
|
+
forwarder,
|
|
168
|
+
mpInstance,
|
|
169
|
+
kitBlocker
|
|
170
|
+
).getAllUserAttributes()
|
|
171
|
+
: {};
|
|
140
172
|
if (!forwarder.initialized) {
|
|
141
173
|
forwarder.logger = mpInstance.Logger;
|
|
142
174
|
forwarder.init(
|
|
@@ -356,9 +388,14 @@ export default function Forwarders(
|
|
|
356
388
|
|
|
357
389
|
// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
358
390
|
this.setForwarderUserIdentities = function(userIdentities: UserIdentities): void {
|
|
391
|
+
const allowedUserIdentities = removeBlockedUserIdentities(
|
|
392
|
+
userIdentities,
|
|
393
|
+
kitBlocker
|
|
394
|
+
);
|
|
395
|
+
|
|
359
396
|
mpInstance._Store.activeForwarders.forEach(function(forwarder) {
|
|
360
397
|
const filteredUserIdentities = mpInstance._Helpers.filterUserIdentities(
|
|
361
|
-
|
|
398
|
+
allowedUserIdentities,
|
|
362
399
|
forwarder.userIdentityFilters
|
|
363
400
|
);
|
|
364
401
|
if (forwarder.setUserIdentity) {
|
package/src/helpers.ts
CHANGED
|
@@ -48,6 +48,14 @@ function buildFilteredUserIdentities(
|
|
|
48
48
|
userIdentityName
|
|
49
49
|
);
|
|
50
50
|
|
|
51
|
+
// Must be `=== false`: IdentityType.Other is 0, so a falsy check would
|
|
52
|
+
// drop a valid type.
|
|
53
|
+
const isUnrecognisedIdentityName = userIdentityType === false;
|
|
54
|
+
|
|
55
|
+
if (isUnrecognisedIdentityName) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
|
|
51
59
|
if (inArray(filterList, userIdentityType)) {
|
|
52
60
|
continue;
|
|
53
61
|
}
|
package/src/identity.ts
CHANGED
|
@@ -1007,7 +1007,8 @@ export default function Identity(
|
|
|
1007
1007
|
);
|
|
1008
1008
|
|
|
1009
1009
|
mpInstance._Forwarders.initForwarders(
|
|
1010
|
-
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1010
|
+
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1011
|
+
.userIdentities,
|
|
1011
1012
|
mpInstance._APIClient.prepareForwardingStats
|
|
1012
1013
|
);
|
|
1013
1014
|
mpInstance._Forwarders.handleForwarderUserAttributes(
|
|
@@ -1096,7 +1097,8 @@ export default function Identity(
|
|
|
1096
1097
|
);
|
|
1097
1098
|
|
|
1098
1099
|
mpInstance._Forwarders.initForwarders(
|
|
1099
|
-
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1100
|
+
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1101
|
+
.userIdentities,
|
|
1100
1102
|
mpInstance._APIClient.prepareForwardingStats
|
|
1101
1103
|
);
|
|
1102
1104
|
mpInstance._Forwarders.handleForwarderUserAttributes(
|
|
@@ -1192,7 +1194,8 @@ export default function Identity(
|
|
|
1192
1194
|
}
|
|
1193
1195
|
|
|
1194
1196
|
mpInstance._Forwarders.initForwarders(
|
|
1195
|
-
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1197
|
+
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1198
|
+
.userIdentities,
|
|
1196
1199
|
mpInstance._APIClient.prepareForwardingStats
|
|
1197
1200
|
);
|
|
1198
1201
|
mpInstance._Forwarders.handleForwarderUserAttributes(
|
|
@@ -1219,7 +1222,8 @@ export default function Identity(
|
|
|
1219
1222
|
userAttributes = this.getAllUserAttributes();
|
|
1220
1223
|
|
|
1221
1224
|
mpInstance._Forwarders.initForwarders(
|
|
1222
|
-
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1225
|
+
self.IdentityAPI.getCurrentUser().getUserIdentities()
|
|
1226
|
+
.userIdentities,
|
|
1223
1227
|
mpInstance._APIClient.prepareForwardingStats
|
|
1224
1228
|
);
|
|
1225
1229
|
if (userAttributes) {
|
package/src/kitBlocking.ts
CHANGED
|
@@ -490,7 +490,11 @@ export default class KitBlocker {
|
|
|
490
490
|
|
|
491
491
|
if (this.blockUserIdentities) {
|
|
492
492
|
const matchedIdentities = this.dataPlanMatchLookups['user_identities'];
|
|
493
|
-
|
|
493
|
+
const unplannedIdentitiesAllowed = matchedIdentities === true;
|
|
494
|
+
// The lookup is absent, not empty, when the plan carries no
|
|
495
|
+
// user_identities data point, and indexing it would throw.
|
|
496
|
+
const planHasNoIdentityDataPoint = !matchedIdentities;
|
|
497
|
+
if (unplannedIdentitiesAllowed || planHasNoIdentityDataPoint) {
|
|
494
498
|
return false
|
|
495
499
|
}
|
|
496
500
|
if (!matchedIdentities[key]) {
|
package/src/mp-instance.ts
CHANGED
|
@@ -29,6 +29,7 @@ import { Logger } from './logger';
|
|
|
29
29
|
import Persistence from './persistence';
|
|
30
30
|
import Events from './events';
|
|
31
31
|
import Forwarders from './forwarders';
|
|
32
|
+
import { IForwarders } from './forwarders.interfaces';
|
|
32
33
|
import ServerModel, { IServerModel } from './serverModel';
|
|
33
34
|
import ForwardingStatsUploader, {
|
|
34
35
|
IForwardingStatsUploader,
|
|
@@ -88,7 +89,9 @@ export interface IMParticleWebSDKInstance extends MParticleWebSDK {
|
|
|
88
89
|
_CookieSyncManager: ICookieSyncManager;
|
|
89
90
|
_Ecommerce: IECommerce;
|
|
90
91
|
_Events: IEvents;
|
|
91
|
-
|
|
92
|
+
// https://go.mparticle.com/work/SQDSDKS-5767
|
|
93
|
+
_Forwarders: Pick<IForwarders, 'initForwarders'> &
|
|
94
|
+
Record<Exclude<keyof IForwarders, 'initForwarders'>, any>;
|
|
92
95
|
_ForwardingStatsUploader: IForwardingStatsUploader;
|
|
93
96
|
_Helpers: SDKHelpersApi;
|
|
94
97
|
_Identity: IIdentity;
|
package/src/persistence.ts
CHANGED
|
@@ -765,7 +765,10 @@ export default function _Persistence(
|
|
|
765
765
|
for (let key in persistence) {
|
|
766
766
|
// any value in persistence that has an MPID key will be an MPID to search through
|
|
767
767
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
768
|
-
if (
|
|
768
|
+
if (
|
|
769
|
+
!mpInstance._Helpers.isObject(persistence[key]) ||
|
|
770
|
+
!persistence[key].mpid
|
|
771
|
+
) {
|
|
769
772
|
continue;
|
|
770
773
|
}
|
|
771
774
|
if (
|
|
@@ -904,6 +907,12 @@ export default function _Persistence(
|
|
|
904
907
|
}
|
|
905
908
|
if (Base64CookieKeys[key]) {
|
|
906
909
|
gs[key] = JSON.parse(Base64.decode(gs[key]));
|
|
910
|
+
|
|
911
|
+
// Written as an array of MPIDs by encodeGsBase64Field, then read
|
|
912
|
+
// as one by addMpidToSessionHistory and reduceAndEncodePersistence.
|
|
913
|
+
if (key === 'csm' && !Array.isArray(gs[key])) {
|
|
914
|
+
delete gs[key];
|
|
915
|
+
}
|
|
907
916
|
continue;
|
|
908
917
|
}
|
|
909
918
|
if (key === 'ie') {
|
|
@@ -932,6 +941,12 @@ export default function _Persistence(
|
|
|
932
941
|
continue;
|
|
933
942
|
}
|
|
934
943
|
if (!SDKv2NonMPIDCookieKeys[mpid]) {
|
|
944
|
+
// Written as an object by encodeMpidRecords, then read as one by
|
|
945
|
+
// findMpidForRequestedIdentity and copied by copyNonCurrentUserMpids.
|
|
946
|
+
if (!mpInstance._Helpers.isObject(persistence[mpid])) {
|
|
947
|
+
delete persistence[mpid];
|
|
948
|
+
continue;
|
|
949
|
+
}
|
|
935
950
|
decodeMpidRecord(persistence[mpid]);
|
|
936
951
|
continue;
|
|
937
952
|
}
|