@mparticle/web-sdk 2.26.7 → 2.26.8
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 +9 -10
- package/dist/mparticle.esm.js +9 -10
- package/dist/mparticle.js +70 -85
- package/package.json +1 -1
- package/src/identity.js +3 -5
- package/src/mp-instance.js +1 -0
- package/src/persistence.interfaces.ts +23 -5
- package/src/persistence.js +1 -36
- package/src/store.ts +128 -79
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.8";
|
|
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
|
|
@@ -552,8 +552,9 @@ return a._Helpers.parseNumber(b)};}
|
|
|
552
552
|
function createSDKConfig(a){// TODO: Refactor to create a default config object
|
|
553
553
|
var b={};for(var c in Constants.DefaultConfig)Constants.DefaultConfig.hasOwnProperty(c)&&(b[c]=Constants.DefaultConfig[c]);if(a)for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);for(var c in Constants.DefaultBaseUrls)b[c]=Constants.DefaultBaseUrls[c];return b}// TODO: Merge this with SDKStoreApi in sdkRuntimeModels
|
|
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
|
-
persistenceData:{
|
|
556
|
-
|
|
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
|
+
(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
558
|
// such as if the SDK is being self-hosted and the flags are different on the server config
|
|
558
559
|
// https://go.mparticle.com/work/SQDSDKS-6317
|
|
559
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
|
|
@@ -625,9 +626,7 @@ var k={};for(var l in b)b.hasOwnProperty(l)&&(SDKv2NonMPIDCookieKeys[l]||l===b.c
|
|
|
625
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
|
|
626
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
|
|
627
628
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
628
|
-
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.getAllUserAttributes=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ua?b[a].ua:{}},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.saveUserAttributesToPersistence=function(a,b){var c=f.getPersistence();b&&(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.
|
|
629
|
-
//for any MPID that's not the current one.
|
|
630
|
-
if(c||null===c){var d=f.getPersistence();d&&(d[b]?d[b].con=a._Consent.ConsentSerialization.toMinifiedJsonObject(c):d[b]={con:a._Consent.ConsentSerialization.toMinifiedJsonObject(c)},f.savePersistence(d));}},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.getConsentState=function(b){var c=f.getPersistence();return c&&c[b]&&c[b].con?a._Consent.ConsentSerialization.fromMinifiedJsonObject(c[b].con):null},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
|
|
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.getAllUserAttributes=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ua?b[a].ua:{}},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.saveUserAttributesToPersistence=function(a,b){var c=f.getPersistence();b&&(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
|
|
631
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
|
|
632
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
|
|
633
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:[]};}
|
|
@@ -870,11 +869,11 @@ 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
|
|
|
870
869
|
* Returns the Consent State stored locally for this user.
|
|
871
870
|
* @method getConsentState
|
|
872
871
|
* @return a ConsentState object
|
|
873
|
-
*/getConsentState:function getConsentState(){return t.
|
|
872
|
+
*/getConsentState:function getConsentState(){return t._Store.getConsentState(e)},/**
|
|
874
873
|
* Sets the Consent State stored locally for this user.
|
|
875
874
|
* @method setConsentState
|
|
876
875
|
* @param {Object} consent state
|
|
877
|
-
*/setConsentState:function setConsentState(r){t.
|
|
876
|
+
*/setConsentState:function setConsentState(r){t._Store.setConsentState(e,r),t._Forwarders.initForwarders(this.getUserIdentities().userIdentities,t._APIClient.prepareForwardingStats),t._CookieSyncManager.attemptCookieSync(null,this.getMPID());},isLoggedIn:function isLoggedIn(){return r},getLastSeenTime:function getLastSeenTime(){return t._Persistence.getLastSeenTime(e)},getFirstSeenTime:function getFirstSeenTime(){return t._Persistence.getFirstSeenTime(e)},/**
|
|
878
877
|
* Get user audiences
|
|
879
878
|
* @method getuserAudiences
|
|
880
879
|
* @param {Function} [callback] A callback function that is invoked when the user audience request completes
|
|
@@ -901,7 +900,7 @@ return t._Helpers.getFeatureFlag(FeatureFlags$1.AudienceAPI)?void(null===s.audie
|
|
|
901
900
|
* @method getCartProducts
|
|
902
901
|
* @return {Array} array of cart products
|
|
903
902
|
* @deprecated
|
|
904
|
-
*/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),_=y?y.getMPID():null,I=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),
|
|
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),_=y?y.getMPID():null,I=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(I,d.userIdentities),t._Persistence.saveUserIdentitiesToPersistence(i,v)):(o===Identify&&y&&p.mpid===_&&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 P=t._Persistence.getPersistence();c&&(t._Persistence.storeDataInMemory(P,c.getMPID()),n.reinitForwardersOnUserChange(y,c),n.setForwarderCallbacks(c,o));var A=getNewIdentitiesByName(v),U=o===Modify$1?I:b;// https://go.mparticle.com/work/SQDSDKS-6501
|
|
905
904
|
n.sendUserIdentityChangeEvent(A,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
|
|
906
905
|
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
|
|
907
906
|
{// https://go.mparticle.com/work/SQDSDKS-6354
|
|
@@ -1339,7 +1338,7 @@ function completeSDKInitialization(a,b,c){var d=createKitBlocker(b,c);// Web Vie
|
|
|
1339
1338
|
// Web View. The Web SDK simply acts as a passthrough to the mParticle Native SDK. It is not
|
|
1340
1339
|
// responsible for sending events directly to mParticle's servers. The Web SDK will not initialize
|
|
1341
1340
|
// persistence or Identity directly.
|
|
1342
|
-
if(c._APIClient=new APIClient(c,d),c._Forwarders=new Forwarders(c,d),c._Store.processConfig(b),c._Identity.idCache=createIdentityCache(c),removeExpiredIdentityCacheDates(c._Identity.idCache),c._Store.webviewBridgeEnabled)c._NativeSdkHelpers.initializeSessionAttributes(a);else {c._Persistence.initializeStorage();// Set up user identitiy variables for later use
|
|
1341
|
+
if(c._APIClient=new APIClient(c,d),c._Forwarders=new Forwarders(c,d),c._Store.processConfig(b),c._Identity.idCache=createIdentityCache(c),removeExpiredIdentityCacheDates(c._Identity.idCache),c._Store.webviewBridgeEnabled)c._NativeSdkHelpers.initializeSessionAttributes(a);else {c._Persistence.initializeStorage(),c._Store.syncPersistenceData();// Set up user identitiy variables for later use
|
|
1343
1342
|
var e=c.Identity.getCurrentUser(),f=e?e.getMPID():null,g=e?e.getUserIdentities().userIdentities:{};c._Store.SDKConfig.identifyRequest=c._Store.hasInvalidIdentifyRequest()?{userIdentities:g}:c._Store.SDKConfig.identifyRequest,c._Helpers.getFeatureFlag(ReportBatching)&&c._ForwardingStatsUploader.startForwardingStatsTimer(),c._Forwarders.processForwarders(b,c._APIClient.prepareForwardingStats),c._Forwarders.processPixelConfigs(b),c._SessionManager.initialize(),c._Events.logAST(),processIdentityCallback(c,e,f,g);}c._Store.isInitialized=!0;// Call any functions that are waiting for the library to be initialized
|
|
1344
1343
|
try{c._preInit.readyQueue=processReadyQueue(c._preInit.readyQueue);}catch(a){c.Logger.error(a);}// https://go.mparticle.com/work/SQDSDKS-6040
|
|
1345
1344
|
c._Store.isFirstRun&&(c._Store.isFirstRun=!1);}function createKitBlocker(a,b){var c,d,e,f;/* There are three ways a data plan object for blocking can be passed to the SDK:
|
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.8";
|
|
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
|
|
@@ -552,8 +552,9 @@ return a._Helpers.parseNumber(b)};}
|
|
|
552
552
|
function createSDKConfig(a){// TODO: Refactor to create a default config object
|
|
553
553
|
var b={};for(var c in Constants.DefaultConfig)Constants.DefaultConfig.hasOwnProperty(c)&&(b[c]=Constants.DefaultConfig[c]);if(a)for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);for(var c in Constants.DefaultBaseUrls)b[c]=Constants.DefaultBaseUrls[c];return b}// TODO: Merge this with SDKStoreApi in sdkRuntimeModels
|
|
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
|
-
persistenceData:{
|
|
556
|
-
|
|
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
|
+
(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
558
|
// such as if the SDK is being self-hosted and the flags are different on the server config
|
|
558
559
|
// https://go.mparticle.com/work/SQDSDKS-6317
|
|
559
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
|
|
@@ -625,9 +626,7 @@ var k={};for(var l in b)b.hasOwnProperty(l)&&(SDKv2NonMPIDCookieKeys[l]||l===b.c
|
|
|
625
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
|
|
626
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
|
|
627
628
|
// other keys on the cookie are currentSessionMPIDs and currentMPID which should not be searched
|
|
628
|
-
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.getAllUserAttributes=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ua?b[a].ua:{}},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.saveUserAttributesToPersistence=function(a,b){var c=f.getPersistence();b&&(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.
|
|
629
|
-
//for any MPID that's not the current one.
|
|
630
|
-
if(c||null===c){var d=f.getPersistence();d&&(d[b]?d[b].con=a._Consent.ConsentSerialization.toMinifiedJsonObject(c):d[b]={con:a._Consent.ConsentSerialization.toMinifiedJsonObject(c)},f.savePersistence(d));}},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.getConsentState=function(b){var c=f.getPersistence();return c&&c[b]&&c[b].con?a._Consent.ConsentSerialization.fromMinifiedJsonObject(c[b].con):null},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
|
|
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.getAllUserAttributes=function(a){var b=f.getPersistence();return b&&b[a]&&b[a].ua?b[a].ua:{}},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.saveUserAttributesToPersistence=function(a,b){var c=f.getPersistence();b&&(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
|
|
631
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
|
|
632
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
|
|
633
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:[]};}
|
|
@@ -870,11 +869,11 @@ 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
|
|
|
870
869
|
* Returns the Consent State stored locally for this user.
|
|
871
870
|
* @method getConsentState
|
|
872
871
|
* @return a ConsentState object
|
|
873
|
-
*/getConsentState:function getConsentState(){return t.
|
|
872
|
+
*/getConsentState:function getConsentState(){return t._Store.getConsentState(e)},/**
|
|
874
873
|
* Sets the Consent State stored locally for this user.
|
|
875
874
|
* @method setConsentState
|
|
876
875
|
* @param {Object} consent state
|
|
877
|
-
*/setConsentState:function setConsentState(r){t.
|
|
876
|
+
*/setConsentState:function setConsentState(r){t._Store.setConsentState(e,r),t._Forwarders.initForwarders(this.getUserIdentities().userIdentities,t._APIClient.prepareForwardingStats),t._CookieSyncManager.attemptCookieSync(null,this.getMPID());},isLoggedIn:function isLoggedIn(){return r},getLastSeenTime:function getLastSeenTime(){return t._Persistence.getLastSeenTime(e)},getFirstSeenTime:function getFirstSeenTime(){return t._Persistence.getFirstSeenTime(e)},/**
|
|
878
877
|
* Get user audiences
|
|
879
878
|
* @method getuserAudiences
|
|
880
879
|
* @param {Function} [callback] A callback function that is invoked when the user audience request completes
|
|
@@ -901,7 +900,7 @@ return t._Helpers.getFeatureFlag(FeatureFlags$1.AudienceAPI)?void(null===s.audie
|
|
|
901
900
|
* @method getCartProducts
|
|
902
901
|
* @return {Array} array of cart products
|
|
903
902
|
* @deprecated
|
|
904
|
-
*/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),_=y?y.getMPID():null,I=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),
|
|
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),_=y?y.getMPID():null,I=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(I,d.userIdentities),t._Persistence.saveUserIdentitiesToPersistence(i,v)):(o===Identify&&y&&p.mpid===_&&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 P=t._Persistence.getPersistence();c&&(t._Persistence.storeDataInMemory(P,c.getMPID()),n.reinitForwardersOnUserChange(y,c),n.setForwarderCallbacks(c,o));var A=getNewIdentitiesByName(v),U=o===Modify$1?I:b;// https://go.mparticle.com/work/SQDSDKS-6501
|
|
905
904
|
n.sendUserIdentityChangeEvent(A,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
|
|
906
905
|
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
|
|
907
906
|
{// https://go.mparticle.com/work/SQDSDKS-6354
|
|
@@ -1339,7 +1338,7 @@ function completeSDKInitialization(a,b,c){var d=createKitBlocker(b,c);// Web Vie
|
|
|
1339
1338
|
// Web View. The Web SDK simply acts as a passthrough to the mParticle Native SDK. It is not
|
|
1340
1339
|
// responsible for sending events directly to mParticle's servers. The Web SDK will not initialize
|
|
1341
1340
|
// persistence or Identity directly.
|
|
1342
|
-
if(c._APIClient=new APIClient(c,d),c._Forwarders=new Forwarders(c,d),c._Store.processConfig(b),c._Identity.idCache=createIdentityCache(c),removeExpiredIdentityCacheDates(c._Identity.idCache),c._Store.webviewBridgeEnabled)c._NativeSdkHelpers.initializeSessionAttributes(a);else {c._Persistence.initializeStorage();// Set up user identitiy variables for later use
|
|
1341
|
+
if(c._APIClient=new APIClient(c,d),c._Forwarders=new Forwarders(c,d),c._Store.processConfig(b),c._Identity.idCache=createIdentityCache(c),removeExpiredIdentityCacheDates(c._Identity.idCache),c._Store.webviewBridgeEnabled)c._NativeSdkHelpers.initializeSessionAttributes(a);else {c._Persistence.initializeStorage(),c._Store.syncPersistenceData();// Set up user identitiy variables for later use
|
|
1343
1342
|
var e=c.Identity.getCurrentUser(),f=e?e.getMPID():null,g=e?e.getUserIdentities().userIdentities:{};c._Store.SDKConfig.identifyRequest=c._Store.hasInvalidIdentifyRequest()?{userIdentities:g}:c._Store.SDKConfig.identifyRequest,c._Helpers.getFeatureFlag(ReportBatching)&&c._ForwardingStatsUploader.startForwardingStatsTimer(),c._Forwarders.processForwarders(b,c._APIClient.prepareForwardingStats),c._Forwarders.processPixelConfigs(b),c._SessionManager.initialize(),c._Events.logAST(),processIdentityCallback(c,e,f,g);}c._Store.isInitialized=!0;// Call any functions that are waiting for the library to be initialized
|
|
1344
1343
|
try{c._preInit.readyQueue=processReadyQueue(c._preInit.readyQueue);}catch(a){c.Logger.error(a);}// https://go.mparticle.com/work/SQDSDKS-6040
|
|
1345
1344
|
c._Store.isFirstRun&&(c._Store.isFirstRun=!1);}function createKitBlocker(a,b){var c,d,e,f;/* There are three ways a data plan object for blocking can be passed to the SDK:
|
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.8";
|
|
397
397
|
|
|
398
398
|
var Constants = {
|
|
399
399
|
sdkVersion: version,
|
|
@@ -3912,23 +3912,7 @@ var mParticle = (function () {
|
|
|
3912
3912
|
},
|
|
3913
3913
|
// Placeholder for in-memory persistence model
|
|
3914
3914
|
persistenceData: {
|
|
3915
|
-
|
|
3916
|
-
gs: {
|
|
3917
|
-
sid: null,
|
|
3918
|
-
ie: null,
|
|
3919
|
-
sa: null,
|
|
3920
|
-
ss: null,
|
|
3921
|
-
dt: null,
|
|
3922
|
-
av: null,
|
|
3923
|
-
cgid: null,
|
|
3924
|
-
das: null,
|
|
3925
|
-
ia: null,
|
|
3926
|
-
c: null,
|
|
3927
|
-
csm: null,
|
|
3928
|
-
les: null,
|
|
3929
|
-
ssd: null
|
|
3930
|
-
},
|
|
3931
|
-
l: null
|
|
3915
|
+
gs: {}
|
|
3932
3916
|
}
|
|
3933
3917
|
};
|
|
3934
3918
|
for (var key in defaultStore) {
|
|
@@ -4072,10 +4056,56 @@ var mParticle = (function () {
|
|
|
4072
4056
|
}
|
|
4073
4057
|
}
|
|
4074
4058
|
}
|
|
4059
|
+
this._getFromPersistence = function (mpid, key) {
|
|
4060
|
+
if (!mpid) {
|
|
4061
|
+
return null;
|
|
4062
|
+
}
|
|
4063
|
+
_this.syncPersistenceData();
|
|
4064
|
+
if (_this.persistenceData && _this.persistenceData[mpid] && _this.persistenceData[mpid][key]) {
|
|
4065
|
+
return _this.persistenceData[mpid][key];
|
|
4066
|
+
} else {
|
|
4067
|
+
return null;
|
|
4068
|
+
}
|
|
4069
|
+
};
|
|
4070
|
+
this._setPersistence = function (mpid, key, value) {
|
|
4071
|
+
var _a;
|
|
4072
|
+
if (!mpid) {
|
|
4073
|
+
return;
|
|
4074
|
+
}
|
|
4075
|
+
_this.syncPersistenceData();
|
|
4076
|
+
if (_this.persistenceData) {
|
|
4077
|
+
if (_this.persistenceData[mpid]) {
|
|
4078
|
+
_this.persistenceData[mpid][key] = value;
|
|
4079
|
+
} else {
|
|
4080
|
+
_this.persistenceData[mpid] = (_a = {}, _a[key] = value, _a);
|
|
4081
|
+
}
|
|
4082
|
+
// Clear out persistence attributes that are empty
|
|
4083
|
+
// so that we don't upload empty or undefined values
|
|
4084
|
+
if (isObject(_this.persistenceData[mpid][key]) && isEmpty(_this.persistenceData[mpid][key])) {
|
|
4085
|
+
delete _this.persistenceData[mpid][key];
|
|
4086
|
+
}
|
|
4087
|
+
mpInstance._Persistence.savePersistence(_this.persistenceData);
|
|
4088
|
+
}
|
|
4089
|
+
};
|
|
4075
4090
|
this.hasInvalidIdentifyRequest = function () {
|
|
4076
4091
|
var identifyRequest = _this.SDKConfig.identifyRequest;
|
|
4077
4092
|
return isObject(identifyRequest) && isObject(identifyRequest.userIdentities) && isEmpty(identifyRequest.userIdentities) || !identifyRequest;
|
|
4078
4093
|
};
|
|
4094
|
+
this.getConsentState = function (mpid) {
|
|
4095
|
+
var fromMinifiedJsonObject = mpInstance._Consent.ConsentSerialization.fromMinifiedJsonObject;
|
|
4096
|
+
var serializedConsentState = _this._getFromPersistence(mpid, 'con');
|
|
4097
|
+
if (!isEmpty(serializedConsentState)) {
|
|
4098
|
+
return fromMinifiedJsonObject(serializedConsentState);
|
|
4099
|
+
}
|
|
4100
|
+
return null;
|
|
4101
|
+
};
|
|
4102
|
+
this.setConsentState = function (mpid, consentState) {
|
|
4103
|
+
var toMinifiedJsonObject = mpInstance._Consent.ConsentSerialization.toMinifiedJsonObject;
|
|
4104
|
+
// If ConsentState is null, we assume the intent is to clear out the consent state
|
|
4105
|
+
if (consentState || consentState === null) {
|
|
4106
|
+
_this._setPersistence(mpid, 'con', toMinifiedJsonObject(consentState));
|
|
4107
|
+
}
|
|
4108
|
+
};
|
|
4079
4109
|
this.getDeviceId = function () {
|
|
4080
4110
|
return _this.deviceId;
|
|
4081
4111
|
};
|
|
@@ -4084,69 +4114,47 @@ var mParticle = (function () {
|
|
|
4084
4114
|
_this.persistenceData.gs.das = deviceId;
|
|
4085
4115
|
mpInstance._Persistence.update();
|
|
4086
4116
|
};
|
|
4087
|
-
this.addMpidToSessionHistory = function (mpid, previousMPID) {
|
|
4088
|
-
var indexOfMPID = _this.currentSessionMPIDs.indexOf(mpid);
|
|
4089
|
-
if (mpid && previousMPID !== mpid && indexOfMPID < 0) {
|
|
4090
|
-
_this.currentSessionMPIDs.push(mpid);
|
|
4091
|
-
return;
|
|
4092
|
-
}
|
|
4093
|
-
if (indexOfMPID >= 0) {
|
|
4094
|
-
_this.currentSessionMPIDs = moveElementToEnd(_this.currentSessionMPIDs, indexOfMPID);
|
|
4095
|
-
}
|
|
4096
|
-
};
|
|
4097
4117
|
this.getFirstSeenTime = function (mpid) {
|
|
4098
|
-
|
|
4099
|
-
return null;
|
|
4100
|
-
}
|
|
4101
|
-
if (_this.persistenceData && _this.persistenceData[mpid] && _this.persistenceData[mpid].fst) {
|
|
4102
|
-
return _this.persistenceData[mpid].fst;
|
|
4103
|
-
} else {
|
|
4104
|
-
return null;
|
|
4105
|
-
}
|
|
4118
|
+
return _this._getFromPersistence(mpid, 'fst');
|
|
4106
4119
|
};
|
|
4107
4120
|
this.setFirstSeenTime = function (mpid, _time) {
|
|
4108
4121
|
if (!mpid) {
|
|
4109
4122
|
return;
|
|
4110
4123
|
}
|
|
4111
4124
|
var time = _time || new Date().getTime();
|
|
4112
|
-
|
|
4113
|
-
if (!_this.persistenceData[mpid]) {
|
|
4114
|
-
_this.persistenceData[mpid] = {};
|
|
4115
|
-
}
|
|
4116
|
-
if (!_this.persistenceData[mpid].fst) {
|
|
4117
|
-
_this.persistenceData[mpid].fst = time;
|
|
4118
|
-
mpInstance._Persistence.savePersistence(_this.persistenceData);
|
|
4119
|
-
}
|
|
4120
|
-
}
|
|
4125
|
+
_this._setPersistence(mpid, 'fst', time);
|
|
4121
4126
|
};
|
|
4122
4127
|
this.getLastSeenTime = function (mpid) {
|
|
4123
4128
|
if (!mpid) {
|
|
4124
4129
|
return null;
|
|
4125
4130
|
}
|
|
4126
|
-
//
|
|
4131
|
+
// https://go.mparticle.com/work/SQDSDKS-6315
|
|
4127
4132
|
var currentUser = mpInstance.Identity.getCurrentUser();
|
|
4128
4133
|
if (mpid === (currentUser === null || currentUser === void 0 ? void 0 : currentUser.getMPID())) {
|
|
4129
4134
|
// if the mpid is the current user, its last seen time is the current time
|
|
4130
4135
|
return new Date().getTime();
|
|
4131
|
-
} else if (_this.persistenceData && _this.persistenceData[mpid] && _this.persistenceData[mpid].lst) {
|
|
4132
|
-
return _this.persistenceData[mpid].lst;
|
|
4133
|
-
} else {
|
|
4134
|
-
return null;
|
|
4135
4136
|
}
|
|
4137
|
+
return _this._getFromPersistence(mpid, 'lst');
|
|
4136
4138
|
};
|
|
4137
4139
|
this.setLastSeenTime = function (mpid, _time) {
|
|
4138
4140
|
if (!mpid) {
|
|
4139
4141
|
return;
|
|
4140
4142
|
}
|
|
4141
4143
|
var time = _time || new Date().getTime();
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4144
|
+
_this._setPersistence(mpid, 'lst', time);
|
|
4145
|
+
};
|
|
4146
|
+
this.syncPersistenceData = function () {
|
|
4147
|
+
var persistenceData = mpInstance._Persistence.getPersistence();
|
|
4148
|
+
_this.persistenceData = mpInstance._Helpers.extend({}, _this.persistenceData, persistenceData);
|
|
4149
|
+
};
|
|
4150
|
+
this.addMpidToSessionHistory = function (mpid, previousMPID) {
|
|
4151
|
+
var indexOfMPID = _this.currentSessionMPIDs.indexOf(mpid);
|
|
4152
|
+
if (mpid && previousMPID !== mpid && indexOfMPID < 0) {
|
|
4153
|
+
_this.currentSessionMPIDs.push(mpid);
|
|
4154
|
+
return;
|
|
4155
|
+
}
|
|
4156
|
+
if (indexOfMPID >= 0) {
|
|
4157
|
+
_this.currentSessionMPIDs = moveElementToEnd(_this.currentSessionMPIDs, indexOfMPID);
|
|
4150
4158
|
}
|
|
4151
4159
|
};
|
|
4152
4160
|
this.nullifySession = function () {
|
|
@@ -5014,23 +5022,6 @@ var mParticle = (function () {
|
|
|
5014
5022
|
self.savePersistence(persistence);
|
|
5015
5023
|
}
|
|
5016
5024
|
};
|
|
5017
|
-
this.saveUserConsentStateToCookies = function (mpid, consentState) {
|
|
5018
|
-
//it's currently not supported to set persistence
|
|
5019
|
-
//for any MPID that's not the current one.
|
|
5020
|
-
if (consentState || consentState === null) {
|
|
5021
|
-
var persistence = self.getPersistence();
|
|
5022
|
-
if (persistence) {
|
|
5023
|
-
if (persistence[mpid]) {
|
|
5024
|
-
persistence[mpid].con = mpInstance._Consent.ConsentSerialization.toMinifiedJsonObject(consentState);
|
|
5025
|
-
} else {
|
|
5026
|
-
persistence[mpid] = {
|
|
5027
|
-
con: mpInstance._Consent.ConsentSerialization.toMinifiedJsonObject(consentState)
|
|
5028
|
-
};
|
|
5029
|
-
}
|
|
5030
|
-
self.savePersistence(persistence);
|
|
5031
|
-
}
|
|
5032
|
-
}
|
|
5033
|
-
};
|
|
5034
5025
|
this.swapCurrentUser = function (previousMPID, currentMPID, currentSessionMPIDs) {
|
|
5035
5026
|
if (previousMPID && currentMPID && previousMPID !== currentMPID) {
|
|
5036
5027
|
var persistence = self.getPersistence();
|
|
@@ -5068,14 +5059,6 @@ var mParticle = (function () {
|
|
|
5068
5059
|
var persistence = this.useLocalStorage() ? this.getLocalStorage() : this.getCookie();
|
|
5069
5060
|
return persistence;
|
|
5070
5061
|
};
|
|
5071
|
-
this.getConsentState = function (mpid) {
|
|
5072
|
-
var persistence = self.getPersistence();
|
|
5073
|
-
if (persistence && persistence[mpid] && persistence[mpid].con) {
|
|
5074
|
-
return mpInstance._Consent.ConsentSerialization.fromMinifiedJsonObject(persistence[mpid].con);
|
|
5075
|
-
} else {
|
|
5076
|
-
return null;
|
|
5077
|
-
}
|
|
5078
|
-
};
|
|
5079
5062
|
this.getFirstSeenTime = function (mpid) {
|
|
5080
5063
|
if (!mpid) {
|
|
5081
5064
|
return null;
|
|
@@ -7300,7 +7283,7 @@ var mParticle = (function () {
|
|
|
7300
7283
|
* @return a ConsentState object
|
|
7301
7284
|
*/
|
|
7302
7285
|
getConsentState: function getConsentState() {
|
|
7303
|
-
return mpInstance.
|
|
7286
|
+
return mpInstance._Store.getConsentState(mpid);
|
|
7304
7287
|
},
|
|
7305
7288
|
/**
|
|
7306
7289
|
* Sets the Consent State stored locally for this user.
|
|
@@ -7308,7 +7291,7 @@ var mParticle = (function () {
|
|
|
7308
7291
|
* @param {Object} consent state
|
|
7309
7292
|
*/
|
|
7310
7293
|
setConsentState: function setConsentState(state) {
|
|
7311
|
-
mpInstance.
|
|
7294
|
+
mpInstance._Store.setConsentState(mpid, state);
|
|
7312
7295
|
mpInstance._Forwarders.initForwarders(this.getUserIdentities().userIdentities, mpInstance._APIClient.prepareForwardingStats);
|
|
7313
7296
|
mpInstance._CookieSyncManager.attemptCookieSync(null, this.getMPID());
|
|
7314
7297
|
},
|
|
@@ -7516,6 +7499,7 @@ var mParticle = (function () {
|
|
|
7516
7499
|
// https://go.mparticle.com/work/SQDSDKS-6041
|
|
7517
7500
|
mpInstance._Persistence.saveUserIdentitiesToPersistence(identityApiResult.mpid, newIdentitiesByType);
|
|
7518
7501
|
mpInstance._Persistence.update();
|
|
7502
|
+
mpInstance._Store.syncPersistenceData();
|
|
7519
7503
|
mpInstance._Persistence.findPrevCookiesBasedOnUI(identityApiData);
|
|
7520
7504
|
|
|
7521
7505
|
// https://go.mparticle.com/work/SQDSDKS-6357
|
|
@@ -9488,6 +9472,7 @@ var mParticle = (function () {
|
|
|
9488
9472
|
|
|
9489
9473
|
// Load any settings/identities/attributes from cookie or localStorage
|
|
9490
9474
|
mpInstance._Persistence.initializeStorage();
|
|
9475
|
+
mpInstance._Store.syncPersistenceData();
|
|
9491
9476
|
|
|
9492
9477
|
// Set up user identitiy variables for later use
|
|
9493
9478
|
var currentUser = mpInstance.Identity.getCurrentUser();
|
package/package.json
CHANGED
package/src/identity.js
CHANGED
|
@@ -1233,7 +1233,7 @@ export default function Identity(mpInstance) {
|
|
|
1233
1233
|
* @return a ConsentState object
|
|
1234
1234
|
*/
|
|
1235
1235
|
getConsentState: function() {
|
|
1236
|
-
return mpInstance.
|
|
1236
|
+
return mpInstance._Store.getConsentState(mpid);
|
|
1237
1237
|
},
|
|
1238
1238
|
/**
|
|
1239
1239
|
* Sets the Consent State stored locally for this user.
|
|
@@ -1241,10 +1241,7 @@ export default function Identity(mpInstance) {
|
|
|
1241
1241
|
* @param {Object} consent state
|
|
1242
1242
|
*/
|
|
1243
1243
|
setConsentState: function(state) {
|
|
1244
|
-
mpInstance.
|
|
1245
|
-
mpid,
|
|
1246
|
-
state
|
|
1247
|
-
);
|
|
1244
|
+
mpInstance._Store.setConsentState(mpid, state);
|
|
1248
1245
|
mpInstance._Forwarders.initForwarders(
|
|
1249
1246
|
this.getUserIdentities().userIdentities,
|
|
1250
1247
|
mpInstance._APIClient.prepareForwardingStats
|
|
@@ -1610,6 +1607,7 @@ export default function Identity(mpInstance) {
|
|
|
1610
1607
|
newIdentitiesByType
|
|
1611
1608
|
);
|
|
1612
1609
|
mpInstance._Persistence.update();
|
|
1610
|
+
mpInstance._Store.syncPersistenceData();
|
|
1613
1611
|
|
|
1614
1612
|
mpInstance._Persistence.findPrevCookiesBasedOnUI(
|
|
1615
1613
|
identityApiData
|
package/src/mp-instance.js
CHANGED
|
@@ -1310,6 +1310,7 @@ function completeSDKInitialization(apiKey, config, mpInstance) {
|
|
|
1310
1310
|
|
|
1311
1311
|
// Load any settings/identities/attributes from cookie or localStorage
|
|
1312
1312
|
mpInstance._Persistence.initializeStorage();
|
|
1313
|
+
mpInstance._Store.syncPersistenceData();
|
|
1313
1314
|
|
|
1314
1315
|
// Set up user identitiy variables for later use
|
|
1315
1316
|
const currentUser = mpInstance.Identity.getCurrentUser();
|
|
@@ -14,9 +14,9 @@ import {
|
|
|
14
14
|
SessionAttributes,
|
|
15
15
|
} from './store';
|
|
16
16
|
import { Dictionary } from './utils';
|
|
17
|
+
import { IMinifiedConsentJSONObject } from './consent';
|
|
17
18
|
import { UserAttributes } from './identity-user-interfaces';
|
|
18
19
|
|
|
19
|
-
export type CookieSyncDate = Dictionary<string>;
|
|
20
20
|
export type UploadsTable = Dictionary<any>;
|
|
21
21
|
export interface iForwardingStatsBatches {
|
|
22
22
|
uploadsTable: UploadsTable;
|
|
@@ -46,7 +46,7 @@ export interface IPersistenceMinified extends Dictionary {
|
|
|
46
46
|
|
|
47
47
|
// Persistence Minified can also store optional dictionaries with
|
|
48
48
|
// an idex of MPID
|
|
49
|
-
// [mpid: MPID]: Dictionary<
|
|
49
|
+
// [mpid: MPID]: Dictionary<IUserPersistenceMinified>;
|
|
50
50
|
|
|
51
51
|
// For Example:
|
|
52
52
|
// {
|
|
@@ -68,14 +68,34 @@ export interface IPersistenceMinified extends Dictionary {
|
|
|
68
68
|
// },
|
|
69
69
|
// l: false,
|
|
70
70
|
// MPID1: {
|
|
71
|
-
// csd:
|
|
71
|
+
// csd: {
|
|
72
|
+
// [moduleid]: 1234567890,
|
|
73
|
+
// },
|
|
72
74
|
// ui: {
|
|
73
75
|
// customerid: '12346',
|
|
74
76
|
// },
|
|
77
|
+
// ua: {
|
|
78
|
+
// age '42',
|
|
79
|
+
// },
|
|
75
80
|
// },
|
|
76
81
|
// };
|
|
77
82
|
}
|
|
78
83
|
|
|
84
|
+
export type CookieSyncDate = Dictionary<number>;
|
|
85
|
+
|
|
86
|
+
export interface IUserPersistenceMinified extends Dictionary {
|
|
87
|
+
csd: CookieSyncDate; // Cookie Sync Dates // list of timestamps for last cookie sync
|
|
88
|
+
con: IMinifiedConsentJSONObject; // Consent State
|
|
89
|
+
ui: UserIdentities; // User Identities
|
|
90
|
+
ua: UserAttributes; // User Attributes
|
|
91
|
+
|
|
92
|
+
// https://go.mparticle.com/work/SQDSDKS-6048
|
|
93
|
+
cp: Product[]; // Cart Products
|
|
94
|
+
|
|
95
|
+
fst: number; // First Seen Time
|
|
96
|
+
lst: number; // Last Seen Time
|
|
97
|
+
}
|
|
98
|
+
|
|
79
99
|
export interface IPersistence {
|
|
80
100
|
useLocalStorage(): boolean;
|
|
81
101
|
initializeStorage(): void;
|
|
@@ -114,10 +134,8 @@ export interface IPersistence {
|
|
|
114
134
|
userAttributes: UserAttributes
|
|
115
135
|
): void;
|
|
116
136
|
saveUserCookieSyncDatesToPersistence(mpid: MPID, csd: CookieSyncDate): void;
|
|
117
|
-
saveUserConsentStateToCookies(mpid, consentState: ConsentState): void;
|
|
118
137
|
savePersistence(persistance: IPersistenceMinified): void;
|
|
119
138
|
getPersistence(): IPersistenceMinified;
|
|
120
|
-
getConsentState(mpid: MPID): ConsentState | null;
|
|
121
139
|
getFirstSeenTime(mpid: MPID): string | null;
|
|
122
140
|
setFirstSeenTime(mpid: MPID, time: number): void;
|
|
123
141
|
getLastSeenTime(mpid: MPID): number | null;
|
package/src/persistence.js
CHANGED
|
@@ -937,6 +937,7 @@ export default function _Persistence(mpInstance) {
|
|
|
937
937
|
);
|
|
938
938
|
}
|
|
939
939
|
};
|
|
940
|
+
|
|
940
941
|
this.saveUserIdentitiesToPersistence = function(mpid, userIdentities) {
|
|
941
942
|
if (userIdentities) {
|
|
942
943
|
var persistence = self.getPersistence();
|
|
@@ -988,30 +989,6 @@ export default function _Persistence(mpInstance) {
|
|
|
988
989
|
}
|
|
989
990
|
};
|
|
990
991
|
|
|
991
|
-
this.saveUserConsentStateToCookies = function(mpid, consentState) {
|
|
992
|
-
//it's currently not supported to set persistence
|
|
993
|
-
//for any MPID that's not the current one.
|
|
994
|
-
if (consentState || consentState === null) {
|
|
995
|
-
var persistence = self.getPersistence();
|
|
996
|
-
if (persistence) {
|
|
997
|
-
if (persistence[mpid]) {
|
|
998
|
-
persistence[
|
|
999
|
-
mpid
|
|
1000
|
-
].con = mpInstance._Consent.ConsentSerialization.toMinifiedJsonObject(
|
|
1001
|
-
consentState
|
|
1002
|
-
);
|
|
1003
|
-
} else {
|
|
1004
|
-
persistence[mpid] = {
|
|
1005
|
-
con: mpInstance._Consent.ConsentSerialization.toMinifiedJsonObject(
|
|
1006
|
-
consentState
|
|
1007
|
-
),
|
|
1008
|
-
};
|
|
1009
|
-
}
|
|
1010
|
-
self.savePersistence(persistence);
|
|
1011
|
-
}
|
|
1012
|
-
}
|
|
1013
|
-
};
|
|
1014
|
-
|
|
1015
992
|
this.swapCurrentUser = function(
|
|
1016
993
|
previousMPID,
|
|
1017
994
|
currentMPID,
|
|
@@ -1080,18 +1057,6 @@ export default function _Persistence(mpInstance) {
|
|
|
1080
1057
|
return persistence;
|
|
1081
1058
|
};
|
|
1082
1059
|
|
|
1083
|
-
this.getConsentState = function(mpid) {
|
|
1084
|
-
var persistence = self.getPersistence();
|
|
1085
|
-
|
|
1086
|
-
if (persistence && persistence[mpid] && persistence[mpid].con) {
|
|
1087
|
-
return mpInstance._Consent.ConsentSerialization.fromMinifiedJsonObject(
|
|
1088
|
-
persistence[mpid].con
|
|
1089
|
-
);
|
|
1090
|
-
} else {
|
|
1091
|
-
return null;
|
|
1092
|
-
}
|
|
1093
|
-
};
|
|
1094
|
-
|
|
1095
1060
|
this.getFirstSeenTime = function(mpid) {
|
|
1096
1061
|
if (!mpid) {
|
|
1097
1062
|
return null;
|
package/src/store.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Batch } from '@mparticle/event-models';
|
|
2
|
-
import { Context } from '@mparticle/event-models';
|
|
1
|
+
import { Batch, Context } from '@mparticle/event-models';
|
|
3
2
|
import {
|
|
4
3
|
DataPlanConfig,
|
|
5
4
|
MPID,
|
|
6
5
|
IdentifyRequest,
|
|
7
6
|
SDKEventCustomFlags,
|
|
7
|
+
ConsentState,
|
|
8
8
|
} from '@mparticle/web-sdk';
|
|
9
9
|
import { IKitConfigs } from './configAPIClient';
|
|
10
10
|
import Constants from './constants';
|
|
@@ -29,10 +29,13 @@ import {
|
|
|
29
29
|
parseNumber,
|
|
30
30
|
returnConvertedBoolean,
|
|
31
31
|
} from './utils';
|
|
32
|
-
import { SDKConsentState } from './consent';
|
|
32
|
+
import { IMinifiedConsentJSONObject, SDKConsentState } from './consent';
|
|
33
33
|
import { Kit, MPForwarder } from './forwarders.interfaces';
|
|
34
|
-
import { IPersistenceMinified } from './persistence.interfaces';
|
|
35
34
|
import { IdentityCallback } from './identity-user-interfaces';
|
|
35
|
+
import {
|
|
36
|
+
IGlobalStoreV2MinifiedKeys,
|
|
37
|
+
IPersistenceMinified,
|
|
38
|
+
} from './persistence.interfaces';
|
|
36
39
|
|
|
37
40
|
// This represents the runtime configuration of the SDK AFTER
|
|
38
41
|
// initialization has been complete and all settings and
|
|
@@ -180,6 +183,12 @@ export interface IStore {
|
|
|
180
183
|
|
|
181
184
|
persistenceData?: IPersistenceMinified;
|
|
182
185
|
|
|
186
|
+
getConsentState?(mpid: MPID): ConsentState | null;
|
|
187
|
+
setConsentState?(mpid: MPID, consentState: ConsentState): void;
|
|
188
|
+
|
|
189
|
+
_getFromPersistence?<T>(mpid: MPID, key: string): T;
|
|
190
|
+
_setPersistence?<T>(mpid: MPID, key: string, value: T): void;
|
|
191
|
+
|
|
183
192
|
getDeviceId?(): string;
|
|
184
193
|
setDeviceId?(deviceId: string): void;
|
|
185
194
|
getFirstSeenTime?(mpid: MPID): number;
|
|
@@ -191,6 +200,7 @@ export interface IStore {
|
|
|
191
200
|
hasInvalidIdentifyRequest?: () => boolean;
|
|
192
201
|
nullifySession?: () => void;
|
|
193
202
|
processConfig(config: SDKInitConfig): void;
|
|
203
|
+
syncPersistenceData?: () => void;
|
|
194
204
|
}
|
|
195
205
|
|
|
196
206
|
// TODO: Merge this with SDKStoreApi in sdkRuntimeModels
|
|
@@ -253,24 +263,8 @@ export default function Store(
|
|
|
253
263
|
|
|
254
264
|
// Placeholder for in-memory persistence model
|
|
255
265
|
persistenceData: {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
sid: null,
|
|
259
|
-
ie: null,
|
|
260
|
-
sa: null,
|
|
261
|
-
ss: null,
|
|
262
|
-
dt: null,
|
|
263
|
-
av: null,
|
|
264
|
-
cgid: null,
|
|
265
|
-
das: null,
|
|
266
|
-
ia: null,
|
|
267
|
-
c: null,
|
|
268
|
-
csm: null,
|
|
269
|
-
les: null,
|
|
270
|
-
ssd: null,
|
|
271
|
-
},
|
|
272
|
-
l: null,
|
|
273
|
-
},
|
|
266
|
+
gs: {} as IGlobalStoreV2MinifiedKeys,
|
|
267
|
+
} as IPersistenceMinified,
|
|
274
268
|
};
|
|
275
269
|
|
|
276
270
|
for (var key in defaultStore) {
|
|
@@ -479,6 +473,53 @@ export default function Store(
|
|
|
479
473
|
}
|
|
480
474
|
}
|
|
481
475
|
|
|
476
|
+
this._getFromPersistence = <T>(mpid: MPID, key: string): T | null => {
|
|
477
|
+
if (!mpid) {
|
|
478
|
+
return null;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
this.syncPersistenceData();
|
|
482
|
+
|
|
483
|
+
if (
|
|
484
|
+
this.persistenceData &&
|
|
485
|
+
this.persistenceData[mpid] &&
|
|
486
|
+
this.persistenceData[mpid][key]
|
|
487
|
+
) {
|
|
488
|
+
return this.persistenceData[mpid][key] as T;
|
|
489
|
+
} else {
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
this._setPersistence = <T>(mpid: MPID, key: string, value: T): void => {
|
|
495
|
+
if (!mpid) {
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
this.syncPersistenceData();
|
|
500
|
+
|
|
501
|
+
if (this.persistenceData) {
|
|
502
|
+
if (this.persistenceData[mpid]) {
|
|
503
|
+
this.persistenceData[mpid][key] = value;
|
|
504
|
+
} else {
|
|
505
|
+
this.persistenceData[mpid] = {
|
|
506
|
+
[key]: value,
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// Clear out persistence attributes that are empty
|
|
511
|
+
// so that we don't upload empty or undefined values
|
|
512
|
+
if (
|
|
513
|
+
isObject(this.persistenceData[mpid][key]) &&
|
|
514
|
+
isEmpty(this.persistenceData[mpid][key])
|
|
515
|
+
) {
|
|
516
|
+
delete this.persistenceData[mpid][key];
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
mpInstance._Persistence.savePersistence(this.persistenceData);
|
|
520
|
+
}
|
|
521
|
+
};
|
|
522
|
+
|
|
482
523
|
this.hasInvalidIdentifyRequest = (): boolean => {
|
|
483
524
|
const { identifyRequest } = this.SDKConfig;
|
|
484
525
|
return (
|
|
@@ -487,47 +528,52 @@ export default function Store(
|
|
|
487
528
|
isEmpty(identifyRequest.userIdentities)) ||
|
|
488
529
|
!identifyRequest
|
|
489
530
|
);
|
|
490
|
-
}
|
|
531
|
+
}
|
|
491
532
|
|
|
492
|
-
|
|
493
|
-
this.setDeviceId = (deviceId: string) => {
|
|
494
|
-
this.deviceId = deviceId;
|
|
495
|
-
this.persistenceData.gs.das = deviceId;
|
|
496
|
-
mpInstance._Persistence.update();
|
|
497
|
-
};
|
|
533
|
+
|
|
498
534
|
|
|
499
|
-
this.
|
|
500
|
-
const
|
|
535
|
+
this.getConsentState = (mpid: MPID): ConsentState => {
|
|
536
|
+
const {
|
|
537
|
+
fromMinifiedJsonObject,
|
|
538
|
+
} = mpInstance._Consent.ConsentSerialization;
|
|
539
|
+
|
|
540
|
+
const serializedConsentState = this._getFromPersistence<
|
|
541
|
+
IMinifiedConsentJSONObject
|
|
542
|
+
>(mpid, 'con');
|
|
501
543
|
|
|
502
|
-
if (
|
|
503
|
-
|
|
504
|
-
return;
|
|
544
|
+
if (!isEmpty(serializedConsentState)) {
|
|
545
|
+
return fromMinifiedJsonObject(serializedConsentState);
|
|
505
546
|
}
|
|
506
547
|
|
|
507
|
-
|
|
508
|
-
this.currentSessionMPIDs = moveElementToEnd(
|
|
509
|
-
this.currentSessionMPIDs,
|
|
510
|
-
indexOfMPID
|
|
511
|
-
);
|
|
512
|
-
}
|
|
548
|
+
return null;
|
|
513
549
|
};
|
|
514
550
|
|
|
515
|
-
this.
|
|
516
|
-
|
|
517
|
-
|
|
551
|
+
this.setConsentState = (mpid: MPID, consentState: ConsentState) => {
|
|
552
|
+
const {
|
|
553
|
+
toMinifiedJsonObject,
|
|
554
|
+
} = mpInstance._Consent.ConsentSerialization;
|
|
555
|
+
|
|
556
|
+
// If ConsentState is null, we assume the intent is to clear out the consent state
|
|
557
|
+
if (consentState || consentState === null) {
|
|
558
|
+
this._setPersistence(
|
|
559
|
+
mpid,
|
|
560
|
+
'con',
|
|
561
|
+
toMinifiedJsonObject(consentState)
|
|
562
|
+
);
|
|
518
563
|
}
|
|
564
|
+
};
|
|
519
565
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
)
|
|
525
|
-
return this.persistenceData[mpid].fst;
|
|
526
|
-
} else {
|
|
527
|
-
return null;
|
|
528
|
-
}
|
|
566
|
+
this.getDeviceId = () => this.deviceId;
|
|
567
|
+
this.setDeviceId = (deviceId: string) => {
|
|
568
|
+
this.deviceId = deviceId;
|
|
569
|
+
this.persistenceData.gs.das = deviceId;
|
|
570
|
+
mpInstance._Persistence.update();
|
|
529
571
|
};
|
|
530
572
|
|
|
573
|
+
|
|
574
|
+
this.getFirstSeenTime = (mpid: MPID) =>
|
|
575
|
+
this._getFromPersistence<number>(mpid, 'fst');
|
|
576
|
+
|
|
531
577
|
this.setFirstSeenTime = (mpid: MPID, _time?: number) => {
|
|
532
578
|
if (!mpid) {
|
|
533
579
|
return;
|
|
@@ -535,35 +581,20 @@ export default function Store(
|
|
|
535
581
|
|
|
536
582
|
const time = _time || new Date().getTime();
|
|
537
583
|
|
|
538
|
-
|
|
539
|
-
if (!this.persistenceData[mpid]) {
|
|
540
|
-
this.persistenceData[mpid] = {};
|
|
541
|
-
}
|
|
542
|
-
if (!this.persistenceData[mpid].fst) {
|
|
543
|
-
this.persistenceData[mpid].fst = time;
|
|
544
|
-
mpInstance._Persistence.savePersistence(this.persistenceData);
|
|
545
|
-
}
|
|
546
|
-
}
|
|
584
|
+
this._setPersistence(mpid, 'fst', time);
|
|
547
585
|
};
|
|
548
586
|
|
|
549
|
-
this.getLastSeenTime = (mpid: MPID) => {
|
|
587
|
+
this.getLastSeenTime = (mpid: MPID): number => {
|
|
550
588
|
if (!mpid) {
|
|
551
589
|
return null;
|
|
552
590
|
}
|
|
553
|
-
//
|
|
591
|
+
// https://go.mparticle.com/work/SQDSDKS-6315
|
|
554
592
|
const currentUser = mpInstance.Identity.getCurrentUser();
|
|
555
593
|
if (mpid === currentUser?.getMPID()) {
|
|
556
594
|
// if the mpid is the current user, its last seen time is the current time
|
|
557
595
|
return new Date().getTime();
|
|
558
|
-
} else if (
|
|
559
|
-
this.persistenceData &&
|
|
560
|
-
this.persistenceData[mpid] &&
|
|
561
|
-
this.persistenceData[mpid].lst
|
|
562
|
-
) {
|
|
563
|
-
return this.persistenceData[mpid].lst;
|
|
564
|
-
} else {
|
|
565
|
-
return null;
|
|
566
596
|
}
|
|
597
|
+
return this._getFromPersistence<number>(mpid, 'lst');
|
|
567
598
|
};
|
|
568
599
|
|
|
569
600
|
this.setLastSeenTime = (mpid: MPID, _time?: number) => {
|
|
@@ -573,14 +604,32 @@ export default function Store(
|
|
|
573
604
|
|
|
574
605
|
const time = _time || new Date().getTime();
|
|
575
606
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
}
|
|
607
|
+
this._setPersistence(mpid, 'lst', time);
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
this.syncPersistenceData = () => {
|
|
611
|
+
const persistenceData = mpInstance._Persistence.getPersistence();
|
|
612
|
+
|
|
613
|
+
this.persistenceData = mpInstance._Helpers.extend(
|
|
614
|
+
{},
|
|
615
|
+
this.persistenceData,
|
|
616
|
+
persistenceData,
|
|
617
|
+
);
|
|
618
|
+
};
|
|
619
|
+
|
|
620
|
+
this.addMpidToSessionHistory = (mpid: MPID, previousMPID?: MPID): void => {
|
|
621
|
+
const indexOfMPID = this.currentSessionMPIDs.indexOf(mpid);
|
|
622
|
+
|
|
623
|
+
if (mpid && previousMPID !== mpid && indexOfMPID < 0) {
|
|
624
|
+
this.currentSessionMPIDs.push(mpid);
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
if (indexOfMPID >= 0) {
|
|
629
|
+
this.currentSessionMPIDs = moveElementToEnd(
|
|
630
|
+
this.currentSessionMPIDs,
|
|
631
|
+
indexOfMPID
|
|
632
|
+
);
|
|
584
633
|
}
|
|
585
634
|
};
|
|
586
635
|
|