UNPKG

@forestadmin/forestadmin-client

Version:

This package contains the logic to use the ForestAdmin API inside an agent.

42 lines 3.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class UserPermissionService { constructor(options, forestAdminServerInterface) { this.options = options; this.forestAdminServerInterface = forestAdminServerInterface; this.cacheExpirationTimestamp = 0; // The trick here is to keep the cache as a Promise and not a Map // in order to avoid doing the same HTTP request twice when // 2 calls are made to getUserInfo at the same time. this.userInfoById = null; } async getUserInfo(userId) { if (!this.cacheExpirationTimestamp || this.cacheExpirationTimestamp < Date.now() || // Only allow refetch when not using server events and not found (!this.options.instantCacheRefresh && !(await this.userInfoById).has(`${userId}`))) { this.cacheExpirationTimestamp = Date.now() + this.options.permissionsCacheDurationInSeconds * 1000; this.options.logger('Debug', `Refreshing user permissions cache`); // The response here is not awaited in order to be set in the cache // allowing subsequent calls to getUserInfo to use the cache even if // the response is not yet available. this.userInfoById = this.forestAdminServerInterface .getUsers(this.options) .then(users => new Map(users.map(user => [`${user.id}`, user]))) .catch(err => { // Don't cache rejected promises this.invalidateCache(); throw err; }); } return (await this.userInfoById).get(`${userId}`); } invalidateCache() { this.options.logger('Debug', 'Invalidating users permissions cache..'); this.userInfoById = undefined; this.cacheExpirationTimestamp = undefined; } } exports.default = UserPermissionService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Blcm1pc3Npb25zL3VzZXItcGVybWlzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE1BQXFCLHFCQUFxQjtJQVF4QyxZQUNtQixPQUE2QyxFQUM3QywwQkFBc0Q7UUFEdEQsWUFBTyxHQUFQLE9BQU8sQ0FBc0M7UUFDN0MsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQVRqRSw2QkFBd0IsR0FBRyxDQUFDLENBQUM7UUFFckMsaUVBQWlFO1FBQ2pFLDJEQUEyRDtRQUMzRCxvREFBb0Q7UUFDNUMsaUJBQVksR0FBMkMsSUFBSSxDQUFDO0lBS2pFLENBQUM7SUFFRyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQXVCO1FBQzlDLElBQ0UsQ0FBQyxJQUFJLENBQUMsd0JBQXdCO1lBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzFDLGdFQUFnRTtZQUNoRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUNsRjtZQUNBLElBQUksQ0FBQyx3QkFBd0I7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQztZQUVyRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztZQUVsRSxtRUFBbUU7WUFDbkUsb0VBQW9FO1lBQ3BFLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQywwQkFBMEI7aUJBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9ELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDWCxnQ0FBZ0M7Z0JBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFFdkUsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDOUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUEvQ0Qsd0NBK0NDIn0=