in src/web-ui/src/analytics/AnalyticsHandler.js [36:196]
async identify(user) {
if (!user) {
return Promise.resolve()
}
var promise
try {
const cognitoUser = await Vue.prototype.$Amplify.Auth.currentAuthenticatedUser()
const endpointId = AmplifyAnalytics.getPluggable('AWSPinpoint')._config.endpointId;
console.log('Pinpoint EndpointId Currently Active:');
console.log(endpointId);
let endpoint = {
userId: user.id,
optOut: 'NONE',
userAttributes: {
Username: [ user.username ],
ProfileEmail: [ user.email ],
FirstName: [ user.first_name ],
LastName: [ user.last_name ],
Gender: [ user.gender ],
Age: [ user.age.toString() ],
Persona: user.persona.split("_")
},
attributes: {}
}
if (user.sign_up_date) {
endpoint.attributes.SignUpDate = [ user.sign_up_date ]
}
if (user.last_sign_in_date) {
endpoint.attributes.LastSignInDate = [ user.last_sign_in_date ]
}
if (user.addresses && user.addresses.length > 0) {
let address = user.addresses[0]
endpoint.location = {
City: address.city,
Country: address.country,
PostalCode: address.zipcode,
Region: address.state
}
}
if (this.mParticleEnabled()) {
let identityRequest = {
userIdentities: {
email: user.email,
customerid: user.username
}
};
let identityCallback = function(result) {
if (result.getUser()) {
//proceed with login
let currentUser = result.getUser();
currentUser.setUserAttribute("$FirstName", user.first_name);
currentUser.setUserAttribute("$LastName", user.last_name);
currentUser.setUserAttribute("$Gender", user.gender);
currentUser.setUserAttribute("$Age", user.age);
currentUser.setUserAttribute("amazonPersonalizeId", user.id);
currentUser.setUserAttribute("Persona", user.persona);
currentUser.setUserAttribute("SignUpDate", user.sign_up_date);
currentUser.setUserAttribute("LastSignInDate", user.last_sign_in_date);
if (user.addresses && user.addresses.length > 0) {
let address = user.addresses[0]
currentUser.setUserAttribute("$City", address.city);
currentUser.setUserAttribute("$Country", address.country);
currentUser.setUserAttribute("$Zip", address.zipcode);
currentUser.setUserAttribute("$State", address.state);
}
window.mParticle.logEvent(
'Set User',
window.mParticle.EventType.Transaction, {}
);
}
};
window.mParticle.Identity.login(identityRequest, identityCallback);
}
if (cognitoUser.attributes.email) {
endpoint.address = cognitoUser.attributes.email
endpoint.channelType = 'EMAIL'
promise = AmplifyAnalytics.updateEndpoint(endpoint)
}
else {
promise = Promise.resolve()
}
}
catch(error) {
// eslint-disable-next-line
console.log(error)
promise = Promise.reject(error)
}
if (this.personalizeEventTrackerEnabled()) {
AmplifyAnalytics.record({
eventType: "Identify",
properties: {
"userId": user.id
}
}, 'AmazonPersonalize')
}
if (this.segmentEnabled()) {
let userProperties = {
username: user.username,
email: user.email,
firstName: user.first_name,
lastName: user.last_name,
gender: user.gender,
age: user.age,
persona: user.persona
};
window.analytics.identify(user.id, userProperties);
}
if (this.amplitudeEnabled()) {
// Amplitude identify call
Amplitude.getInstance().setUserId(user.id);
// Should we be doing this. Need to support case of switching
// users and not getting sessions confused.
Amplitude.getInstance().regenerateDeviceId();
var identify = new Amplitude.Identify()
.set('username', user.username)
.set('email', user.email)
.set('firstName', user.first_name)
.set('lastName', user.last_name)
.set('gender', user.gender)
.set('age', user.age)
.set('persona', user.persona)
if (user.sign_up_date) {
identify.setOnce('signUpDate', user.sign_up_date)
}
if (user.last_sign_in_date) {
identify.set('lastSignInDate', user.last_sign_in_date)
}
Amplitude.getInstance().identify(identify)
}
if (this.googleAnalyticsEnabled()) {
Vue.prototype.$gtag.set({
"user_id": user.id,
"user_properties": {
"age": user.age,
"gender": user.gender,
"persona": user.persona
}
});
}
return promise
},