@forestadmin/forestadmin-client
Version:
This package contains the logic to use the ForestAdmin API inside an agent.
42 lines • 3.9 kB
JavaScript
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=
;