11import { createChecker , type supportedConnectors } from "drizzle-schema-checker" ;
22import { getOAuthAccountsTableSchema , getSessionsTableSchema , getUsersTableSchema , getEmailVerificationCodesTableSchema } from "../database/lib/sqlite/schema.sqlite" ;
33import { drizzle as drizzleIntegration } from "db0/integrations/drizzle/index" ;
4- import type { ICreateOrLoginParams , ICreateUserParams , ILoginUserParams , ISlipAuthCoreOptions , SchemasMockValue , SlipAuthUser , tableNames } from "./types" ;
4+ import type { ICreateOrLoginParams , ICreateUserParams , ILoginUserParams , IPasswordHashingMethods , ISlipAuthCoreOptions , SchemasMockValue , SlipAuthUser , tableNames } from "./types" ;
55import { createSlipHooks } from "./hooks" ;
66import { UsersRepository } from "./repositories/UsersRepository" ;
77import { SessionsRepository } from "./repositories/SessionsRepository" ;
88import { OAuthAccountsRepository } from "./repositories/OAuthAccountsRepository" ;
99import { EmailVerificationCodesRepository } from "./repositories/EmailVerificationCodesRepository" ;
1010import type { SlipAuthPublicSession } from "../types" ;
11- import { defaultIdGenerationMethod , isValidEmail , defaultEmailVerificationCodeGenerationMethod } from "./email-and-password-utils" ;
12- import { hashPassword , verifyPassword } from "./password" ;
11+ import { defaultIdGenerationMethod , isValidEmail , defaultEmailVerificationCodeGenerationMethod , defaultHashPasswordMethod , defaultVerifyPasswordMethod } from "./email-and-password-utils" ;
1312import { InvalidEmailOrPasswordError , UnhandledError } from "./errors/SlipAuthError.js" ;
1413import type { Database } from "db0" ;
1514import { isWithinExpirationDate } from "oslo" ;
@@ -30,6 +29,8 @@ export class SlipAuthCore {
3029 #createRandomSessionId: ( ) => string ;
3130 #createRandomEmailVerificationCode: ( ) => string ;
3231
32+ #passwordHashingMethods: IPasswordHashingMethods ;
33+
3334 readonly schemas : SchemasMockValue ;
3435 readonly hooks = createSlipHooks ( ) ;
3536
@@ -62,6 +63,11 @@ export class SlipAuthCore {
6263 this . #createRandomUserId = defaultIdGenerationMethod ;
6364
6465 this . #createRandomEmailVerificationCode = defaultEmailVerificationCodeGenerationMethod ;
66+
67+ this . #passwordHashingMethods = {
68+ hash : defaultHashPasswordMethod ,
69+ verify : defaultHashPasswordMethod ,
70+ } ;
6571 }
6672
6773 public checkDbAndTables ( dialect : supportedConnectors ) {
@@ -105,7 +111,7 @@ export class SlipAuthCore {
105111 throw new InvalidEmailOrPasswordError ( "no password oauth user" ) ;
106112 }
107113
108- const validPassword = await verifyPassword ( existingUser . password , password ) ;
114+ const validPassword = await this . #passwordHashingMethods . verify ( existingUser . password , password ) ;
109115 if ( ! validPassword ) {
110116 throw new InvalidEmailOrPasswordError ( "login invalid password" ) ;
111117 }
@@ -131,7 +137,7 @@ export class SlipAuthCore {
131137 }
132138
133139 const userId = this . #createRandomUserId( ) ;
134- const passwordHash = await hashPassword ( password ) ;
140+ const passwordHash = await this . #passwordHashingMethods . hash ( password ) ;
135141
136142 try {
137143 const user = await this . #repos. users . insert ( userId , email , passwordHash ) ;
@@ -254,6 +260,11 @@ export class SlipAuthCore {
254260 this . #createRandomEmailVerificationCode = fn ;
255261 }
256262
263+ public setPasswordHashingMethods ( fn : ( ) => IPasswordHashingMethods ) {
264+ const methods = fn ( ) ;
265+ this . #passwordHashingMethods = methods ;
266+ }
267+
257268 public getSession ( sessionId : string ) {
258269 return this . #repos. sessions . findById ( sessionId ) ;
259270 }
0 commit comments