@mparticle/web-sdk 2.26.8 → 2.26.9
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 +15 -11
- package/dist/mparticle.esm.js +15 -11
- package/dist/mparticle.js +24 -44
- package/package.json +1 -1
- package/src/filteredMparticleUser.js +1 -3
- package/src/identity-user-interfaces.ts +4 -0
- package/src/identity.js +24 -37
- package/src/persistence.interfaces.ts +0 -6
- package/src/persistence.js +0 -29
- package/src/sdkRuntimeModels.ts +2 -4
- package/src/store.ts +11 -1
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.9";
|
|
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.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.getUserIdentities=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ui?b[a].ui:{}},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.getUserIdentities=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ui?b[a].ui:{}},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.saveUserIdentitiesToPersistence=function(a,b){if(b){var c=f.getPersistence();c&&(c[a]?c[a].ui=b:c[a]={ui:b},f.savePersistence(c));}},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:[]};}
|
|
@@ -641,7 +641,7 @@ return a.Logger.verbose(Messages$3.InformationMessages.StartingLogCommerceEvent)
|
|
|
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
643
|
function filteredMparticleUser(a,b,c,d){var e=this;return {getUserIdentities:function getUserIdentities(){var e={},f=c._Persistence.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.
|
|
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:
|
|
@@ -834,11 +834,14 @@ 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,d=this.getAllUserAttributes(),o=t._Helpers.findKeyInObject(d,r);o?(a=!1,n=d[o],delete d[o]):a=!0,d[r]=i,t._Store.setUserAttributes(e,d),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
|
|
@@ -847,10 +850,11 @@ return s<i&&(s=i,n<s&&t.Logger.warning("Source User has not been seen in the las
|
|
|
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 d,o,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?(o=!1,d=l[u],delete l[u]):o=!0,l[r]=a,t._Store.setUserAttributes(e,l),!d||!Array.isArray(d))g=!0;else if(n.length!==d.length)g=!0;else for(var p=0;p<n.length;p++)if(d[p]!==n[p]){g=!0;break}g&&s.sendUserAttributeChangeEvent(r,n,d,o,!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
|
|
@@ -900,8 +904,8 @@ 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,o,g,l){var u,p,c,y=t.Identity.getUser(i),
|
|
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,d,o,g,l){var u,p,c,y=t.Identity.getUser(i),I=y?y.getMPID():null,_=y?y.getUserIdentities().userIdentities:{},v={};t._Store.identityCallInFlight=!1;try{var m;if(t.Logger.verbose("Parsing \""+o+"\" 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(y,p)&&(t._Store.mpid=p.mpid,y&&t._Persistence.setLastSeenTime(i),u=!t._Persistence.getFirstSeenTime(p.mpid),t._Persistence.setFirstSeenTime(p.mpid)),200===r.status){s(CacheIdentity)&&cacheOrClearIdCache(o,g,n.idCache,r,l);var S=n.IdentityAPI.getUser(p.mpid),b=S?S.getUserIdentities().userIdentities:{};o===Modify$1?(v=t._Identity.IdentityRequest.combineUserIdentities(_,d.userIdentities),t._Persistence.saveUserIdentitiesToPersistence(i,v)):(o===Identify&&y&&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),d&&!isEmpty(d.userIdentities)&&(v=n.IdentityRequest.combineUserIdentities(b,d.userIdentities)),t._Persistence.saveUserIdentitiesToPersistence(p.mpid,v),t._Persistence.update(),t._Store.syncPersistenceData(),t._Persistence.findPrevCookiesBasedOnUI(d),t._Store.context=p.context||t._Store.context),c=t.Identity.getCurrentUser(),tryOnUserAlias(y,c,d,t.Logger);var A=t._Persistence.getPersistence();c&&(t._Persistence.storeDataInMemory(A,c.getMPID()),n.reinitForwardersOnUserChange(y,c),n.setForwarderCallbacks(c,o));var P=getNewIdentitiesByName(v),U=o===Modify$1?_:b;// https://go.mparticle.com/work/SQDSDKS-6501
|
|
908
|
+
n.sendUserIdentityChangeEvent(P,o,p.mpid,U);}if(a){var C=0===r.status?HTTPCodes$2.noHttpCoverage:r.status;t._Helpers.invokeCallback(a,C,p||null,c);}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
911
|
var a=this.IdentityAPI.getUser(s);for(var d in e)// Verifies a change actually happened
|
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.9";
|
|
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.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.getUserIdentities=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ui?b[a].ui:{}},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.getUserIdentities=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ui?b[a].ui:{}},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.saveUserIdentitiesToPersistence=function(a,b){if(b){var c=f.getPersistence();c&&(c[a]?c[a].ui=b:c[a]={ui:b},f.savePersistence(c));}},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:[]};}
|
|
@@ -641,7 +641,7 @@ return a.Logger.verbose(Messages$3.InformationMessages.StartingLogCommerceEvent)
|
|
|
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
643
|
function filteredMparticleUser(a,b,c,d){var e=this;return {getUserIdentities:function getUserIdentities(){var e={},f=c._Persistence.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.
|
|
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:
|
|
@@ -834,11 +834,14 @@ 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,d=this.getAllUserAttributes(),o=t._Helpers.findKeyInObject(d,r);o?(a=!1,n=d[o],delete d[o]):a=!0,d[r]=i,t._Store.setUserAttributes(e,d),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
|
|
@@ -847,10 +850,11 @@ return s<i&&(s=i,n<s&&t.Logger.warning("Source User has not been seen in the las
|
|
|
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 d,o,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?(o=!1,d=l[u],delete l[u]):o=!0,l[r]=a,t._Store.setUserAttributes(e,l),!d||!Array.isArray(d))g=!0;else if(n.length!==d.length)g=!0;else for(var p=0;p<n.length;p++)if(d[p]!==n[p]){g=!0;break}g&&s.sendUserAttributeChangeEvent(r,n,d,o,!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
|
|
@@ -900,8 +904,8 @@ 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,o,g,l){var u,p,c,y=t.Identity.getUser(i),
|
|
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,d,o,g,l){var u,p,c,y=t.Identity.getUser(i),I=y?y.getMPID():null,_=y?y.getUserIdentities().userIdentities:{},v={};t._Store.identityCallInFlight=!1;try{var m;if(t.Logger.verbose("Parsing \""+o+"\" 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(y,p)&&(t._Store.mpid=p.mpid,y&&t._Persistence.setLastSeenTime(i),u=!t._Persistence.getFirstSeenTime(p.mpid),t._Persistence.setFirstSeenTime(p.mpid)),200===r.status){s(CacheIdentity)&&cacheOrClearIdCache(o,g,n.idCache,r,l);var S=n.IdentityAPI.getUser(p.mpid),b=S?S.getUserIdentities().userIdentities:{};o===Modify$1?(v=t._Identity.IdentityRequest.combineUserIdentities(_,d.userIdentities),t._Persistence.saveUserIdentitiesToPersistence(i,v)):(o===Identify&&y&&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),d&&!isEmpty(d.userIdentities)&&(v=n.IdentityRequest.combineUserIdentities(b,d.userIdentities)),t._Persistence.saveUserIdentitiesToPersistence(p.mpid,v),t._Persistence.update(),t._Store.syncPersistenceData(),t._Persistence.findPrevCookiesBasedOnUI(d),t._Store.context=p.context||t._Store.context),c=t.Identity.getCurrentUser(),tryOnUserAlias(y,c,d,t.Logger);var A=t._Persistence.getPersistence();c&&(t._Persistence.storeDataInMemory(A,c.getMPID()),n.reinitForwardersOnUserChange(y,c),n.setForwarderCallbacks(c,o));var P=getNewIdentitiesByName(v),U=o===Modify$1?_:b;// https://go.mparticle.com/work/SQDSDKS-6501
|
|
908
|
+
n.sendUserIdentityChangeEvent(P,o,p.mpid,U);}if(a){var C=0===r.status?HTTPCodes$2.noHttpCoverage:r.status;t._Helpers.invokeCallback(a,C,p||null,c);}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
911
|
var a=this.IdentityAPI.getUser(s);for(var d in e)// Verifies a change actually happened
|
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.9";
|
|
397
397
|
|
|
398
398
|
var Constants = {
|
|
399
399
|
sdkVersion: version,
|
|
@@ -4147,6 +4147,12 @@ 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
|
+
};
|
|
4150
4156
|
this.addMpidToSessionHistory = function (mpid, previousMPID) {
|
|
4151
4157
|
var indexOfMPID = _this.currentSessionMPIDs.indexOf(mpid);
|
|
4152
4158
|
if (mpid && previousMPID !== mpid && indexOfMPID < 0) {
|
|
@@ -4945,14 +4951,6 @@ var mParticle = (function () {
|
|
|
4945
4951
|
return {};
|
|
4946
4952
|
}
|
|
4947
4953
|
};
|
|
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
4954
|
this.getCartProducts = function (mpid) {
|
|
4957
4955
|
var allCartProducts,
|
|
4958
4956
|
cartProductsString = localStorage.getItem(mpInstance._Store.prodStorageName);
|
|
@@ -4989,24 +4987,6 @@ var mParticle = (function () {
|
|
|
4989
4987
|
}
|
|
4990
4988
|
}
|
|
4991
4989
|
};
|
|
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
4990
|
this.saveUserCookieSyncDatesToPersistence = function (mpid, csd) {
|
|
5011
4991
|
if (csd) {
|
|
5012
4992
|
var persistence = self.getPersistence();
|
|
@@ -5473,7 +5453,7 @@ var mParticle = (function () {
|
|
|
5473
5453
|
},
|
|
5474
5454
|
getAllUserAttributes: function getAllUserAttributes() {
|
|
5475
5455
|
var userAttributesCopy = {};
|
|
5476
|
-
var userAttributes = mpInstance.
|
|
5456
|
+
var userAttributes = mpInstance._Store.getUserAttributes(mpid);
|
|
5477
5457
|
if (userAttributes) {
|
|
5478
5458
|
for (var prop in userAttributes) {
|
|
5479
5459
|
if (userAttributes.hasOwnProperty(prop)) {
|
|
@@ -7054,8 +7034,9 @@ var mParticle = (function () {
|
|
|
7054
7034
|
* @param {String} key
|
|
7055
7035
|
* @param {String} value
|
|
7056
7036
|
*/
|
|
7037
|
+
// https://go.mparticle.com/work/SQDSDKS-4576
|
|
7038
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
7057
7039
|
setUserAttribute: function setUserAttribute(key, newValue) {
|
|
7058
|
-
var cookies, userAttributes, previousUserAttributeValue, isNewAttribute;
|
|
7059
7040
|
mpInstance._SessionManager.resetSessionTimer();
|
|
7060
7041
|
if (mpInstance._Helpers.canLog()) {
|
|
7061
7042
|
if (!mpInstance._Helpers.Validators.isValidAttributeValue(newValue)) {
|
|
@@ -7072,8 +7053,9 @@ var mParticle = (function () {
|
|
|
7072
7053
|
value: newValue
|
|
7073
7054
|
}));
|
|
7074
7055
|
} else {
|
|
7075
|
-
|
|
7076
|
-
|
|
7056
|
+
var userAttributes = this.getAllUserAttributes();
|
|
7057
|
+
var previousUserAttributeValue;
|
|
7058
|
+
var isNewAttribute;
|
|
7077
7059
|
var existingProp = mpInstance._Helpers.findKeyInObject(userAttributes, key);
|
|
7078
7060
|
if (existingProp) {
|
|
7079
7061
|
isNewAttribute = false;
|
|
@@ -7083,10 +7065,7 @@ var mParticle = (function () {
|
|
|
7083
7065
|
isNewAttribute = true;
|
|
7084
7066
|
}
|
|
7085
7067
|
userAttributes[key] = newValue;
|
|
7086
|
-
|
|
7087
|
-
cookies[mpid].ua = userAttributes;
|
|
7088
|
-
mpInstance._Persistence.savePersistence(cookies, mpid);
|
|
7089
|
-
}
|
|
7068
|
+
mpInstance._Store.setUserAttributes(mpid, userAttributes);
|
|
7090
7069
|
self.sendUserAttributeChangeEvent(key, newValue, previousUserAttributeValue, isNewAttribute, false, this);
|
|
7091
7070
|
mpInstance._Forwarders.initForwarders(self.IdentityAPI.getCurrentUser().getUserIdentities(), mpInstance._APIClient.prepareForwardingStats);
|
|
7092
7071
|
mpInstance._Forwarders.handleForwarderUserAttributes('setUserAttribute', key, newValue);
|
|
@@ -7098,6 +7077,7 @@ var mParticle = (function () {
|
|
|
7098
7077
|
* @method setUserAttributes
|
|
7099
7078
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
7100
7079
|
*/
|
|
7080
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
7101
7081
|
setUserAttributes: function setUserAttributes(userAttributes) {
|
|
7102
7082
|
mpInstance._SessionManager.resetSessionTimer();
|
|
7103
7083
|
if (isObject(userAttributes)) {
|
|
@@ -7153,8 +7133,8 @@ var mParticle = (function () {
|
|
|
7153
7133
|
* @param {String} key
|
|
7154
7134
|
* @param {Array} value an array of values
|
|
7155
7135
|
*/
|
|
7136
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
7156
7137
|
setUserAttributeList: function setUserAttributeList(key, newValue) {
|
|
7157
|
-
var cookies, userAttributes, previousUserAttributeValue, isNewAttribute, userAttributeChange;
|
|
7158
7138
|
mpInstance._SessionManager.resetSessionTimer();
|
|
7159
7139
|
if (!mpInstance._Helpers.Validators.isValidKeyValue(key)) {
|
|
7160
7140
|
mpInstance.Logger.error(Messages$2.ErrorMessages.BadKey);
|
|
@@ -7171,8 +7151,10 @@ var mParticle = (function () {
|
|
|
7171
7151
|
value: arrayCopy
|
|
7172
7152
|
}));
|
|
7173
7153
|
} else {
|
|
7174
|
-
|
|
7175
|
-
|
|
7154
|
+
var userAttributes = this.getAllUserAttributes();
|
|
7155
|
+
var previousUserAttributeValue;
|
|
7156
|
+
var isNewAttribute;
|
|
7157
|
+
var userAttributeChange;
|
|
7176
7158
|
var existingProp = mpInstance._Helpers.findKeyInObject(userAttributes, key);
|
|
7177
7159
|
if (existingProp) {
|
|
7178
7160
|
isNewAttribute = false;
|
|
@@ -7182,12 +7164,9 @@ var mParticle = (function () {
|
|
|
7182
7164
|
isNewAttribute = true;
|
|
7183
7165
|
}
|
|
7184
7166
|
userAttributes[key] = arrayCopy;
|
|
7185
|
-
|
|
7186
|
-
cookies[mpid].ua = userAttributes;
|
|
7187
|
-
mpInstance._Persistence.savePersistence(cookies, mpid);
|
|
7188
|
-
}
|
|
7167
|
+
mpInstance._Store.setUserAttributes(mpid, userAttributes);
|
|
7189
7168
|
|
|
7190
|
-
// If the new attributeList length is different previous, then there is a change event.
|
|
7169
|
+
// If the new attributeList length is different than the previous, then there is a change event.
|
|
7191
7170
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
7192
7171
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
7193
7172
|
if (!previousUserAttributeValue || !Array.isArray(previousUserAttributeValue)) {
|
|
@@ -7253,8 +7232,9 @@ var mParticle = (function () {
|
|
|
7253
7232
|
* @return {Object} an object of all user attributes. Example: { attr1: 'value1', attr2: ['a', 'b', 'c'] }
|
|
7254
7233
|
*/
|
|
7255
7234
|
getAllUserAttributes: function getAllUserAttributes() {
|
|
7235
|
+
var getUserAttributes = mpInstance._Store.getUserAttributes;
|
|
7256
7236
|
var userAttributesCopy = {};
|
|
7257
|
-
var userAttributes =
|
|
7237
|
+
var userAttributes = getUserAttributes(mpid);
|
|
7258
7238
|
if (userAttributes) {
|
|
7259
7239
|
for (var prop in userAttributes) {
|
|
7260
7240
|
if (userAttributes.hasOwnProperty(prop)) {
|
package/package.json
CHANGED
|
@@ -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
|
@@ -866,12 +866,9 @@ export default function Identity(mpInstance) {
|
|
|
866
866
|
* @param {String} key
|
|
867
867
|
* @param {String} value
|
|
868
868
|
*/
|
|
869
|
+
// https://go.mparticle.com/work/SQDSDKS-4576
|
|
870
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
869
871
|
setUserAttribute: function(key, newValue) {
|
|
870
|
-
var cookies,
|
|
871
|
-
userAttributes,
|
|
872
|
-
previousUserAttributeValue,
|
|
873
|
-
isNewAttribute;
|
|
874
|
-
|
|
875
872
|
mpInstance._SessionManager.resetSessionTimer();
|
|
876
873
|
|
|
877
874
|
if (mpInstance._Helpers.canLog()) {
|
|
@@ -896,11 +893,11 @@ export default function Identity(mpInstance) {
|
|
|
896
893
|
JSON.stringify({ key: key, value: newValue })
|
|
897
894
|
);
|
|
898
895
|
} else {
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
896
|
+
const userAttributes = this.getAllUserAttributes();
|
|
897
|
+
let previousUserAttributeValue;
|
|
898
|
+
let isNewAttribute;
|
|
902
899
|
|
|
903
|
-
|
|
900
|
+
const existingProp = mpInstance._Helpers.findKeyInObject(
|
|
904
901
|
userAttributes,
|
|
905
902
|
key
|
|
906
903
|
);
|
|
@@ -915,13 +912,10 @@ export default function Identity(mpInstance) {
|
|
|
915
912
|
}
|
|
916
913
|
|
|
917
914
|
userAttributes[key] = newValue;
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
mpid
|
|
923
|
-
);
|
|
924
|
-
}
|
|
915
|
+
mpInstance._Store.setUserAttributes(
|
|
916
|
+
mpid,
|
|
917
|
+
userAttributes
|
|
918
|
+
);
|
|
925
919
|
|
|
926
920
|
self.sendUserAttributeChangeEvent(
|
|
927
921
|
key,
|
|
@@ -949,6 +943,7 @@ export default function Identity(mpInstance) {
|
|
|
949
943
|
* @method setUserAttributes
|
|
950
944
|
* @param {Object} user attribute object with keys of the attribute type, and value of the attribute value
|
|
951
945
|
*/
|
|
946
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
952
947
|
setUserAttributes: function(userAttributes) {
|
|
953
948
|
mpInstance._SessionManager.resetSessionTimer();
|
|
954
949
|
if (isObject(userAttributes)) {
|
|
@@ -1036,13 +1031,8 @@ export default function Identity(mpInstance) {
|
|
|
1036
1031
|
* @param {String} key
|
|
1037
1032
|
* @param {Array} value an array of values
|
|
1038
1033
|
*/
|
|
1034
|
+
// https://go.mparticle.com/work/SQDSDKS-6373
|
|
1039
1035
|
setUserAttributeList: function(key, newValue) {
|
|
1040
|
-
var cookies,
|
|
1041
|
-
userAttributes,
|
|
1042
|
-
previousUserAttributeValue,
|
|
1043
|
-
isNewAttribute,
|
|
1044
|
-
userAttributeChange;
|
|
1045
|
-
|
|
1046
1036
|
mpInstance._SessionManager.resetSessionTimer();
|
|
1047
1037
|
|
|
1048
1038
|
if (!mpInstance._Helpers.Validators.isValidKeyValue(key)) {
|
|
@@ -1058,7 +1048,7 @@ export default function Identity(mpInstance) {
|
|
|
1058
1048
|
return;
|
|
1059
1049
|
}
|
|
1060
1050
|
|
|
1061
|
-
|
|
1051
|
+
const arrayCopy = newValue.slice();
|
|
1062
1052
|
|
|
1063
1053
|
if (mpInstance._Store.webviewBridgeEnabled) {
|
|
1064
1054
|
mpInstance._NativeSdkHelpers.sendToNative(
|
|
@@ -1066,11 +1056,12 @@ export default function Identity(mpInstance) {
|
|
|
1066
1056
|
JSON.stringify({ key: key, value: arrayCopy })
|
|
1067
1057
|
);
|
|
1068
1058
|
} else {
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1059
|
+
const userAttributes = this.getAllUserAttributes();
|
|
1060
|
+
let previousUserAttributeValue;
|
|
1061
|
+
let isNewAttribute;
|
|
1062
|
+
let userAttributeChange;
|
|
1072
1063
|
|
|
1073
|
-
|
|
1064
|
+
const existingProp = mpInstance._Helpers.findKeyInObject(
|
|
1074
1065
|
userAttributes,
|
|
1075
1066
|
key
|
|
1076
1067
|
);
|
|
@@ -1085,12 +1076,9 @@ export default function Identity(mpInstance) {
|
|
|
1085
1076
|
}
|
|
1086
1077
|
|
|
1087
1078
|
userAttributes[key] = arrayCopy;
|
|
1088
|
-
|
|
1089
|
-
cookies[mpid].ua = userAttributes;
|
|
1090
|
-
mpInstance._Persistence.savePersistence(cookies, mpid);
|
|
1091
|
-
}
|
|
1079
|
+
mpInstance._Store.setUserAttributes(mpid, userAttributes);
|
|
1092
1080
|
|
|
1093
|
-
// If the new attributeList length is different previous, then there is a change event.
|
|
1081
|
+
// If the new attributeList length is different than the previous, then there is a change event.
|
|
1094
1082
|
// Loop through new attributes list, see if they are all in the same index as previous user attributes list
|
|
1095
1083
|
// If there are any changes, break, and immediately send a userAttributeChangeEvent with full array as a value
|
|
1096
1084
|
if (
|
|
@@ -1194,13 +1182,12 @@ export default function Identity(mpInstance) {
|
|
|
1194
1182
|
* @return {Object} an object of all user attributes. Example: { attr1: 'value1', attr2: ['a', 'b', 'c'] }
|
|
1195
1183
|
*/
|
|
1196
1184
|
getAllUserAttributes: function() {
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
);
|
|
1185
|
+
const { getUserAttributes } = mpInstance._Store;
|
|
1186
|
+
const userAttributesCopy = {};
|
|
1187
|
+
const userAttributes = getUserAttributes(mpid);
|
|
1201
1188
|
|
|
1202
1189
|
if (userAttributes) {
|
|
1203
|
-
for (
|
|
1190
|
+
for (const prop in userAttributes) {
|
|
1204
1191
|
if (userAttributes.hasOwnProperty(prop)) {
|
|
1205
1192
|
if (Array.isArray(userAttributes[prop])) {
|
|
1206
1193
|
userAttributesCopy[prop] = userAttributes[
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Context } from '@mparticle/event-models';
|
|
2
2
|
import {
|
|
3
3
|
AllUserAttributes,
|
|
4
|
-
ConsentState,
|
|
5
4
|
IdentityApiData,
|
|
6
5
|
MPID,
|
|
7
6
|
Product,
|
|
@@ -122,17 +121,12 @@ export interface IPersistence {
|
|
|
122
121
|
getCookieDomain(): string;
|
|
123
122
|
getDomain(doc: string, locationHostname: string): string;
|
|
124
123
|
getUserIdentities(mpid: MPID): UserIdentities;
|
|
125
|
-
getAllUserAttributes(mpid: MPID): AllUserAttributes;
|
|
126
124
|
getCartProducts(mpid: MPID): Product[];
|
|
127
125
|
setCartProducts(allProducts: Product[]): void;
|
|
128
126
|
saveUserIdentitiesToPersistence(
|
|
129
127
|
mpid: MPID,
|
|
130
128
|
userIdentities: UserIdentities
|
|
131
129
|
): void;
|
|
132
|
-
saveUserAttributesToPersistence(
|
|
133
|
-
mpid: MPID,
|
|
134
|
-
userAttributes: UserAttributes
|
|
135
|
-
): void;
|
|
136
130
|
saveUserCookieSyncDatesToPersistence(mpid: MPID, csd: CookieSyncDate): void;
|
|
137
131
|
savePersistence(persistance: IPersistenceMinified): void;
|
|
138
132
|
getPersistence(): IPersistenceMinified;
|
package/src/persistence.js
CHANGED
|
@@ -892,16 +892,6 @@ export default function _Persistence(mpInstance) {
|
|
|
892
892
|
}
|
|
893
893
|
};
|
|
894
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
895
|
this.getCartProducts = function(mpid) {
|
|
906
896
|
var allCartProducts,
|
|
907
897
|
cartProductsString = localStorage.getItem(
|
|
@@ -954,25 +944,6 @@ export default function _Persistence(mpInstance) {
|
|
|
954
944
|
}
|
|
955
945
|
};
|
|
956
946
|
|
|
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
947
|
this.saveUserCookieSyncDatesToPersistence = function(mpid, csd) {
|
|
977
948
|
if (csd) {
|
|
978
949
|
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
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
} from './utils';
|
|
32
32
|
import { IMinifiedConsentJSONObject, SDKConsentState } from './consent';
|
|
33
33
|
import { Kit, MPForwarder } from './forwarders.interfaces';
|
|
34
|
-
import { IdentityCallback } from './identity-user-interfaces';
|
|
34
|
+
import { IdentityCallback, UserAttributes } from './identity-user-interfaces';
|
|
35
35
|
import {
|
|
36
36
|
IGlobalStoreV2MinifiedKeys,
|
|
37
37
|
IPersistenceMinified,
|
|
@@ -195,6 +195,8 @@ export interface IStore {
|
|
|
195
195
|
setFirstSeenTime?(mpid: MPID, time?: number): void;
|
|
196
196
|
getLastSeenTime?(mpid: MPID): number;
|
|
197
197
|
setLastSeenTime?(mpid: MPID, time?: number): void;
|
|
198
|
+
getUserAttributes?(mpid: MPID): UserAttributes;
|
|
199
|
+
setUserAttributes?(mpid: MPID, attributes: UserAttributes): void;
|
|
198
200
|
|
|
199
201
|
addMpidToSessionHistory?(mpid: MPID, previousMpid?: MPID): void;
|
|
200
202
|
hasInvalidIdentifyRequest?: () => boolean;
|
|
@@ -617,6 +619,14 @@ export default function Store(
|
|
|
617
619
|
);
|
|
618
620
|
};
|
|
619
621
|
|
|
622
|
+
this.getUserAttributes = (mpid: MPID): UserAttributes =>
|
|
623
|
+
this._getFromPersistence(mpid, 'ua') || {};
|
|
624
|
+
|
|
625
|
+
this.setUserAttributes = (
|
|
626
|
+
mpid: MPID,
|
|
627
|
+
userAttributes: UserAttributes
|
|
628
|
+
): void => this._setPersistence(mpid, 'ua', userAttributes);
|
|
629
|
+
|
|
620
630
|
this.addMpidToSessionHistory = (mpid: MPID, previousMPID?: MPID): void => {
|
|
621
631
|
const indexOfMPID = this.currentSessionMPIDs.indexOf(mpid);
|
|
622
632
|
|