session_token.ts (745B)
1 import { SESSION_TOKEN_TTL } from "#core/domain/constants.ts"; 2 import { isSafeEqual, nonceToken } from "#core/domain/crypto.ts"; 3 import { Ephemeral } from "#core/domain/ephemeral.ts"; 4 import { Token } from "#core/domain/token.ts"; 5 import { DomainError } from "#core/domain/error.ts"; 6 7 export class SessionToken extends Ephemeral<Token> { 8 static none() { 9 return new this(); 10 } 11 12 static issue() { 13 return new this( 14 nonceToken(), 15 Date.now() + SESSION_TOKEN_TTL, 16 ); 17 } 18 19 grant(candidate: Token) { 20 return isSafeEqual( 21 this.valueOf(), 22 candidate, 23 ); 24 } 25 } 26 27 export class ExpiredSessionToken extends DomainError { 28 constructor(options?: ErrorOptions) { 29 super("Expired session token", options); 30 } 31 }