auth.ts (2446B)
1 import { Auth } from "#core/domain/auth.ts"; 2 import { Code } from "#core/domain/code.ts"; 3 import { PasswordHash } from "#core/domain/crypto.ts"; 4 import { Email } from "#core/domain/email.ts"; 5 import { EmailChallenge } from "#core/domain/email_challenge.ts"; 6 import { Password } from "#core/domain/password.ts"; 7 import { SessionToken } from "#core/domain/session_token.ts"; 8 import { Token } from "#core/domain/token.ts"; 9 import { UUID } from "#core/domain/uuid.ts"; 10 11 export type AuthDto = { 12 uuid: string; 13 email: string; 14 emailVerified: boolean; 15 emailCode: string | null; 16 emailCodeExpire: Date; 17 emailChallengeRequest: number; 18 emailChallengeRequestExpire: Date; 19 emailChallengeAttempt: number; 20 emailChallengeAttemptExpire: Date; 21 passwordHash: string; 22 passwordAttempt: number; 23 passwordAttemptExpire: Date; 24 sessionToken: string | null; 25 sessionExpire: Date; 26 version: number; 27 }; 28 29 export function mapFromAuth(auth: Auth): AuthDto { 30 return { 31 uuid: auth.id.toString(), 32 email: auth.email.address.toString(), 33 emailVerified: auth.email.verified, 34 emailCode: auth.email.code?.toString() ?? null, 35 emailCodeExpire: new Date(auth.email.codeExpire), 36 emailChallengeRequest: auth.email.request, 37 emailChallengeRequestExpire: new Date(auth.email.requestExpire), 38 emailChallengeAttempt: auth.email.attempt, 39 emailChallengeAttemptExpire: new Date(auth.email.attemptExpire), 40 passwordHash: auth.password.hash.toString(), 41 passwordAttempt: auth.password.attemptCount, 42 passwordAttemptExpire: new Date(auth.password.attemptExpire), 43 sessionToken: auth.session.valueOf()?.toString() ?? null, 44 sessionExpire: new Date(auth.session.expire), 45 version: auth.version, 46 }; 47 } 48 49 export function mapToAuth(dto: AuthDto) { 50 return new Auth( 51 new UUID(dto.uuid), 52 new EmailChallenge( 53 new Email(dto.email), 54 dto.emailVerified, 55 dto.emailCode ? new Code(dto.emailCode) : undefined, 56 dto.emailCodeExpire.getTime(), 57 dto.emailChallengeRequest, 58 dto.emailChallengeRequestExpire.getTime(), 59 dto.emailChallengeAttempt, 60 dto.emailChallengeAttemptExpire.getTime(), 61 ), 62 new Password( 63 new PasswordHash(dto.passwordHash), 64 dto.passwordAttempt, 65 dto.passwordAttemptExpire?.getTime(), 66 ), 67 new SessionToken( 68 dto.sessionToken ? new Token(dto.sessionToken) : undefined, 69 dto.sessionExpire?.getTime(), 70 ), 71 dto.version, 72 ); 73 }