async identify()

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
    },