all files / src/sessions/ mem.js

44.44% Statements 16/36
35.71% Branches 5/14
25% Functions 1/4
44.44% Lines 16/36
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 641× 1× 1×   1×   1×   1×                             1× 5× 5× 5×     5×     1×                 1×             1×                       1×   1×  
const uuid = require('uuid');
const Promise = require('bluebird');
const co = Promise.coroutine;
 
let sessionMap = new Map();
 
const maxSessionAge_ms = 1000 * 60 * 180;
 
const set = (senderId) => {
    return new Promise((resolve, reject) => {
        let mapObj = {
            sessionId: uuid.v1(),
            lastUsed: new Date()
        };
        if (sessionMap.has(senderId)) {
            mapObj = sessionMap.get(senderId);
            mapObj.lastUsed = new Date();
        }
        sessionMap.set(senderId, mapObj);
        resolve();
    });
};
 
const get = co(function* (senderId, autoCreate) {
    autoCreate = typeof(autoCreate) !== 'undefined' ? autoCreate: false;
    let item = sessionMap.get(senderId);
    Iif (!item && autoCreate) {
        item = yield set(senderId);
    }
    return item ? item.sessionId : null;
});
 
let checkExists = co(function* (senderId) {
    let item = yield get(senderId);
    if (item) {
        return true;
    } else {
        return false;
    }
});
 
function printSessions() {
    sessionMap.forEach((item, key) => {
        console.log('SenderID:' + key + ' SessionId:' + item.sessionId + ' Last Used:' + item.lastUsed);
    });
};
 
 
function clearOldSessions() {
    let now = new Date();
    let sessionSize = sessionMap.size;
    sessionMap.forEach((item, key, map) => {
        if(Math.abs(now - item.lastUsed) > maxSessionAge_ms) {
            map.delete(key);
        }
    });
    console.log('Session Size ' + sessionMap.size + ' items. Removed ' + (sessionSize - sessionMap.size) + ' items');
};
 
//run frequently to remove sessions
setInterval(clearOldSessions, maxSessionAge_ms);
 
module.exports = { set, get, printSessions, checkExists };