async function get_userInfo()

in lambda/fulfillment/lib/middleware/2_preprocess.js [8:62]


async function get_userInfo(userId, idattrs, userPrefs = undefined) {
    var default_userInfo = {
        UserId: userId,
        InteractionCount: 1
    };
    var usersTable = process.env.DYNAMODB_USERSTABLE;
    var docClient = new AWS.DynamoDB.DocumentClient({ apiVersion: '2012-08-10' });
    var params = {
        TableName: usersTable,
        Key: {
            'UserId': userId
        },
    };
    qnabot.log("Getting user info for user: ", userId, "from DynamoDB table: ", usersTable);
    var ddbResponse = {};
    try {
        ddbResponse = await docClient.get(params).promise();
    } catch (e) {
        qnabot.log("DDB Exception caught.. can't retrieve userInfo: ", e)
    }
    qnabot.log("DDB Response: ", ddbResponse);
    var req_userInfo = _.get(ddbResponse, "Item", default_userInfo);
    // append user identity attributes if known
    if (_.get(idattrs, 'preferred_username')) {
        _.set(req_userInfo, 'preferred_username', _.get(idattrs, 'preferred_username'));
    }
    if (_.get(idattrs, 'cognito:username')) {
        _.set(req_userInfo, 'UserName', _.get(idattrs, 'cognito:username'));
    }
    if (_.get(idattrs, 'given_name')) {
        _.set(req_userInfo, 'GivenName', _.get(idattrs, 'given_name'));
    }
    if (_.get(idattrs, 'family_name')) {
        _.set(req_userInfo, 'FamilyName', _.get(idattrs, 'family_name'));
    }
    if (_.get(idattrs, 'email')) {
        _.set(req_userInfo, 'Email', _.get(idattrs, 'email'));
    }
    if (_.get(idattrs, 'verifiedIdentity')) {
        _.set(req_userInfo, 'isVerifiedIdentity', _.get(idattrs, 'verifiedIdentity'));
    }
    if (_.get(idattrs, 'profile')) {
        _.set(req_userInfo, 'Profile', _.get(idattrs, 'profile'));
    }
    // add session attributes userPrefs to user profile
    if (userPrefs) {
        _.set(req_userInfo, "userPrefs", userPrefs)
    }
    // append time since last seen
    var now = new Date();
    var lastSeen = Date.parse(req_userInfo.LastSeen || "1970/1/1 12:00:00");
    var timeSinceLastInteraction = Math.abs(now - lastSeen) / 1000; // seconds
    _.set(req_userInfo, 'TimeSinceLastInteraction', timeSinceLastInteraction);
    return req_userInfo;
}