Add LiveQuery
This commit is contained in:
38
src/LiveQuery/SessionTokenCache.js
Normal file
38
src/LiveQuery/SessionTokenCache.js
Normal file
@@ -0,0 +1,38 @@
|
||||
import Parse from 'parse/node';
|
||||
import LRU from 'lru-cache';
|
||||
import PLog from './PLog';
|
||||
|
||||
class SessionTokenCache {
|
||||
cache: Object;
|
||||
|
||||
constructor(timeout: number = 30 * 24 * 60 *60 * 1000, maxSize: number = 10000) {
|
||||
this.cache = new LRU({
|
||||
max: maxSize,
|
||||
maxAge: timeout
|
||||
});
|
||||
}
|
||||
|
||||
getUserId(sessionToken: string): any {
|
||||
if (!sessionToken) {
|
||||
return Parse.Promise.error('Empty sessionToken');
|
||||
}
|
||||
let userId = this.cache.get(sessionToken);
|
||||
if (userId) {
|
||||
PLog.verbose('Fetch userId %s of sessionToken %s from Cache', userId, sessionToken);
|
||||
return Parse.Promise.as(userId);
|
||||
}
|
||||
return Parse.User.become(sessionToken).then((user) => {
|
||||
PLog.verbose('Fetch userId %s of sessionToken %s from Parse', user.id, sessionToken);
|
||||
let userId = user.id;
|
||||
this.cache.set(sessionToken, userId);
|
||||
return Parse.Promise.as(userId);
|
||||
}, (error) => {
|
||||
PLog.error('Can not fetch userId for sessionToken %j, error %j', sessionToken, error);
|
||||
return Parse.Promise.error(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
SessionTokenCache
|
||||
}
|
||||
Reference in New Issue
Block a user