@mparticle/web-sdk 2.26.8 → 2.26.10
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 +28 -24
- package/dist/mparticle.esm.js +28 -24
- package/dist/mparticle.js +34 -71
- package/package.json +1 -1
- package/src/filteredMparticleUser.js +2 -4
- package/src/identity-user-interfaces.ts +4 -0
- package/src/identity.js +28 -44
- package/src/persistence.interfaces.ts +0 -12
- package/src/persistence.js +0 -55
- package/src/sdkRuntimeModels.ts +2 -4
- package/src/store.ts +23 -5
package/dist/mparticle.common.js
CHANGED
|
@@ -154,7 +154,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
154
154
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
155
155
|
};
|
|
156
156
|
|
|
157
|
-
var version = "2.26.
|
|
157
|
+
var version = "2.26.10";
|
|
158
158
|
|
|
159
159
|
var Constants={sdkVersion:version,sdkVendor:"mparticle",platform:"web",Messages:{DeprecationMessages:{MethodIsDeprecatedPostfix:"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",AddToCart:"addToCart",RemoveFromCart:"removeFromCart",ClearCart:"clearCart",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",localStorageProductsV4:"mprtcl-prodv4",cookieNameV4:"mprtcl-v4",currentStorageName:"mprtcl-v4",currentStorageProductsName:"mprtcl-prodv4"},DefaultConfig:{cookieDomain:null,cookieExpiration:365,logLevel:null,timeout:300,sessionTimeout:30,maxProducts:20,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
|
|
160
160
|
},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/"},Base64CookieKeys:{csm:1,sa:1,ss:1,ua:1,ui:1,csd:1,ia:1,con:1},// https://go.mparticle.com/work/SQDSDKS-6039
|
|
@@ -554,7 +554,7 @@ var b={};for(var c in Constants.DefaultConfig)Constants.DefaultConfig.hasOwnProp
|
|
|
554
554
|
function Store(a,b,c){var d=this,e=b._Helpers,f=e.createMainStorageName,g=e.createProductStorageName,h=b._NativeSdkHelpers.isWebviewEnabled,i={isEnabled:!0,sessionAttributes:{},currentSessionMPIDs:[],consentState:null,sessionId:null,isFirstRun:null,clientId:null,deviceId:null,devToken:null,serverSettings:{},dateLastEventSent:null,sessionStartDate:null,currentPosition:null,isTracking:!1,watchPositionId:null,cartProducts:[],eventQueue:[],currencyCode:null,globalTimer:null,context:null,configurationLoaded:!1,identityCallInFlight:!1,SDKConfig:{},nonCurrentUserMPIDs:{},identifyCalled:!1,isLoggedIn:!1,cookieSyncDates:{},integrationAttributes:{},requireDelay:!0,isLocalStorageAvailable:null,storageName:null,prodStorageName:null,activeForwarders:[],kits:{},sideloadedKits:[],configuredForwarders:[],pixelConfigurations:[],wrapperSDKInfo:{name:"none",version:null,isInfoSet:!1},// Placeholder for in-memory persistence model
|
|
555
555
|
persistenceData:{gs:{}}};for(var j in i)this[j]=i[j];if(this.devToken=c||null,this.integrationDelayTimeoutStart=Date.now(),this.SDKConfig=createSDKConfig(a),a){a.hasOwnProperty("flags")||(this.SDKConfig.flags={}),this.SDKConfig.flags=processFlags(a),a.deviceId&&(this.deviceId=a.deviceId),this.SDKConfig.isDevelopmentMode=!!a.hasOwnProperty("isDevelopmentMode")&&returnConvertedBoolean(a.isDevelopmentMode);var k=processBaseUrls(a,this.SDKConfig.flags,c);for(var l in k)this.SDKConfig[l]=k[l];if(a.hasOwnProperty("logLevel")&&(this.SDKConfig.logLevel=a.logLevel),this.SDKConfig.useNativeSdk=!!a.useNativeSdk,this.SDKConfig.kits=a.kits||{},this.SDKConfig.sideloadedKits=a.sideloadedKits||[],this.SDKConfig.isIOS=a.hasOwnProperty("isIOS")?a.isIOS:!!(window.mParticle&&window.mParticle.isIOS)&&window.mParticle.isIOS,this.SDKConfig.useCookieStorage=!!a.hasOwnProperty("useCookieStorage")&&a.useCookieStorage,this.SDKConfig.maxProducts=a.hasOwnProperty("maxProducts")?a.maxProducts:Constants.DefaultConfig.maxProducts,this.SDKConfig.maxCookieSize=a.hasOwnProperty("maxCookieSize")?a.maxCookieSize:Constants.DefaultConfig.maxCookieSize,a.hasOwnProperty("appName")&&(this.SDKConfig.appName=a.appName),a.hasOwnProperty("package")&&(this.SDKConfig["package"]=a["package"]),this.SDKConfig.integrationDelayTimeout=a.hasOwnProperty("integrationDelayTimeout")?a.integrationDelayTimeout:Constants.DefaultConfig.integrationDelayTimeout,a.hasOwnProperty("identifyRequest")&&(this.SDKConfig.identifyRequest=a.identifyRequest),a.hasOwnProperty("identityCallback")){var m=a.identityCallback;b._Helpers.Validators.isFunction(m)?this.SDKConfig.identityCallback=a.identityCallback:b.Logger.warning("The optional callback must be a function. You tried entering a(n) "+_typeof(m)+" . Callback not set. Please set your callback again.");}if(a.hasOwnProperty("appVersion")&&(this.SDKConfig.appVersion=a.appVersion),a.hasOwnProperty("appName")&&(this.SDKConfig.appName=a.appName),a.hasOwnProperty("sessionTimeout")&&(this.SDKConfig.sessionTimeout=a.sessionTimeout),a.hasOwnProperty("dataPlan")){this.SDKConfig.dataPlan={PlanVersion:null,PlanId:null};var n=a.dataPlan;n.planId&&(isDataPlanSlug(n.planId)?this.SDKConfig.dataPlan.PlanId=n.planId:b.Logger.error("Your data plan id must be a string and match the data plan slug format (i.e. under_case_slug)")),n.planVersion&&(isNumber(n.planVersion)?this.SDKConfig.dataPlan.PlanVersion=n.planVersion:b.Logger.error("Your data plan version must be a number"));}else this.SDKConfig.dataPlan={};if(this.SDKConfig.forceHttps=!a.hasOwnProperty("forceHttps")||a.forceHttps,this.SDKConfig.customFlags=a.customFlags||{},this.SDKConfig.minWebviewBridgeVersion=a.hasOwnProperty("minWebviewBridgeVersion")?a.minWebviewBridgeVersion:1,this.SDKConfig.aliasMaxWindow=a.hasOwnProperty("aliasMaxWindow")?a.aliasMaxWindow:Constants.DefaultConfig.aliasMaxWindow,a.hasOwnProperty("dataPlanOptions")){var o=a.dataPlanOptions;o.hasOwnProperty("dataPlanVersion")&&o.hasOwnProperty("blockUserAttributes")&&o.hasOwnProperty("blockEventAttributes")&&o.hasOwnProperty("blockEvents")&&o.hasOwnProperty("blockUserIdentities")||b.Logger.error("Ensure your config.dataPlanOptions object has the following keys: a \"dataPlanVersion\" object, and \"blockUserAttributes\", \"blockEventAttributes\", \"blockEvents\", \"blockUserIdentities\" booleans");}a.hasOwnProperty("onCreateBatch")&&("function"==typeof a.onCreateBatch?this.SDKConfig.onCreateBatch=a.onCreateBatch:(b.Logger.error("config.onCreateBatch must be a function"),this.SDKConfig.onCreateBatch=void 0));}this._getFromPersistence=function(a,b){return a?(d.syncPersistenceData(),d.persistenceData&&d.persistenceData[a]&&d.persistenceData[a][b]?d.persistenceData[a][b]:null):null},this._setPersistence=function(a,c,e){var f;a&&(d.syncPersistenceData(),d.persistenceData&&(d.persistenceData[a]?d.persistenceData[a][c]=e:d.persistenceData[a]=(f={},f[c]=e,f),isObject(d.persistenceData[a][c])&&isEmpty(d.persistenceData[a][c])&&delete d.persistenceData[a][c],b._Persistence.savePersistence(d.persistenceData)));},this.hasInvalidIdentifyRequest=function(){var a=d.SDKConfig.identifyRequest;return isObject(a)&&isObject(a.userIdentities)&&isEmpty(a.userIdentities)||!a},this.getConsentState=function(a){var c=b._Consent.ConsentSerialization.fromMinifiedJsonObject,e=d._getFromPersistence(a,"con");return isEmpty(e)?null:c(e)},this.setConsentState=function(a,c){var e=b._Consent.ConsentSerialization.toMinifiedJsonObject;// If ConsentState is null, we assume the intent is to clear out the consent state
|
|
556
556
|
(c||null===c)&&d._setPersistence(a,"con",e(c));},this.getDeviceId=function(){return d.deviceId},this.setDeviceId=function(a){d.deviceId=a,d.persistenceData.gs.das=a,b._Persistence.update();},this.getFirstSeenTime=function(a){return d._getFromPersistence(a,"fst")},this.setFirstSeenTime=function(a,b){if(a){var c=b||new Date().getTime();d._setPersistence(a,"fst",c);}},this.getLastSeenTime=function(a){if(!a)return null;// https://go.mparticle.com/work/SQDSDKS-6315
|
|
557
|
-
var c=b.Identity.getCurrentUser();return a===(null===c||void 0===c?void 0:c.getMPID())?new Date().getTime():d._getFromPersistence(a,"lst")},this.setLastSeenTime=function(a,b){if(a){var c=b||new Date().getTime();d._setPersistence(a,"lst",c);}},this.syncPersistenceData=function(){var a=b._Persistence.getPersistence();d.persistenceData=b._Helpers.extend({},d.persistenceData,a);},this.addMpidToSessionHistory=function(a,b){var c=d.currentSessionMPIDs.indexOf(a);return a&&b!==a&&0>c?void d.currentSessionMPIDs.push(a):void(0<=c&&(d.currentSessionMPIDs=moveElementToEnd(d.currentSessionMPIDs,c)))},this.nullifySession=function(){d.sessionId=null,d.dateLastEventSent=null,d.sessionAttributes={},b._Persistence.update();},this.processConfig=function(a){var c=a.workspaceToken,e=a.requiredWebviewBridgeName;// We should reprocess the flags in case they have changed when we request an updated config
|
|
557
|
+
var c=b.Identity.getCurrentUser();return a===(null===c||void 0===c?void 0:c.getMPID())?new Date().getTime():d._getFromPersistence(a,"lst")},this.setLastSeenTime=function(a,b){if(a){var c=b||new Date().getTime();d._setPersistence(a,"lst",c);}},this.syncPersistenceData=function(){var a=b._Persistence.getPersistence();d.persistenceData=b._Helpers.extend({},d.persistenceData,a);},this.getUserAttributes=function(a){return d._getFromPersistence(a,"ua")||{}},this.setUserAttributes=function(a,b){return d._setPersistence(a,"ua",b)},this.getUserIdentities=function(a){return d._getFromPersistence(a,"ui")||{}},this.setUserIdentities=function(a,b){d._setPersistence(a,"ui",b);},this.addMpidToSessionHistory=function(a,b){var c=d.currentSessionMPIDs.indexOf(a);return a&&b!==a&&0>c?void d.currentSessionMPIDs.push(a):void(0<=c&&(d.currentSessionMPIDs=moveElementToEnd(d.currentSessionMPIDs,c)))},this.nullifySession=function(){d.sessionId=null,d.dateLastEventSent=null,d.sessionAttributes={},b._Persistence.update();},this.processConfig=function(a){var c=a.workspaceToken,e=a.requiredWebviewBridgeName;// We should reprocess the flags in case they have changed when we request an updated config
|
|
558
558
|
// such as if the SDK is being self-hosted and the flags are different on the server config
|
|
559
559
|
// https://go.mparticle.com/work/SQDSDKS-6317
|
|
560
560
|
d.SDKConfig.flags=processFlags(a),c?d.SDKConfig.workspaceToken=c:b.Logger.warning("You should have a workspaceToken on your config object for security purposes."),d.storageName=f(c),d.prodStorageName=g(c),d.SDKConfig.requiredWebviewBridgeName=e||c,d.webviewBridgeEnabled=h(d.SDKConfig.requiredWebviewBridgeName,d.SDKConfig.minWebviewBridgeVersion),d.configurationLoaded=!0;};}// https://go.mparticle.com/work/SQDSDKS-6317
|
|
@@ -626,7 +626,7 @@ var k={};for(var l in b)b.hasOwnProperty(l)&&(SDKv2NonMPIDCookieKeys[l]||l===b.c
|
|
|
626
626
|
if(Object.keys(k).length)for(var m in k)g=d(b,c,e),g.length>f&&k.hasOwnProperty(m)&&-1===h.indexOf(m)&&delete b[m];// Comment 2b above
|
|
627
627
|
for(var n,o=0;o<h.length&&(g=d(b,c,e),g.length>f);o++)n=h[o],b[n]?(a.Logger.verbose("Size of new encoded cookie is larger than maxCookieSize setting of "+f+". Removing from cookie the earliest logged in MPID containing: "+JSON.stringify(b[n],0,2)),delete b[n]):a.Logger.error("Unable to save MPID data to cookies because the resulting encoded cookie is larger than the maxCookieSize setting of "+f+". We recommend using a maxCookieSize of 1500.");}return g},this.findPrevCookiesBasedOnUI=function(b){var c,d=a._Persistence.getPersistence();if(b)for(var e in b.userIdentities)if(d&&Object.keys(d).length)for(var g in d)// any value in persistence that has an MPID key will be an MPID to search through
|
|
628
628
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
629
|
-
if(d[g].mpid){var h=d[g].ui;for(var i in h)if(e===i&&b.userIdentities[e]===h[i]){c=g;break}}c&&f.storeDataInMemory(d,c);},this.encodePersistence=function(b){for(var c in b=JSON.parse(b),b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]?Array.isArray(b.gs[c])&&b.gs[c].length||a._Helpers.isObject(b.gs[c])&&Object.keys(b.gs[c]).length?b.gs[c]=Base64.encode(JSON.stringify(b.gs[c])):delete b.gs[c]:delete b.gs[c]:"ie"===c?b.gs[c]=b.gs[c]?1:0:!b.gs[c]&&delete b.gs[c]);for(var d in b)if(b.hasOwnProperty(d)&&!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&(a._Helpers.isObject(b[d][c])&&Object.keys(b[d][c]).length?b[d][c]=Base64.encode(JSON.stringify(b[d][c])):delete b[d][c]);return createCookieString(JSON.stringify(b))},this.decodePersistence=function(b){try{if(b){if(b=JSON.parse(revertCookieString(b)),a._Helpers.isObject(b)&&Object.keys(b).length){for(var c in b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]=JSON.parse(Base64.decode(b.gs[c])):"ie"===c&&(b.gs[c]=!!b.gs[c]));for(var d in b)if(b.hasOwnProperty(d))if(!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&b[d][c].length&&(b[d][c]=JSON.parse(Base64.decode(b[d][c])));else "l"===d&&(b[d]=!!b[d]);}return JSON.stringify(b)}}catch(b){a.Logger.error("Problem with decoding cookie",b);}},this.getCookieDomain=function(){if(a._Store.SDKConfig.cookieDomain)return a._Store.SDKConfig.cookieDomain;var b=f.getDomain(document,location.hostname);return ""===b?"":"."+b},this.getDomain=function(a,b){var c,d,e=b.split(".");for(c=e.length-1;0<=c;c--)if(d=e.slice(c).join("."),a.cookie="mptest=cookie;domain=."+d+";",-1<a.cookie.indexOf("mptest=cookie"))return a.cookie="mptest=;domain=."+d+";expires=Thu, 01 Jan 1970 00:00:01 GMT;",d;return ""},this.
|
|
629
|
+
if(d[g].mpid){var h=d[g].ui;for(var i in h)if(e===i&&b.userIdentities[e]===h[i]){c=g;break}}c&&f.storeDataInMemory(d,c);},this.encodePersistence=function(b){for(var c in b=JSON.parse(b),b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]?Array.isArray(b.gs[c])&&b.gs[c].length||a._Helpers.isObject(b.gs[c])&&Object.keys(b.gs[c]).length?b.gs[c]=Base64.encode(JSON.stringify(b.gs[c])):delete b.gs[c]:delete b.gs[c]:"ie"===c?b.gs[c]=b.gs[c]?1:0:!b.gs[c]&&delete b.gs[c]);for(var d in b)if(b.hasOwnProperty(d)&&!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&(a._Helpers.isObject(b[d][c])&&Object.keys(b[d][c]).length?b[d][c]=Base64.encode(JSON.stringify(b[d][c])):delete b[d][c]);return createCookieString(JSON.stringify(b))},this.decodePersistence=function(b){try{if(b){if(b=JSON.parse(revertCookieString(b)),a._Helpers.isObject(b)&&Object.keys(b).length){for(var c in b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]=JSON.parse(Base64.decode(b.gs[c])):"ie"===c&&(b.gs[c]=!!b.gs[c]));for(var d in b)if(b.hasOwnProperty(d))if(!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&b[d][c].length&&(b[d][c]=JSON.parse(Base64.decode(b[d][c])));else "l"===d&&(b[d]=!!b[d]);}return JSON.stringify(b)}}catch(b){a.Logger.error("Problem with decoding cookie",b);}},this.getCookieDomain=function(){if(a._Store.SDKConfig.cookieDomain)return a._Store.SDKConfig.cookieDomain;var b=f.getDomain(document,location.hostname);return ""===b?"":"."+b},this.getDomain=function(a,b){var c,d,e=b.split(".");for(c=e.length-1;0<=c;c--)if(d=e.slice(c).join("."),a.cookie="mptest=cookie;domain=."+d+";",-1<a.cookie.indexOf("mptest=cookie"))return a.cookie="mptest=;domain=."+d+";expires=Thu, 01 Jan 1970 00:00:01 GMT;",d;return ""},this.getCartProducts=function(b){var c,d=localStorage.getItem(a._Store.prodStorageName);return d&&(c=JSON.parse(Base64.decode(d)),c&&c[b]&&c[b].cp)?c[b].cp:[]},this.setCartProducts=function(b){if(a._Store.isLocalStorageAvailable)try{window.localStorage.setItem(encodeURIComponent(a._Store.prodStorageName),Base64.encode(JSON.stringify(b)));}catch(b){a.Logger.error("Error with setting products on localStorage.");}},this.saveUserCookieSyncDatesToPersistence=function(a,b){if(b){var c=f.getPersistence();c&&(c[a]?c[a].csd=b:c[a]={csd:b}),f.savePersistence(c);}},this.swapCurrentUser=function(a,b,c){if(a&&b&&a!==b){var d=f.getPersistence();d&&(d.cu=b,d.gs.csm=c,f.savePersistence(d));}},this.savePersistence=function(b){var c,d=f.encodePersistence(JSON.stringify(b)),e=new Date,g=a._Store.storageName,h=new Date(e.getTime()+1e3*(60*(60*(24*a._Store.SDKConfig.cookieExpiration)))).toGMTString(),i=f.getCookieDomain();if(c=""===i?"":";domain="+i,a._Store.SDKConfig.useCookieStorage){var j=f.reduceAndEncodePersistence(b,h,c,a._Store.SDKConfig.maxCookieSize);window.document.cookie=encodeURIComponent(g)+"="+j;}else a._Store.isLocalStorageAvailable&&localStorage.setItem(a._Store.storageName,d);},this.getPersistence=function(){var a=this.useLocalStorage()?this.getLocalStorage():this.getCookie();return a},this.getFirstSeenTime=function(a){if(!a)return null;var b=f.getPersistence();return b&&b[a]&&b[a].fst?b[a].fst:null},this.setFirstSeenTime=function(a,b){if(a){b||(b=new Date().getTime());var c=f.getPersistence();c&&(!c[a]&&(c[a]={}),!c[a].fst&&(c[a].fst=b,f.savePersistence(c)));}// https://go.mparticle.com/work/SQDSDKS-6329
|
|
630
630
|
},this.getLastSeenTime=function(b){if(!b)return null;if(b===a.Identity.getCurrentUser().getMPID())//if the mpid is the current user, its last seen time is the current time
|
|
631
631
|
return new Date().getTime();var c=f.getPersistence();return c&&c[b]&&c[b].lst?c[b].lst:null},this.setLastSeenTime=function(a,b){if(a){b||(b=new Date().getTime());var c=f.getPersistence();c&&c[a]&&(c[a].lst=b,f.savePersistence(c));}// https://go.mparticle.com/work/SQDSDKS-6329
|
|
632
632
|
},this.getDeviceId=function(){return a._Store.deviceId},this.setDeviceId=function(b){a._Store.deviceId=b,f.update();},this.resetPersistence=function(){if(c(StorageNames.localStorageName),c(StorageNames.localStorageNameV3),c(StorageNames.localStorageNameV4),c(a._Store.prodStorageName),c(a._Store.storageName),c(StorageNames.localStorageProductsV4),f.expireCookies(StorageNames.cookieName),f.expireCookies(StorageNames.cookieNameV2),f.expireCookies(StorageNames.cookieNameV3),f.expireCookies(StorageNames.cookieNameV4),f.expireCookies(a._Store.prodStorageName),f.expireCookies(a._Store.storageName),mParticle._isTestEnv){c(a._Helpers.createMainStorageName("abcdef")),f.expireCookies(a._Helpers.createMainStorageName("abcdef")),c(a._Helpers.createProductStorageName("abcdef"));}},this.forwardingStatsBatches={uploadsTable:{},forwardingStatsEventQueue:[]};}
|
|
@@ -640,8 +640,8 @@ c(b),b=null,a._Store.isTracking=!1;}));else {var d={coords:{latitude:a._Store.cu
|
|
|
640
640
|
return a.Logger.verbose(Messages$3.InformationMessages.StartingLogCommerceEvent),b.ProductAction&&null===b.EventCategory?void a.Logger.error("Commerce event not sent. The mParticle.ProductActionType you passed was invalid. Re-check your code."):void(c=a._Helpers.sanitizeAttributes(c,b.EventName),a._Helpers.canLog()?(a._Store.webviewBridgeEnabled&&(b.ShoppingCart={}),c&&(b.EventAttributes=c),a._APIClient.sendEventToServer(b,d),a._Persistence.update()):a.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent))},this.addEventHandler=function(c,d,f,g,h){var j,k,e=[],l=function handler(c){var d=function timeoutHandler(){j.href?window.location.href=j.href:j.submit&&j.submit();};a.Logger.verbose("DOM event triggered, handling event"),b.logEvent({messageType:Types.MessageType.PageEvent,name:"function"==typeof f?f(j):f,data:"function"==typeof g?g(j):g,eventType:h||Types.EventType.Other}),(j.href&&"_blank"!==j.target||j.submit)&&(c.preventDefault?c.preventDefault():c.returnValue=!1,setTimeout(d,a._Store.SDKConfig.timeout));};if(!d)return void a.Logger.error("Can't bind event, selector is required");// Handle a css selector string or a dom element
|
|
641
641
|
if("string"==typeof d?e=document.querySelectorAll(d):d.nodeType&&(e=[d]),e.length)for(a.Logger.verbose("Found "+e.length+" element"+(1<e.length?"s":"")+", attaching event handlers"),k=0;k<e.length;k++)j=e[k],j.addEventListener?j.addEventListener(c,l,!1):j.attachEvent?j.attachEvent("on"+c,l):j["on"+c]=l;else a.Logger.verbose("No elements found");};}
|
|
642
642
|
|
|
643
|
-
function filteredMparticleUser(a,b,c,d){var e=this;return {getUserIdentities:function getUserIdentities(){var e={},f=c.
|
|
644
|
-
e[h]=f[g]);}return e=c._Helpers.filterUserIdentitiesForForwarders(e,b.userIdentityFilters),{userIdentities:e}},getMPID:function getMPID(){return a},getUserAttributesLists:function getUserAttributesLists(a){var b,f={};for(var g in b=e.getAllUserAttributes(),b)b.hasOwnProperty(g)&&Array.isArray(b[g])&&(d&&(!d||d.isAttributeKeyBlocked(g))||(f[g]=b[g].slice()));return f=c._Helpers.filterUserAttributes(f,a.userAttributeFilters),f},getAllUserAttributes:function getAllUserAttributes(){var e={},f=c.
|
|
643
|
+
function filteredMparticleUser(a,b,c,d){var e=this;return {getUserIdentities:function getUserIdentities(){var e={},f=c._Store.getUserIdentities(a);for(var g in f)if(f.hasOwnProperty(g)){var h=Types.IdentityType.getIdentityName(c._Helpers.parseNumber(g));d&&(!d||d.isIdentityBlocked(h))||(//if identity type is not blocked
|
|
644
|
+
e[h]=f[g]);}return e=c._Helpers.filterUserIdentitiesForForwarders(e,b.userIdentityFilters),{userIdentities:e}},getMPID:function getMPID(){return a},getUserAttributesLists:function getUserAttributesLists(a){var b,f={};for(var g in b=e.getAllUserAttributes(),b)b.hasOwnProperty(g)&&Array.isArray(b[g])&&(d&&(!d||d.isAttributeKeyBlocked(g))||(f[g]=b[g].slice()));return f=c._Helpers.filterUserAttributes(f,a.userAttributeFilters),f},getAllUserAttributes:function getAllUserAttributes(){var e={},f=c._Store.getUserAttributes(a);if(f)for(var g in f)f.hasOwnProperty(g)&&(d&&(!d||d.isAttributeKeyBlocked(g))||(Array.isArray(f[g])?e[g]=f[g].slice():e[g]=f[g]));return e=c._Helpers.filterUserAttributes(e,b.userAttributeFilters),e}}}
|
|
645
645
|
|
|
646
646
|
var _Constants$IdentityMe=Constants.IdentityMethods,Modify$3=_Constants$IdentityMe.Modify,Identify$2=_Constants$IdentityMe.Identify,Login$2=_Constants$IdentityMe.Login,Logout$2=_Constants$IdentityMe.Logout;function Forwarders(a,b){var c=this,d={setUserAttribute:"setUserAttribute",removeUserAttribute:"removeUserAttribute"};// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
647
647
|
// Processing forwarders is a 2 step process:
|
|
@@ -753,7 +753,7 @@ var Messages$2=Constants.Messages,HTTPCodes$2=Constants.HTTPCodes,FeatureFlags$1
|
|
|
753
753
|
// send a user identity change request on identify, login, logout, modify when any values change.
|
|
754
754
|
// compare what identities exist vs what is previously was for the specific user if they were in memory before.
|
|
755
755
|
// if it's the first time the user is logging in, send a user identity change request with
|
|
756
|
-
this.idCache=null,this.audienceManager=null,this.IdentityRequest={preProcessIdentityRequest:function preProcessIdentityRequest(e,r,s){t.Logger.verbose(Messages$2.InformationMessages.StartingLogEvent+": "+s);var i=t._Helpers.Validators.validateIdentities(e,s);if(!i.valid)return t.Logger.error("ERROR: "+i.error),{valid:!1,error:i.error};if(r&&!t._Helpers.Validators.isFunction(r)){var n="The optional callback must be a function. You tried entering a(n) "+_typeof(r);return t.Logger.error(n),{valid:!1,error:n}}return {valid:!0}},createIdentityRequest:function createIdentityRequest(e,r,s,i,n,a,
|
|
756
|
+
this.idCache=null,this.audienceManager=null,this.IdentityRequest={preProcessIdentityRequest:function preProcessIdentityRequest(e,r,s){t.Logger.verbose(Messages$2.InformationMessages.StartingLogEvent+": "+s);var i=t._Helpers.Validators.validateIdentities(e,s);if(!i.valid)return t.Logger.error("ERROR: "+i.error),{valid:!1,error:i.error};if(r&&!t._Helpers.Validators.isFunction(r)){var n="The optional callback must be a function. You tried entering a(n) "+_typeof(r);return t.Logger.error(n),{valid:!1,error:n}}return {valid:!0}},createIdentityRequest:function createIdentityRequest(e,r,s,i,n,a,o){var d={client_sdk:{platform:r,sdk_vendor:s,sdk_version:i},context:a,environment:t._Store.SDKConfig.isDevelopmentMode?"development":"production",request_id:t._Helpers.generateUniqueId(),request_timestamp_ms:new Date().getTime(),previous_mpid:o||null,known_identities:createKnownIdentities(e,n)};return d},createModifyIdentityRequest:function createModifyIdentityRequest(e,r,s,i,n,a){return {client_sdk:{platform:s,sdk_vendor:i,sdk_version:n},context:a,environment:t._Store.SDKConfig.isDevelopmentMode?"development":"production",request_id:t._Helpers.generateUniqueId(),request_timestamp_ms:new Date().getTime(),identity_changes:this.createIdentityChanges(e,r)}},createIdentityChanges:function createIdentityChanges(e,t){var r,s=[];if(t&&isObject(t)&&e&&isObject(e))for(r in t)s.push({old_value:e[r]||null,new_value:t[r],identity_type:r});return s},// takes 2 UI objects keyed by name, combines them, returns them keyed by type
|
|
757
757
|
combineUserIdentities:function combineUserIdentities(e,t){var r={},s=i({},e,t);for(var n in s){var a=Types.IdentityType.getIdentityType(n);// this check removes anything that is not whitelisted as an identity type
|
|
758
758
|
!1!==a&&0<=a&&(r[Types.IdentityType.getIdentityType(n)]=s[n]);}return r},createAliasNetworkRequest:function createAliasNetworkRequest(e){return {request_id:t._Helpers.generateUniqueId(),request_type:"alias",environment:t._Store.SDKConfig.isDevelopmentMode?"development":"production",api_key:t._Store.devToken,data:{destination_mpid:e.destinationMpid,source_mpid:e.sourceMpid,start_unixtime_ms:e.startTime,end_unixtime_ms:e.endTime,scope:e.scope,device_application_stamp:t._Store.deviceId}}},convertAliasToNative:function convertAliasToNative(e){return {DestinationMpid:e.destinationMpid,SourceMpid:e.sourceMpid,StartUnixtimeMs:e.startTime,EndUnixtimeMs:e.endTime}},convertToNative:function convertToNative(e){var t=[];if(e&&e.userIdentities){for(var r in e.userIdentities)e.userIdentities.hasOwnProperty(r)&&t.push({Type:Types.IdentityType.getIdentityType(r),Identity:e.userIdentities[r]});return {UserIdentities:t}}}},this.IdentityAPI={HTTPCodes:HTTPCodes$2,/**
|
|
759
759
|
* Initiate a logout request to the mParticle server
|
|
@@ -761,25 +761,25 @@ combineUserIdentities:function combineUserIdentities(e,t){var r={},s=i({},e,t);f
|
|
|
761
761
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
762
762
|
* @param {Function} [callback] A callback function that is called when the identify request completes
|
|
763
763
|
*/identify:function identify(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
764
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Identify);if(i&&(s=i.getMPID()),a.valid){var
|
|
764
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Identify);if(i&&(s=i.getMPID()),a.valid){var o=t._Identity.IdentityRequest.createIdentityRequest(e,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.deviceId,t._Store.context,s);if(t._Helpers.getFeatureFlag(Constants.FeatureFlags.CacheIdentity)){var d=tryCacheIdentity(o.known_identities,n.idCache,n.parseIdentityResponse,s,r,e,Identify);if(d)return}t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Identify,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Identify request sent to native sdk")):t._IdentityAPIClient.sendIdentityRequest(o,Identify,r,e,n.parseIdentityResponse,s,o.known_identities):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
765
765
|
* Initiate a logout request to the mParticle server
|
|
766
766
|
* @method logout
|
|
767
767
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
768
768
|
* @param {Function} [callback] A callback function that is called when the logout request completes
|
|
769
769
|
*/logout:function logout(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
770
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Logout);if(i&&(s=i.getMPID()),a.valid){var d
|
|
770
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Logout);if(i&&(s=i.getMPID()),a.valid){var o,d=t._Identity.IdentityRequest.createIdentityRequest(e,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.deviceId,t._Store.context,s);t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Logout,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Logout request sent to native sdk")):(t._IdentityAPIClient.sendIdentityRequest(d,Logout,r,e,n.parseIdentityResponse,s),o=t._ServerModel.createEventObject({messageType:Types.MessageType.Profile}),o.ProfileMessageType=Types.ProfileMessageType.Logout,t._Store.activeForwarders.length&&t._Store.activeForwarders.forEach(function(e){e.logOut&&e.logOut(o);})):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
771
771
|
* Initiate a login request to the mParticle server
|
|
772
772
|
* @method login
|
|
773
773
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
774
774
|
* @param {Function} [callback] A callback function that is called when the login request completes
|
|
775
775
|
*/login:function login(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
776
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Login);if(i&&(s=i.getMPID()),a.valid){var
|
|
776
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Login);if(i&&(s=i.getMPID()),a.valid){var o=t._Identity.IdentityRequest.createIdentityRequest(e,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.deviceId,t._Store.context,s);if(t._Helpers.getFeatureFlag(Constants.FeatureFlags.CacheIdentity)){var d=tryCacheIdentity(o.known_identities,n.idCache,n.parseIdentityResponse,s,r,e,Login);if(d)return}t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Login,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Login request sent to native sdk")):t._IdentityAPIClient.sendIdentityRequest(o,Login,r,e,n.parseIdentityResponse,s,o.known_identities):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
777
777
|
* Initiate a modify request to the mParticle server
|
|
778
778
|
* @method modify
|
|
779
779
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
780
780
|
* @param {Function} [callback] A callback function that is called when the modify request completes
|
|
781
781
|
*/modify:function modify(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
782
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Modify$1);i&&(s=i.getMPID());var
|
|
782
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Modify$1);i&&(s=i.getMPID());var o=e&&e.userIdentities?e.userIdentities:{};if(a.valid){var d=t._Identity.IdentityRequest.createModifyIdentityRequest(i?i.getUserIdentities().userIdentities:{},o,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.context);t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Modify,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Modify request sent to native sdk")):t._IdentityAPIClient.sendIdentityRequest(d,Modify$1,r,e,n.parseIdentityResponse,s,d.known_identities):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
783
783
|
* Returns a user object with methods to interact with the current user
|
|
784
784
|
* @method getCurrentUser
|
|
785
785
|
* @return {Object} the current user object
|
|
@@ -817,7 +817,7 @@ return s<i&&(s=i,n<s&&t.Logger.warning("Source User has not been seen in the las
|
|
|
817
817
|
* Get user identities for current user
|
|
818
818
|
* @method getUserIdentities
|
|
819
819
|
* @return {Object} an object with userIdentities as its key
|
|
820
|
-
*/getUserIdentities:function getUserIdentities(){var r={},s=t.
|
|
820
|
+
*/getUserIdentities:function getUserIdentities(){var r={},s=t._Store.getUserIdentities(e);for(var i in s)s.hasOwnProperty(i)&&(r[Types.IdentityType.getIdentityName(t._Helpers.parseNumber(i))]=s[i]);return {userIdentities:r}},/**
|
|
821
821
|
* Get the MPID of the current user
|
|
822
822
|
* @method getMPID
|
|
823
823
|
* @return {String} the current user MPID as a string
|
|
@@ -834,23 +834,27 @@ return s<i&&(s=i,n<s&&t.Logger.warning("Source User has not been seen in the las
|
|
|
834
834
|
* @method setUserAttribute
|
|
835
835
|
* @param {String} key
|
|
836
836
|
* @param {String} value
|
|
837
|
-
*/
|
|
837
|
+
*/ // https://go.mparticle.com/work/SQDSDKS-4576
|
|
838
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
839
|
+
setUserAttribute:function setUserAttribute(r,i){if(t._SessionManager.resetSessionTimer(),t._Helpers.canLog()){if(!t._Helpers.Validators.isValidAttributeValue(i))return void t.Logger.error(Messages$2.ErrorMessages.BadAttribute);if(!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttribute,JSON.stringify({key:r,value:i}));else {var n,a,o=this.getAllUserAttributes(),d=t._Helpers.findKeyInObject(o,r);d?(a=!1,n=o[d],delete o[d]):a=!0,o[r]=i,t._Store.setUserAttributes(e,o),s.sendUserAttributeChangeEvent(r,i,n,a,!1,this),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),t._Forwarders.handleForwarderUserAttributes("setUserAttribute",r,i);}}},/**
|
|
838
840
|
* Set multiple user attributes
|
|
839
841
|
* @method setUserAttributes
|
|
840
842
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
841
|
-
*/
|
|
843
|
+
*/ // https://go.mparticle.com/work/SQDSDKS-6373
|
|
844
|
+
setUserAttributes:function setUserAttributes(e){if(t._SessionManager.resetSessionTimer(),!isObject(e))t.Logger.error("Must pass an object into setUserAttributes. You passed a "+_typeof(e));else if(t._Helpers.canLog())for(var r in e)e.hasOwnProperty(r)&&this.setUserAttribute(r,e[r]);},/**
|
|
842
845
|
* Removes a specific user attribute
|
|
843
846
|
* @method removeUserAttribute
|
|
844
847
|
* @param {String} key
|
|
845
|
-
*/removeUserAttribute:function removeUserAttribute(r){var i,n;if(t._SessionManager.resetSessionTimer(),!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:r,value:null}));else {i=t._Persistence.getPersistence(),n=this.getAllUserAttributes();var a=t._Helpers.findKeyInObject(n,r);a&&(r=a);var
|
|
848
|
+
*/removeUserAttribute:function removeUserAttribute(r){var i,n;if(t._SessionManager.resetSessionTimer(),!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:r,value:null}));else {i=t._Persistence.getPersistence(),n=this.getAllUserAttributes();var a=t._Helpers.findKeyInObject(n,r);a&&(r=a);var o=n[r]?n[r].toString():null;delete n[r],i&&i[e]&&(i[e].ua=n,t._Persistence.savePersistence(i,e)),s.sendUserAttributeChangeEvent(r,null,o,!1,!0,this),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),t._Forwarders.handleForwarderUserAttributes("removeUserAttribute",r,null);}},/**
|
|
846
849
|
* Sets a list of user attributes
|
|
847
850
|
* @method setUserAttributeList
|
|
848
851
|
* @param {String} key
|
|
849
852
|
* @param {Array} value an array of values
|
|
850
|
-
*/
|
|
853
|
+
*/ // https://go.mparticle.com/work/SQDSDKS-6373
|
|
854
|
+
setUserAttributeList:function setUserAttributeList(r,n){if(t._SessionManager.resetSessionTimer(),!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(!Array.isArray(n))return void t.Logger.error("The value you passed in to setUserAttributeList must be an array. You passed in a "+("undefined"==typeof value?"undefined":_typeof(value)));var a=n.slice();if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttributeList,JSON.stringify({key:r,value:a}));else {var o,d,g,l=this.getAllUserAttributes(),u=t._Helpers.findKeyInObject(l,r);// If the new attributeList length is different than the previous, then there is a change event.
|
|
851
855
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
852
856
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
853
|
-
if(
|
|
857
|
+
if(u?(d=!1,o=l[u],delete l[u]):d=!0,l[r]=a,t._Store.setUserAttributes(e,l),!o||!Array.isArray(o))g=!0;else if(n.length!==o.length)g=!0;else for(var p=0;p<n.length;p++)if(o[p]!==n[p]){g=!0;break}g&&s.sendUserAttributeChangeEvent(r,n,o,d,!1,this),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),t._Forwarders.handleForwarderUserAttributes("setUserAttribute",r,a);}},/**
|
|
854
858
|
* Removes all user attributes
|
|
855
859
|
* @method removeAllUserAttributes
|
|
856
860
|
*/removeAllUserAttributes:function removeAllUserAttributes(){var e;if(t._SessionManager.resetSessionTimer(),t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveAllUserAttributes);else if(e=this.getAllUserAttributes(),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),e)for(var r in e)e.hasOwnProperty(r)&&t._Forwarders.handleForwarderUserAttributes("removeUserAttribute",r,null),this.removeUserAttribute(r);},/**
|
|
@@ -861,7 +865,7 @@ if(p?(g=!1,o=d[p],delete d[p]):g=!0,d[r]=u,a&&a[e]&&(a[e].ua=d,t._Persistence.sa
|
|
|
861
865
|
* Returns all user attributes
|
|
862
866
|
* @method getAllUserAttributes
|
|
863
867
|
* @return {Object} an object of all user attributes. Example: { attr1: 'value1', attr2: ['a', 'b', 'c'] }
|
|
864
|
-
*/getAllUserAttributes:function getAllUserAttributes(){var r={},
|
|
868
|
+
*/getAllUserAttributes:function getAllUserAttributes(){var r=t._Store.getUserAttributes,s={},i=r(e);if(i)for(var n in i)i.hasOwnProperty(n)&&(s[n]=Array.isArray(i[n])?i[n].slice():i[n]);return s},/**
|
|
865
869
|
* Returns the cart object for the current user
|
|
866
870
|
* @method getCart
|
|
867
871
|
* @return a cart object
|
|
@@ -891,7 +895,7 @@ return t._Helpers.getFeatureFlag(FeatureFlags$1.AudienceAPI)?void(null===s.audie
|
|
|
891
895
|
* @param {Object} product the product
|
|
892
896
|
* @param {Boolean} [logEvent] a boolean to log adding of the cart object. If blank, no logging occurs.
|
|
893
897
|
* @deprecated
|
|
894
|
-
*/remove:function remove(r,s){t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().remove() will be removed in future releases");var i,n,a=-1,
|
|
898
|
+
*/remove:function remove(r,s){t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().remove() will be removed in future releases");var i,n,a=-1,o=null;if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveFromCart,JSON.stringify(r));else {t._SessionManager.resetSessionTimer(),n=t._Persistence.getUserProductsFromLS(e),n&&(n.forEach(function(e,t){e.Sku===r.Sku&&(a=t,o=e);}),-1<a&&(n.splice(a,1),!0===s&&t._Events.logProductActionEvent(Types.ProductActionType.RemoveFromCart,o)));i=t._Persistence.getAllUserProductsFromLS(),i[e].cp=n,t._Persistence.setCartProducts(i);}},/**
|
|
895
899
|
* Clears the user's cart
|
|
896
900
|
* @method clear
|
|
897
901
|
* @deprecated
|
|
@@ -900,16 +904,16 @@ return t._Helpers.getFeatureFlag(FeatureFlags$1.AudienceAPI)?void(null===s.audie
|
|
|
900
904
|
* @method getCartProducts
|
|
901
905
|
* @return {Array} array of cart products
|
|
902
906
|
* @deprecated
|
|
903
|
-
*/getCartProducts:function getCartProducts(){return t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().getCartProducts() will be removed in future releases"),t._Persistence.getCartProducts(e)}}},this.parseIdentityResponse=function(r,i,a,d,
|
|
904
|
-
n.sendUserIdentityChangeEvent(
|
|
907
|
+
*/getCartProducts:function getCartProducts(){return t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().getCartProducts() will be removed in future releases"),t._Persistence.getCartProducts(e)}}},this.parseIdentityResponse=function(r,i,a,o,d,g,l){var u,p,y,c=t.Identity.getUser(i),I=c?c.getMPID():null,_=c?c.getUserIdentities().userIdentities:{},v={};t._Store.identityCallInFlight=!1;try{var m;if(t.Logger.verbose("Parsing \""+d+"\" identity response from server"),p=r.responseText?JSON.parse(r.responseText):null,t._Store.isLoggedIn=(null===(m=p)||void 0===m?void 0:m.is_logged_in)||!1,hasMPIDChanged(c,p)&&(t._Store.mpid=p.mpid,c&&t._Persistence.setLastSeenTime(i),u=!t._Persistence.getFirstSeenTime(p.mpid),t._Persistence.setFirstSeenTime(p.mpid)),200===r.status){s(CacheIdentity)&&cacheOrClearIdCache(d,g,n.idCache,r,l);var S=n.IdentityAPI.getUser(p.mpid),b=S?S.getUserIdentities().userIdentities:{};d===Modify$1?(v=t._Identity.IdentityRequest.combineUserIdentities(_,o.userIdentities),t._Store.setUserIdentities(i,v)):(d===Identify&&c&&p.mpid===I&&t._Persistence.setFirstSeenTime(p.mpid),t._Store.addMpidToSessionHistory(p.mpid,i),t._CookieSyncManager.attemptCookieSync(i,p.mpid,u),t._Persistence.swapCurrentUser(i,p.mpid,t._Store.currentSessionMPIDs),o&&!isEmpty(o.userIdentities)&&(v=n.IdentityRequest.combineUserIdentities(b,o.userIdentities)),t._Store.setUserIdentities(p.mpid,v),t._Persistence.update(),t._Store.syncPersistenceData(),t._Persistence.findPrevCookiesBasedOnUI(o),t._Store.context=p.context||t._Store.context),y=t.Identity.getCurrentUser(),tryOnUserAlias(c,y,o,t.Logger);var A=t._Persistence.getPersistence();y&&(t._Persistence.storeDataInMemory(A,y.getMPID()),n.reinitForwardersOnUserChange(c,y),n.setForwarderCallbacks(y,d));var P=getNewIdentitiesByName(v),U=d===Modify$1?_:b;// https://go.mparticle.com/work/SQDSDKS-6501
|
|
908
|
+
n.sendUserIdentityChangeEvent(P,d,p.mpid,U);}if(a){var C=0===r.status?HTTPCodes$2.noHttpCoverage:r.status;t._Helpers.invokeCallback(a,C,p||null,y);}else p&&!isEmpty(p.errors)&&// https://go.mparticle.com/work/SQDSDKS-6500
|
|
905
909
|
t.Logger.error("Received HTTP response code of "+r.status+" - "+p.errors[0].message);t.Logger.verbose("Successfully parsed Identity Response"),t._APIClient.processQueuedEvents();}catch(s){a&&t._Helpers.invokeCallback(a,r.status,p||null),t.Logger.error("Error parsing JSON response from Identity server: "+s);}},this.sendUserIdentityChangeEvent=function(e,r,s,i){if(s||r===Modify$1)// https://go.mparticle.com/work/SQDSDKS-6501
|
|
906
910
|
{// https://go.mparticle.com/work/SQDSDKS-6354
|
|
907
|
-
var a=this.IdentityAPI.getUser(s);for(var
|
|
908
|
-
if(i[
|
|
911
|
+
var a=this.IdentityAPI.getUser(s);for(var o in e)// Verifies a change actually happened
|
|
912
|
+
if(i[o]!==e[o]){// If a new identity type was introduced when the identity changes
|
|
909
913
|
// we need to notify the server so that the user profile is updated in
|
|
910
914
|
// the mParticle UI.
|
|
911
|
-
var
|
|
912
|
-
return a=t._ServerModel.createEventObject({messageType:Types.MessageType.UserIdentityChange,userIdentityChanges:{New:{IdentityType:e,Identity:r,CreatedThisBatch:i},Old:{IdentityType:e,Identity:s,CreatedThisBatch:!1}},userInMemory:n}),a},this.sendUserAttributeChangeEvent=function(e,r,s,i,a,
|
|
915
|
+
var d=!i[o],g=n.createUserIdentityChange(o,e[o],i[o],d,a);t._APIClient.sendEventToServer(g);}}},this.createUserIdentityChange=function(e,r,s,i,n){var a;// https://go.mparticle.com/work/SQDSDKS-6439
|
|
916
|
+
return a=t._ServerModel.createEventObject({messageType:Types.MessageType.UserIdentityChange,userIdentityChanges:{New:{IdentityType:e,Identity:r,CreatedThisBatch:i},Old:{IdentityType:e,Identity:s,CreatedThisBatch:!1}},userInMemory:n}),a},this.sendUserAttributeChangeEvent=function(e,r,s,i,a,o){var d=n.createUserAttributeChange(e,r,s,i,a,o);d&&t._APIClient.sendEventToServer(d);},this.createUserAttributeChange=function(e,r,s,i,n,a){"undefined"==typeof s&&(s=null);var o;return r!==s&&(o=t._ServerModel.createEventObject({messageType:Types.MessageType.UserAttributeChange,userAttributeChanges:{UserAttributeName:e,New:r,Old:s,Deleted:n,IsNewAttribute:i}},a)),o},this.reinitForwardersOnUserChange=function(e,r){hasMPIDAndUserLoginChanged(e,r)&&t._Forwarders.initForwarders(r.getUserIdentities().userIdentities,t._APIClient.prepareForwardingStats);},this.setForwarderCallbacks=function(e,r){// https://go.mparticle.com/work/SQDSDKS-6036
|
|
913
917
|
t._Forwarders.setForwarderUserIdentities(e.getUserIdentities().userIdentities),t._Forwarders.setForwarderOnIdentityComplete(e,r),t._Forwarders.setForwarderOnUserIdentified(e);};}// https://go.mparticle.com/work/SQDSDKS-6359
|
|
914
918
|
function tryOnUserAlias(e,t,r,s){if(r&&r.onUserAlias&&isFunction(r.onUserAlias))try{s.warning(generateDeprecationMessage("onUserAlias")),r.onUserAlias(e,t);}catch(t){s.error("There was an error with your onUserAlias function - "+t);}}
|
|
915
919
|
|
package/dist/mparticle.esm.js
CHANGED
|
@@ -154,7 +154,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
154
154
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
155
155
|
};
|
|
156
156
|
|
|
157
|
-
var version = "2.26.
|
|
157
|
+
var version = "2.26.10";
|
|
158
158
|
|
|
159
159
|
var Constants={sdkVersion:version,sdkVendor:"mparticle",platform:"web",Messages:{DeprecationMessages:{MethodIsDeprecatedPostfix:"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",AddToCart:"addToCart",RemoveFromCart:"removeFromCart",ClearCart:"clearCart",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",localStorageProductsV4:"mprtcl-prodv4",cookieNameV4:"mprtcl-v4",currentStorageName:"mprtcl-v4",currentStorageProductsName:"mprtcl-prodv4"},DefaultConfig:{cookieDomain:null,cookieExpiration:365,logLevel:null,timeout:300,sessionTimeout:30,maxProducts:20,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
|
|
160
160
|
},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/"},Base64CookieKeys:{csm:1,sa:1,ss:1,ua:1,ui:1,csd:1,ia:1,con:1},// https://go.mparticle.com/work/SQDSDKS-6039
|
|
@@ -554,7 +554,7 @@ var b={};for(var c in Constants.DefaultConfig)Constants.DefaultConfig.hasOwnProp
|
|
|
554
554
|
function Store(a,b,c){var d=this,e=b._Helpers,f=e.createMainStorageName,g=e.createProductStorageName,h=b._NativeSdkHelpers.isWebviewEnabled,i={isEnabled:!0,sessionAttributes:{},currentSessionMPIDs:[],consentState:null,sessionId:null,isFirstRun:null,clientId:null,deviceId:null,devToken:null,serverSettings:{},dateLastEventSent:null,sessionStartDate:null,currentPosition:null,isTracking:!1,watchPositionId:null,cartProducts:[],eventQueue:[],currencyCode:null,globalTimer:null,context:null,configurationLoaded:!1,identityCallInFlight:!1,SDKConfig:{},nonCurrentUserMPIDs:{},identifyCalled:!1,isLoggedIn:!1,cookieSyncDates:{},integrationAttributes:{},requireDelay:!0,isLocalStorageAvailable:null,storageName:null,prodStorageName:null,activeForwarders:[],kits:{},sideloadedKits:[],configuredForwarders:[],pixelConfigurations:[],wrapperSDKInfo:{name:"none",version:null,isInfoSet:!1},// Placeholder for in-memory persistence model
|
|
555
555
|
persistenceData:{gs:{}}};for(var j in i)this[j]=i[j];if(this.devToken=c||null,this.integrationDelayTimeoutStart=Date.now(),this.SDKConfig=createSDKConfig(a),a){a.hasOwnProperty("flags")||(this.SDKConfig.flags={}),this.SDKConfig.flags=processFlags(a),a.deviceId&&(this.deviceId=a.deviceId),this.SDKConfig.isDevelopmentMode=!!a.hasOwnProperty("isDevelopmentMode")&&returnConvertedBoolean(a.isDevelopmentMode);var k=processBaseUrls(a,this.SDKConfig.flags,c);for(var l in k)this.SDKConfig[l]=k[l];if(a.hasOwnProperty("logLevel")&&(this.SDKConfig.logLevel=a.logLevel),this.SDKConfig.useNativeSdk=!!a.useNativeSdk,this.SDKConfig.kits=a.kits||{},this.SDKConfig.sideloadedKits=a.sideloadedKits||[],this.SDKConfig.isIOS=a.hasOwnProperty("isIOS")?a.isIOS:!!(window.mParticle&&window.mParticle.isIOS)&&window.mParticle.isIOS,this.SDKConfig.useCookieStorage=!!a.hasOwnProperty("useCookieStorage")&&a.useCookieStorage,this.SDKConfig.maxProducts=a.hasOwnProperty("maxProducts")?a.maxProducts:Constants.DefaultConfig.maxProducts,this.SDKConfig.maxCookieSize=a.hasOwnProperty("maxCookieSize")?a.maxCookieSize:Constants.DefaultConfig.maxCookieSize,a.hasOwnProperty("appName")&&(this.SDKConfig.appName=a.appName),a.hasOwnProperty("package")&&(this.SDKConfig["package"]=a["package"]),this.SDKConfig.integrationDelayTimeout=a.hasOwnProperty("integrationDelayTimeout")?a.integrationDelayTimeout:Constants.DefaultConfig.integrationDelayTimeout,a.hasOwnProperty("identifyRequest")&&(this.SDKConfig.identifyRequest=a.identifyRequest),a.hasOwnProperty("identityCallback")){var m=a.identityCallback;b._Helpers.Validators.isFunction(m)?this.SDKConfig.identityCallback=a.identityCallback:b.Logger.warning("The optional callback must be a function. You tried entering a(n) "+_typeof(m)+" . Callback not set. Please set your callback again.");}if(a.hasOwnProperty("appVersion")&&(this.SDKConfig.appVersion=a.appVersion),a.hasOwnProperty("appName")&&(this.SDKConfig.appName=a.appName),a.hasOwnProperty("sessionTimeout")&&(this.SDKConfig.sessionTimeout=a.sessionTimeout),a.hasOwnProperty("dataPlan")){this.SDKConfig.dataPlan={PlanVersion:null,PlanId:null};var n=a.dataPlan;n.planId&&(isDataPlanSlug(n.planId)?this.SDKConfig.dataPlan.PlanId=n.planId:b.Logger.error("Your data plan id must be a string and match the data plan slug format (i.e. under_case_slug)")),n.planVersion&&(isNumber(n.planVersion)?this.SDKConfig.dataPlan.PlanVersion=n.planVersion:b.Logger.error("Your data plan version must be a number"));}else this.SDKConfig.dataPlan={};if(this.SDKConfig.forceHttps=!a.hasOwnProperty("forceHttps")||a.forceHttps,this.SDKConfig.customFlags=a.customFlags||{},this.SDKConfig.minWebviewBridgeVersion=a.hasOwnProperty("minWebviewBridgeVersion")?a.minWebviewBridgeVersion:1,this.SDKConfig.aliasMaxWindow=a.hasOwnProperty("aliasMaxWindow")?a.aliasMaxWindow:Constants.DefaultConfig.aliasMaxWindow,a.hasOwnProperty("dataPlanOptions")){var o=a.dataPlanOptions;o.hasOwnProperty("dataPlanVersion")&&o.hasOwnProperty("blockUserAttributes")&&o.hasOwnProperty("blockEventAttributes")&&o.hasOwnProperty("blockEvents")&&o.hasOwnProperty("blockUserIdentities")||b.Logger.error("Ensure your config.dataPlanOptions object has the following keys: a \"dataPlanVersion\" object, and \"blockUserAttributes\", \"blockEventAttributes\", \"blockEvents\", \"blockUserIdentities\" booleans");}a.hasOwnProperty("onCreateBatch")&&("function"==typeof a.onCreateBatch?this.SDKConfig.onCreateBatch=a.onCreateBatch:(b.Logger.error("config.onCreateBatch must be a function"),this.SDKConfig.onCreateBatch=void 0));}this._getFromPersistence=function(a,b){return a?(d.syncPersistenceData(),d.persistenceData&&d.persistenceData[a]&&d.persistenceData[a][b]?d.persistenceData[a][b]:null):null},this._setPersistence=function(a,c,e){var f;a&&(d.syncPersistenceData(),d.persistenceData&&(d.persistenceData[a]?d.persistenceData[a][c]=e:d.persistenceData[a]=(f={},f[c]=e,f),isObject(d.persistenceData[a][c])&&isEmpty(d.persistenceData[a][c])&&delete d.persistenceData[a][c],b._Persistence.savePersistence(d.persistenceData)));},this.hasInvalidIdentifyRequest=function(){var a=d.SDKConfig.identifyRequest;return isObject(a)&&isObject(a.userIdentities)&&isEmpty(a.userIdentities)||!a},this.getConsentState=function(a){var c=b._Consent.ConsentSerialization.fromMinifiedJsonObject,e=d._getFromPersistence(a,"con");return isEmpty(e)?null:c(e)},this.setConsentState=function(a,c){var e=b._Consent.ConsentSerialization.toMinifiedJsonObject;// If ConsentState is null, we assume the intent is to clear out the consent state
|
|
556
556
|
(c||null===c)&&d._setPersistence(a,"con",e(c));},this.getDeviceId=function(){return d.deviceId},this.setDeviceId=function(a){d.deviceId=a,d.persistenceData.gs.das=a,b._Persistence.update();},this.getFirstSeenTime=function(a){return d._getFromPersistence(a,"fst")},this.setFirstSeenTime=function(a,b){if(a){var c=b||new Date().getTime();d._setPersistence(a,"fst",c);}},this.getLastSeenTime=function(a){if(!a)return null;// https://go.mparticle.com/work/SQDSDKS-6315
|
|
557
|
-
var c=b.Identity.getCurrentUser();return a===(null===c||void 0===c?void 0:c.getMPID())?new Date().getTime():d._getFromPersistence(a,"lst")},this.setLastSeenTime=function(a,b){if(a){var c=b||new Date().getTime();d._setPersistence(a,"lst",c);}},this.syncPersistenceData=function(){var a=b._Persistence.getPersistence();d.persistenceData=b._Helpers.extend({},d.persistenceData,a);},this.addMpidToSessionHistory=function(a,b){var c=d.currentSessionMPIDs.indexOf(a);return a&&b!==a&&0>c?void d.currentSessionMPIDs.push(a):void(0<=c&&(d.currentSessionMPIDs=moveElementToEnd(d.currentSessionMPIDs,c)))},this.nullifySession=function(){d.sessionId=null,d.dateLastEventSent=null,d.sessionAttributes={},b._Persistence.update();},this.processConfig=function(a){var c=a.workspaceToken,e=a.requiredWebviewBridgeName;// We should reprocess the flags in case they have changed when we request an updated config
|
|
557
|
+
var c=b.Identity.getCurrentUser();return a===(null===c||void 0===c?void 0:c.getMPID())?new Date().getTime():d._getFromPersistence(a,"lst")},this.setLastSeenTime=function(a,b){if(a){var c=b||new Date().getTime();d._setPersistence(a,"lst",c);}},this.syncPersistenceData=function(){var a=b._Persistence.getPersistence();d.persistenceData=b._Helpers.extend({},d.persistenceData,a);},this.getUserAttributes=function(a){return d._getFromPersistence(a,"ua")||{}},this.setUserAttributes=function(a,b){return d._setPersistence(a,"ua",b)},this.getUserIdentities=function(a){return d._getFromPersistence(a,"ui")||{}},this.setUserIdentities=function(a,b){d._setPersistence(a,"ui",b);},this.addMpidToSessionHistory=function(a,b){var c=d.currentSessionMPIDs.indexOf(a);return a&&b!==a&&0>c?void d.currentSessionMPIDs.push(a):void(0<=c&&(d.currentSessionMPIDs=moveElementToEnd(d.currentSessionMPIDs,c)))},this.nullifySession=function(){d.sessionId=null,d.dateLastEventSent=null,d.sessionAttributes={},b._Persistence.update();},this.processConfig=function(a){var c=a.workspaceToken,e=a.requiredWebviewBridgeName;// We should reprocess the flags in case they have changed when we request an updated config
|
|
558
558
|
// such as if the SDK is being self-hosted and the flags are different on the server config
|
|
559
559
|
// https://go.mparticle.com/work/SQDSDKS-6317
|
|
560
560
|
d.SDKConfig.flags=processFlags(a),c?d.SDKConfig.workspaceToken=c:b.Logger.warning("You should have a workspaceToken on your config object for security purposes."),d.storageName=f(c),d.prodStorageName=g(c),d.SDKConfig.requiredWebviewBridgeName=e||c,d.webviewBridgeEnabled=h(d.SDKConfig.requiredWebviewBridgeName,d.SDKConfig.minWebviewBridgeVersion),d.configurationLoaded=!0;};}// https://go.mparticle.com/work/SQDSDKS-6317
|
|
@@ -626,7 +626,7 @@ var k={};for(var l in b)b.hasOwnProperty(l)&&(SDKv2NonMPIDCookieKeys[l]||l===b.c
|
|
|
626
626
|
if(Object.keys(k).length)for(var m in k)g=d(b,c,e),g.length>f&&k.hasOwnProperty(m)&&-1===h.indexOf(m)&&delete b[m];// Comment 2b above
|
|
627
627
|
for(var n,o=0;o<h.length&&(g=d(b,c,e),g.length>f);o++)n=h[o],b[n]?(a.Logger.verbose("Size of new encoded cookie is larger than maxCookieSize setting of "+f+". Removing from cookie the earliest logged in MPID containing: "+JSON.stringify(b[n],0,2)),delete b[n]):a.Logger.error("Unable to save MPID data to cookies because the resulting encoded cookie is larger than the maxCookieSize setting of "+f+". We recommend using a maxCookieSize of 1500.");}return g},this.findPrevCookiesBasedOnUI=function(b){var c,d=a._Persistence.getPersistence();if(b)for(var e in b.userIdentities)if(d&&Object.keys(d).length)for(var g in d)// any value in persistence that has an MPID key will be an MPID to search through
|
|
628
628
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
629
|
-
if(d[g].mpid){var h=d[g].ui;for(var i in h)if(e===i&&b.userIdentities[e]===h[i]){c=g;break}}c&&f.storeDataInMemory(d,c);},this.encodePersistence=function(b){for(var c in b=JSON.parse(b),b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]?Array.isArray(b.gs[c])&&b.gs[c].length||a._Helpers.isObject(b.gs[c])&&Object.keys(b.gs[c]).length?b.gs[c]=Base64.encode(JSON.stringify(b.gs[c])):delete b.gs[c]:delete b.gs[c]:"ie"===c?b.gs[c]=b.gs[c]?1:0:!b.gs[c]&&delete b.gs[c]);for(var d in b)if(b.hasOwnProperty(d)&&!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&(a._Helpers.isObject(b[d][c])&&Object.keys(b[d][c]).length?b[d][c]=Base64.encode(JSON.stringify(b[d][c])):delete b[d][c]);return createCookieString(JSON.stringify(b))},this.decodePersistence=function(b){try{if(b){if(b=JSON.parse(revertCookieString(b)),a._Helpers.isObject(b)&&Object.keys(b).length){for(var c in b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]=JSON.parse(Base64.decode(b.gs[c])):"ie"===c&&(b.gs[c]=!!b.gs[c]));for(var d in b)if(b.hasOwnProperty(d))if(!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&b[d][c].length&&(b[d][c]=JSON.parse(Base64.decode(b[d][c])));else "l"===d&&(b[d]=!!b[d]);}return JSON.stringify(b)}}catch(b){a.Logger.error("Problem with decoding cookie",b);}},this.getCookieDomain=function(){if(a._Store.SDKConfig.cookieDomain)return a._Store.SDKConfig.cookieDomain;var b=f.getDomain(document,location.hostname);return ""===b?"":"."+b},this.getDomain=function(a,b){var c,d,e=b.split(".");for(c=e.length-1;0<=c;c--)if(d=e.slice(c).join("."),a.cookie="mptest=cookie;domain=."+d+";",-1<a.cookie.indexOf("mptest=cookie"))return a.cookie="mptest=;domain=."+d+";expires=Thu, 01 Jan 1970 00:00:01 GMT;",d;return ""},this.
|
|
629
|
+
if(d[g].mpid){var h=d[g].ui;for(var i in h)if(e===i&&b.userIdentities[e]===h[i]){c=g;break}}c&&f.storeDataInMemory(d,c);},this.encodePersistence=function(b){for(var c in b=JSON.parse(b),b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]?Array.isArray(b.gs[c])&&b.gs[c].length||a._Helpers.isObject(b.gs[c])&&Object.keys(b.gs[c]).length?b.gs[c]=Base64.encode(JSON.stringify(b.gs[c])):delete b.gs[c]:delete b.gs[c]:"ie"===c?b.gs[c]=b.gs[c]?1:0:!b.gs[c]&&delete b.gs[c]);for(var d in b)if(b.hasOwnProperty(d)&&!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&(a._Helpers.isObject(b[d][c])&&Object.keys(b[d][c]).length?b[d][c]=Base64.encode(JSON.stringify(b[d][c])):delete b[d][c]);return createCookieString(JSON.stringify(b))},this.decodePersistence=function(b){try{if(b){if(b=JSON.parse(revertCookieString(b)),a._Helpers.isObject(b)&&Object.keys(b).length){for(var c in b.gs)b.gs.hasOwnProperty(c)&&(Base64CookieKeys[c]?b.gs[c]=JSON.parse(Base64.decode(b.gs[c])):"ie"===c&&(b.gs[c]=!!b.gs[c]));for(var d in b)if(b.hasOwnProperty(d))if(!SDKv2NonMPIDCookieKeys[d])for(c in b[d])b[d].hasOwnProperty(c)&&Base64CookieKeys[c]&&b[d][c].length&&(b[d][c]=JSON.parse(Base64.decode(b[d][c])));else "l"===d&&(b[d]=!!b[d]);}return JSON.stringify(b)}}catch(b){a.Logger.error("Problem with decoding cookie",b);}},this.getCookieDomain=function(){if(a._Store.SDKConfig.cookieDomain)return a._Store.SDKConfig.cookieDomain;var b=f.getDomain(document,location.hostname);return ""===b?"":"."+b},this.getDomain=function(a,b){var c,d,e=b.split(".");for(c=e.length-1;0<=c;c--)if(d=e.slice(c).join("."),a.cookie="mptest=cookie;domain=."+d+";",-1<a.cookie.indexOf("mptest=cookie"))return a.cookie="mptest=;domain=."+d+";expires=Thu, 01 Jan 1970 00:00:01 GMT;",d;return ""},this.getCartProducts=function(b){var c,d=localStorage.getItem(a._Store.prodStorageName);return d&&(c=JSON.parse(Base64.decode(d)),c&&c[b]&&c[b].cp)?c[b].cp:[]},this.setCartProducts=function(b){if(a._Store.isLocalStorageAvailable)try{window.localStorage.setItem(encodeURIComponent(a._Store.prodStorageName),Base64.encode(JSON.stringify(b)));}catch(b){a.Logger.error("Error with setting products on localStorage.");}},this.saveUserCookieSyncDatesToPersistence=function(a,b){if(b){var c=f.getPersistence();c&&(c[a]?c[a].csd=b:c[a]={csd:b}),f.savePersistence(c);}},this.swapCurrentUser=function(a,b,c){if(a&&b&&a!==b){var d=f.getPersistence();d&&(d.cu=b,d.gs.csm=c,f.savePersistence(d));}},this.savePersistence=function(b){var c,d=f.encodePersistence(JSON.stringify(b)),e=new Date,g=a._Store.storageName,h=new Date(e.getTime()+1e3*(60*(60*(24*a._Store.SDKConfig.cookieExpiration)))).toGMTString(),i=f.getCookieDomain();if(c=""===i?"":";domain="+i,a._Store.SDKConfig.useCookieStorage){var j=f.reduceAndEncodePersistence(b,h,c,a._Store.SDKConfig.maxCookieSize);window.document.cookie=encodeURIComponent(g)+"="+j;}else a._Store.isLocalStorageAvailable&&localStorage.setItem(a._Store.storageName,d);},this.getPersistence=function(){var a=this.useLocalStorage()?this.getLocalStorage():this.getCookie();return a},this.getFirstSeenTime=function(a){if(!a)return null;var b=f.getPersistence();return b&&b[a]&&b[a].fst?b[a].fst:null},this.setFirstSeenTime=function(a,b){if(a){b||(b=new Date().getTime());var c=f.getPersistence();c&&(!c[a]&&(c[a]={}),!c[a].fst&&(c[a].fst=b,f.savePersistence(c)));}// https://go.mparticle.com/work/SQDSDKS-6329
|
|
630
630
|
},this.getLastSeenTime=function(b){if(!b)return null;if(b===a.Identity.getCurrentUser().getMPID())//if the mpid is the current user, its last seen time is the current time
|
|
631
631
|
return new Date().getTime();var c=f.getPersistence();return c&&c[b]&&c[b].lst?c[b].lst:null},this.setLastSeenTime=function(a,b){if(a){b||(b=new Date().getTime());var c=f.getPersistence();c&&c[a]&&(c[a].lst=b,f.savePersistence(c));}// https://go.mparticle.com/work/SQDSDKS-6329
|
|
632
632
|
},this.getDeviceId=function(){return a._Store.deviceId},this.setDeviceId=function(b){a._Store.deviceId=b,f.update();},this.resetPersistence=function(){if(c(StorageNames.localStorageName),c(StorageNames.localStorageNameV3),c(StorageNames.localStorageNameV4),c(a._Store.prodStorageName),c(a._Store.storageName),c(StorageNames.localStorageProductsV4),f.expireCookies(StorageNames.cookieName),f.expireCookies(StorageNames.cookieNameV2),f.expireCookies(StorageNames.cookieNameV3),f.expireCookies(StorageNames.cookieNameV4),f.expireCookies(a._Store.prodStorageName),f.expireCookies(a._Store.storageName),mParticle._isTestEnv){c(a._Helpers.createMainStorageName("abcdef")),f.expireCookies(a._Helpers.createMainStorageName("abcdef")),c(a._Helpers.createProductStorageName("abcdef"));}},this.forwardingStatsBatches={uploadsTable:{},forwardingStatsEventQueue:[]};}
|
|
@@ -640,8 +640,8 @@ c(b),b=null,a._Store.isTracking=!1;}));else {var d={coords:{latitude:a._Store.cu
|
|
|
640
640
|
return a.Logger.verbose(Messages$3.InformationMessages.StartingLogCommerceEvent),b.ProductAction&&null===b.EventCategory?void a.Logger.error("Commerce event not sent. The mParticle.ProductActionType you passed was invalid. Re-check your code."):void(c=a._Helpers.sanitizeAttributes(c,b.EventName),a._Helpers.canLog()?(a._Store.webviewBridgeEnabled&&(b.ShoppingCart={}),c&&(b.EventAttributes=c),a._APIClient.sendEventToServer(b,d),a._Persistence.update()):a.Logger.verbose(Messages$3.InformationMessages.AbandonLogEvent))},this.addEventHandler=function(c,d,f,g,h){var j,k,e=[],l=function handler(c){var d=function timeoutHandler(){j.href?window.location.href=j.href:j.submit&&j.submit();};a.Logger.verbose("DOM event triggered, handling event"),b.logEvent({messageType:Types.MessageType.PageEvent,name:"function"==typeof f?f(j):f,data:"function"==typeof g?g(j):g,eventType:h||Types.EventType.Other}),(j.href&&"_blank"!==j.target||j.submit)&&(c.preventDefault?c.preventDefault():c.returnValue=!1,setTimeout(d,a._Store.SDKConfig.timeout));};if(!d)return void a.Logger.error("Can't bind event, selector is required");// Handle a css selector string or a dom element
|
|
641
641
|
if("string"==typeof d?e=document.querySelectorAll(d):d.nodeType&&(e=[d]),e.length)for(a.Logger.verbose("Found "+e.length+" element"+(1<e.length?"s":"")+", attaching event handlers"),k=0;k<e.length;k++)j=e[k],j.addEventListener?j.addEventListener(c,l,!1):j.attachEvent?j.attachEvent("on"+c,l):j["on"+c]=l;else a.Logger.verbose("No elements found");};}
|
|
642
642
|
|
|
643
|
-
function filteredMparticleUser(a,b,c,d){var e=this;return {getUserIdentities:function getUserIdentities(){var e={},f=c.
|
|
644
|
-
e[h]=f[g]);}return e=c._Helpers.filterUserIdentitiesForForwarders(e,b.userIdentityFilters),{userIdentities:e}},getMPID:function getMPID(){return a},getUserAttributesLists:function getUserAttributesLists(a){var b,f={};for(var g in b=e.getAllUserAttributes(),b)b.hasOwnProperty(g)&&Array.isArray(b[g])&&(d&&(!d||d.isAttributeKeyBlocked(g))||(f[g]=b[g].slice()));return f=c._Helpers.filterUserAttributes(f,a.userAttributeFilters),f},getAllUserAttributes:function getAllUserAttributes(){var e={},f=c.
|
|
643
|
+
function filteredMparticleUser(a,b,c,d){var e=this;return {getUserIdentities:function getUserIdentities(){var e={},f=c._Store.getUserIdentities(a);for(var g in f)if(f.hasOwnProperty(g)){var h=Types.IdentityType.getIdentityName(c._Helpers.parseNumber(g));d&&(!d||d.isIdentityBlocked(h))||(//if identity type is not blocked
|
|
644
|
+
e[h]=f[g]);}return e=c._Helpers.filterUserIdentitiesForForwarders(e,b.userIdentityFilters),{userIdentities:e}},getMPID:function getMPID(){return a},getUserAttributesLists:function getUserAttributesLists(a){var b,f={};for(var g in b=e.getAllUserAttributes(),b)b.hasOwnProperty(g)&&Array.isArray(b[g])&&(d&&(!d||d.isAttributeKeyBlocked(g))||(f[g]=b[g].slice()));return f=c._Helpers.filterUserAttributes(f,a.userAttributeFilters),f},getAllUserAttributes:function getAllUserAttributes(){var e={},f=c._Store.getUserAttributes(a);if(f)for(var g in f)f.hasOwnProperty(g)&&(d&&(!d||d.isAttributeKeyBlocked(g))||(Array.isArray(f[g])?e[g]=f[g].slice():e[g]=f[g]));return e=c._Helpers.filterUserAttributes(e,b.userAttributeFilters),e}}}
|
|
645
645
|
|
|
646
646
|
var _Constants$IdentityMe=Constants.IdentityMethods,Modify$3=_Constants$IdentityMe.Modify,Identify$2=_Constants$IdentityMe.Identify,Login$2=_Constants$IdentityMe.Login,Logout$2=_Constants$IdentityMe.Logout;function Forwarders(a,b){var c=this,d={setUserAttribute:"setUserAttribute",removeUserAttribute:"removeUserAttribute"};// TODO: https://go.mparticle.com/work/SQDSDKS-6036
|
|
647
647
|
// Processing forwarders is a 2 step process:
|
|
@@ -753,7 +753,7 @@ var Messages$2=Constants.Messages,HTTPCodes$2=Constants.HTTPCodes,FeatureFlags$1
|
|
|
753
753
|
// send a user identity change request on identify, login, logout, modify when any values change.
|
|
754
754
|
// compare what identities exist vs what is previously was for the specific user if they were in memory before.
|
|
755
755
|
// if it's the first time the user is logging in, send a user identity change request with
|
|
756
|
-
this.idCache=null,this.audienceManager=null,this.IdentityRequest={preProcessIdentityRequest:function preProcessIdentityRequest(e,r,s){t.Logger.verbose(Messages$2.InformationMessages.StartingLogEvent+": "+s);var i=t._Helpers.Validators.validateIdentities(e,s);if(!i.valid)return t.Logger.error("ERROR: "+i.error),{valid:!1,error:i.error};if(r&&!t._Helpers.Validators.isFunction(r)){var n="The optional callback must be a function. You tried entering a(n) "+_typeof(r);return t.Logger.error(n),{valid:!1,error:n}}return {valid:!0}},createIdentityRequest:function createIdentityRequest(e,r,s,i,n,a,
|
|
756
|
+
this.idCache=null,this.audienceManager=null,this.IdentityRequest={preProcessIdentityRequest:function preProcessIdentityRequest(e,r,s){t.Logger.verbose(Messages$2.InformationMessages.StartingLogEvent+": "+s);var i=t._Helpers.Validators.validateIdentities(e,s);if(!i.valid)return t.Logger.error("ERROR: "+i.error),{valid:!1,error:i.error};if(r&&!t._Helpers.Validators.isFunction(r)){var n="The optional callback must be a function. You tried entering a(n) "+_typeof(r);return t.Logger.error(n),{valid:!1,error:n}}return {valid:!0}},createIdentityRequest:function createIdentityRequest(e,r,s,i,n,a,o){var d={client_sdk:{platform:r,sdk_vendor:s,sdk_version:i},context:a,environment:t._Store.SDKConfig.isDevelopmentMode?"development":"production",request_id:t._Helpers.generateUniqueId(),request_timestamp_ms:new Date().getTime(),previous_mpid:o||null,known_identities:createKnownIdentities(e,n)};return d},createModifyIdentityRequest:function createModifyIdentityRequest(e,r,s,i,n,a){return {client_sdk:{platform:s,sdk_vendor:i,sdk_version:n},context:a,environment:t._Store.SDKConfig.isDevelopmentMode?"development":"production",request_id:t._Helpers.generateUniqueId(),request_timestamp_ms:new Date().getTime(),identity_changes:this.createIdentityChanges(e,r)}},createIdentityChanges:function createIdentityChanges(e,t){var r,s=[];if(t&&isObject(t)&&e&&isObject(e))for(r in t)s.push({old_value:e[r]||null,new_value:t[r],identity_type:r});return s},// takes 2 UI objects keyed by name, combines them, returns them keyed by type
|
|
757
757
|
combineUserIdentities:function combineUserIdentities(e,t){var r={},s=i({},e,t);for(var n in s){var a=Types.IdentityType.getIdentityType(n);// this check removes anything that is not whitelisted as an identity type
|
|
758
758
|
!1!==a&&0<=a&&(r[Types.IdentityType.getIdentityType(n)]=s[n]);}return r},createAliasNetworkRequest:function createAliasNetworkRequest(e){return {request_id:t._Helpers.generateUniqueId(),request_type:"alias",environment:t._Store.SDKConfig.isDevelopmentMode?"development":"production",api_key:t._Store.devToken,data:{destination_mpid:e.destinationMpid,source_mpid:e.sourceMpid,start_unixtime_ms:e.startTime,end_unixtime_ms:e.endTime,scope:e.scope,device_application_stamp:t._Store.deviceId}}},convertAliasToNative:function convertAliasToNative(e){return {DestinationMpid:e.destinationMpid,SourceMpid:e.sourceMpid,StartUnixtimeMs:e.startTime,EndUnixtimeMs:e.endTime}},convertToNative:function convertToNative(e){var t=[];if(e&&e.userIdentities){for(var r in e.userIdentities)e.userIdentities.hasOwnProperty(r)&&t.push({Type:Types.IdentityType.getIdentityType(r),Identity:e.userIdentities[r]});return {UserIdentities:t}}}},this.IdentityAPI={HTTPCodes:HTTPCodes$2,/**
|
|
759
759
|
* Initiate a logout request to the mParticle server
|
|
@@ -761,25 +761,25 @@ combineUserIdentities:function combineUserIdentities(e,t){var r={},s=i({},e,t);f
|
|
|
761
761
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
762
762
|
* @param {Function} [callback] A callback function that is called when the identify request completes
|
|
763
763
|
*/identify:function identify(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
764
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Identify);if(i&&(s=i.getMPID()),a.valid){var
|
|
764
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Identify);if(i&&(s=i.getMPID()),a.valid){var o=t._Identity.IdentityRequest.createIdentityRequest(e,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.deviceId,t._Store.context,s);if(t._Helpers.getFeatureFlag(Constants.FeatureFlags.CacheIdentity)){var d=tryCacheIdentity(o.known_identities,n.idCache,n.parseIdentityResponse,s,r,e,Identify);if(d)return}t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Identify,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Identify request sent to native sdk")):t._IdentityAPIClient.sendIdentityRequest(o,Identify,r,e,n.parseIdentityResponse,s,o.known_identities):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
765
765
|
* Initiate a logout request to the mParticle server
|
|
766
766
|
* @method logout
|
|
767
767
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
768
768
|
* @param {Function} [callback] A callback function that is called when the logout request completes
|
|
769
769
|
*/logout:function logout(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
770
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Logout);if(i&&(s=i.getMPID()),a.valid){var d
|
|
770
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Logout);if(i&&(s=i.getMPID()),a.valid){var o,d=t._Identity.IdentityRequest.createIdentityRequest(e,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.deviceId,t._Store.context,s);t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Logout,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Logout request sent to native sdk")):(t._IdentityAPIClient.sendIdentityRequest(d,Logout,r,e,n.parseIdentityResponse,s),o=t._ServerModel.createEventObject({messageType:Types.MessageType.Profile}),o.ProfileMessageType=Types.ProfileMessageType.Logout,t._Store.activeForwarders.length&&t._Store.activeForwarders.forEach(function(e){e.logOut&&e.logOut(o);})):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
771
771
|
* Initiate a login request to the mParticle server
|
|
772
772
|
* @method login
|
|
773
773
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
774
774
|
* @param {Function} [callback] A callback function that is called when the login request completes
|
|
775
775
|
*/login:function login(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
776
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Login);if(i&&(s=i.getMPID()),a.valid){var
|
|
776
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Login);if(i&&(s=i.getMPID()),a.valid){var o=t._Identity.IdentityRequest.createIdentityRequest(e,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.deviceId,t._Store.context,s);if(t._Helpers.getFeatureFlag(Constants.FeatureFlags.CacheIdentity)){var d=tryCacheIdentity(o.known_identities,n.idCache,n.parseIdentityResponse,s,r,e,Login);if(d)return}t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Login,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Login request sent to native sdk")):t._IdentityAPIClient.sendIdentityRequest(o,Login,r,e,n.parseIdentityResponse,s,o.known_identities):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
777
777
|
* Initiate a modify request to the mParticle server
|
|
778
778
|
* @method modify
|
|
779
779
|
* @param {Object} identityApiData The identityApiData object as indicated [here](https://github.com/mParticle/mparticle-sdk-javascript/blob/master-v2/README.md#1-customize-the-sdk)
|
|
780
780
|
* @param {Function} [callback] A callback function that is called when the modify request completes
|
|
781
781
|
*/modify:function modify(e,r){// https://go.mparticle.com/work/SQDSDKS-6337
|
|
782
|
-
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Modify$1);i&&(s=i.getMPID());var
|
|
782
|
+
var s,i=t.Identity.getCurrentUser(),a=t._Identity.IdentityRequest.preProcessIdentityRequest(e,r,Modify$1);i&&(s=i.getMPID());var o=e&&e.userIdentities?e.userIdentities:{};if(a.valid){var d=t._Identity.IdentityRequest.createModifyIdentityRequest(i?i.getUserIdentities().userIdentities:{},o,Constants.platform,Constants.sdkVendor,Constants.sdkVersion,t._Store.context);t._Helpers.canLog()?t._Store.webviewBridgeEnabled?(t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.Modify,JSON.stringify(t._Identity.IdentityRequest.convertToNative(e))),t._Helpers.invokeCallback(r,HTTPCodes$2.nativeIdentityRequest,"Modify request sent to native sdk")):t._IdentityAPIClient.sendIdentityRequest(d,Modify$1,r,e,n.parseIdentityResponse,s,d.known_identities):(t._Helpers.invokeCallback(r,HTTPCodes$2.loggingDisabledOrMissingAPIKey,Messages$2.InformationMessages.AbandonLogEvent),t.Logger.verbose(Messages$2.InformationMessages.AbandonLogEvent));}else t._Helpers.invokeCallback(r,HTTPCodes$2.validationIssue,a.error),t.Logger.verbose(a);},/**
|
|
783
783
|
* Returns a user object with methods to interact with the current user
|
|
784
784
|
* @method getCurrentUser
|
|
785
785
|
* @return {Object} the current user object
|
|
@@ -817,7 +817,7 @@ return s<i&&(s=i,n<s&&t.Logger.warning("Source User has not been seen in the las
|
|
|
817
817
|
* Get user identities for current user
|
|
818
818
|
* @method getUserIdentities
|
|
819
819
|
* @return {Object} an object with userIdentities as its key
|
|
820
|
-
*/getUserIdentities:function getUserIdentities(){var r={},s=t.
|
|
820
|
+
*/getUserIdentities:function getUserIdentities(){var r={},s=t._Store.getUserIdentities(e);for(var i in s)s.hasOwnProperty(i)&&(r[Types.IdentityType.getIdentityName(t._Helpers.parseNumber(i))]=s[i]);return {userIdentities:r}},/**
|
|
821
821
|
* Get the MPID of the current user
|
|
822
822
|
* @method getMPID
|
|
823
823
|
* @return {String} the current user MPID as a string
|
|
@@ -834,23 +834,27 @@ return s<i&&(s=i,n<s&&t.Logger.warning("Source User has not been seen in the las
|
|
|
834
834
|
* @method setUserAttribute
|
|
835
835
|
* @param {String} key
|
|
836
836
|
* @param {String} value
|
|
837
|
-
*/
|
|
837
|
+
*/ // https://go.mparticle.com/work/SQDSDKS-4576
|
|
838
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
839
|
+
setUserAttribute:function setUserAttribute(r,i){if(t._SessionManager.resetSessionTimer(),t._Helpers.canLog()){if(!t._Helpers.Validators.isValidAttributeValue(i))return void t.Logger.error(Messages$2.ErrorMessages.BadAttribute);if(!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttribute,JSON.stringify({key:r,value:i}));else {var n,a,o=this.getAllUserAttributes(),d=t._Helpers.findKeyInObject(o,r);d?(a=!1,n=o[d],delete o[d]):a=!0,o[r]=i,t._Store.setUserAttributes(e,o),s.sendUserAttributeChangeEvent(r,i,n,a,!1,this),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),t._Forwarders.handleForwarderUserAttributes("setUserAttribute",r,i);}}},/**
|
|
838
840
|
* Set multiple user attributes
|
|
839
841
|
* @method setUserAttributes
|
|
840
842
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
841
|
-
*/
|
|
843
|
+
*/ // https://go.mparticle.com/work/SQDSDKS-6373
|
|
844
|
+
setUserAttributes:function setUserAttributes(e){if(t._SessionManager.resetSessionTimer(),!isObject(e))t.Logger.error("Must pass an object into setUserAttributes. You passed a "+_typeof(e));else if(t._Helpers.canLog())for(var r in e)e.hasOwnProperty(r)&&this.setUserAttribute(r,e[r]);},/**
|
|
842
845
|
* Removes a specific user attribute
|
|
843
846
|
* @method removeUserAttribute
|
|
844
847
|
* @param {String} key
|
|
845
|
-
*/removeUserAttribute:function removeUserAttribute(r){var i,n;if(t._SessionManager.resetSessionTimer(),!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:r,value:null}));else {i=t._Persistence.getPersistence(),n=this.getAllUserAttributes();var a=t._Helpers.findKeyInObject(n,r);a&&(r=a);var
|
|
848
|
+
*/removeUserAttribute:function removeUserAttribute(r){var i,n;if(t._SessionManager.resetSessionTimer(),!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveUserAttribute,JSON.stringify({key:r,value:null}));else {i=t._Persistence.getPersistence(),n=this.getAllUserAttributes();var a=t._Helpers.findKeyInObject(n,r);a&&(r=a);var o=n[r]?n[r].toString():null;delete n[r],i&&i[e]&&(i[e].ua=n,t._Persistence.savePersistence(i,e)),s.sendUserAttributeChangeEvent(r,null,o,!1,!0,this),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),t._Forwarders.handleForwarderUserAttributes("removeUserAttribute",r,null);}},/**
|
|
846
849
|
* Sets a list of user attributes
|
|
847
850
|
* @method setUserAttributeList
|
|
848
851
|
* @param {String} key
|
|
849
852
|
* @param {Array} value an array of values
|
|
850
|
-
*/
|
|
853
|
+
*/ // https://go.mparticle.com/work/SQDSDKS-6373
|
|
854
|
+
setUserAttributeList:function setUserAttributeList(r,n){if(t._SessionManager.resetSessionTimer(),!t._Helpers.Validators.isValidKeyValue(r))return void t.Logger.error(Messages$2.ErrorMessages.BadKey);if(!Array.isArray(n))return void t.Logger.error("The value you passed in to setUserAttributeList must be an array. You passed in a "+("undefined"==typeof value?"undefined":_typeof(value)));var a=n.slice();if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.SetUserAttributeList,JSON.stringify({key:r,value:a}));else {var o,d,g,l=this.getAllUserAttributes(),u=t._Helpers.findKeyInObject(l,r);// If the new attributeList length is different than the previous, then there is a change event.
|
|
851
855
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
852
856
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
853
|
-
if(
|
|
857
|
+
if(u?(d=!1,o=l[u],delete l[u]):d=!0,l[r]=a,t._Store.setUserAttributes(e,l),!o||!Array.isArray(o))g=!0;else if(n.length!==o.length)g=!0;else for(var p=0;p<n.length;p++)if(o[p]!==n[p]){g=!0;break}g&&s.sendUserAttributeChangeEvent(r,n,o,d,!1,this),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),t._Forwarders.handleForwarderUserAttributes("setUserAttribute",r,a);}},/**
|
|
854
858
|
* Removes all user attributes
|
|
855
859
|
* @method removeAllUserAttributes
|
|
856
860
|
*/removeAllUserAttributes:function removeAllUserAttributes(){var e;if(t._SessionManager.resetSessionTimer(),t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveAllUserAttributes);else if(e=this.getAllUserAttributes(),t._Forwarders.initForwarders(s.IdentityAPI.getCurrentUser().getUserIdentities(),t._APIClient.prepareForwardingStats),e)for(var r in e)e.hasOwnProperty(r)&&t._Forwarders.handleForwarderUserAttributes("removeUserAttribute",r,null),this.removeUserAttribute(r);},/**
|
|
@@ -861,7 +865,7 @@ if(p?(g=!1,o=d[p],delete d[p]):g=!0,d[r]=u,a&&a[e]&&(a[e].ua=d,t._Persistence.sa
|
|
|
861
865
|
* Returns all user attributes
|
|
862
866
|
* @method getAllUserAttributes
|
|
863
867
|
* @return {Object} an object of all user attributes. Example: { attr1: 'value1', attr2: ['a', 'b', 'c'] }
|
|
864
|
-
*/getAllUserAttributes:function getAllUserAttributes(){var r={},
|
|
868
|
+
*/getAllUserAttributes:function getAllUserAttributes(){var r=t._Store.getUserAttributes,s={},i=r(e);if(i)for(var n in i)i.hasOwnProperty(n)&&(s[n]=Array.isArray(i[n])?i[n].slice():i[n]);return s},/**
|
|
865
869
|
* Returns the cart object for the current user
|
|
866
870
|
* @method getCart
|
|
867
871
|
* @return a cart object
|
|
@@ -891,7 +895,7 @@ return t._Helpers.getFeatureFlag(FeatureFlags$1.AudienceAPI)?void(null===s.audie
|
|
|
891
895
|
* @param {Object} product the product
|
|
892
896
|
* @param {Boolean} [logEvent] a boolean to log adding of the cart object. If blank, no logging occurs.
|
|
893
897
|
* @deprecated
|
|
894
|
-
*/remove:function remove(r,s){t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().remove() will be removed in future releases");var i,n,a=-1,
|
|
898
|
+
*/remove:function remove(r,s){t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().remove() will be removed in future releases");var i,n,a=-1,o=null;if(t._Store.webviewBridgeEnabled)t._NativeSdkHelpers.sendToNative(Constants.NativeSdkPaths.RemoveFromCart,JSON.stringify(r));else {t._SessionManager.resetSessionTimer(),n=t._Persistence.getUserProductsFromLS(e),n&&(n.forEach(function(e,t){e.Sku===r.Sku&&(a=t,o=e);}),-1<a&&(n.splice(a,1),!0===s&&t._Events.logProductActionEvent(Types.ProductActionType.RemoveFromCart,o)));i=t._Persistence.getAllUserProductsFromLS(),i[e].cp=n,t._Persistence.setCartProducts(i);}},/**
|
|
895
899
|
* Clears the user's cart
|
|
896
900
|
* @method clear
|
|
897
901
|
* @deprecated
|
|
@@ -900,16 +904,16 @@ return t._Helpers.getFeatureFlag(FeatureFlags$1.AudienceAPI)?void(null===s.audie
|
|
|
900
904
|
* @method getCartProducts
|
|
901
905
|
* @return {Array} array of cart products
|
|
902
906
|
* @deprecated
|
|
903
|
-
*/getCartProducts:function getCartProducts(){return t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().getCartProducts() will be removed in future releases"),t._Persistence.getCartProducts(e)}}},this.parseIdentityResponse=function(r,i,a,d,
|
|
904
|
-
n.sendUserIdentityChangeEvent(
|
|
907
|
+
*/getCartProducts:function getCartProducts(){return t.Logger.warning("Deprecated function Identity.getCurrentUser().getCart().getCartProducts() will be removed in future releases"),t._Persistence.getCartProducts(e)}}},this.parseIdentityResponse=function(r,i,a,o,d,g,l){var u,p,y,c=t.Identity.getUser(i),I=c?c.getMPID():null,_=c?c.getUserIdentities().userIdentities:{},v={};t._Store.identityCallInFlight=!1;try{var m;if(t.Logger.verbose("Parsing \""+d+"\" identity response from server"),p=r.responseText?JSON.parse(r.responseText):null,t._Store.isLoggedIn=(null===(m=p)||void 0===m?void 0:m.is_logged_in)||!1,hasMPIDChanged(c,p)&&(t._Store.mpid=p.mpid,c&&t._Persistence.setLastSeenTime(i),u=!t._Persistence.getFirstSeenTime(p.mpid),t._Persistence.setFirstSeenTime(p.mpid)),200===r.status){s(CacheIdentity)&&cacheOrClearIdCache(d,g,n.idCache,r,l);var S=n.IdentityAPI.getUser(p.mpid),b=S?S.getUserIdentities().userIdentities:{};d===Modify$1?(v=t._Identity.IdentityRequest.combineUserIdentities(_,o.userIdentities),t._Store.setUserIdentities(i,v)):(d===Identify&&c&&p.mpid===I&&t._Persistence.setFirstSeenTime(p.mpid),t._Store.addMpidToSessionHistory(p.mpid,i),t._CookieSyncManager.attemptCookieSync(i,p.mpid,u),t._Persistence.swapCurrentUser(i,p.mpid,t._Store.currentSessionMPIDs),o&&!isEmpty(o.userIdentities)&&(v=n.IdentityRequest.combineUserIdentities(b,o.userIdentities)),t._Store.setUserIdentities(p.mpid,v),t._Persistence.update(),t._Store.syncPersistenceData(),t._Persistence.findPrevCookiesBasedOnUI(o),t._Store.context=p.context||t._Store.context),y=t.Identity.getCurrentUser(),tryOnUserAlias(c,y,o,t.Logger);var A=t._Persistence.getPersistence();y&&(t._Persistence.storeDataInMemory(A,y.getMPID()),n.reinitForwardersOnUserChange(c,y),n.setForwarderCallbacks(y,d));var P=getNewIdentitiesByName(v),U=d===Modify$1?_:b;// https://go.mparticle.com/work/SQDSDKS-6501
|
|
908
|
+
n.sendUserIdentityChangeEvent(P,d,p.mpid,U);}if(a){var C=0===r.status?HTTPCodes$2.noHttpCoverage:r.status;t._Helpers.invokeCallback(a,C,p||null,y);}else p&&!isEmpty(p.errors)&&// https://go.mparticle.com/work/SQDSDKS-6500
|
|
905
909
|
t.Logger.error("Received HTTP response code of "+r.status+" - "+p.errors[0].message);t.Logger.verbose("Successfully parsed Identity Response"),t._APIClient.processQueuedEvents();}catch(s){a&&t._Helpers.invokeCallback(a,r.status,p||null),t.Logger.error("Error parsing JSON response from Identity server: "+s);}},this.sendUserIdentityChangeEvent=function(e,r,s,i){if(s||r===Modify$1)// https://go.mparticle.com/work/SQDSDKS-6501
|
|
906
910
|
{// https://go.mparticle.com/work/SQDSDKS-6354
|
|
907
|
-
var a=this.IdentityAPI.getUser(s);for(var
|
|
908
|
-
if(i[
|
|
911
|
+
var a=this.IdentityAPI.getUser(s);for(var o in e)// Verifies a change actually happened
|
|
912
|
+
if(i[o]!==e[o]){// If a new identity type was introduced when the identity changes
|
|
909
913
|
// we need to notify the server so that the user profile is updated in
|
|
910
914
|
// the mParticle UI.
|
|
911
|
-
var
|
|
912
|
-
return a=t._ServerModel.createEventObject({messageType:Types.MessageType.UserIdentityChange,userIdentityChanges:{New:{IdentityType:e,Identity:r,CreatedThisBatch:i},Old:{IdentityType:e,Identity:s,CreatedThisBatch:!1}},userInMemory:n}),a},this.sendUserAttributeChangeEvent=function(e,r,s,i,a,
|
|
915
|
+
var d=!i[o],g=n.createUserIdentityChange(o,e[o],i[o],d,a);t._APIClient.sendEventToServer(g);}}},this.createUserIdentityChange=function(e,r,s,i,n){var a;// https://go.mparticle.com/work/SQDSDKS-6439
|
|
916
|
+
return a=t._ServerModel.createEventObject({messageType:Types.MessageType.UserIdentityChange,userIdentityChanges:{New:{IdentityType:e,Identity:r,CreatedThisBatch:i},Old:{IdentityType:e,Identity:s,CreatedThisBatch:!1}},userInMemory:n}),a},this.sendUserAttributeChangeEvent=function(e,r,s,i,a,o){var d=n.createUserAttributeChange(e,r,s,i,a,o);d&&t._APIClient.sendEventToServer(d);},this.createUserAttributeChange=function(e,r,s,i,n,a){"undefined"==typeof s&&(s=null);var o;return r!==s&&(o=t._ServerModel.createEventObject({messageType:Types.MessageType.UserAttributeChange,userAttributeChanges:{UserAttributeName:e,New:r,Old:s,Deleted:n,IsNewAttribute:i}},a)),o},this.reinitForwardersOnUserChange=function(e,r){hasMPIDAndUserLoginChanged(e,r)&&t._Forwarders.initForwarders(r.getUserIdentities().userIdentities,t._APIClient.prepareForwardingStats);},this.setForwarderCallbacks=function(e,r){// https://go.mparticle.com/work/SQDSDKS-6036
|
|
913
917
|
t._Forwarders.setForwarderUserIdentities(e.getUserIdentities().userIdentities),t._Forwarders.setForwarderOnIdentityComplete(e,r),t._Forwarders.setForwarderOnUserIdentified(e);};}// https://go.mparticle.com/work/SQDSDKS-6359
|
|
914
918
|
function tryOnUserAlias(e,t,r,s){if(r&&r.onUserAlias&&isFunction(r.onUserAlias))try{s.warning(generateDeprecationMessage("onUserAlias")),r.onUserAlias(e,t);}catch(t){s.error("There was an error with your onUserAlias function - "+t);}}
|
|
915
919
|
|
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.26.
|
|
396
|
+
var version = "2.26.10";
|
|
397
397
|
|
|
398
398
|
var Constants = {
|
|
399
399
|
sdkVersion: version,
|
|
@@ -4147,6 +4147,18 @@ var mParticle = (function () {
|
|
|
4147
4147
|
var persistenceData = mpInstance._Persistence.getPersistence();
|
|
4148
4148
|
_this.persistenceData = mpInstance._Helpers.extend({}, _this.persistenceData, persistenceData);
|
|
4149
4149
|
};
|
|
4150
|
+
this.getUserAttributes = function (mpid) {
|
|
4151
|
+
return _this._getFromPersistence(mpid, 'ua') || {};
|
|
4152
|
+
};
|
|
4153
|
+
this.setUserAttributes = function (mpid, userAttributes) {
|
|
4154
|
+
return _this._setPersistence(mpid, 'ua', userAttributes);
|
|
4155
|
+
};
|
|
4156
|
+
this.getUserIdentities = function (mpid) {
|
|
4157
|
+
return _this._getFromPersistence(mpid, 'ui') || {};
|
|
4158
|
+
};
|
|
4159
|
+
this.setUserIdentities = function (mpid, userIdentities) {
|
|
4160
|
+
_this._setPersistence(mpid, 'ui', userIdentities);
|
|
4161
|
+
};
|
|
4150
4162
|
this.addMpidToSessionHistory = function (mpid, previousMPID) {
|
|
4151
4163
|
var indexOfMPID = _this.currentSessionMPIDs.indexOf(mpid);
|
|
4152
4164
|
if (mpid && previousMPID !== mpid && indexOfMPID < 0) {
|
|
@@ -4937,22 +4949,6 @@ var mParticle = (function () {
|
|
|
4937
4949
|
}
|
|
4938
4950
|
return '';
|
|
4939
4951
|
};
|
|
4940
|
-
this.getUserIdentities = function (mpid) {
|
|
4941
|
-
var persistence = self.getPersistence();
|
|
4942
|
-
if (persistence && persistence[mpid] && persistence[mpid].ui) {
|
|
4943
|
-
return persistence[mpid].ui;
|
|
4944
|
-
} else {
|
|
4945
|
-
return {};
|
|
4946
|
-
}
|
|
4947
|
-
};
|
|
4948
|
-
this.getAllUserAttributes = function (mpid) {
|
|
4949
|
-
var persistence = self.getPersistence();
|
|
4950
|
-
if (persistence && persistence[mpid] && persistence[mpid].ua) {
|
|
4951
|
-
return persistence[mpid].ua;
|
|
4952
|
-
} else {
|
|
4953
|
-
return {};
|
|
4954
|
-
}
|
|
4955
|
-
};
|
|
4956
4952
|
this.getCartProducts = function (mpid) {
|
|
4957
4953
|
var allCartProducts,
|
|
4958
4954
|
cartProductsString = localStorage.getItem(mpInstance._Store.prodStorageName);
|
|
@@ -4974,39 +4970,6 @@ var mParticle = (function () {
|
|
|
4974
4970
|
mpInstance.Logger.error('Error with setting products on localStorage.');
|
|
4975
4971
|
}
|
|
4976
4972
|
};
|
|
4977
|
-
this.saveUserIdentitiesToPersistence = function (mpid, userIdentities) {
|
|
4978
|
-
if (userIdentities) {
|
|
4979
|
-
var persistence = self.getPersistence();
|
|
4980
|
-
if (persistence) {
|
|
4981
|
-
if (persistence[mpid]) {
|
|
4982
|
-
persistence[mpid].ui = userIdentities;
|
|
4983
|
-
} else {
|
|
4984
|
-
persistence[mpid] = {
|
|
4985
|
-
ui: userIdentities
|
|
4986
|
-
};
|
|
4987
|
-
}
|
|
4988
|
-
self.savePersistence(persistence);
|
|
4989
|
-
}
|
|
4990
|
-
}
|
|
4991
|
-
};
|
|
4992
|
-
this.saveUserAttributesToPersistence = function (mpid, userAttributes) {
|
|
4993
|
-
var persistence = self.getPersistence();
|
|
4994
|
-
if (userAttributes) {
|
|
4995
|
-
if (persistence) {
|
|
4996
|
-
if (persistence[mpid]) {
|
|
4997
|
-
// TODO: Investigate why setting this to UI still shows up as UA
|
|
4998
|
-
// when running `mParticle.getInstance()._Persistence.getLocalStorage()`
|
|
4999
|
-
// https://go.mparticle.com/work/SQDSDKS-5195
|
|
5000
|
-
persistence[mpid].ui = userAttributes;
|
|
5001
|
-
} else {
|
|
5002
|
-
persistence[mpid] = {
|
|
5003
|
-
ui: userAttributes
|
|
5004
|
-
};
|
|
5005
|
-
}
|
|
5006
|
-
}
|
|
5007
|
-
self.savePersistence(persistence);
|
|
5008
|
-
}
|
|
5009
|
-
};
|
|
5010
4973
|
this.saveUserCookieSyncDatesToPersistence = function (mpid, csd) {
|
|
5011
4974
|
if (csd) {
|
|
5012
4975
|
var persistence = self.getPersistence();
|
|
@@ -5440,7 +5403,7 @@ var mParticle = (function () {
|
|
|
5440
5403
|
return {
|
|
5441
5404
|
getUserIdentities: function getUserIdentities() {
|
|
5442
5405
|
var currentUserIdentities = {};
|
|
5443
|
-
var identities = mpInstance.
|
|
5406
|
+
var identities = mpInstance._Store.getUserIdentities(mpid);
|
|
5444
5407
|
for (var identityType in identities) {
|
|
5445
5408
|
if (identities.hasOwnProperty(identityType)) {
|
|
5446
5409
|
var identityName = Types.IdentityType.getIdentityName(mpInstance._Helpers.parseNumber(identityType));
|
|
@@ -5473,7 +5436,7 @@ var mParticle = (function () {
|
|
|
5473
5436
|
},
|
|
5474
5437
|
getAllUserAttributes: function getAllUserAttributes() {
|
|
5475
5438
|
var userAttributesCopy = {};
|
|
5476
|
-
var userAttributes = mpInstance.
|
|
5439
|
+
var userAttributes = mpInstance._Store.getUserAttributes(mpid);
|
|
5477
5440
|
if (userAttributes) {
|
|
5478
5441
|
for (var prop in userAttributes) {
|
|
5479
5442
|
if (userAttributes.hasOwnProperty(prop)) {
|
|
@@ -7006,7 +6969,7 @@ var mParticle = (function () {
|
|
|
7006
6969
|
*/
|
|
7007
6970
|
getUserIdentities: function getUserIdentities() {
|
|
7008
6971
|
var currentUserIdentities = {};
|
|
7009
|
-
var identities = mpInstance.
|
|
6972
|
+
var identities = mpInstance._Store.getUserIdentities(mpid);
|
|
7010
6973
|
for (var identityType in identities) {
|
|
7011
6974
|
if (identities.hasOwnProperty(identityType)) {
|
|
7012
6975
|
currentUserIdentities[Types.IdentityType.getIdentityName(mpInstance._Helpers.parseNumber(identityType))] = identities[identityType];
|
|
@@ -7054,8 +7017,9 @@ var mParticle = (function () {
|
|
|
7054
7017
|
* @param {String} key
|
|
7055
7018
|
* @param {String} value
|
|
7056
7019
|
*/
|
|
7020
|
+
// https://go.mparticle.com/work/SQDSDKS-4576
|
|
7021
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
7057
7022
|
setUserAttribute: function setUserAttribute(key, newValue) {
|
|
7058
|
-
var cookies, userAttributes, previousUserAttributeValue, isNewAttribute;
|
|
7059
7023
|
mpInstance._SessionManager.resetSessionTimer();
|
|
7060
7024
|
if (mpInstance._Helpers.canLog()) {
|
|
7061
7025
|
if (!mpInstance._Helpers.Validators.isValidAttributeValue(newValue)) {
|
|
@@ -7072,8 +7036,9 @@ var mParticle = (function () {
|
|
|
7072
7036
|
value: newValue
|
|
7073
7037
|
}));
|
|
7074
7038
|
} else {
|
|
7075
|
-
|
|
7076
|
-
|
|
7039
|
+
var userAttributes = this.getAllUserAttributes();
|
|
7040
|
+
var previousUserAttributeValue;
|
|
7041
|
+
var isNewAttribute;
|
|
7077
7042
|
var existingProp = mpInstance._Helpers.findKeyInObject(userAttributes, key);
|
|
7078
7043
|
if (existingProp) {
|
|
7079
7044
|
isNewAttribute = false;
|
|
@@ -7083,10 +7048,7 @@ var mParticle = (function () {
|
|
|
7083
7048
|
isNewAttribute = true;
|
|
7084
7049
|
}
|
|
7085
7050
|
userAttributes[key] = newValue;
|
|
7086
|
-
|
|
7087
|
-
cookies[mpid].ua = userAttributes;
|
|
7088
|
-
mpInstance._Persistence.savePersistence(cookies, mpid);
|
|
7089
|
-
}
|
|
7051
|
+
mpInstance._Store.setUserAttributes(mpid, userAttributes);
|
|
7090
7052
|
self.sendUserAttributeChangeEvent(key, newValue, previousUserAttributeValue, isNewAttribute, false, this);
|
|
7091
7053
|
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities(), mpInstance._APIClient.prepareForwardingStats);
|
|
7092
7054
|
mpInstance._Forwarders.handleForwarderUserAttributes('setUserAttribute', key, newValue);
|
|
@@ -7098,6 +7060,7 @@ var mParticle = (function () {
|
|
|
7098
7060
|
* @method setUserAttributes
|
|
7099
7061
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
7100
7062
|
*/
|
|
7063
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
7101
7064
|
setUserAttributes: function setUserAttributes(userAttributes) {
|
|
7102
7065
|
mpInstance._SessionManager.resetSessionTimer();
|
|
7103
7066
|
if (isObject(userAttributes)) {
|
|
@@ -7153,8 +7116,8 @@ var mParticle = (function () {
|
|
|
7153
7116
|
* @param {String} key
|
|
7154
7117
|
* @param {Array} value an array of values
|
|
7155
7118
|
*/
|
|
7119
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
7156
7120
|
setUserAttributeList: function setUserAttributeList(key, newValue) {
|
|
7157
|
-
var cookies, userAttributes, previousUserAttributeValue, isNewAttribute, userAttributeChange;
|
|
7158
7121
|
mpInstance._SessionManager.resetSessionTimer();
|
|
7159
7122
|
if (!mpInstance._Helpers.Validators.isValidKeyValue(key)) {
|
|
7160
7123
|
mpInstance.Logger.error(Messages$2.ErrorMessages.BadKey);
|
|
@@ -7171,8 +7134,10 @@ var mParticle = (function () {
|
|
|
7171
7134
|
value: arrayCopy
|
|
7172
7135
|
}));
|
|
7173
7136
|
} else {
|
|
7174
|
-
|
|
7175
|
-
|
|
7137
|
+
var userAttributes = this.getAllUserAttributes();
|
|
7138
|
+
var previousUserAttributeValue;
|
|
7139
|
+
var isNewAttribute;
|
|
7140
|
+
var userAttributeChange;
|
|
7176
7141
|
var existingProp = mpInstance._Helpers.findKeyInObject(userAttributes, key);
|
|
7177
7142
|
if (existingProp) {
|
|
7178
7143
|
isNewAttribute = false;
|
|
@@ -7182,12 +7147,9 @@ var mParticle = (function () {
|
|
|
7182
7147
|
isNewAttribute = true;
|
|
7183
7148
|
}
|
|
7184
7149
|
userAttributes[key] = arrayCopy;
|
|
7185
|
-
|
|
7186
|
-
cookies[mpid].ua = userAttributes;
|
|
7187
|
-
mpInstance._Persistence.savePersistence(cookies, mpid);
|
|
7188
|
-
}
|
|
7150
|
+
mpInstance._Store.setUserAttributes(mpid, userAttributes);
|
|
7189
7151
|
|
|
7190
|
-
// If the new attributeList length is different previous, then there is a change event.
|
|
7152
|
+
// If the new attributeList length is different than the previous, then there is a change event.
|
|
7191
7153
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
7192
7154
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
7193
7155
|
if (!previousUserAttributeValue || !Array.isArray(previousUserAttributeValue)) {
|
|
@@ -7253,8 +7215,9 @@ var mParticle = (function () {
|
|
|
7253
7215
|
* @return {Object} an object of all user attributes. Example: { attr1: 'value1', attr2: ['a', 'b', 'c'] }
|
|
7254
7216
|
*/
|
|
7255
7217
|
getAllUserAttributes: function getAllUserAttributes() {
|
|
7218
|
+
var getUserAttributes = mpInstance._Store.getUserAttributes;
|
|
7256
7219
|
var userAttributesCopy = {};
|
|
7257
|
-
var userAttributes =
|
|
7220
|
+
var userAttributes = getUserAttributes(mpid);
|
|
7258
7221
|
if (userAttributes) {
|
|
7259
7222
|
for (var prop in userAttributes) {
|
|
7260
7223
|
if (userAttributes.hasOwnProperty(prop)) {
|
|
@@ -7479,7 +7442,7 @@ var mParticle = (function () {
|
|
|
7479
7442
|
var incomingUIByName = incomingUser ? incomingUser.getUserIdentities().userIdentities : {};
|
|
7480
7443
|
if (method === Modify$1) {
|
|
7481
7444
|
newIdentitiesByType = mpInstance._Identity.IdentityRequest.combineUserIdentities(previousUIByName, identityApiData.userIdentities);
|
|
7482
|
-
mpInstance.
|
|
7445
|
+
mpInstance._Store.setUserIdentities(previousMPID, newIdentitiesByType);
|
|
7483
7446
|
} else {
|
|
7484
7447
|
// https://go.mparticle.com/work/SQDSDKS-6356
|
|
7485
7448
|
//this covers an edge case where, users stored before "firstSeenTime" was introduced
|
|
@@ -7497,7 +7460,7 @@ var mParticle = (function () {
|
|
|
7497
7460
|
}
|
|
7498
7461
|
|
|
7499
7462
|
// https://go.mparticle.com/work/SQDSDKS-6041
|
|
7500
|
-
mpInstance.
|
|
7463
|
+
mpInstance._Store.setUserIdentities(identityApiResult.mpid, newIdentitiesByType);
|
|
7501
7464
|
mpInstance._Persistence.update();
|
|
7502
7465
|
mpInstance._Store.syncPersistenceData();
|
|
7503
7466
|
mpInstance._Persistence.findPrevCookiesBasedOnUI(identityApiData);
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ export default function filteredMparticleUser(
|
|
|
10
10
|
return {
|
|
11
11
|
getUserIdentities: function() {
|
|
12
12
|
var currentUserIdentities = {};
|
|
13
|
-
var identities = mpInstance.
|
|
13
|
+
var identities = mpInstance._Store.getUserIdentities(mpid);
|
|
14
14
|
|
|
15
15
|
for (var identityType in identities) {
|
|
16
16
|
if (identities.hasOwnProperty(identityType)) {
|
|
@@ -68,9 +68,7 @@ export default function filteredMparticleUser(
|
|
|
68
68
|
},
|
|
69
69
|
getAllUserAttributes: function() {
|
|
70
70
|
var userAttributesCopy = {};
|
|
71
|
-
var userAttributes = mpInstance.
|
|
72
|
-
mpid
|
|
73
|
-
);
|
|
71
|
+
var userAttributes = mpInstance._Store.getUserAttributes(mpid);
|
|
74
72
|
|
|
75
73
|
if (userAttributes) {
|
|
76
74
|
for (var prop in userAttributes) {
|
|
@@ -62,6 +62,10 @@ export interface IUserIdentityChangeEvent extends BaseEvent {
|
|
|
62
62
|
userIdentityChanges: ISDKUserIdentityChanges;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
export interface ISDKUserAttributes {
|
|
66
|
+
[key: string]: string | string[] | null;
|
|
67
|
+
}
|
|
68
|
+
|
|
65
69
|
export interface ISDKUserAttributeChangeData {
|
|
66
70
|
UserAttributeName: string;
|
|
67
71
|
New: string;
|
package/src/identity.js
CHANGED
|
@@ -806,11 +806,8 @@ export default function Identity(mpInstance) {
|
|
|
806
806
|
* @return {Object} an object with userIdentities as its key
|
|
807
807
|
*/
|
|
808
808
|
getUserIdentities: function() {
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
var identities = mpInstance._Persistence.getUserIdentities(
|
|
812
|
-
mpid
|
|
813
|
-
);
|
|
809
|
+
const currentUserIdentities = {};
|
|
810
|
+
const identities = mpInstance._Store.getUserIdentities(mpid);
|
|
814
811
|
|
|
815
812
|
for (var identityType in identities) {
|
|
816
813
|
if (identities.hasOwnProperty(identityType)) {
|
|
@@ -866,12 +863,9 @@ export default function Identity(mpInstance) {
|
|
|
866
863
|
* @param {String} key
|
|
867
864
|
* @param {String} value
|
|
868
865
|
*/
|
|
866
|
+
// https://go.mparticle.com/work/SQDSDKS-4576
|
|
867
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
869
868
|
setUserAttribute: function(key, newValue) {
|
|
870
|
-
var cookies,
|
|
871
|
-
userAttributes,
|
|
872
|
-
previousUserAttributeValue,
|
|
873
|
-
isNewAttribute;
|
|
874
|
-
|
|
875
869
|
mpInstance._SessionManager.resetSessionTimer();
|
|
876
870
|
|
|
877
871
|
if (mpInstance._Helpers.canLog()) {
|
|
@@ -896,11 +890,11 @@ export default function Identity(mpInstance) {
|
|
|
896
890
|
JSON.stringify({ key: key, value: newValue })
|
|
897
891
|
);
|
|
898
892
|
} else {
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
893
|
+
const userAttributes = this.getAllUserAttributes();
|
|
894
|
+
let previousUserAttributeValue;
|
|
895
|
+
let isNewAttribute;
|
|
902
896
|
|
|
903
|
-
|
|
897
|
+
const existingProp = mpInstance._Helpers.findKeyInObject(
|
|
904
898
|
userAttributes,
|
|
905
899
|
key
|
|
906
900
|
);
|
|
@@ -915,13 +909,10 @@ export default function Identity(mpInstance) {
|
|
|
915
909
|
}
|
|
916
910
|
|
|
917
911
|
userAttributes[key] = newValue;
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
mpid
|
|
923
|
-
);
|
|
924
|
-
}
|
|
912
|
+
mpInstance._Store.setUserAttributes(
|
|
913
|
+
mpid,
|
|
914
|
+
userAttributes
|
|
915
|
+
);
|
|
925
916
|
|
|
926
917
|
self.sendUserAttributeChangeEvent(
|
|
927
918
|
key,
|
|
@@ -949,6 +940,7 @@ export default function Identity(mpInstance) {
|
|
|
949
940
|
* @method setUserAttributes
|
|
950
941
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
951
942
|
*/
|
|
943
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
952
944
|
setUserAttributes: function(userAttributes) {
|
|
953
945
|
mpInstance._SessionManager.resetSessionTimer();
|
|
954
946
|
if (isObject(userAttributes)) {
|
|
@@ -1036,13 +1028,8 @@ export default function Identity(mpInstance) {
|
|
|
1036
1028
|
* @param {String} key
|
|
1037
1029
|
* @param {Array} value an array of values
|
|
1038
1030
|
*/
|
|
1031
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
1039
1032
|
setUserAttributeList: function(key, newValue) {
|
|
1040
|
-
var cookies,
|
|
1041
|
-
userAttributes,
|
|
1042
|
-
previousUserAttributeValue,
|
|
1043
|
-
isNewAttribute,
|
|
1044
|
-
userAttributeChange;
|
|
1045
|
-
|
|
1046
1033
|
mpInstance._SessionManager.resetSessionTimer();
|
|
1047
1034
|
|
|
1048
1035
|
if (!mpInstance._Helpers.Validators.isValidKeyValue(key)) {
|
|
@@ -1058,7 +1045,7 @@ export default function Identity(mpInstance) {
|
|
|
1058
1045
|
return;
|
|
1059
1046
|
}
|
|
1060
1047
|
|
|
1061
|
-
|
|
1048
|
+
const arrayCopy = newValue.slice();
|
|
1062
1049
|
|
|
1063
1050
|
if (mpInstance._Store.webviewBridgeEnabled) {
|
|
1064
1051
|
mpInstance._NativeSdkHelpers.sendToNative(
|
|
@@ -1066,11 +1053,12 @@ export default function Identity(mpInstance) {
|
|
|
1066
1053
|
JSON.stringify({ key: key, value: arrayCopy })
|
|
1067
1054
|
);
|
|
1068
1055
|
} else {
|
|
1069
|
-
|
|
1056
|
+
const userAttributes = this.getAllUserAttributes();
|
|
1057
|
+
let previousUserAttributeValue;
|
|
1058
|
+
let isNewAttribute;
|
|
1059
|
+
let userAttributeChange;
|
|
1070
1060
|
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
var existingProp = mpInstance._Helpers.findKeyInObject(
|
|
1061
|
+
const existingProp = mpInstance._Helpers.findKeyInObject(
|
|
1074
1062
|
userAttributes,
|
|
1075
1063
|
key
|
|
1076
1064
|
);
|
|
@@ -1085,12 +1073,9 @@ export default function Identity(mpInstance) {
|
|
|
1085
1073
|
}
|
|
1086
1074
|
|
|
1087
1075
|
userAttributes[key] = arrayCopy;
|
|
1088
|
-
|
|
1089
|
-
cookies[mpid].ua = userAttributes;
|
|
1090
|
-
mpInstance._Persistence.savePersistence(cookies, mpid);
|
|
1091
|
-
}
|
|
1076
|
+
mpInstance._Store.setUserAttributes(mpid, userAttributes);
|
|
1092
1077
|
|
|
1093
|
-
// If the new attributeList length is different previous, then there is a change event.
|
|
1078
|
+
// If the new attributeList length is different than the previous, then there is a change event.
|
|
1094
1079
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
1095
1080
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
1096
1081
|
if (
|
|
@@ -1194,13 +1179,12 @@ export default function Identity(mpInstance) {
|
|
|
1194
1179
|
* @return {Object} an object of all user attributes. Example: { attr1: 'value1', attr2: ['a', 'b', 'c'] }
|
|
1195
1180
|
*/
|
|
1196
1181
|
getAllUserAttributes: function() {
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
);
|
|
1182
|
+
const { getUserAttributes } = mpInstance._Store;
|
|
1183
|
+
const userAttributesCopy = {};
|
|
1184
|
+
const userAttributes = getUserAttributes(mpid);
|
|
1201
1185
|
|
|
1202
1186
|
if (userAttributes) {
|
|
1203
|
-
for (
|
|
1187
|
+
for (const prop in userAttributes) {
|
|
1204
1188
|
if (userAttributes.hasOwnProperty(prop)) {
|
|
1205
1189
|
if (Array.isArray(userAttributes[prop])) {
|
|
1206
1190
|
userAttributesCopy[prop] = userAttributes[
|
|
@@ -1554,7 +1538,7 @@ export default function Identity(mpInstance) {
|
|
|
1554
1538
|
identityApiData.userIdentities
|
|
1555
1539
|
);
|
|
1556
1540
|
|
|
1557
|
-
mpInstance.
|
|
1541
|
+
mpInstance._Store.setUserIdentities(
|
|
1558
1542
|
previousMPID,
|
|
1559
1543
|
newIdentitiesByType
|
|
1560
1544
|
);
|
|
@@ -1602,7 +1586,7 @@ export default function Identity(mpInstance) {
|
|
|
1602
1586
|
}
|
|
1603
1587
|
|
|
1604
1588
|
// https://go.mparticle.com/work/SQDSDKS-6041
|
|
1605
|
-
mpInstance.
|
|
1589
|
+
mpInstance._Store.setUserIdentities(
|
|
1606
1590
|
identityApiResult.mpid,
|
|
1607
1591
|
newIdentitiesByType
|
|
1608
1592
|
);
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Context } from '@mparticle/event-models';
|
|
2
2
|
import {
|
|
3
|
-
AllUserAttributes,
|
|
4
|
-
ConsentState,
|
|
5
3
|
IdentityApiData,
|
|
6
4
|
MPID,
|
|
7
5
|
Product,
|
|
@@ -121,18 +119,8 @@ export interface IPersistence {
|
|
|
121
119
|
decodePersistence(persistenceString: string): string;
|
|
122
120
|
getCookieDomain(): string;
|
|
123
121
|
getDomain(doc: string, locationHostname: string): string;
|
|
124
|
-
getUserIdentities(mpid: MPID): UserIdentities;
|
|
125
|
-
getAllUserAttributes(mpid: MPID): AllUserAttributes;
|
|
126
122
|
getCartProducts(mpid: MPID): Product[];
|
|
127
123
|
setCartProducts(allProducts: Product[]): void;
|
|
128
|
-
saveUserIdentitiesToPersistence(
|
|
129
|
-
mpid: MPID,
|
|
130
|
-
userIdentities: UserIdentities
|
|
131
|
-
): void;
|
|
132
|
-
saveUserAttributesToPersistence(
|
|
133
|
-
mpid: MPID,
|
|
134
|
-
userAttributes: UserAttributes
|
|
135
|
-
): void;
|
|
136
124
|
saveUserCookieSyncDatesToPersistence(mpid: MPID, csd: CookieSyncDate): void;
|
|
137
125
|
savePersistence(persistance: IPersistenceMinified): void;
|
|
138
126
|
getPersistence(): IPersistenceMinified;
|
package/src/persistence.js
CHANGED
|
@@ -882,26 +882,6 @@ export default function _Persistence(mpInstance) {
|
|
|
882
882
|
return '';
|
|
883
883
|
};
|
|
884
884
|
|
|
885
|
-
this.getUserIdentities = function(mpid) {
|
|
886
|
-
var persistence = self.getPersistence();
|
|
887
|
-
|
|
888
|
-
if (persistence && persistence[mpid] && persistence[mpid].ui) {
|
|
889
|
-
return persistence[mpid].ui;
|
|
890
|
-
} else {
|
|
891
|
-
return {};
|
|
892
|
-
}
|
|
893
|
-
};
|
|
894
|
-
|
|
895
|
-
this.getAllUserAttributes = function(mpid) {
|
|
896
|
-
var persistence = self.getPersistence();
|
|
897
|
-
|
|
898
|
-
if (persistence && persistence[mpid] && persistence[mpid].ua) {
|
|
899
|
-
return persistence[mpid].ua;
|
|
900
|
-
} else {
|
|
901
|
-
return {};
|
|
902
|
-
}
|
|
903
|
-
};
|
|
904
|
-
|
|
905
885
|
this.getCartProducts = function(mpid) {
|
|
906
886
|
var allCartProducts,
|
|
907
887
|
cartProductsString = localStorage.getItem(
|
|
@@ -938,41 +918,6 @@ export default function _Persistence(mpInstance) {
|
|
|
938
918
|
}
|
|
939
919
|
};
|
|
940
920
|
|
|
941
|
-
this.saveUserIdentitiesToPersistence = function(mpid, userIdentities) {
|
|
942
|
-
if (userIdentities) {
|
|
943
|
-
var persistence = self.getPersistence();
|
|
944
|
-
if (persistence) {
|
|
945
|
-
if (persistence[mpid]) {
|
|
946
|
-
persistence[mpid].ui = userIdentities;
|
|
947
|
-
} else {
|
|
948
|
-
persistence[mpid] = {
|
|
949
|
-
ui: userIdentities,
|
|
950
|
-
};
|
|
951
|
-
}
|
|
952
|
-
self.savePersistence(persistence);
|
|
953
|
-
}
|
|
954
|
-
}
|
|
955
|
-
};
|
|
956
|
-
|
|
957
|
-
this.saveUserAttributesToPersistence = function(mpid, userAttributes) {
|
|
958
|
-
var persistence = self.getPersistence();
|
|
959
|
-
if (userAttributes) {
|
|
960
|
-
if (persistence) {
|
|
961
|
-
if (persistence[mpid]) {
|
|
962
|
-
// TODO: Investigate why setting this to UI still shows up as UA
|
|
963
|
-
// when running `mParticle.getInstance()._Persistence.getLocalStorage()`
|
|
964
|
-
// https://go.mparticle.com/work/SQDSDKS-5195
|
|
965
|
-
persistence[mpid].ui = userAttributes;
|
|
966
|
-
} else {
|
|
967
|
-
persistence[mpid] = {
|
|
968
|
-
ui: userAttributes,
|
|
969
|
-
};
|
|
970
|
-
}
|
|
971
|
-
}
|
|
972
|
-
self.savePersistence(persistence);
|
|
973
|
-
}
|
|
974
|
-
};
|
|
975
|
-
|
|
976
921
|
this.saveUserCookieSyncDatesToPersistence = function(mpid, csd) {
|
|
977
922
|
if (csd) {
|
|
978
923
|
var persistence = self.getPersistence();
|
package/src/sdkRuntimeModels.ts
CHANGED
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
IMParticleUser,
|
|
24
24
|
ISDKUserIdentity,
|
|
25
25
|
IdentityCallback,
|
|
26
|
+
ISDKUserAttributes,
|
|
26
27
|
} from './identity-user-interfaces';
|
|
27
28
|
import { IIdentityType } from './types.interfaces';
|
|
28
29
|
|
|
@@ -34,10 +35,7 @@ export interface SDKEvent {
|
|
|
34
35
|
IsFirstRun: boolean;
|
|
35
36
|
EventName: string;
|
|
36
37
|
EventCategory: number;
|
|
37
|
-
|
|
38
|
-
// https://go.mparticle.com/work/SQDSDKS-5196
|
|
39
|
-
UserAttributes?: { [key: string]: string | string[] | null };
|
|
40
|
-
|
|
38
|
+
UserAttributes?: ISDKUserAttributes;
|
|
41
39
|
UserIdentities?: ISDKUserIdentity[];
|
|
42
40
|
SourceMessageId: string;
|
|
43
41
|
MPID: string;
|
package/src/store.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
IdentifyRequest,
|
|
6
6
|
SDKEventCustomFlags,
|
|
7
7
|
ConsentState,
|
|
8
|
+
UserIdentities,
|
|
8
9
|
} from '@mparticle/web-sdk';
|
|
9
10
|
import { IKitConfigs } from './configAPIClient';
|
|
10
11
|
import Constants from './constants';
|
|
@@ -31,7 +32,7 @@ import {
|
|
|
31
32
|
} from './utils';
|
|
32
33
|
import { IMinifiedConsentJSONObject, SDKConsentState } from './consent';
|
|
33
34
|
import { Kit, MPForwarder } from './forwarders.interfaces';
|
|
34
|
-
import { IdentityCallback } from './identity-user-interfaces';
|
|
35
|
+
import { IdentityCallback, UserAttributes } from './identity-user-interfaces';
|
|
35
36
|
import {
|
|
36
37
|
IGlobalStoreV2MinifiedKeys,
|
|
37
38
|
IPersistenceMinified,
|
|
@@ -195,6 +196,10 @@ export interface IStore {
|
|
|
195
196
|
setFirstSeenTime?(mpid: MPID, time?: number): void;
|
|
196
197
|
getLastSeenTime?(mpid: MPID): number;
|
|
197
198
|
setLastSeenTime?(mpid: MPID, time?: number): void;
|
|
199
|
+
getUserAttributes?(mpid: MPID): UserAttributes;
|
|
200
|
+
setUserAttributes?(mpid: MPID, attributes: UserAttributes): void;
|
|
201
|
+
getUserIdentities?(mpid: MPID): UserIdentities;
|
|
202
|
+
setUserIdentities?(mpid: MPID, userIdentities: UserIdentities): void;
|
|
198
203
|
|
|
199
204
|
addMpidToSessionHistory?(mpid: MPID, previousMpid?: MPID): void;
|
|
200
205
|
hasInvalidIdentifyRequest?: () => boolean;
|
|
@@ -528,15 +533,13 @@ export default function Store(
|
|
|
528
533
|
isEmpty(identifyRequest.userIdentities)) ||
|
|
529
534
|
!identifyRequest
|
|
530
535
|
);
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
|
|
536
|
+
};
|
|
534
537
|
|
|
535
538
|
this.getConsentState = (mpid: MPID): ConsentState => {
|
|
536
539
|
const {
|
|
537
540
|
fromMinifiedJsonObject,
|
|
538
541
|
} = mpInstance._Consent.ConsentSerialization;
|
|
539
|
-
|
|
542
|
+
|
|
540
543
|
const serializedConsentState = this._getFromPersistence<
|
|
541
544
|
IMinifiedConsentJSONObject
|
|
542
545
|
>(mpid, 'con');
|
|
@@ -617,6 +620,21 @@ export default function Store(
|
|
|
617
620
|
);
|
|
618
621
|
};
|
|
619
622
|
|
|
623
|
+
this.getUserAttributes = (mpid: MPID): UserAttributes =>
|
|
624
|
+
this._getFromPersistence(mpid, 'ua') || {};
|
|
625
|
+
|
|
626
|
+
this.setUserAttributes = (
|
|
627
|
+
mpid: MPID,
|
|
628
|
+
userAttributes: UserAttributes
|
|
629
|
+
): void => this._setPersistence(mpid, 'ua', userAttributes);
|
|
630
|
+
|
|
631
|
+
this.getUserIdentities = (mpid: MPID): UserIdentities =>
|
|
632
|
+
this._getFromPersistence(mpid, 'ui') || {};
|
|
633
|
+
|
|
634
|
+
this.setUserIdentities = (mpid: MPID, userIdentities: UserIdentities) => {
|
|
635
|
+
this._setPersistence(mpid, 'ui', userIdentities);
|
|
636
|
+
};
|
|
637
|
+
|
|
620
638
|
this.addMpidToSessionHistory = (mpid: MPID, previousMPID?: MPID): void => {
|
|
621
639
|
const indexOfMPID = this.currentSessionMPIDs.indexOf(mpid);
|
|
622
640
|
|