-
Notifications
You must be signed in to change notification settings - Fork 71
/
store.ts
41 lines (34 loc) · 1.28 KB
/
store.ts
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
export interface ProvisionSession {
userId: string;
token: string;
expiresTs: number;
}
export interface ProvisioningStore {
getSessionForToken(token: string): Promise<ProvisionSession|null>|ProvisionSession|null;
createSession(session: ProvisionSession): Promise<void>|void;
deleteSession(token: string): Promise<void>|void;
deleteAllSessions(userId: string): Promise<void>|void;
}
export class MemoryProvisioningStore implements ProvisioningStore {
private readonly sessions = new Map<string, ProvisionSession>();
public getSessionForToken(token: string): ProvisionSession|null {
const session = this.sessions.get(token);
if (!session) {
return null;
}
return session;
}
public createSession(session: ProvisionSession): void {
if (this.sessions.has(session.token)) {
// Should be nearly impossible, but let's be safe
throw Error('Token conflict!');
}
this.sessions.set(session.token, session);
}
public deleteSession(token: string): void {
this.sessions.delete(token);
}
public deleteAllSessions(userId: string): void {
[...this.sessions.values()].filter((s) => s.userId === userId).forEach(s => this.sessions.delete(s.token));
}
}