src/session-revocation-types.tsTypeScript
@@ -0,0 +1,56 @@
1+
export interface SessionToken {2+
sessionId: string;3+
userId: string;4+
revocationEpoch: number;5+
expiresAt: string;6+
}7+
8+
export type RevocationEvent =9+
| {10+
eventId: string;11+
kind: "session-revoked";12+
sessionId: string;13+
userId: string;14+
}15+
| {16+
eventId: string;17+
kind: "user-epoch-raised";18+
userId: string;19+
newEpoch: number;20+
};21+
22+
export interface RegionalRevocationCache {23+
getSessionRevoked(sessionId: string): Promise<boolean | undefined>;24+
getUserEpoch(userId: string): Promise<number | undefined>;25+
setSessionRevoked(sessionId: string): Promise<void>;26+
setUserEpoch(userId: string, epoch: number): Promise<void>;27+
raiseUserEpoch(userId: string, epoch: number): Promise<void>;28+
}29+
30+
export interface RevocationAuthority {31+
isSessionRevoked(sessionId: string): Promise<boolean>;32+
getUserEpoch(userId: string): Promise<number>;33+
}34+
35+
export interface RevocationRepository {36+
revokeSession(sessionId: string, requestKey: string): Promise<void>;37+
incrementUserEpoch(userId: string, requestKey: string): Promise<number>;38+
revokeSessionAndEnqueue(39+
sessionId: string,40+
userId: string,41+
requestKey: string,42+
): Promise<void>;43+
incrementUserEpochAndEnqueue(44+
userId: string,45+
requestKey: string,46+
): Promise<number>;47+
}48+
49+
export interface EventBus {50+
publish(event: RevocationEvent): Promise<void>;51+
}52+
53+
export interface RevocationMessage {54+
event: RevocationEvent;55+
ack(): Promise<void>;56+
}