Archived
17 lines
866 B
JavaScript
17 lines
866 B
JavaScript
// Memory only. Nothing here is serialized to storage or exposed externally.
|
|||
|
|
export const AUTO_LOCK = 'human-auto-lock';
|
||
|
|
export const policies = ['close', '5', '15', '60'];
|
||
|
|
export class VaultSession {
|
||
|
|
constructor(now = Date.now) { this.now = now; this.clear(); }
|
||
|
|
clear() { this.key = null; this.owner = null; this.deadline = 0; this.policy = 'close'; this.epoch = (this.epoch || 0) + 1; }
|
||
|
|
set(key, owner, policy) {
|
||
|
|
if (!policies.includes(policy) || key.extractable !== false) throw new Error('Invalid session');
|
||
|
|
this.clear(); this.key = key; this.owner = owner; this.policy = policy;
|
||
|
|
this.deadline = policy === 'close' ? Infinity : this.now() + Number(policy) * 60000;
|
||
|
|
}
|
||
|
|
get(owner) {
|
||
|
|
if (this.now() >= this.deadline || owner !== this.owner) this.clear();
|
||
|
|
return this.key;
|
||
|
|
}
|
||
|
|
closed() { if (this.policy === 'close') this.clear(); }
|
||
|
|
}
|