cca-auth-module 0.1.21 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application/useCase/RegisterUseCase.d.ts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +13 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -7
- package/dist/index.mjs.map +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/utils/Errors.d.ts +3 -0
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ export declare class RegisterUseCase implements IBaseService {
|
|
|
6
6
|
private readonly SALT_ROUNDS;
|
|
7
7
|
constructor(repository: AuthRepository);
|
|
8
8
|
initialize(): Promise<void>;
|
|
9
|
-
execute(email: string, name: string, password: string, role?: UserRole, adminPassword?: string): Promise<AuthEntity>;
|
|
9
|
+
execute(email: string, name: string, password: string, role?: UserRole, adminPassword?: string): Promise<AuthEntity | undefined>;
|
|
10
10
|
private normalizeAuthDTO;
|
|
11
11
|
private hashPassword;
|
|
12
12
|
private createAuthEntity;
|
package/dist/index.d.mts
CHANGED
|
@@ -18,7 +18,7 @@ declare class RegisterUseCase implements IBaseService {
|
|
|
18
18
|
private readonly SALT_ROUNDS;
|
|
19
19
|
constructor(repository: AuthRepository);
|
|
20
20
|
initialize(): Promise<void>;
|
|
21
|
-
execute(email: string, name: string, password: string, role?: UserRole, adminPassword?: string): Promise<AuthEntity>;
|
|
21
|
+
execute(email: string, name: string, password: string, role?: UserRole, adminPassword?: string): Promise<AuthEntity | undefined>;
|
|
22
22
|
private normalizeAuthDTO;
|
|
23
23
|
private hashPassword;
|
|
24
24
|
private createAuthEntity;
|
package/dist/index.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ declare class RegisterUseCase implements IBaseService {
|
|
|
18
18
|
private readonly SALT_ROUNDS;
|
|
19
19
|
constructor(repository: AuthRepository);
|
|
20
20
|
initialize(): Promise<void>;
|
|
21
|
-
execute(email: string, name: string, password: string, role?: UserRole, adminPassword?: string): Promise<AuthEntity>;
|
|
21
|
+
execute(email: string, name: string, password: string, role?: UserRole, adminPassword?: string): Promise<AuthEntity | undefined>;
|
|
22
22
|
private normalizeAuthDTO;
|
|
23
23
|
private hashPassword;
|
|
24
24
|
private createAuthEntity;
|
package/dist/index.js
CHANGED
|
@@ -128,6 +128,14 @@ var _JwtError = class _JwtError extends AppError {
|
|
|
128
128
|
};
|
|
129
129
|
__name(_JwtError, "JwtError");
|
|
130
130
|
var JwtError = _JwtError;
|
|
131
|
+
var _RegistrationError = class _RegistrationError extends AppError {
|
|
132
|
+
constructor(message) {
|
|
133
|
+
super(message, 400);
|
|
134
|
+
this.name = "RegistrationError";
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
__name(_RegistrationError, "RegistrationError");
|
|
138
|
+
var RegistrationError = _RegistrationError;
|
|
131
139
|
|
|
132
140
|
// src/utils/config.ts
|
|
133
141
|
var import_cca_core = require("cca-core");
|
|
@@ -343,13 +351,11 @@ var _LogoutUseCase = class _LogoutUseCase {
|
|
|
343
351
|
await (0, import_cca_core3.validateRepository)(this.repository, (repo) => repo.getAll());
|
|
344
352
|
}
|
|
345
353
|
async execute(authId) {
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
354
|
+
try {
|
|
355
|
+
await this.repository.logout(authId);
|
|
356
|
+
} catch (error) {
|
|
357
|
+
new NotFoundError("Auth not found");
|
|
349
358
|
}
|
|
350
|
-
auth.refreshToken = null;
|
|
351
|
-
auth.user.isActive = false;
|
|
352
|
-
await this.repository.update(auth.id, auth);
|
|
353
359
|
}
|
|
354
360
|
};
|
|
355
361
|
__name(_LogoutUseCase, "LogoutUseCase");
|
|
@@ -387,7 +393,7 @@ var _RegisterUseCase = class _RegisterUseCase {
|
|
|
387
393
|
);
|
|
388
394
|
return await this.repository.create(authEntity);
|
|
389
395
|
} catch (error) {
|
|
390
|
-
throw
|
|
396
|
+
throw new RegistrationError("Registration failed");
|
|
391
397
|
}
|
|
392
398
|
}
|
|
393
399
|
normalizeAuthDTO(dto) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/infrastructure/container/createAuthContainer.ts","../src/application/useCase/LoginUseCase.ts","../src/application/dtos/UserDTO.ts","../src/application/validators/authValidation.ts","../src/utils/Errors.ts","../src/utils/config.ts","../src/application/mappers/utils/mapper.ts","../src/application/mappers/createUserMappings.ts","../src/application/dtos/RegisterDTO.ts","../src/application/useCase/LogoutUseCase .ts","../src/application/useCase/RegisterUseCase.ts","../src/application/useCase/RefreshTokenUseCase.ts","../src/presentation/controller/AuthController.ts","../src/infrastructure/repository/AuthRepository.ts","../src/infrastructure/auth/JwtAuthService.ts"],"sourcesContent":["import { createAuthContainer } from \"./infrastructure/container/createAuthContainer\";\r\nimport { AuthController } from \"./presentation/controller/AuthController\";\r\n\r\nexport { createAuthContainer, AuthController};\r\n","import { BaseContainer, BaseDatabase } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\n\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { AuthController } from \"../../presentation/controller/AuthController\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../auth/JwtAuthService\";\r\n\r\nfunction createAuthContainer(database: BaseDatabase) {\r\n const container = new BaseContainer({ database });\r\n\r\n const authRepository = new AuthRepository(\r\n database.getRepository(AuthEntity)\r\n );\r\n container.registerRepository<AuthEntity>(\"AuthRepository\", authRepository);\r\n\r\n const jwtAuthService = new JwtAuthService(authRepository);\r\n container.registerService(\"JwtAuthService\", jwtAuthService);\r\n\r\n const loginUseCase = new LoginUseCase(authRepository, jwtAuthService);\r\n const logoutUseCase = new LogoutUseCase(authRepository);\r\n const registerUseCase = new RegisterUseCase(authRepository);\r\n const refreshTokenUseCase = new RefreshTokenUseCase(\r\n authRepository,\r\n jwtAuthService\r\n );\r\n container.registerService(\"LoginUseCase\", loginUseCase);\r\n container.registerService(\"RegisterUseCase\", registerUseCase);\r\n container.registerService(\"RefreshTokenUseCase\", refreshTokenUseCase);\r\n container.registerService(\"LogoutUseCase\", logoutUseCase);\r\n\r\n const authController = new AuthController(\r\n loginUseCase,\r\n logoutUseCase,\r\n registerUseCase,\r\n refreshTokenUseCase\r\n );\r\n\r\n return { container, authController };\r\n}\r\n\r\nexport { createAuthContainer };\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { UserDTO } from \"../dtos/UserDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { validateAdminSecret, validateLoginDTO } from \"../validators/authValidation\";\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\n\r\ninterface TokenPair {\r\n accessToken: string;\r\n refreshToken: string;\r\n}\r\n\r\ninterface LoginResponse {\r\n token: TokenPair;\r\n user: UserDTO;\r\n}\r\n\r\nexport class LoginUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly authService: JwtAuthService;\r\n\r\n constructor(\r\n repository: AuthRepository,\r\n authService: JwtAuthService\r\n ) {\r\n this.repository = repository;\r\n this.authService = authService\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(loginDTO: LoginDTO, adminPassword?: string): Promise<LoginResponse> {\r\n const auth = await this.validateLogin(loginDTO, adminPassword);\r\n const token = await this.handleAuthentication(auth);\r\n const userDTO = this.mapUserToDTO(auth.user);\r\n\r\n return { token, user: userDTO };\r\n }\r\n\r\n private async validateLogin(\r\n loginDTO: LoginDTO,\r\n adminPassword?: string\r\n ): Promise<AuthEntity> {\r\n const auth = await validateLoginDTO(loginDTO, this.repository);\r\n\r\n if (loginDTO.role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n\r\n return auth;\r\n }\r\n\r\n private async handleAuthentication(auth: AuthEntity): Promise<TokenPair> {\r\n const token = this.generateTokens(auth);\r\n await this.updateUserStatus(auth);\r\n await this.updateUserRefreshToken(auth, token.refreshToken);\r\n\r\n return token;\r\n }\r\n\r\n private generateTokens(auth: AuthEntity): TokenPair {\r\n return {\r\n accessToken: this.authService.generateAccessToken(auth.user),\r\n refreshToken: this.authService.generateRefreshToken(auth.user)\r\n };\r\n }\r\n\r\n private async updateUserStatus(auth: AuthEntity): Promise<void> {\r\n auth.user.lastLoginAt = new Date();\r\n auth.user.isActive = true;\r\n await this.repository.update(auth.id, auth);\r\n }\r\n\r\n private async updateUserRefreshToken(\r\n auth: AuthEntity,\r\n refreshToken: string\r\n ): Promise<void> {\r\n auth.refreshToken = refreshToken;\r\n await this.repository.update(auth.id, { refreshToken });\r\n }\r\n\r\n private mapUserToDTO(user: UserEntity): UserDTO {\r\n return mapper.map(user, UserEntity, UserDTO);\r\n }\r\n}","import { AutoMap } from \"@automapper/classes\";\r\nimport { UserRole } from \"cca-entities\";\r\n\r\nexport class UserDTO {\r\n @AutoMap()\r\n id!: string;\r\n\r\n @AutoMap()\r\n name!: string;\r\n\r\n @AutoMap()\r\n email!: string;\r\n\r\n @AutoMap()\r\n role!: UserRole;\r\n\r\n adminPassword?: string;\r\n}","import * as yup from \"yup\";\r\nimport { AuthEntity, UserRole } from \"cca-entities\";\r\nimport bcrypt from \"bcrypt\";\r\n\r\nimport {\r\n ForbiddenError,\r\n NotFoundError,\r\n ValidationError,\r\n} from \"../../utils/Errors\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nconst schemas = {\r\n id: yup.string().uuid(\"Invalid user ID format\"),\r\n email: yup\r\n .string()\r\n .email(\"Invalid email format\")\r\n .max(255, \"Email cannot exceed 255 characters\"),\r\n name: yup\r\n .string()\r\n .required(\"Name is required\")\r\n .min(2, \"Name must be at least 2 characters long\")\r\n .max(50, \"Name cannot exceed 50 characters\")\r\n .matches(/^[a-zA-Z\\s]+$/, \"Name must only contain letters and spaces\"),\r\n password: yup\r\n .string()\r\n .required(\"Password required\")\r\n .min(8, \"Password too short\")\r\n .max(100, \"Password too long\")\r\n .matches(\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]/,\r\n \"Password must contain uppercase, lowercase, number and special character\"\r\n ),\r\n role: yup\r\n .string()\r\n .required(\"Role is required\")\r\n .oneOf(Object.values(UserRole), \"Invalid role specified\"),\r\n};\r\n\r\nexport const validateEmail = async (\r\n email: string,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n const user = await repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\r\n \"The email address or password is incorrect. Please retry\"\r\n );\r\n }\r\n return user;\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid email format\");\r\n }\r\n};\r\n\r\nexport const validatePassword = async (password?: string): Promise<void> => {\r\n if (password) {\r\n try {\r\n await schemas.password.validate(password);\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid password format\");\r\n }\r\n }\r\n};\r\n\r\nexport const validateEmailUniqueness = async (\r\n repository: AuthRepository,\r\n email: string,\r\n excludeUserId?: string\r\n): Promise<void> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n\r\n const existingUser = await repository.findByEmail(email);\r\n\r\n if (!existingUser) return;\r\n if (existingUser.id === excludeUserId) return;\r\n\r\n throw new ValidationError(`Email ${email} is already in use.`);\r\n } catch (error: any) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"user email validation failed\");\r\n }\r\n};\r\n\r\nexport const validateRegisterDTO = async (\r\n auth: RegisterDTO,\r\n repository: AuthRepository\r\n): Promise<void> => {\r\n const { name, email, role, password } = auth;\r\n\r\n await Promise.all([\r\n schemas.name.validate(name),\r\n schemas.role.validate(role),\r\n validateEmailUniqueness(repository, email),\r\n validatePassword(password),\r\n ]);\r\n};\r\n\r\nexport const validateLoginDTO = async (\r\n data: LoginDTO,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n const { email, role, password } = data;\r\n\r\n await Promise.all([schemas.role.validate(role), schemas.password.validate(password)]);\r\n\r\n const auth = await validateEmail(email, repository);\r\n if (!auth || !auth.password) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const isMatch = await bcrypt.compare(password, auth.password);\r\n if (!isMatch) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return auth;\r\n};\r\n\r\nexport const validateAdminSecret = async (\r\n secretPassword?: string\r\n): Promise<void> => {\r\n if (!secretPassword) {\r\n throw new ValidationError(\"Admin password is required\");\r\n }\r\n\r\n try {\r\n const config = await getConfig();\r\n\r\n if (!config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"ADMIN_SECRET_PASSWORD not found in config\");\r\n }\r\n\r\n if (parseInt(secretPassword) !== config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"Invalid admin password\");\r\n }\r\n } catch (error) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"Error validating admin password\");\r\n }\r\n};\r\n","export class AppError extends Error {\r\n constructor(\r\n public message: string,\r\n public statusCode: number = 500,\r\n public name: string = \"AppError\"\r\n ) {\r\n super(message);\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n Error.captureStackTrace(this);\r\n }\r\n}\r\n\r\nexport class ValidationError extends AppError {\r\n constructor(message: string) {\r\n super(message, 400);\r\n this.name = \"ValidationError\";\r\n }\r\n}\r\n\r\nexport class ConfigNotFoundException extends AppError {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"ConfigNotFoundException\";\r\n }\r\n}\r\n\r\nexport class NotFoundError extends AppError {\r\n constructor(message: string) {\r\n super(message, 404, \"UserNotFoundError\");\r\n }\r\n}\r\n\r\nexport class ForbiddenError extends AppError {\r\n constructor(message: string = \"Forbidden access\") {\r\n super(message, 403);\r\n this.name = \"ForbiddenError\";\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends AppError {\r\n constructor(message: string = \"Unauthorized access\") {\r\n super(message, 401);\r\n this.name = \"UnauthorizedError\";\r\n }\r\n}\r\n\r\nexport class JwtError extends AppError {\r\n constructor(message: string) {\r\n super(message, 401);\r\n this.name = \"JwtError\";\r\n }\r\n}","import { findConfig } from \"cca-core\";\r\n\r\nexport const getConfig = async (): Promise<any> => {\r\n const configPath = await findConfig({\r\n fileName: \"cca.config.json\",\r\n maxDepth: 10,\r\n startPath: process.cwd(),\r\n });\r\n const configContent = await import(\"fs/promises\").then((fs) =>\r\n fs.readFile(configPath, \"utf-8\")\r\n );\r\n\r\n return JSON.parse(configContent);\r\n}","import { createMapper } from '@automapper/core';\r\nimport { classes } from '@automapper/classes';\r\n\r\nimport { createUserMappings } from '../createUserMappings';\r\n\r\nexport const mapper = createMapper({\r\n strategyInitializer: classes(),\r\n});\r\n\r\ncreateUserMappings(mapper);\r\n","import { Mapper, createMap, forMember, mapFrom } from '@automapper/core';\r\nimport { AuthEntity, UserEntity } from 'cca-entities';\r\n\r\nimport { RegisterDTO } from '../dtos/RegisterDTO';\r\nimport { UserDTO } from '../dtos/UserDTO';\r\n\r\nexport function createUserMappings(mapper: Mapper): void {\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n AuthEntity,\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.password, mapFrom(src => src.password)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n UserEntity,\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper,\r\n UserEntity,\r\n UserDTO,\r\n forMember(dest => dest.id, mapFrom(src => src.id)),\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n}","import { UserRole } from \"cca-entities\";\r\n\r\nexport class RegisterDTO {\r\n email!: string;\r\n name!: string;\r\n password!: string;\r\n role!: UserRole;\r\n adminPassword?: string;\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\n\r\nexport class LogoutUseCase implements IBaseService {\r\n private readonly repository: AuthRepository\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(authId: string): Promise<void> {\r\n const auth = await this.repository.findById(authId);\r\n if (!auth) {\r\n throw new Error('Auth not found');\r\n }\r\n\r\n auth.refreshToken = null as any;\r\n auth.user.isActive = false;\r\n\r\n await this.repository.update(auth.id, auth);\r\n }\r\n}","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\n\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { validateAdminSecret, validateRegisterDTO } from \"../validators/authValidation\";\r\n\r\nexport class RegisterUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly SALT_ROUNDS = 10;\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n public async execute(\r\n email: string,\r\n name: string,\r\n password: string,\r\n role: UserRole = UserRole.GUEST,\r\n adminPassword?: string\r\n ): Promise<AuthEntity> {\r\n try {\r\n\r\n const normalizedDTO = this.normalizeAuthDTO({\r\n email,\r\n name,\r\n password,\r\n role,\r\n adminPassword\r\n });\r\n \r\n if (role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n \r\n await validateRegisterDTO(normalizedDTO, this.repository);\r\n\r\n const hashedPassword = await this.hashPassword(normalizedDTO.password);\r\n const authEntity = await this.createAuthEntity(\r\n normalizedDTO,\r\n hashedPassword\r\n );\r\n\r\n return await this.repository.create(authEntity);\r\n } catch (error) {\r\n throw error instanceof Error ? error : new Error(\"Registration failed\");\r\n }\r\n }\r\n\r\n private normalizeAuthDTO(dto: RegisterDTO): RegisterDTO {\r\n return {\r\n name: dto.name.trim(),\r\n email: dto.email.trim().toLowerCase(),\r\n role: dto.role,\r\n password: dto.password.trim(),\r\n adminPassword: dto.adminPassword?.trim() \r\n };\r\n }\r\n\r\n private async hashPassword(password: string): Promise<string> {\r\n return await bcrypt.hash(password, this.SALT_ROUNDS);\r\n }\r\n\r\n private async createAuthEntity(dto: RegisterDTO, hashedPassword: string): Promise<AuthEntity> {\r\n const authEntity = mapper.map(dto, RegisterDTO, AuthEntity);\r\n const userEntity = mapper.map(dto, RegisterDTO, UserEntity);\r\n \r\n authEntity.password = hashedPassword;\r\n authEntity.refreshToken = \"\";\r\n authEntity.user = userEntity;\r\n authEntity.user.updatedAt = null as any;\r\n \r\n return authEntity;\r\n }\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\n\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nexport class RefreshTokenUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly service: JwtAuthService;\r\n\r\n constructor(repository: AuthRepository, service: JwtAuthService) {\r\n this.repository = repository;\r\n this.service = service;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(\r\n refreshToken: string\r\n ): Promise<{ accessToken: string; refreshToken: string } | null> {\r\n try {\r\n const decoded = await this.service.verifyRefreshToken(refreshToken);\r\n\r\n const auth = decoded.userId\r\n ? await this.repository.findById(decoded.userId)\r\n : null;\r\n\r\n if (!auth || auth.refreshToken !== refreshToken) {\r\n return null;\r\n }\r\n\r\n const accessToken = this.service.generateAccessToken(auth.user);\r\n const newRefreshToken = this.service.generateRefreshToken(auth.user);\r\n\r\n await this.repository.update(auth.id, {\r\n refreshToken: newRefreshToken,\r\n });\r\n\r\n return { accessToken, refreshToken: newRefreshToken };\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async verityToken(token: string): Promise<IDecodedToken> {\r\n return await this.service.verifyAccessToken(token);\r\n }\r\n}\r\n","import { NextFunction, Request, Response } from \"express\";\r\n\r\nimport { LoginDTO } from \"../../application/dtos/LoginDTO\";\r\nimport { RegisterDTO } from \"../../application/dtos/RegisterDTO\";\r\n\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { IRefreshTokenRequest } from \"../../domain/interfaces/IRefreshTokenRequest\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nexport class AuthController {\r\n private loginUseCase: LoginUseCase;\r\n private readonly logoutUseCase: LogoutUseCase;\r\n private registerUseCase: RegisterUseCase;\r\n private refreshTokenUseCase: RefreshTokenUseCase;\r\n\r\n constructor(\r\n loginUseCase: LoginUseCase,\r\n logoutUseCase: LogoutUseCase,\r\n registerUseCase: RegisterUseCase,\r\n refreshTokenUseCase: RefreshTokenUseCase\r\n ) {\r\n this.loginUseCase = loginUseCase;\r\n this.logoutUseCase = logoutUseCase;\r\n this.registerUseCase = registerUseCase;\r\n this.refreshTokenUseCase = refreshTokenUseCase;\r\n }\r\n\r\n login = async (req: Request, res: Response, next: NextFunction) => {\r\n try {\r\n const { adminPassword, ...loginDTO }: LoginDTO = req.body;\r\n const result = await this.loginUseCase.execute(loginDTO, adminPassword);\r\n res.status(201).json(result);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n logout = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n await this.logoutUseCase.execute(req.params.id);\r\n res.status(200).json({ message: 'Logged out successfully' });\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n register = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n const { email, name, password, role, adminPassword }: RegisterDTO = req.body;\r\n await this.registerUseCase.execute(email, name, password, role, adminPassword);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n refreshToken = async (req: Request, res: Response) => {\r\n const { refreshToken }: IRefreshTokenRequest = req.body;\r\n const result = await this.refreshTokenUseCase.execute(refreshToken);\r\n res.json(result);\r\n };\r\n\r\n verifyToken = async (token: string): Promise<IDecodedToken> => {\r\n return await this.refreshTokenUseCase.verityToken(token);\r\n };\r\n}\r\n","import { BaseRepository, IBaseRepository, IExtendedBaseRepository } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\nimport { Repository } from \"typeorm\";\r\n\r\nexport class AuthRepository\r\n extends BaseRepository<AuthEntity>\r\n implements IExtendedBaseRepository<AuthEntity> {\r\n constructor(repository: Repository<AuthEntity>) {\r\n super(repository);\r\n }\r\n\r\n async findByEmail(email: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .addSelect('auth.password')\r\n .where('auth.email = :email', { email });\r\n\r\n return await query.getOne();\r\n }\r\n\r\n async create(entity: Omit<AuthEntity, \"createdAt\">): Promise<AuthEntity> {\r\n return super.create(entity);\r\n }\r\n\r\n async findByUserId(userId: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .where('user.id = :userId', { userId });\r\n \r\n return await query.getOne();\r\n }\r\n \r\n async logout(userId: string): Promise<void> {\r\n const auth = await this.findByUserId(userId);\r\n if (!auth) {\r\n throw new Error('Auth not found');\r\n }\r\n \r\n auth.refreshToken = null as any;\r\n auth.user.isActive = false;\r\n \r\n await this.update(auth.id, auth);\r\n }\r\n}\r\n","import * as jwt from \"jsonwebtoken\";\r\nimport { Secret, SignOptions } from \"jsonwebtoken\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity } from \"cca-entities\";\r\n\r\nimport { IJwtConfig } from \"../../domain/interfaces/IJwtConfig\";\r\nimport { IAuthService } from \"../../domain/interfaces/IAuthService\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport {\r\n ForbiddenError,\r\n JwtError,\r\n NotFoundError,\r\n UnauthorizedError,\r\n} from \"../../utils/Errors\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nexport class JwtAuthService implements IBaseService, IAuthService {\r\n private jwtConfig: IJwtConfig | undefined;\r\n\r\n constructor(private readonly repository: AuthRepository, config?: IJwtConfig) {\r\n this.loadConfig(config);\r\n }\r\n\r\n private async loadConfig(config?: IJwtConfig) {\r\n const configData = await getConfig();\r\n this.jwtConfig = {\r\n accessTokenSecret: configData.JWT_ACCESS_SECRET || \"default-access-secret\",\r\n refreshTokenSecret: configData.JWT_REFRESH_SECRET || \"default-refresh-secret\",\r\n accessTokenExpiry: configData.ACCESS_TOKEN_EXPIRY || \"15m\",\r\n refreshTokenExpiry: configData.REFRESH_TOKEN_EXPIRY || \"7d\",\r\n ...config\r\n };\r\n this.validateConfiguration();\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await validateRepository(this.repository, repo => repo.getAll());\r\n }\r\n\r\n private validateConfiguration(): void {\r\n if (!this.jwtConfig?.accessTokenSecret || !this.jwtConfig?.refreshTokenSecret) {\r\n throw new JwtError(\"JWT secrets required in config\");\r\n }\r\n }\r\n\r\n async validateUser(email: string, password: string): Promise<AuthEntity | null> {\r\n const user = await this.repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const validPassword = await bcrypt.compare(password, user.password);\r\n if (!validPassword) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return user;\r\n }\r\n\r\n private verifyJwtConfig() {\r\n if (!this.jwtConfig) throw new JwtError(\"JWT config not loaded\");\r\n }\r\n\r\n generateAccessToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id, email: user.email, role: user.role },\r\n this.jwtConfig!.accessTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.accessTokenExpiry }\r\n );\r\n }\r\n\r\n generateRefreshToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id },\r\n this.jwtConfig!.refreshTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.refreshTokenExpiry }\r\n );\r\n }\r\n\r\n async verifyToken(token: string, secret: string): Promise<IDecodedToken> {\r\n try {\r\n return jwt.verify(token, secret) as IDecodedToken;\r\n } catch {\r\n throw new UnauthorizedError();\r\n }\r\n }\r\n\r\n async verifyAccessToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.accessTokenSecret);\r\n }\r\n\r\n async verifyRefreshToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.refreshTokenSecret);\r\n }\r\n}\r\n"],"mappings":"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","names":["import_cca_core","import_cca_entities","import_cca_core","import_cca_entities","bcrypt","import_core","import_classes","import_cca_entities","mapper","import_cca_core","import_cca_core","bcrypt","import_cca_entities","import_cca_core","import_cca_core","bcrypt","import_cca_core"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/infrastructure/container/createAuthContainer.ts","../src/application/useCase/LoginUseCase.ts","../src/application/dtos/UserDTO.ts","../src/application/validators/authValidation.ts","../src/utils/Errors.ts","../src/utils/config.ts","../src/application/mappers/utils/mapper.ts","../src/application/mappers/createUserMappings.ts","../src/application/dtos/RegisterDTO.ts","../src/application/useCase/LogoutUseCase .ts","../src/application/useCase/RegisterUseCase.ts","../src/application/useCase/RefreshTokenUseCase.ts","../src/presentation/controller/AuthController.ts","../src/infrastructure/repository/AuthRepository.ts","../src/infrastructure/auth/JwtAuthService.ts"],"sourcesContent":["import { createAuthContainer } from \"./infrastructure/container/createAuthContainer\";\r\nimport { AuthController } from \"./presentation/controller/AuthController\";\r\n\r\nexport { createAuthContainer, AuthController};\r\n","import { BaseContainer, BaseDatabase } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\n\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { AuthController } from \"../../presentation/controller/AuthController\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../auth/JwtAuthService\";\r\n\r\nfunction createAuthContainer(database: BaseDatabase) {\r\n const container = new BaseContainer({ database });\r\n\r\n const authRepository = new AuthRepository(\r\n database.getRepository(AuthEntity)\r\n );\r\n container.registerRepository<AuthEntity>(\"AuthRepository\", authRepository);\r\n\r\n const jwtAuthService = new JwtAuthService(authRepository);\r\n container.registerService(\"JwtAuthService\", jwtAuthService);\r\n\r\n const loginUseCase = new LoginUseCase(authRepository, jwtAuthService);\r\n const logoutUseCase = new LogoutUseCase(authRepository);\r\n const registerUseCase = new RegisterUseCase(authRepository);\r\n const refreshTokenUseCase = new RefreshTokenUseCase(\r\n authRepository,\r\n jwtAuthService\r\n );\r\n container.registerService(\"LoginUseCase\", loginUseCase);\r\n container.registerService(\"RegisterUseCase\", registerUseCase);\r\n container.registerService(\"RefreshTokenUseCase\", refreshTokenUseCase);\r\n container.registerService(\"LogoutUseCase\", logoutUseCase);\r\n\r\n const authController = new AuthController(\r\n loginUseCase,\r\n logoutUseCase,\r\n registerUseCase,\r\n refreshTokenUseCase\r\n );\r\n\r\n return { container, authController };\r\n}\r\n\r\nexport { createAuthContainer };\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { UserDTO } from \"../dtos/UserDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { validateAdminSecret, validateLoginDTO } from \"../validators/authValidation\";\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\n\r\ninterface TokenPair {\r\n accessToken: string;\r\n refreshToken: string;\r\n}\r\n\r\ninterface LoginResponse {\r\n token: TokenPair;\r\n user: UserDTO;\r\n}\r\n\r\nexport class LoginUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly authService: JwtAuthService;\r\n\r\n constructor(\r\n repository: AuthRepository,\r\n authService: JwtAuthService\r\n ) {\r\n this.repository = repository;\r\n this.authService = authService\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(loginDTO: LoginDTO, adminPassword?: string): Promise<LoginResponse> {\r\n const auth = await this.validateLogin(loginDTO, adminPassword);\r\n const token = await this.handleAuthentication(auth);\r\n const userDTO = this.mapUserToDTO(auth.user);\r\n\r\n return { token, user: userDTO };\r\n }\r\n\r\n private async validateLogin(\r\n loginDTO: LoginDTO,\r\n adminPassword?: string\r\n ): Promise<AuthEntity> {\r\n const auth = await validateLoginDTO(loginDTO, this.repository);\r\n\r\n if (loginDTO.role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n\r\n return auth;\r\n }\r\n\r\n private async handleAuthentication(auth: AuthEntity): Promise<TokenPair> {\r\n const token = this.generateTokens(auth);\r\n await this.updateUserStatus(auth);\r\n await this.updateUserRefreshToken(auth, token.refreshToken);\r\n\r\n return token;\r\n }\r\n\r\n private generateTokens(auth: AuthEntity): TokenPair {\r\n return {\r\n accessToken: this.authService.generateAccessToken(auth.user),\r\n refreshToken: this.authService.generateRefreshToken(auth.user)\r\n };\r\n }\r\n\r\n private async updateUserStatus(auth: AuthEntity): Promise<void> {\r\n auth.user.lastLoginAt = new Date();\r\n auth.user.isActive = true;\r\n await this.repository.update(auth.id, auth);\r\n }\r\n\r\n private async updateUserRefreshToken(\r\n auth: AuthEntity,\r\n refreshToken: string\r\n ): Promise<void> {\r\n auth.refreshToken = refreshToken;\r\n await this.repository.update(auth.id, { refreshToken });\r\n }\r\n\r\n private mapUserToDTO(user: UserEntity): UserDTO {\r\n return mapper.map(user, UserEntity, UserDTO);\r\n }\r\n}","import { AutoMap } from \"@automapper/classes\";\r\nimport { UserRole } from \"cca-entities\";\r\n\r\nexport class UserDTO {\r\n @AutoMap()\r\n id!: string;\r\n\r\n @AutoMap()\r\n name!: string;\r\n\r\n @AutoMap()\r\n email!: string;\r\n\r\n @AutoMap()\r\n role!: UserRole;\r\n\r\n adminPassword?: string;\r\n}","import * as yup from \"yup\";\r\nimport { AuthEntity, UserRole } from \"cca-entities\";\r\nimport bcrypt from \"bcrypt\";\r\n\r\nimport {\r\n ForbiddenError,\r\n NotFoundError,\r\n ValidationError,\r\n} from \"../../utils/Errors\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nconst schemas = {\r\n id: yup.string().uuid(\"Invalid user ID format\"),\r\n email: yup\r\n .string()\r\n .email(\"Invalid email format\")\r\n .max(255, \"Email cannot exceed 255 characters\"),\r\n name: yup\r\n .string()\r\n .required(\"Name is required\")\r\n .min(2, \"Name must be at least 2 characters long\")\r\n .max(50, \"Name cannot exceed 50 characters\")\r\n .matches(/^[a-zA-Z\\s]+$/, \"Name must only contain letters and spaces\"),\r\n password: yup\r\n .string()\r\n .required(\"Password required\")\r\n .min(8, \"Password too short\")\r\n .max(100, \"Password too long\")\r\n .matches(\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]/,\r\n \"Password must contain uppercase, lowercase, number and special character\"\r\n ),\r\n role: yup\r\n .string()\r\n .required(\"Role is required\")\r\n .oneOf(Object.values(UserRole), \"Invalid role specified\"),\r\n};\r\n\r\nexport const validateEmail = async (\r\n email: string,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n const user = await repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\r\n \"The email address or password is incorrect. Please retry\"\r\n );\r\n }\r\n return user;\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid email format\");\r\n }\r\n};\r\n\r\nexport const validatePassword = async (password?: string): Promise<void> => {\r\n if (password) {\r\n try {\r\n await schemas.password.validate(password);\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid password format\");\r\n }\r\n }\r\n};\r\n\r\nexport const validateEmailUniqueness = async (\r\n repository: AuthRepository,\r\n email: string,\r\n excludeUserId?: string\r\n): Promise<void> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n\r\n const existingUser = await repository.findByEmail(email);\r\n\r\n if (!existingUser) return;\r\n if (existingUser.id === excludeUserId) return;\r\n\r\n throw new ValidationError(`Email ${email} is already in use.`);\r\n } catch (error: any) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"user email validation failed\");\r\n }\r\n};\r\n\r\nexport const validateRegisterDTO = async (\r\n auth: RegisterDTO,\r\n repository: AuthRepository\r\n): Promise<void> => {\r\n const { name, email, role, password } = auth;\r\n\r\n await Promise.all([\r\n schemas.name.validate(name),\r\n schemas.role.validate(role),\r\n validateEmailUniqueness(repository, email),\r\n validatePassword(password),\r\n ]);\r\n};\r\n\r\nexport const validateLoginDTO = async (\r\n data: LoginDTO,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n const { email, role, password } = data;\r\n\r\n await Promise.all([schemas.role.validate(role), schemas.password.validate(password)]);\r\n\r\n const auth = await validateEmail(email, repository);\r\n if (!auth || !auth.password) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const isMatch = await bcrypt.compare(password, auth.password);\r\n if (!isMatch) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return auth;\r\n};\r\n\r\nexport const validateAdminSecret = async (\r\n secretPassword?: string\r\n): Promise<void> => {\r\n if (!secretPassword) {\r\n throw new ValidationError(\"Admin password is required\");\r\n }\r\n\r\n try {\r\n const config = await getConfig();\r\n\r\n if (!config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"ADMIN_SECRET_PASSWORD not found in config\");\r\n }\r\n\r\n if (parseInt(secretPassword) !== config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"Invalid admin password\");\r\n }\r\n } catch (error) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"Error validating admin password\");\r\n }\r\n};\r\n","export class AppError extends Error {\r\n constructor(\r\n public message: string,\r\n public statusCode: number = 500,\r\n public name: string = \"AppError\"\r\n ) {\r\n super(message);\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n Error.captureStackTrace(this);\r\n }\r\n}\r\n\r\nexport class ValidationError extends AppError {\r\n constructor(message: string) {\r\n super(message, 400);\r\n this.name = \"ValidationError\";\r\n }\r\n}\r\n\r\nexport class ConfigNotFoundException extends AppError {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"ConfigNotFoundException\";\r\n }\r\n}\r\n\r\nexport class NotFoundError extends AppError {\r\n constructor(message: string) {\r\n super(message, 404, \"UserNotFoundError\");\r\n }\r\n}\r\n\r\nexport class ForbiddenError extends AppError {\r\n constructor(message: string = \"Forbidden access\") {\r\n super(message, 403);\r\n this.name = \"ForbiddenError\";\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends AppError {\r\n constructor(message: string = \"Unauthorized access\") {\r\n super(message, 401);\r\n this.name = \"UnauthorizedError\";\r\n }\r\n}\r\n\r\nexport class JwtError extends AppError {\r\n constructor(message: string) {\r\n super(message, 401);\r\n this.name = \"JwtError\";\r\n }\r\n}\r\n\r\nexport class RegistrationError extends AppError {\r\n constructor(message: string) {\r\n super(message, 400);\r\n this.name = \"RegistrationError\";\r\n }\r\n}","import { findConfig } from \"cca-core\";\r\n\r\nexport const getConfig = async (): Promise<any> => {\r\n const configPath = await findConfig({\r\n fileName: \"cca.config.json\",\r\n maxDepth: 10,\r\n startPath: process.cwd(),\r\n });\r\n const configContent = await import(\"fs/promises\").then((fs) =>\r\n fs.readFile(configPath, \"utf-8\")\r\n );\r\n\r\n return JSON.parse(configContent);\r\n}","import { createMapper } from '@automapper/core';\r\nimport { classes } from '@automapper/classes';\r\n\r\nimport { createUserMappings } from '../createUserMappings';\r\n\r\nexport const mapper = createMapper({\r\n strategyInitializer: classes(),\r\n});\r\n\r\ncreateUserMappings(mapper);\r\n","import { Mapper, createMap, forMember, mapFrom } from '@automapper/core';\r\nimport { AuthEntity, UserEntity } from 'cca-entities';\r\n\r\nimport { RegisterDTO } from '../dtos/RegisterDTO';\r\nimport { UserDTO } from '../dtos/UserDTO';\r\n\r\nexport function createUserMappings(mapper: Mapper): void {\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n AuthEntity,\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.password, mapFrom(src => src.password)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n UserEntity,\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper,\r\n UserEntity,\r\n UserDTO,\r\n forMember(dest => dest.id, mapFrom(src => src.id)),\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n}","import { UserRole } from \"cca-entities\";\r\n\r\nexport class RegisterDTO {\r\n email!: string;\r\n name!: string;\r\n password!: string;\r\n role!: UserRole;\r\n adminPassword?: string;\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\nimport { NotFoundError } from \"../../utils/Errors\";\r\n\r\n\r\nexport class LogoutUseCase implements IBaseService {\r\n private readonly repository: AuthRepository\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(authId: string): Promise<void> {\r\n try {\r\n await this.repository.logout(authId);\r\n } catch (error) {\r\n new NotFoundError(\"Auth not found\");\r\n }\r\n }\r\n}","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\n\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { validateAdminSecret, validateRegisterDTO } from \"../validators/authValidation\";\r\nimport { RegistrationError } from \"../../utils/Errors\";\r\n\r\nexport class RegisterUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly SALT_ROUNDS = 10;\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n public async execute(\r\n email: string,\r\n name: string,\r\n password: string,\r\n role: UserRole = UserRole.GUEST,\r\n adminPassword?: string\r\n ): Promise<AuthEntity | undefined> {\r\n try {\r\n\r\n const normalizedDTO = this.normalizeAuthDTO({\r\n email,\r\n name,\r\n password,\r\n role,\r\n adminPassword\r\n });\r\n\r\n if (role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n\r\n await validateRegisterDTO(normalizedDTO, this.repository);\r\n\r\n const hashedPassword = await this.hashPassword(normalizedDTO.password);\r\n const authEntity = await this.createAuthEntity(\r\n normalizedDTO,\r\n hashedPassword\r\n );\r\n\r\n return await this.repository.create(authEntity);\r\n } catch (error) {\r\n throw new RegistrationError(\"Registration failed\");\r\n }\r\n }\r\n\r\n private normalizeAuthDTO(dto: RegisterDTO): RegisterDTO {\r\n return {\r\n name: dto.name.trim(),\r\n email: dto.email.trim().toLowerCase(),\r\n role: dto.role,\r\n password: dto.password.trim(),\r\n adminPassword: dto.adminPassword?.trim()\r\n };\r\n }\r\n\r\n private async hashPassword(password: string): Promise<string> {\r\n return await bcrypt.hash(password, this.SALT_ROUNDS);\r\n }\r\n\r\n private async createAuthEntity(dto: RegisterDTO, hashedPassword: string): Promise<AuthEntity> {\r\n const authEntity = mapper.map(dto, RegisterDTO, AuthEntity);\r\n const userEntity = mapper.map(dto, RegisterDTO, UserEntity);\r\n\r\n authEntity.password = hashedPassword;\r\n authEntity.refreshToken = \"\";\r\n authEntity.user = userEntity;\r\n authEntity.user.updatedAt = null as any;\r\n\r\n return authEntity;\r\n }\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\n\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nexport class RefreshTokenUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly service: JwtAuthService;\r\n\r\n constructor(repository: AuthRepository, service: JwtAuthService) {\r\n this.repository = repository;\r\n this.service = service;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(\r\n refreshToken: string\r\n ): Promise<{ accessToken: string; refreshToken: string } | null> {\r\n try {\r\n const decoded = await this.service.verifyRefreshToken(refreshToken);\r\n\r\n const auth = decoded.userId\r\n ? await this.repository.findById(decoded.userId)\r\n : null;\r\n\r\n if (!auth || auth.refreshToken !== refreshToken) {\r\n return null;\r\n }\r\n\r\n const accessToken = this.service.generateAccessToken(auth.user);\r\n const newRefreshToken = this.service.generateRefreshToken(auth.user);\r\n\r\n await this.repository.update(auth.id, {\r\n refreshToken: newRefreshToken,\r\n });\r\n\r\n return { accessToken, refreshToken: newRefreshToken };\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async verityToken(token: string): Promise<IDecodedToken> {\r\n return await this.service.verifyAccessToken(token);\r\n }\r\n}\r\n","import { NextFunction, Request, Response } from \"express\";\r\n\r\nimport { LoginDTO } from \"../../application/dtos/LoginDTO\";\r\nimport { RegisterDTO } from \"../../application/dtos/RegisterDTO\";\r\n\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { IRefreshTokenRequest } from \"../../domain/interfaces/IRefreshTokenRequest\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nexport class AuthController {\r\n private loginUseCase: LoginUseCase;\r\n private readonly logoutUseCase: LogoutUseCase;\r\n private registerUseCase: RegisterUseCase;\r\n private refreshTokenUseCase: RefreshTokenUseCase;\r\n\r\n constructor(\r\n loginUseCase: LoginUseCase,\r\n logoutUseCase: LogoutUseCase,\r\n registerUseCase: RegisterUseCase,\r\n refreshTokenUseCase: RefreshTokenUseCase\r\n ) {\r\n this.loginUseCase = loginUseCase;\r\n this.logoutUseCase = logoutUseCase;\r\n this.registerUseCase = registerUseCase;\r\n this.refreshTokenUseCase = refreshTokenUseCase;\r\n }\r\n\r\n login = async (req: Request, res: Response, next: NextFunction) => {\r\n try {\r\n const { adminPassword, ...loginDTO }: LoginDTO = req.body;\r\n const result = await this.loginUseCase.execute(loginDTO, adminPassword);\r\n res.status(201).json(result);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n logout = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n await this.logoutUseCase.execute(req.params.id);\r\n res.status(200).json({ message: 'Logged out successfully' });\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n register = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n const { email, name, password, role, adminPassword }: RegisterDTO = req.body;\r\n await this.registerUseCase.execute(email, name, password, role, adminPassword);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n refreshToken = async (req: Request, res: Response) => {\r\n const { refreshToken }: IRefreshTokenRequest = req.body;\r\n const result = await this.refreshTokenUseCase.execute(refreshToken);\r\n res.json(result);\r\n };\r\n\r\n verifyToken = async (token: string): Promise<IDecodedToken> => {\r\n return await this.refreshTokenUseCase.verityToken(token);\r\n };\r\n}\r\n","import { BaseRepository, IBaseRepository, IExtendedBaseRepository } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\nimport { Repository } from \"typeorm\";\r\n\r\nexport class AuthRepository\r\n extends BaseRepository<AuthEntity>\r\n implements IExtendedBaseRepository<AuthEntity> {\r\n constructor(repository: Repository<AuthEntity>) {\r\n super(repository);\r\n }\r\n\r\n async findByEmail(email: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .addSelect('auth.password')\r\n .where('auth.email = :email', { email });\r\n\r\n return await query.getOne();\r\n }\r\n\r\n async create(entity: Omit<AuthEntity, \"createdAt\">): Promise<AuthEntity> {\r\n return super.create(entity);\r\n }\r\n\r\n async findByUserId(userId: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .where('user.id = :userId', { userId });\r\n \r\n return await query.getOne();\r\n }\r\n \r\n async logout(userId: string): Promise<void> {\r\n const auth = await this.findByUserId(userId);\r\n if (!auth) {\r\n throw new Error('Auth not found');\r\n }\r\n \r\n auth.refreshToken = null as any;\r\n auth.user.isActive = false;\r\n \r\n await this.update(auth.id, auth);\r\n }\r\n}\r\n","import * as jwt from \"jsonwebtoken\";\r\nimport { Secret, SignOptions } from \"jsonwebtoken\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity } from \"cca-entities\";\r\n\r\nimport { IJwtConfig } from \"../../domain/interfaces/IJwtConfig\";\r\nimport { IAuthService } from \"../../domain/interfaces/IAuthService\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport {\r\n ForbiddenError,\r\n JwtError,\r\n NotFoundError,\r\n UnauthorizedError,\r\n} from \"../../utils/Errors\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nexport class JwtAuthService implements IBaseService, IAuthService {\r\n private jwtConfig: IJwtConfig | undefined;\r\n\r\n constructor(private readonly repository: AuthRepository, config?: IJwtConfig) {\r\n this.loadConfig(config);\r\n }\r\n\r\n private async loadConfig(config?: IJwtConfig) {\r\n const configData = await getConfig();\r\n this.jwtConfig = {\r\n accessTokenSecret: configData.JWT_ACCESS_SECRET || \"default-access-secret\",\r\n refreshTokenSecret: configData.JWT_REFRESH_SECRET || \"default-refresh-secret\",\r\n accessTokenExpiry: configData.ACCESS_TOKEN_EXPIRY || \"15m\",\r\n refreshTokenExpiry: configData.REFRESH_TOKEN_EXPIRY || \"7d\",\r\n ...config\r\n };\r\n this.validateConfiguration();\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await validateRepository(this.repository, repo => repo.getAll());\r\n }\r\n\r\n private validateConfiguration(): void {\r\n if (!this.jwtConfig?.accessTokenSecret || !this.jwtConfig?.refreshTokenSecret) {\r\n throw new JwtError(\"JWT secrets required in config\");\r\n }\r\n }\r\n\r\n async validateUser(email: string, password: string): Promise<AuthEntity | null> {\r\n const user = await this.repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const validPassword = await bcrypt.compare(password, user.password);\r\n if (!validPassword) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return user;\r\n }\r\n\r\n private verifyJwtConfig() {\r\n if (!this.jwtConfig) throw new JwtError(\"JWT config not loaded\");\r\n }\r\n\r\n generateAccessToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id, email: user.email, role: user.role },\r\n this.jwtConfig!.accessTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.accessTokenExpiry }\r\n );\r\n }\r\n\r\n generateRefreshToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id },\r\n this.jwtConfig!.refreshTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.refreshTokenExpiry }\r\n );\r\n }\r\n\r\n async verifyToken(token: string, secret: string): Promise<IDecodedToken> {\r\n try {\r\n return jwt.verify(token, secret) as IDecodedToken;\r\n } catch {\r\n throw new UnauthorizedError();\r\n }\r\n }\r\n\r\n async verifyAccessToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.accessTokenSecret);\r\n }\r\n\r\n async verifyRefreshToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.refreshTokenSecret);\r\n }\r\n}\r\n"],"mappings":"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","names":["import_cca_core","import_cca_entities","import_cca_core","import_cca_entities","bcrypt","import_core","import_classes","import_cca_entities","mapper","import_cca_core","import_cca_core","bcrypt","import_cca_entities","import_cca_core","import_cca_core","bcrypt","import_cca_core"]}
|
package/dist/index.mjs
CHANGED
|
@@ -94,6 +94,14 @@ var _JwtError = class _JwtError extends AppError {
|
|
|
94
94
|
};
|
|
95
95
|
__name(_JwtError, "JwtError");
|
|
96
96
|
var JwtError = _JwtError;
|
|
97
|
+
var _RegistrationError = class _RegistrationError extends AppError {
|
|
98
|
+
constructor(message) {
|
|
99
|
+
super(message, 400);
|
|
100
|
+
this.name = "RegistrationError";
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
__name(_RegistrationError, "RegistrationError");
|
|
104
|
+
var RegistrationError = _RegistrationError;
|
|
97
105
|
|
|
98
106
|
// src/utils/config.ts
|
|
99
107
|
import { findConfig } from "cca-core";
|
|
@@ -309,13 +317,11 @@ var _LogoutUseCase = class _LogoutUseCase {
|
|
|
309
317
|
await validateRepository2(this.repository, (repo) => repo.getAll());
|
|
310
318
|
}
|
|
311
319
|
async execute(authId) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
320
|
+
try {
|
|
321
|
+
await this.repository.logout(authId);
|
|
322
|
+
} catch (error) {
|
|
323
|
+
new NotFoundError("Auth not found");
|
|
315
324
|
}
|
|
316
|
-
auth.refreshToken = null;
|
|
317
|
-
auth.user.isActive = false;
|
|
318
|
-
await this.repository.update(auth.id, auth);
|
|
319
325
|
}
|
|
320
326
|
};
|
|
321
327
|
__name(_LogoutUseCase, "LogoutUseCase");
|
|
@@ -353,7 +359,7 @@ var _RegisterUseCase = class _RegisterUseCase {
|
|
|
353
359
|
);
|
|
354
360
|
return await this.repository.create(authEntity);
|
|
355
361
|
} catch (error) {
|
|
356
|
-
throw
|
|
362
|
+
throw new RegistrationError("Registration failed");
|
|
357
363
|
}
|
|
358
364
|
}
|
|
359
365
|
normalizeAuthDTO(dto) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/infrastructure/container/createAuthContainer.ts","../src/application/useCase/LoginUseCase.ts","../src/application/dtos/UserDTO.ts","../src/application/validators/authValidation.ts","../src/utils/Errors.ts","../src/utils/config.ts","../src/application/mappers/utils/mapper.ts","../src/application/mappers/createUserMappings.ts","../src/application/dtos/RegisterDTO.ts","../src/application/useCase/LogoutUseCase .ts","../src/application/useCase/RegisterUseCase.ts","../src/application/useCase/RefreshTokenUseCase.ts","../src/presentation/controller/AuthController.ts","../src/infrastructure/repository/AuthRepository.ts","../src/infrastructure/auth/JwtAuthService.ts"],"sourcesContent":["import { BaseContainer, BaseDatabase } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\n\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { AuthController } from \"../../presentation/controller/AuthController\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../auth/JwtAuthService\";\r\n\r\nfunction createAuthContainer(database: BaseDatabase) {\r\n const container = new BaseContainer({ database });\r\n\r\n const authRepository = new AuthRepository(\r\n database.getRepository(AuthEntity)\r\n );\r\n container.registerRepository<AuthEntity>(\"AuthRepository\", authRepository);\r\n\r\n const jwtAuthService = new JwtAuthService(authRepository);\r\n container.registerService(\"JwtAuthService\", jwtAuthService);\r\n\r\n const loginUseCase = new LoginUseCase(authRepository, jwtAuthService);\r\n const logoutUseCase = new LogoutUseCase(authRepository);\r\n const registerUseCase = new RegisterUseCase(authRepository);\r\n const refreshTokenUseCase = new RefreshTokenUseCase(\r\n authRepository,\r\n jwtAuthService\r\n );\r\n container.registerService(\"LoginUseCase\", loginUseCase);\r\n container.registerService(\"RegisterUseCase\", registerUseCase);\r\n container.registerService(\"RefreshTokenUseCase\", refreshTokenUseCase);\r\n container.registerService(\"LogoutUseCase\", logoutUseCase);\r\n\r\n const authController = new AuthController(\r\n loginUseCase,\r\n logoutUseCase,\r\n registerUseCase,\r\n refreshTokenUseCase\r\n );\r\n\r\n return { container, authController };\r\n}\r\n\r\nexport { createAuthContainer };\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { UserDTO } from \"../dtos/UserDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { validateAdminSecret, validateLoginDTO } from \"../validators/authValidation\";\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\n\r\ninterface TokenPair {\r\n accessToken: string;\r\n refreshToken: string;\r\n}\r\n\r\ninterface LoginResponse {\r\n token: TokenPair;\r\n user: UserDTO;\r\n}\r\n\r\nexport class LoginUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly authService: JwtAuthService;\r\n\r\n constructor(\r\n repository: AuthRepository,\r\n authService: JwtAuthService\r\n ) {\r\n this.repository = repository;\r\n this.authService = authService\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(loginDTO: LoginDTO, adminPassword?: string): Promise<LoginResponse> {\r\n const auth = await this.validateLogin(loginDTO, adminPassword);\r\n const token = await this.handleAuthentication(auth);\r\n const userDTO = this.mapUserToDTO(auth.user);\r\n\r\n return { token, user: userDTO };\r\n }\r\n\r\n private async validateLogin(\r\n loginDTO: LoginDTO,\r\n adminPassword?: string\r\n ): Promise<AuthEntity> {\r\n const auth = await validateLoginDTO(loginDTO, this.repository);\r\n\r\n if (loginDTO.role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n\r\n return auth;\r\n }\r\n\r\n private async handleAuthentication(auth: AuthEntity): Promise<TokenPair> {\r\n const token = this.generateTokens(auth);\r\n await this.updateUserStatus(auth);\r\n await this.updateUserRefreshToken(auth, token.refreshToken);\r\n\r\n return token;\r\n }\r\n\r\n private generateTokens(auth: AuthEntity): TokenPair {\r\n return {\r\n accessToken: this.authService.generateAccessToken(auth.user),\r\n refreshToken: this.authService.generateRefreshToken(auth.user)\r\n };\r\n }\r\n\r\n private async updateUserStatus(auth: AuthEntity): Promise<void> {\r\n auth.user.lastLoginAt = new Date();\r\n auth.user.isActive = true;\r\n await this.repository.update(auth.id, auth);\r\n }\r\n\r\n private async updateUserRefreshToken(\r\n auth: AuthEntity,\r\n refreshToken: string\r\n ): Promise<void> {\r\n auth.refreshToken = refreshToken;\r\n await this.repository.update(auth.id, { refreshToken });\r\n }\r\n\r\n private mapUserToDTO(user: UserEntity): UserDTO {\r\n return mapper.map(user, UserEntity, UserDTO);\r\n }\r\n}","import { AutoMap } from \"@automapper/classes\";\r\nimport { UserRole } from \"cca-entities\";\r\n\r\nexport class UserDTO {\r\n @AutoMap()\r\n id!: string;\r\n\r\n @AutoMap()\r\n name!: string;\r\n\r\n @AutoMap()\r\n email!: string;\r\n\r\n @AutoMap()\r\n role!: UserRole;\r\n\r\n adminPassword?: string;\r\n}","import * as yup from \"yup\";\r\nimport { AuthEntity, UserRole } from \"cca-entities\";\r\nimport bcrypt from \"bcrypt\";\r\n\r\nimport {\r\n ForbiddenError,\r\n NotFoundError,\r\n ValidationError,\r\n} from \"../../utils/Errors\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nconst schemas = {\r\n id: yup.string().uuid(\"Invalid user ID format\"),\r\n email: yup\r\n .string()\r\n .email(\"Invalid email format\")\r\n .max(255, \"Email cannot exceed 255 characters\"),\r\n name: yup\r\n .string()\r\n .required(\"Name is required\")\r\n .min(2, \"Name must be at least 2 characters long\")\r\n .max(50, \"Name cannot exceed 50 characters\")\r\n .matches(/^[a-zA-Z\\s]+$/, \"Name must only contain letters and spaces\"),\r\n password: yup\r\n .string()\r\n .required(\"Password required\")\r\n .min(8, \"Password too short\")\r\n .max(100, \"Password too long\")\r\n .matches(\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]/,\r\n \"Password must contain uppercase, lowercase, number and special character\"\r\n ),\r\n role: yup\r\n .string()\r\n .required(\"Role is required\")\r\n .oneOf(Object.values(UserRole), \"Invalid role specified\"),\r\n};\r\n\r\nexport const validateEmail = async (\r\n email: string,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n const user = await repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\r\n \"The email address or password is incorrect. Please retry\"\r\n );\r\n }\r\n return user;\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid email format\");\r\n }\r\n};\r\n\r\nexport const validatePassword = async (password?: string): Promise<void> => {\r\n if (password) {\r\n try {\r\n await schemas.password.validate(password);\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid password format\");\r\n }\r\n }\r\n};\r\n\r\nexport const validateEmailUniqueness = async (\r\n repository: AuthRepository,\r\n email: string,\r\n excludeUserId?: string\r\n): Promise<void> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n\r\n const existingUser = await repository.findByEmail(email);\r\n\r\n if (!existingUser) return;\r\n if (existingUser.id === excludeUserId) return;\r\n\r\n throw new ValidationError(`Email ${email} is already in use.`);\r\n } catch (error: any) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"user email validation failed\");\r\n }\r\n};\r\n\r\nexport const validateRegisterDTO = async (\r\n auth: RegisterDTO,\r\n repository: AuthRepository\r\n): Promise<void> => {\r\n const { name, email, role, password } = auth;\r\n\r\n await Promise.all([\r\n schemas.name.validate(name),\r\n schemas.role.validate(role),\r\n validateEmailUniqueness(repository, email),\r\n validatePassword(password),\r\n ]);\r\n};\r\n\r\nexport const validateLoginDTO = async (\r\n data: LoginDTO,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n const { email, role, password } = data;\r\n\r\n await Promise.all([schemas.role.validate(role), schemas.password.validate(password)]);\r\n\r\n const auth = await validateEmail(email, repository);\r\n if (!auth || !auth.password) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const isMatch = await bcrypt.compare(password, auth.password);\r\n if (!isMatch) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return auth;\r\n};\r\n\r\nexport const validateAdminSecret = async (\r\n secretPassword?: string\r\n): Promise<void> => {\r\n if (!secretPassword) {\r\n throw new ValidationError(\"Admin password is required\");\r\n }\r\n\r\n try {\r\n const config = await getConfig();\r\n\r\n if (!config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"ADMIN_SECRET_PASSWORD not found in config\");\r\n }\r\n\r\n if (parseInt(secretPassword) !== config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"Invalid admin password\");\r\n }\r\n } catch (error) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"Error validating admin password\");\r\n }\r\n};\r\n","export class AppError extends Error {\r\n constructor(\r\n public message: string,\r\n public statusCode: number = 500,\r\n public name: string = \"AppError\"\r\n ) {\r\n super(message);\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n Error.captureStackTrace(this);\r\n }\r\n}\r\n\r\nexport class ValidationError extends AppError {\r\n constructor(message: string) {\r\n super(message, 400);\r\n this.name = \"ValidationError\";\r\n }\r\n}\r\n\r\nexport class ConfigNotFoundException extends AppError {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"ConfigNotFoundException\";\r\n }\r\n}\r\n\r\nexport class NotFoundError extends AppError {\r\n constructor(message: string) {\r\n super(message, 404, \"UserNotFoundError\");\r\n }\r\n}\r\n\r\nexport class ForbiddenError extends AppError {\r\n constructor(message: string = \"Forbidden access\") {\r\n super(message, 403);\r\n this.name = \"ForbiddenError\";\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends AppError {\r\n constructor(message: string = \"Unauthorized access\") {\r\n super(message, 401);\r\n this.name = \"UnauthorizedError\";\r\n }\r\n}\r\n\r\nexport class JwtError extends AppError {\r\n constructor(message: string) {\r\n super(message, 401);\r\n this.name = \"JwtError\";\r\n }\r\n}","import { findConfig } from \"cca-core\";\r\n\r\nexport const getConfig = async (): Promise<any> => {\r\n const configPath = await findConfig({\r\n fileName: \"cca.config.json\",\r\n maxDepth: 10,\r\n startPath: process.cwd(),\r\n });\r\n const configContent = await import(\"fs/promises\").then((fs) =>\r\n fs.readFile(configPath, \"utf-8\")\r\n );\r\n\r\n return JSON.parse(configContent);\r\n}","import { createMapper } from '@automapper/core';\r\nimport { classes } from '@automapper/classes';\r\n\r\nimport { createUserMappings } from '../createUserMappings';\r\n\r\nexport const mapper = createMapper({\r\n strategyInitializer: classes(),\r\n});\r\n\r\ncreateUserMappings(mapper);\r\n","import { Mapper, createMap, forMember, mapFrom } from '@automapper/core';\r\nimport { AuthEntity, UserEntity } from 'cca-entities';\r\n\r\nimport { RegisterDTO } from '../dtos/RegisterDTO';\r\nimport { UserDTO } from '../dtos/UserDTO';\r\n\r\nexport function createUserMappings(mapper: Mapper): void {\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n AuthEntity,\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.password, mapFrom(src => src.password)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n UserEntity,\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper,\r\n UserEntity,\r\n UserDTO,\r\n forMember(dest => dest.id, mapFrom(src => src.id)),\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n}","import { UserRole } from \"cca-entities\";\r\n\r\nexport class RegisterDTO {\r\n email!: string;\r\n name!: string;\r\n password!: string;\r\n role!: UserRole;\r\n adminPassword?: string;\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\n\r\nexport class LogoutUseCase implements IBaseService {\r\n private readonly repository: AuthRepository\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(authId: string): Promise<void> {\r\n const auth = await this.repository.findById(authId);\r\n if (!auth) {\r\n throw new Error('Auth not found');\r\n }\r\n\r\n auth.refreshToken = null as any;\r\n auth.user.isActive = false;\r\n\r\n await this.repository.update(auth.id, auth);\r\n }\r\n}","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\n\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { validateAdminSecret, validateRegisterDTO } from \"../validators/authValidation\";\r\n\r\nexport class RegisterUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly SALT_ROUNDS = 10;\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n public async execute(\r\n email: string,\r\n name: string,\r\n password: string,\r\n role: UserRole = UserRole.GUEST,\r\n adminPassword?: string\r\n ): Promise<AuthEntity> {\r\n try {\r\n\r\n const normalizedDTO = this.normalizeAuthDTO({\r\n email,\r\n name,\r\n password,\r\n role,\r\n adminPassword\r\n });\r\n \r\n if (role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n \r\n await validateRegisterDTO(normalizedDTO, this.repository);\r\n\r\n const hashedPassword = await this.hashPassword(normalizedDTO.password);\r\n const authEntity = await this.createAuthEntity(\r\n normalizedDTO,\r\n hashedPassword\r\n );\r\n\r\n return await this.repository.create(authEntity);\r\n } catch (error) {\r\n throw error instanceof Error ? error : new Error(\"Registration failed\");\r\n }\r\n }\r\n\r\n private normalizeAuthDTO(dto: RegisterDTO): RegisterDTO {\r\n return {\r\n name: dto.name.trim(),\r\n email: dto.email.trim().toLowerCase(),\r\n role: dto.role,\r\n password: dto.password.trim(),\r\n adminPassword: dto.adminPassword?.trim() \r\n };\r\n }\r\n\r\n private async hashPassword(password: string): Promise<string> {\r\n return await bcrypt.hash(password, this.SALT_ROUNDS);\r\n }\r\n\r\n private async createAuthEntity(dto: RegisterDTO, hashedPassword: string): Promise<AuthEntity> {\r\n const authEntity = mapper.map(dto, RegisterDTO, AuthEntity);\r\n const userEntity = mapper.map(dto, RegisterDTO, UserEntity);\r\n \r\n authEntity.password = hashedPassword;\r\n authEntity.refreshToken = \"\";\r\n authEntity.user = userEntity;\r\n authEntity.user.updatedAt = null as any;\r\n \r\n return authEntity;\r\n }\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\n\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nexport class RefreshTokenUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly service: JwtAuthService;\r\n\r\n constructor(repository: AuthRepository, service: JwtAuthService) {\r\n this.repository = repository;\r\n this.service = service;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(\r\n refreshToken: string\r\n ): Promise<{ accessToken: string; refreshToken: string } | null> {\r\n try {\r\n const decoded = await this.service.verifyRefreshToken(refreshToken);\r\n\r\n const auth = decoded.userId\r\n ? await this.repository.findById(decoded.userId)\r\n : null;\r\n\r\n if (!auth || auth.refreshToken !== refreshToken) {\r\n return null;\r\n }\r\n\r\n const accessToken = this.service.generateAccessToken(auth.user);\r\n const newRefreshToken = this.service.generateRefreshToken(auth.user);\r\n\r\n await this.repository.update(auth.id, {\r\n refreshToken: newRefreshToken,\r\n });\r\n\r\n return { accessToken, refreshToken: newRefreshToken };\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async verityToken(token: string): Promise<IDecodedToken> {\r\n return await this.service.verifyAccessToken(token);\r\n }\r\n}\r\n","import { NextFunction, Request, Response } from \"express\";\r\n\r\nimport { LoginDTO } from \"../../application/dtos/LoginDTO\";\r\nimport { RegisterDTO } from \"../../application/dtos/RegisterDTO\";\r\n\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { IRefreshTokenRequest } from \"../../domain/interfaces/IRefreshTokenRequest\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nexport class AuthController {\r\n private loginUseCase: LoginUseCase;\r\n private readonly logoutUseCase: LogoutUseCase;\r\n private registerUseCase: RegisterUseCase;\r\n private refreshTokenUseCase: RefreshTokenUseCase;\r\n\r\n constructor(\r\n loginUseCase: LoginUseCase,\r\n logoutUseCase: LogoutUseCase,\r\n registerUseCase: RegisterUseCase,\r\n refreshTokenUseCase: RefreshTokenUseCase\r\n ) {\r\n this.loginUseCase = loginUseCase;\r\n this.logoutUseCase = logoutUseCase;\r\n this.registerUseCase = registerUseCase;\r\n this.refreshTokenUseCase = refreshTokenUseCase;\r\n }\r\n\r\n login = async (req: Request, res: Response, next: NextFunction) => {\r\n try {\r\n const { adminPassword, ...loginDTO }: LoginDTO = req.body;\r\n const result = await this.loginUseCase.execute(loginDTO, adminPassword);\r\n res.status(201).json(result);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n logout = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n await this.logoutUseCase.execute(req.params.id);\r\n res.status(200).json({ message: 'Logged out successfully' });\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n register = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n const { email, name, password, role, adminPassword }: RegisterDTO = req.body;\r\n await this.registerUseCase.execute(email, name, password, role, adminPassword);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n refreshToken = async (req: Request, res: Response) => {\r\n const { refreshToken }: IRefreshTokenRequest = req.body;\r\n const result = await this.refreshTokenUseCase.execute(refreshToken);\r\n res.json(result);\r\n };\r\n\r\n verifyToken = async (token: string): Promise<IDecodedToken> => {\r\n return await this.refreshTokenUseCase.verityToken(token);\r\n };\r\n}\r\n","import { BaseRepository, IBaseRepository, IExtendedBaseRepository } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\nimport { Repository } from \"typeorm\";\r\n\r\nexport class AuthRepository\r\n extends BaseRepository<AuthEntity>\r\n implements IExtendedBaseRepository<AuthEntity> {\r\n constructor(repository: Repository<AuthEntity>) {\r\n super(repository);\r\n }\r\n\r\n async findByEmail(email: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .addSelect('auth.password')\r\n .where('auth.email = :email', { email });\r\n\r\n return await query.getOne();\r\n }\r\n\r\n async create(entity: Omit<AuthEntity, \"createdAt\">): Promise<AuthEntity> {\r\n return super.create(entity);\r\n }\r\n\r\n async findByUserId(userId: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .where('user.id = :userId', { userId });\r\n \r\n return await query.getOne();\r\n }\r\n \r\n async logout(userId: string): Promise<void> {\r\n const auth = await this.findByUserId(userId);\r\n if (!auth) {\r\n throw new Error('Auth not found');\r\n }\r\n \r\n auth.refreshToken = null as any;\r\n auth.user.isActive = false;\r\n \r\n await this.update(auth.id, auth);\r\n }\r\n}\r\n","import * as jwt from \"jsonwebtoken\";\r\nimport { Secret, SignOptions } from \"jsonwebtoken\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity } from \"cca-entities\";\r\n\r\nimport { IJwtConfig } from \"../../domain/interfaces/IJwtConfig\";\r\nimport { IAuthService } from \"../../domain/interfaces/IAuthService\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport {\r\n ForbiddenError,\r\n JwtError,\r\n NotFoundError,\r\n UnauthorizedError,\r\n} from \"../../utils/Errors\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nexport class JwtAuthService implements IBaseService, IAuthService {\r\n private jwtConfig: IJwtConfig | undefined;\r\n\r\n constructor(private readonly repository: AuthRepository, config?: IJwtConfig) {\r\n this.loadConfig(config);\r\n }\r\n\r\n private async loadConfig(config?: IJwtConfig) {\r\n const configData = await getConfig();\r\n this.jwtConfig = {\r\n accessTokenSecret: configData.JWT_ACCESS_SECRET || \"default-access-secret\",\r\n refreshTokenSecret: configData.JWT_REFRESH_SECRET || \"default-refresh-secret\",\r\n accessTokenExpiry: configData.ACCESS_TOKEN_EXPIRY || \"15m\",\r\n refreshTokenExpiry: configData.REFRESH_TOKEN_EXPIRY || \"7d\",\r\n ...config\r\n };\r\n this.validateConfiguration();\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await validateRepository(this.repository, repo => repo.getAll());\r\n }\r\n\r\n private validateConfiguration(): void {\r\n if (!this.jwtConfig?.accessTokenSecret || !this.jwtConfig?.refreshTokenSecret) {\r\n throw new JwtError(\"JWT secrets required in config\");\r\n }\r\n }\r\n\r\n async validateUser(email: string, password: string): Promise<AuthEntity | null> {\r\n const user = await this.repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const validPassword = await bcrypt.compare(password, user.password);\r\n if (!validPassword) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return user;\r\n }\r\n\r\n private verifyJwtConfig() {\r\n if (!this.jwtConfig) throw new JwtError(\"JWT config not loaded\");\r\n }\r\n\r\n generateAccessToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id, email: user.email, role: user.role },\r\n this.jwtConfig!.accessTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.accessTokenExpiry }\r\n );\r\n }\r\n\r\n generateRefreshToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id },\r\n this.jwtConfig!.refreshTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.refreshTokenExpiry }\r\n );\r\n }\r\n\r\n async verifyToken(token: string, secret: string): Promise<IDecodedToken> {\r\n try {\r\n return jwt.verify(token, secret) as IDecodedToken;\r\n } catch {\r\n throw new UnauthorizedError();\r\n }\r\n }\r\n\r\n async verifyAccessToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.accessTokenSecret);\r\n }\r\n\r\n async verifyRefreshToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.refreshTokenSecret);\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,qBAAmC;AAC5C,SAAS,cAAAA,mBAAkB;;;ACD3B,SAAuB,0BAA0B;AACjD,SAAqB,cAAAC,aAAY,YAAAC,iBAAgB;;;ACDjD,SAAS,eAAe;AAGjB,IAAM,WAAN,MAAM,SAAQ;AAcrB;AAdqB;AAEnB;AAAA,EADC,QAAQ;AAAA,GADE,SAEX;AAGA;AAAA,EADC,QAAQ;AAAA,GAJE,SAKX;AAGA;AAAA,EADC,QAAQ;AAAA,GAPE,SAQX;AAGA;AAAA,EADC,QAAQ;AAAA,GAVE,SAWX;AAXK,IAAM,UAAN;;;ACHP,YAAY,SAAS;AACrB,SAAqB,gBAAgB;AACrC,OAAO,YAAY;;;ACFZ,IAAM,YAAN,MAAM,kBAAiB,MAAM;AAAA,EAClC,YACS,SACA,aAAqB,KACrB,OAAe,YACtB;AACA,UAAM,OAAO;AAJN;AACA;AACA;AAGP,WAAO,eAAe,MAAM,WAAW,SAAS;AAChD,UAAM,kBAAkB,IAAI;AAAA,EAC9B;AACF;AAVoC;AAA7B,IAAM,WAAN;AAYA,IAAM,mBAAN,MAAM,yBAAwB,SAAS;AAAA,EAC5C,YAAY,SAAiB;AAC3B,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAL8C;AAAvC,IAAM,kBAAN;AAcA,IAAM,iBAAN,MAAM,uBAAsB,SAAS;AAAA,EAC1C,YAAY,SAAiB;AAC3B,UAAM,SAAS,KAAK,mBAAmB;AAAA,EACzC;AACF;AAJ4C;AAArC,IAAM,gBAAN;AAMA,IAAM,kBAAN,MAAM,wBAAuB,SAAS;AAAA,EAC3C,YAAY,UAAkB,oBAAoB;AAChD,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAL6C;AAAtC,IAAM,iBAAN;AAOA,IAAM,qBAAN,MAAM,2BAA0B,SAAS;AAAA,EAC9C,YAAY,UAAkB,uBAAuB;AACnD,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AALgD;AAAzC,IAAM,oBAAN;AAOA,IAAM,YAAN,MAAM,kBAAiB,SAAS;AAAA,EACrC,YAAY,SAAiB;AAC3B,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AALuC;AAAhC,IAAM,WAAN;;;AC9CP,SAAS,kBAAkB;AAEpB,IAAM,YAAY,mCAA0B;AAC/C,QAAM,aAAa,MAAM,WAAW;AAAA,IAChC,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW,QAAQ,IAAI;AAAA,EAC3B,CAAC;AACD,QAAM,gBAAgB,MAAM,OAAO,aAAa,EAAE;AAAA,IAAK,CAAC,OACpD,GAAG,SAAS,YAAY,OAAO;AAAA,EACnC;AAEA,SAAO,KAAK,MAAM,aAAa;AACnC,GAXyB;;;AFazB,IAAM,UAAU;AAAA,EACd,IAAQ,WAAO,EAAE,KAAK,wBAAwB;AAAA,EAC9C,OACG,WAAO,EACP,MAAM,sBAAsB,EAC5B,IAAI,KAAK,oCAAoC;AAAA,EAChD,MACG,WAAO,EACP,SAAS,kBAAkB,EAC3B,IAAI,GAAG,yCAAyC,EAChD,IAAI,IAAI,kCAAkC,EAC1C,QAAQ,iBAAiB,2CAA2C;AAAA,EACvE,UACG,WAAO,EACP,SAAS,mBAAmB,EAC5B,IAAI,GAAG,oBAAoB,EAC3B,IAAI,KAAK,mBAAmB,EAC5B;AAAA,IACC;AAAA,IACA;AAAA,EACF;AAAA,EACF,MACG,WAAO,EACP,SAAS,kBAAkB,EAC3B,MAAM,OAAO,OAAO,QAAQ,GAAG,wBAAwB;AAC5D;AAEO,IAAM,gBAAgB,8BAC3B,OACA,eACwB;AACxB,MAAI;AACF,UAAM,QAAQ,MAAM,SAAS,OAAO,KAAK,EAAE,YAAY,CAAC;AACxD,UAAM,OAAO,MAAM,WAAW,YAAY,KAAK;AAC/C,QAAI,CAAC,MAAM;AACT,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,SAAS,OAAY;AACnB,UAAM,IAAI,gBAAgB,MAAM,WAAW,sBAAsB;AAAA,EACnE;AACF,GAhB6B;AAkBtB,IAAM,mBAAmB,8BAAO,aAAqC;AAC1E,MAAI,UAAU;AACZ,QAAI;AACF,YAAM,QAAQ,SAAS,SAAS,QAAQ;AAAA,IAC1C,SAAS,OAAY;AACnB,YAAM,IAAI,gBAAgB,MAAM,WAAW,yBAAyB;AAAA,IACtE;AAAA,EACF;AACF,GARgC;AAUzB,IAAM,0BAA0B,8BACrC,YACA,OACA,kBACkB;AAClB,MAAI;AACF,UAAM,QAAQ,MAAM,SAAS,OAAO,KAAK,EAAE,YAAY,CAAC;AAExD,UAAM,eAAe,MAAM,WAAW,YAAY,KAAK;AAEvD,QAAI,CAAC,aAAc;AACnB,QAAI,aAAa,OAAO,cAAe;AAEvC,UAAM,IAAI,gBAAgB,SAAS,KAAK,qBAAqB;AAAA,EAC/D,SAAS,OAAY;AACnB,QAAI,iBAAiB,iBAAiB;AACpC,YAAM;AAAA,IACR;AACA,UAAM,IAAI,gBAAgB,8BAA8B;AAAA,EAC1D;AACF,GApBuC;AAsBhC,IAAM,sBAAsB,8BACjC,MACA,eACkB;AAClB,QAAM,EAAE,MAAM,OAAO,MAAM,SAAS,IAAI;AAExC,QAAM,QAAQ,IAAI;AAAA,IAChB,QAAQ,KAAK,SAAS,IAAI;AAAA,IAC1B,QAAQ,KAAK,SAAS,IAAI;AAAA,IAC1B,wBAAwB,YAAY,KAAK;AAAA,IACzC,iBAAiB,QAAQ;AAAA,EAC3B,CAAC;AACH,GAZmC;AAc5B,IAAM,mBAAmB,8BAC9B,MACA,eACwB;AACxB,QAAM,EAAE,OAAO,MAAM,SAAS,IAAI;AAElC,QAAM,QAAQ,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,QAAQ,SAAS,SAAS,QAAQ,CAAC,CAAC;AAEpF,QAAM,OAAO,MAAM,cAAc,OAAO,UAAU;AAClD,MAAI,CAAC,QAAQ,CAAC,KAAK,UAAU;AAC3B,UAAM,IAAI,cAAc,qBAAqB;AAAA,EAC/C;AAEA,QAAM,UAAU,MAAM,OAAO,QAAQ,UAAU,KAAK,QAAQ;AAC5D,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,eAAe,qBAAqB;AAAA,EAChD;AAEA,SAAO;AACT,GAnBgC;AAqBzB,IAAM,sBAAsB,8BACjC,mBACkB;AAClB,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI,gBAAgB,4BAA4B;AAAA,EACxD;AAEA,MAAI;AACF,UAAM,SAAS,MAAM,UAAU;AAE/B,QAAI,CAAC,OAAO,uBAAuB;AACjC,YAAM,IAAI,gBAAgB,2CAA2C;AAAA,IACvE;AAEA,QAAI,SAAS,cAAc,MAAM,OAAO,uBAAuB;AAC7D,YAAM,IAAI,gBAAgB,wBAAwB;AAAA,IACpD;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,iBAAiB;AACpC,YAAM;AAAA,IACR;AACA,UAAM,IAAI,gBAAgB,iCAAiC;AAAA,EAC7D;AACF,GAvBmC;;;AG/HnC,SAAS,oBAAoB;AAC7B,SAAS,eAAe;;;ACDxB,SAAiB,WAAW,WAAW,eAAe;AACtD,SAAS,cAAAC,aAAY,kBAAkB;;;ACChC,IAAM,eAAN,MAAM,aAAY;AAMzB;AANyB;AAAlB,IAAM,cAAN;;;ADIA,SAAS,mBAAmBC,SAAsB;AACrD;AAAA,IACIA;AAAA,IACA;AAAA,IACAC;AAAA,IACA,UAAU,UAAQ,KAAK,OAAO,QAAQ,SAAO,IAAI,KAAK,CAAC;AAAA,IACvD,UAAU,UAAQ,KAAK,UAAU,QAAQ,SAAO,IAAI,QAAQ,CAAC;AAAA,IAC7D,UAAU,UAAQ,KAAK,MAAM,QAAQ,SAAO,IAAI,IAAI,CAAC;AAAA,EAAC;AAE1D;AAAA,IACID;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,UAAQ,KAAK,MAAM,QAAQ,SAAO,IAAI,IAAI,CAAC;AAAA,IACrD,UAAU,UAAQ,KAAK,OAAO,QAAQ,SAAO,IAAI,KAAK,CAAC;AAAA,IACvD,UAAU,UAAQ,KAAK,MAAM,QAAQ,SAAO,IAAI,IAAI,CAAC;AAAA,EAAC;AAE1D;AAAA,IACIA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,UAAQ,KAAK,IAAI,QAAQ,SAAO,IAAI,EAAE,CAAC;AAAA,IACjD,UAAU,UAAQ,KAAK,MAAM,QAAQ,SAAO,IAAI,IAAI,CAAC;AAAA,IACrD,UAAU,UAAQ,KAAK,OAAO,QAAQ,SAAO,IAAI,KAAK,CAAC;AAAA,IACvD,UAAU,UAAQ,KAAK,MAAM,QAAQ,SAAO,IAAI,IAAI,CAAC;AAAA,EAAC;AAC9D;AAzBgB;;;ADDT,IAAM,SAAS,aAAa;AAAA,EACjC,qBAAqB,QAAQ;AAC/B,CAAC;AAED,mBAAmB,MAAM;;;ALUlB,IAAM,gBAAN,MAAM,cAAqC;AAAA,EAIhD,YACE,YACA,aACA;AACA,SAAK,aAAa;AAClB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,MAAa,aAA4B;AACvC,UAAM,mBAAmB,KAAK,YAAY,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,QAAQ,UAAoB,eAAgD;AAChF,UAAM,OAAO,MAAM,KAAK,cAAc,UAAU,aAAa;AAC7D,UAAM,QAAQ,MAAM,KAAK,qBAAqB,IAAI;AAClD,UAAM,UAAU,KAAK,aAAa,KAAK,IAAI;AAE3C,WAAO,EAAE,OAAO,MAAM,QAAQ;AAAA,EAChC;AAAA,EAEA,MAAc,cACZ,UACA,eACqB;AACrB,UAAM,OAAO,MAAM,iBAAiB,UAAU,KAAK,UAAU;AAE7D,QAAI,SAAS,SAASE,UAAS,SAAS,eAAe;AACrD,YAAM,oBAAoB,aAAa;AAAA,IACzC;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,qBAAqB,MAAsC;AACvE,UAAM,QAAQ,KAAK,eAAe,IAAI;AACtC,UAAM,KAAK,iBAAiB,IAAI;AAChC,UAAM,KAAK,uBAAuB,MAAM,MAAM,YAAY;AAE1D,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,MAA6B;AAClD,WAAO;AAAA,MACL,aAAa,KAAK,YAAY,oBAAoB,KAAK,IAAI;AAAA,MAC3D,cAAc,KAAK,YAAY,qBAAqB,KAAK,IAAI;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAc,iBAAiB,MAAiC;AAC9D,SAAK,KAAK,cAAc,oBAAI,KAAK;AACjC,SAAK,KAAK,WAAW;AACrB,UAAM,KAAK,WAAW,OAAO,KAAK,IAAI,IAAI;AAAA,EAC5C;AAAA,EAEA,MAAc,uBACZ,MACA,cACe;AACf,SAAK,eAAe;AACpB,UAAM,KAAK,WAAW,OAAO,KAAK,IAAI,EAAE,aAAa,CAAC;AAAA,EACxD;AAAA,EAEQ,aAAa,MAA2B;AAC9C,WAAO,OAAO,IAAI,MAAMC,aAAY,OAAO;AAAA,EAC7C;AACF;AArEkD;AAA3C,IAAM,eAAN;;;AQnBP,SAAuB,sBAAAC,2BAA0B;AAI1C,IAAM,iBAAN,MAAM,eAAsC;AAAA,EAG/C,YAAY,YAA4B;AACpC,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,MAAa,aAA4B;AACrC,UAAMC,oBAAmB,KAAK,YAAY,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,EACrE;AAAA,EAEA,MAAM,QAAQ,QAA+B;AACzC,UAAM,OAAO,MAAM,KAAK,WAAW,SAAS,MAAM;AAClD,QAAI,CAAC,MAAM;AACP,YAAM,IAAI,MAAM,gBAAgB;AAAA,IACpC;AAEA,SAAK,eAAe;AACpB,SAAK,KAAK,WAAW;AAErB,UAAM,KAAK,WAAW,OAAO,KAAK,IAAI,IAAI;AAAA,EAC9C;AACJ;AAtBmD;AAA5C,IAAM,gBAAN;;;ACJP,SAAuB,sBAAAC,2BAA0B;AACjD,YAAYC,aAAY;AACxB,SAAS,cAAAC,aAAY,cAAAC,aAAY,YAAAC,iBAAgB;AAQ1C,IAAM,mBAAN,MAAM,iBAAwC;AAAA,EAInD,YAAY,YAA4B;AAFxC,SAAiB,cAAc;AAG7B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAa,aAA4B;AACvC,UAAMC,oBAAmB,KAAK,YAAY,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,EACnE;AAAA,EAEA,MAAa,QACX,OACA,MACA,UACA,OAAiBC,UAAS,OAC1B,eACqB;AACrB,QAAI;AAEF,YAAM,gBAAgB,KAAK,iBAAiB;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,SAASA,UAAS,SAAS,eAAe;AAC5C,cAAM,oBAAoB,aAAa;AAAA,MACzC;AAEA,YAAM,oBAAoB,eAAe,KAAK,UAAU;AAExD,YAAM,iBAAiB,MAAM,KAAK,aAAa,cAAc,QAAQ;AACrE,YAAM,aAAa,MAAM,KAAK;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAEA,aAAO,MAAM,KAAK,WAAW,OAAO,UAAU;AAAA,IAChD,SAAS,OAAO;AACd,YAAM,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,qBAAqB;AAAA,IACxE;AAAA,EACF;AAAA,EAEQ,iBAAiB,KAA+B;AACtD,WAAO;AAAA,MACL,MAAM,IAAI,KAAK,KAAK;AAAA,MACpB,OAAO,IAAI,MAAM,KAAK,EAAE,YAAY;AAAA,MACpC,MAAM,IAAI;AAAA,MACV,UAAU,IAAI,SAAS,KAAK;AAAA,MAC5B,eAAe,IAAI,eAAe,KAAK;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAc,aAAa,UAAmC;AAC5D,WAAO,MAAa,aAAK,UAAU,KAAK,WAAW;AAAA,EACrD;AAAA,EAEA,MAAc,iBAAiB,KAAkB,gBAA6C;AAC5F,UAAM,aAAa,OAAO,IAAI,KAAK,aAAaC,WAAU;AAC1D,UAAM,aAAa,OAAO,IAAI,KAAK,aAAaC,WAAU;AAE1D,eAAW,WAAW;AACtB,eAAW,eAAe;AAC1B,eAAW,OAAO;AAClB,eAAW,KAAK,YAAY;AAE5B,WAAO;AAAA,EACT;AACF;AAxEqD;AAA9C,IAAM,kBAAN;;;ACVP,SAAuB,sBAAAC,2BAA0B;AAO1C,IAAM,uBAAN,MAAM,qBAA4C;AAAA,EAIvD,YAAY,YAA4B,SAAyB;AAC/D,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAa,aAA4B;AACvC,UAAMC,oBAAmB,KAAK,YAAY,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,QACJ,cAC+D;AAC/D,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,QAAQ,mBAAmB,YAAY;AAElE,YAAM,OAAO,QAAQ,SACjB,MAAM,KAAK,WAAW,SAAS,QAAQ,MAAM,IAC7C;AAEJ,UAAI,CAAC,QAAQ,KAAK,iBAAiB,cAAc;AAC/C,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,KAAK,QAAQ,oBAAoB,KAAK,IAAI;AAC9D,YAAM,kBAAkB,KAAK,QAAQ,qBAAqB,KAAK,IAAI;AAEnE,YAAM,KAAK,WAAW,OAAO,KAAK,IAAI;AAAA,QACpC,cAAc;AAAA,MAChB,CAAC;AAED,aAAO,EAAE,aAAa,cAAc,gBAAgB;AAAA,IACtD,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,OAAuC;AACvD,WAAO,MAAM,KAAK,QAAQ,kBAAkB,KAAK;AAAA,EACnD;AACF;AA3CyD;AAAlD,IAAM,sBAAN;;;ACMA,IAAM,kBAAN,MAAM,gBAAe;AAAA,EAM1B,YACE,cACA,eACA,iBACA,qBACA;AAOF,iBAAQ,8BAAO,KAAc,KAAe,SAAuB;AACjE,UAAI;AACF,cAAM,EAAE,eAAe,GAAG,SAAS,IAAc,IAAI;AACrD,cAAM,SAAS,MAAM,KAAK,aAAa,QAAQ,UAAU,aAAa;AACtE,YAAI,OAAO,GAAG,EAAE,KAAK,MAAM;AAAA,MAC7B,SAAS,OAAO;AACd,aAAK,KAAK;AAAA,MACZ;AAAA,IACF,GARQ;AAUR,kBAAS,8BACP,KACA,KACA,SACkB;AAClB,UAAI;AACF,cAAM,KAAK,cAAc,QAAQ,IAAI,OAAO,EAAE;AAC9C,YAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,0BAA0B,CAAC;AAAA,MAC7D,SAAS,OAAO;AACd,aAAK,KAAK;AAAA,MACZ;AAAA,IACF,GAXS;AAaT,oBAAW,8BACT,KACA,KACA,SACkB;AAClB,UAAI;AACF,cAAM,EAAE,OAAO,MAAM,UAAU,MAAM,cAAc,IAAiB,IAAI;AACxE,cAAM,KAAK,gBAAgB,QAAQ,OAAO,MAAM,UAAU,MAAM,aAAa;AAAA,MAC/E,SAAS,OAAO;AACd,aAAK,KAAK;AAAA,MACZ;AAAA,IACF,GAXW;AAaX,wBAAe,8BAAO,KAAc,QAAkB;AACpD,YAAM,EAAE,aAAa,IAA0B,IAAI;AACnD,YAAM,SAAS,MAAM,KAAK,oBAAoB,QAAQ,YAAY;AAClE,UAAI,KAAK,MAAM;AAAA,IACjB,GAJe;AAMf,uBAAc,8BAAO,UAA0C;AAC7D,aAAO,MAAM,KAAK,oBAAoB,YAAY,KAAK;AAAA,IACzD,GAFc;AAhDZ,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,kBAAkB;AACvB,SAAK,sBAAsB;AAAA,EAC7B;AA+CF;AA/D4B;AAArB,IAAM,iBAAN;;;ACbP,SAAS,sBAAgE;AAIlE,IAAM,kBAAN,MAAM,wBACH,eACuC;AAAA,EAC/C,YAAY,YAAoC;AAC9C,UAAM,UAAU;AAAA,EAClB;AAAA,EAEA,MAAM,YAAY,OAA2C;AAC3D,UAAM,QAAQ,KAAK,WAAW,mBAAmB,MAAM,EACpD,kBAAkB,aAAa,MAAM,EACrC,UAAU,eAAe,EACzB,MAAM,uBAAuB,EAAE,MAAM,CAAC;AAEzC,WAAO,MAAM,MAAM,OAAO;AAAA,EAC5B;AAAA,EAEA,MAAM,OAAO,QAA4D;AACvE,WAAO,MAAM,OAAO,MAAM;AAAA,EAC5B;AAAA,EAEA,MAAM,aAAa,QAA4C;AAC7D,UAAM,QAAQ,KAAK,WAAW,mBAAmB,MAAM,EACpD,kBAAkB,aAAa,MAAM,EACrC,MAAM,qBAAqB,EAAE,OAAO,CAAC;AAExC,WAAO,MAAM,MAAM,OAAO;AAAA,EAC5B;AAAA,EAEA,MAAM,OAAO,QAA+B;AAC1C,UAAM,OAAO,MAAM,KAAK,aAAa,MAAM;AAC3C,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,gBAAgB;AAAA,IAClC;AAEA,SAAK,eAAe;AACpB,SAAK,KAAK,WAAW;AAErB,UAAM,KAAK,OAAO,KAAK,IAAI,IAAI;AAAA,EACjC;AACF;AArCiD;AAF1C,IAAM,iBAAN;;;ACJP,YAAY,SAAS;AAErB,YAAYC,aAAY;AACxB,SAAuB,sBAAAC,2BAA0B;AAiB1C,IAAM,kBAAN,MAAM,gBAAqD;AAAA,EAGhE,YAA6B,YAA4B,QAAqB;AAAjD;AAC3B,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EAEA,MAAc,WAAW,QAAqB;AAC5C,UAAM,aAAa,MAAM,UAAU;AACnC,SAAK,YAAY;AAAA,MACf,mBAAmB,WAAW,qBAAqB;AAAA,MACnD,oBAAoB,WAAW,sBAAsB;AAAA,MACrD,mBAAmB,WAAW,uBAAuB;AAAA,MACrD,oBAAoB,WAAW,wBAAwB;AAAA,MACvD,GAAG;AAAA,IACL;AACA,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAMC,oBAAmB,KAAK,YAAY,UAAQ,KAAK,OAAO,CAAC;AAAA,EACjE;AAAA,EAEQ,wBAA8B;AACpC,QAAI,CAAC,KAAK,WAAW,qBAAqB,CAAC,KAAK,WAAW,oBAAoB;AAC7E,YAAM,IAAI,SAAS,gCAAgC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,OAAe,UAA8C;AAC9E,UAAM,OAAO,MAAM,KAAK,WAAW,YAAY,KAAK;AACpD,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,cAAc,qBAAqB;AAAA,IAC/C;AAEA,UAAM,gBAAgB,MAAa,gBAAQ,UAAU,KAAK,QAAQ;AAClE,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,eAAe,qBAAqB;AAAA,IAChD;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB;AACxB,QAAI,CAAC,KAAK,UAAW,OAAM,IAAI,SAAS,uBAAuB;AAAA,EACjE;AAAA,EAEA,oBAAoB,MAA0B;AAC5C,SAAK,gBAAgB;AACrB,WAAW;AAAA,MACT,EAAE,QAAQ,KAAK,IAAI,OAAO,KAAK,OAAO,MAAM,KAAK,KAAK;AAAA,MACtD,KAAK,UAAW;AAAA,MAChB,EAAE,WAAW,KAAK,UAAW,kBAAkB;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,qBAAqB,MAA0B;AAC7C,SAAK,gBAAgB;AACrB,WAAW;AAAA,MACT,EAAE,QAAQ,KAAK,GAAG;AAAA,MAClB,KAAK,UAAW;AAAA,MAChB,EAAE,WAAW,KAAK,UAAW,mBAAmB;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,OAAe,QAAwC;AACvE,QAAI;AACF,aAAW,WAAO,OAAO,MAAM;AAAA,IACjC,QAAQ;AACN,YAAM,IAAI,kBAAkB;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,OAAuC;AAC7D,SAAK,gBAAgB;AACrB,WAAO,KAAK,YAAY,OAAO,KAAK,UAAW,iBAAiB;AAAA,EAClE;AAAA,EAEA,MAAM,mBAAmB,OAAuC;AAC9D,SAAK,gBAAgB;AACrB,WAAO,KAAK,YAAY,OAAO,KAAK,UAAW,kBAAkB;AAAA,EACnE;AACF;AAlFkE;AAA3D,IAAM,iBAAN;;;AdPP,SAAS,oBAAoB,UAAwB;AACnD,QAAM,YAAY,IAAI,cAAc,EAAE,SAAS,CAAC;AAEhD,QAAM,iBAAiB,IAAI;AAAA,IACzB,SAAS,cAAcC,WAAU;AAAA,EACnC;AACA,YAAU,mBAA+B,kBAAkB,cAAc;AAEzE,QAAM,iBAAiB,IAAI,eAAe,cAAc;AACxD,YAAU,gBAAgB,kBAAkB,cAAc;AAE1D,QAAM,eAAe,IAAI,aAAa,gBAAgB,cAAc;AACpE,QAAM,gBAAgB,IAAI,cAAc,cAAc;AACtD,QAAM,kBAAkB,IAAI,gBAAgB,cAAc;AAC1D,QAAM,sBAAsB,IAAI;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AACA,YAAU,gBAAgB,gBAAgB,YAAY;AACtD,YAAU,gBAAgB,mBAAmB,eAAe;AAC5D,YAAU,gBAAgB,uBAAuB,mBAAmB;AACpE,YAAU,gBAAgB,iBAAiB,aAAa;AAExD,QAAM,iBAAiB,IAAI;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,EAAE,WAAW,eAAe;AACrC;AA/BS;","names":["AuthEntity","UserEntity","UserRole","AuthEntity","mapper","AuthEntity","UserRole","UserEntity","validateRepository","validateRepository","validateRepository","bcrypt","AuthEntity","UserEntity","UserRole","validateRepository","UserRole","AuthEntity","UserEntity","validateRepository","validateRepository","bcrypt","validateRepository","validateRepository","AuthEntity"]}
|
|
1
|
+
{"version":3,"sources":["../src/infrastructure/container/createAuthContainer.ts","../src/application/useCase/LoginUseCase.ts","../src/application/dtos/UserDTO.ts","../src/application/validators/authValidation.ts","../src/utils/Errors.ts","../src/utils/config.ts","../src/application/mappers/utils/mapper.ts","../src/application/mappers/createUserMappings.ts","../src/application/dtos/RegisterDTO.ts","../src/application/useCase/LogoutUseCase .ts","../src/application/useCase/RegisterUseCase.ts","../src/application/useCase/RefreshTokenUseCase.ts","../src/presentation/controller/AuthController.ts","../src/infrastructure/repository/AuthRepository.ts","../src/infrastructure/auth/JwtAuthService.ts"],"sourcesContent":["import { BaseContainer, BaseDatabase } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\n\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { AuthController } from \"../../presentation/controller/AuthController\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../auth/JwtAuthService\";\r\n\r\nfunction createAuthContainer(database: BaseDatabase) {\r\n const container = new BaseContainer({ database });\r\n\r\n const authRepository = new AuthRepository(\r\n database.getRepository(AuthEntity)\r\n );\r\n container.registerRepository<AuthEntity>(\"AuthRepository\", authRepository);\r\n\r\n const jwtAuthService = new JwtAuthService(authRepository);\r\n container.registerService(\"JwtAuthService\", jwtAuthService);\r\n\r\n const loginUseCase = new LoginUseCase(authRepository, jwtAuthService);\r\n const logoutUseCase = new LogoutUseCase(authRepository);\r\n const registerUseCase = new RegisterUseCase(authRepository);\r\n const refreshTokenUseCase = new RefreshTokenUseCase(\r\n authRepository,\r\n jwtAuthService\r\n );\r\n container.registerService(\"LoginUseCase\", loginUseCase);\r\n container.registerService(\"RegisterUseCase\", registerUseCase);\r\n container.registerService(\"RefreshTokenUseCase\", refreshTokenUseCase);\r\n container.registerService(\"LogoutUseCase\", logoutUseCase);\r\n\r\n const authController = new AuthController(\r\n loginUseCase,\r\n logoutUseCase,\r\n registerUseCase,\r\n refreshTokenUseCase\r\n );\r\n\r\n return { container, authController };\r\n}\r\n\r\nexport { createAuthContainer };\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { UserDTO } from \"../dtos/UserDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { validateAdminSecret, validateLoginDTO } from \"../validators/authValidation\";\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\n\r\ninterface TokenPair {\r\n accessToken: string;\r\n refreshToken: string;\r\n}\r\n\r\ninterface LoginResponse {\r\n token: TokenPair;\r\n user: UserDTO;\r\n}\r\n\r\nexport class LoginUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly authService: JwtAuthService;\r\n\r\n constructor(\r\n repository: AuthRepository,\r\n authService: JwtAuthService\r\n ) {\r\n this.repository = repository;\r\n this.authService = authService\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(loginDTO: LoginDTO, adminPassword?: string): Promise<LoginResponse> {\r\n const auth = await this.validateLogin(loginDTO, adminPassword);\r\n const token = await this.handleAuthentication(auth);\r\n const userDTO = this.mapUserToDTO(auth.user);\r\n\r\n return { token, user: userDTO };\r\n }\r\n\r\n private async validateLogin(\r\n loginDTO: LoginDTO,\r\n adminPassword?: string\r\n ): Promise<AuthEntity> {\r\n const auth = await validateLoginDTO(loginDTO, this.repository);\r\n\r\n if (loginDTO.role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n\r\n return auth;\r\n }\r\n\r\n private async handleAuthentication(auth: AuthEntity): Promise<TokenPair> {\r\n const token = this.generateTokens(auth);\r\n await this.updateUserStatus(auth);\r\n await this.updateUserRefreshToken(auth, token.refreshToken);\r\n\r\n return token;\r\n }\r\n\r\n private generateTokens(auth: AuthEntity): TokenPair {\r\n return {\r\n accessToken: this.authService.generateAccessToken(auth.user),\r\n refreshToken: this.authService.generateRefreshToken(auth.user)\r\n };\r\n }\r\n\r\n private async updateUserStatus(auth: AuthEntity): Promise<void> {\r\n auth.user.lastLoginAt = new Date();\r\n auth.user.isActive = true;\r\n await this.repository.update(auth.id, auth);\r\n }\r\n\r\n private async updateUserRefreshToken(\r\n auth: AuthEntity,\r\n refreshToken: string\r\n ): Promise<void> {\r\n auth.refreshToken = refreshToken;\r\n await this.repository.update(auth.id, { refreshToken });\r\n }\r\n\r\n private mapUserToDTO(user: UserEntity): UserDTO {\r\n return mapper.map(user, UserEntity, UserDTO);\r\n }\r\n}","import { AutoMap } from \"@automapper/classes\";\r\nimport { UserRole } from \"cca-entities\";\r\n\r\nexport class UserDTO {\r\n @AutoMap()\r\n id!: string;\r\n\r\n @AutoMap()\r\n name!: string;\r\n\r\n @AutoMap()\r\n email!: string;\r\n\r\n @AutoMap()\r\n role!: UserRole;\r\n\r\n adminPassword?: string;\r\n}","import * as yup from \"yup\";\r\nimport { AuthEntity, UserRole } from \"cca-entities\";\r\nimport bcrypt from \"bcrypt\";\r\n\r\nimport {\r\n ForbiddenError,\r\n NotFoundError,\r\n ValidationError,\r\n} from \"../../utils/Errors\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { LoginDTO } from \"../dtos/LoginDTO\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nconst schemas = {\r\n id: yup.string().uuid(\"Invalid user ID format\"),\r\n email: yup\r\n .string()\r\n .email(\"Invalid email format\")\r\n .max(255, \"Email cannot exceed 255 characters\"),\r\n name: yup\r\n .string()\r\n .required(\"Name is required\")\r\n .min(2, \"Name must be at least 2 characters long\")\r\n .max(50, \"Name cannot exceed 50 characters\")\r\n .matches(/^[a-zA-Z\\s]+$/, \"Name must only contain letters and spaces\"),\r\n password: yup\r\n .string()\r\n .required(\"Password required\")\r\n .min(8, \"Password too short\")\r\n .max(100, \"Password too long\")\r\n .matches(\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]/,\r\n \"Password must contain uppercase, lowercase, number and special character\"\r\n ),\r\n role: yup\r\n .string()\r\n .required(\"Role is required\")\r\n .oneOf(Object.values(UserRole), \"Invalid role specified\"),\r\n};\r\n\r\nexport const validateEmail = async (\r\n email: string,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n const user = await repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\r\n \"The email address or password is incorrect. Please retry\"\r\n );\r\n }\r\n return user;\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid email format\");\r\n }\r\n};\r\n\r\nexport const validatePassword = async (password?: string): Promise<void> => {\r\n if (password) {\r\n try {\r\n await schemas.password.validate(password);\r\n } catch (error: any) {\r\n throw new ValidationError(error.message || \"Invalid password format\");\r\n }\r\n }\r\n};\r\n\r\nexport const validateEmailUniqueness = async (\r\n repository: AuthRepository,\r\n email: string,\r\n excludeUserId?: string\r\n): Promise<void> => {\r\n try {\r\n await schemas.email.validate(email?.trim().toLowerCase());\r\n\r\n const existingUser = await repository.findByEmail(email);\r\n\r\n if (!existingUser) return;\r\n if (existingUser.id === excludeUserId) return;\r\n\r\n throw new ValidationError(`Email ${email} is already in use.`);\r\n } catch (error: any) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"user email validation failed\");\r\n }\r\n};\r\n\r\nexport const validateRegisterDTO = async (\r\n auth: RegisterDTO,\r\n repository: AuthRepository\r\n): Promise<void> => {\r\n const { name, email, role, password } = auth;\r\n\r\n await Promise.all([\r\n schemas.name.validate(name),\r\n schemas.role.validate(role),\r\n validateEmailUniqueness(repository, email),\r\n validatePassword(password),\r\n ]);\r\n};\r\n\r\nexport const validateLoginDTO = async (\r\n data: LoginDTO,\r\n repository: AuthRepository\r\n): Promise<AuthEntity> => {\r\n const { email, role, password } = data;\r\n\r\n await Promise.all([schemas.role.validate(role), schemas.password.validate(password)]);\r\n\r\n const auth = await validateEmail(email, repository);\r\n if (!auth || !auth.password) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const isMatch = await bcrypt.compare(password, auth.password);\r\n if (!isMatch) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return auth;\r\n};\r\n\r\nexport const validateAdminSecret = async (\r\n secretPassword?: string\r\n): Promise<void> => {\r\n if (!secretPassword) {\r\n throw new ValidationError(\"Admin password is required\");\r\n }\r\n\r\n try {\r\n const config = await getConfig();\r\n\r\n if (!config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"ADMIN_SECRET_PASSWORD not found in config\");\r\n }\r\n\r\n if (parseInt(secretPassword) !== config.ADMIN_SECRET_PASSWORD) {\r\n throw new ValidationError(\"Invalid admin password\");\r\n }\r\n } catch (error) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw new ValidationError(\"Error validating admin password\");\r\n }\r\n};\r\n","export class AppError extends Error {\r\n constructor(\r\n public message: string,\r\n public statusCode: number = 500,\r\n public name: string = \"AppError\"\r\n ) {\r\n super(message);\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n Error.captureStackTrace(this);\r\n }\r\n}\r\n\r\nexport class ValidationError extends AppError {\r\n constructor(message: string) {\r\n super(message, 400);\r\n this.name = \"ValidationError\";\r\n }\r\n}\r\n\r\nexport class ConfigNotFoundException extends AppError {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"ConfigNotFoundException\";\r\n }\r\n}\r\n\r\nexport class NotFoundError extends AppError {\r\n constructor(message: string) {\r\n super(message, 404, \"UserNotFoundError\");\r\n }\r\n}\r\n\r\nexport class ForbiddenError extends AppError {\r\n constructor(message: string = \"Forbidden access\") {\r\n super(message, 403);\r\n this.name = \"ForbiddenError\";\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends AppError {\r\n constructor(message: string = \"Unauthorized access\") {\r\n super(message, 401);\r\n this.name = \"UnauthorizedError\";\r\n }\r\n}\r\n\r\nexport class JwtError extends AppError {\r\n constructor(message: string) {\r\n super(message, 401);\r\n this.name = \"JwtError\";\r\n }\r\n}\r\n\r\nexport class RegistrationError extends AppError {\r\n constructor(message: string) {\r\n super(message, 400);\r\n this.name = \"RegistrationError\";\r\n }\r\n}","import { findConfig } from \"cca-core\";\r\n\r\nexport const getConfig = async (): Promise<any> => {\r\n const configPath = await findConfig({\r\n fileName: \"cca.config.json\",\r\n maxDepth: 10,\r\n startPath: process.cwd(),\r\n });\r\n const configContent = await import(\"fs/promises\").then((fs) =>\r\n fs.readFile(configPath, \"utf-8\")\r\n );\r\n\r\n return JSON.parse(configContent);\r\n}","import { createMapper } from '@automapper/core';\r\nimport { classes } from '@automapper/classes';\r\n\r\nimport { createUserMappings } from '../createUserMappings';\r\n\r\nexport const mapper = createMapper({\r\n strategyInitializer: classes(),\r\n});\r\n\r\ncreateUserMappings(mapper);\r\n","import { Mapper, createMap, forMember, mapFrom } from '@automapper/core';\r\nimport { AuthEntity, UserEntity } from 'cca-entities';\r\n\r\nimport { RegisterDTO } from '../dtos/RegisterDTO';\r\nimport { UserDTO } from '../dtos/UserDTO';\r\n\r\nexport function createUserMappings(mapper: Mapper): void {\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n AuthEntity,\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.password, mapFrom(src => src.password)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper, \r\n RegisterDTO,\r\n UserEntity,\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n\r\n createMap(\r\n mapper,\r\n UserEntity,\r\n UserDTO,\r\n forMember(dest => dest.id, mapFrom(src => src.id)),\r\n forMember(dest => dest.name, mapFrom(src => src.name)),\r\n forMember(dest => dest.email, mapFrom(src => src.email)),\r\n forMember(dest => dest.role, mapFrom(src => src.role)));\r\n}","import { UserRole } from \"cca-entities\";\r\n\r\nexport class RegisterDTO {\r\n email!: string;\r\n name!: string;\r\n password!: string;\r\n role!: UserRole;\r\n adminPassword?: string;\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\nimport { NotFoundError } from \"../../utils/Errors\";\r\n\r\n\r\nexport class LogoutUseCase implements IBaseService {\r\n private readonly repository: AuthRepository\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(authId: string): Promise<void> {\r\n try {\r\n await this.repository.logout(authId);\r\n } catch (error) {\r\n new NotFoundError(\"Auth not found\");\r\n }\r\n }\r\n}","import { IBaseService, validateRepository } from \"cca-core\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { AuthEntity, UserEntity, UserRole } from \"cca-entities\";\r\n\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nimport { mapper } from \"../mappers/utils/mapper\";\r\nimport { RegisterDTO } from \"../dtos/RegisterDTO\";\r\nimport { validateAdminSecret, validateRegisterDTO } from \"../validators/authValidation\";\r\nimport { RegistrationError } from \"../../utils/Errors\";\r\n\r\nexport class RegisterUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly SALT_ROUNDS = 10;\r\n\r\n constructor(repository: AuthRepository) {\r\n this.repository = repository;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n public async execute(\r\n email: string,\r\n name: string,\r\n password: string,\r\n role: UserRole = UserRole.GUEST,\r\n adminPassword?: string\r\n ): Promise<AuthEntity | undefined> {\r\n try {\r\n\r\n const normalizedDTO = this.normalizeAuthDTO({\r\n email,\r\n name,\r\n password,\r\n role,\r\n adminPassword\r\n });\r\n\r\n if (role === UserRole.ADMIN && adminPassword) {\r\n await validateAdminSecret(adminPassword);\r\n }\r\n\r\n await validateRegisterDTO(normalizedDTO, this.repository);\r\n\r\n const hashedPassword = await this.hashPassword(normalizedDTO.password);\r\n const authEntity = await this.createAuthEntity(\r\n normalizedDTO,\r\n hashedPassword\r\n );\r\n\r\n return await this.repository.create(authEntity);\r\n } catch (error) {\r\n throw new RegistrationError(\"Registration failed\");\r\n }\r\n }\r\n\r\n private normalizeAuthDTO(dto: RegisterDTO): RegisterDTO {\r\n return {\r\n name: dto.name.trim(),\r\n email: dto.email.trim().toLowerCase(),\r\n role: dto.role,\r\n password: dto.password.trim(),\r\n adminPassword: dto.adminPassword?.trim()\r\n };\r\n }\r\n\r\n private async hashPassword(password: string): Promise<string> {\r\n return await bcrypt.hash(password, this.SALT_ROUNDS);\r\n }\r\n\r\n private async createAuthEntity(dto: RegisterDTO, hashedPassword: string): Promise<AuthEntity> {\r\n const authEntity = mapper.map(dto, RegisterDTO, AuthEntity);\r\n const userEntity = mapper.map(dto, RegisterDTO, UserEntity);\r\n\r\n authEntity.password = hashedPassword;\r\n authEntity.refreshToken = \"\";\r\n authEntity.user = userEntity;\r\n authEntity.user.updatedAt = null as any;\r\n\r\n return authEntity;\r\n }\r\n}\r\n","import { IBaseService, validateRepository } from \"cca-core\";\r\n\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport { JwtAuthService } from \"../../infrastructure/auth/JwtAuthService\";\r\nimport { AuthRepository } from \"../../infrastructure/repository/AuthRepository\";\r\n\r\nexport class RefreshTokenUseCase implements IBaseService {\r\n private readonly repository: AuthRepository;\r\n private readonly service: JwtAuthService;\r\n\r\n constructor(repository: AuthRepository, service: JwtAuthService) {\r\n this.repository = repository;\r\n this.service = service;\r\n }\r\n\r\n public async initialize(): Promise<void> {\r\n await validateRepository(this.repository, (repo) => repo.getAll());\r\n }\r\n\r\n async execute(\r\n refreshToken: string\r\n ): Promise<{ accessToken: string; refreshToken: string } | null> {\r\n try {\r\n const decoded = await this.service.verifyRefreshToken(refreshToken);\r\n\r\n const auth = decoded.userId\r\n ? await this.repository.findById(decoded.userId)\r\n : null;\r\n\r\n if (!auth || auth.refreshToken !== refreshToken) {\r\n return null;\r\n }\r\n\r\n const accessToken = this.service.generateAccessToken(auth.user);\r\n const newRefreshToken = this.service.generateRefreshToken(auth.user);\r\n\r\n await this.repository.update(auth.id, {\r\n refreshToken: newRefreshToken,\r\n });\r\n\r\n return { accessToken, refreshToken: newRefreshToken };\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async verityToken(token: string): Promise<IDecodedToken> {\r\n return await this.service.verifyAccessToken(token);\r\n }\r\n}\r\n","import { NextFunction, Request, Response } from \"express\";\r\n\r\nimport { LoginDTO } from \"../../application/dtos/LoginDTO\";\r\nimport { RegisterDTO } from \"../../application/dtos/RegisterDTO\";\r\n\r\nimport { RegisterUseCase } from \"../../application/useCase/RegisterUseCase\";\r\nimport { LoginUseCase } from \"../../application/useCase/LoginUseCase\";\r\nimport { LogoutUseCase } from \"../../application/useCase/LogoutUseCase \";\r\nimport { RefreshTokenUseCase } from \"../../application/useCase/RefreshTokenUseCase\";\r\n\r\nimport { IRefreshTokenRequest } from \"../../domain/interfaces/IRefreshTokenRequest\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nexport class AuthController {\r\n private loginUseCase: LoginUseCase;\r\n private readonly logoutUseCase: LogoutUseCase;\r\n private registerUseCase: RegisterUseCase;\r\n private refreshTokenUseCase: RefreshTokenUseCase;\r\n\r\n constructor(\r\n loginUseCase: LoginUseCase,\r\n logoutUseCase: LogoutUseCase,\r\n registerUseCase: RegisterUseCase,\r\n refreshTokenUseCase: RefreshTokenUseCase\r\n ) {\r\n this.loginUseCase = loginUseCase;\r\n this.logoutUseCase = logoutUseCase;\r\n this.registerUseCase = registerUseCase;\r\n this.refreshTokenUseCase = refreshTokenUseCase;\r\n }\r\n\r\n login = async (req: Request, res: Response, next: NextFunction) => {\r\n try {\r\n const { adminPassword, ...loginDTO }: LoginDTO = req.body;\r\n const result = await this.loginUseCase.execute(loginDTO, adminPassword);\r\n res.status(201).json(result);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n logout = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n await this.logoutUseCase.execute(req.params.id);\r\n res.status(200).json({ message: 'Logged out successfully' });\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n register = async (\r\n req: Request,\r\n res: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n try {\r\n const { email, name, password, role, adminPassword }: RegisterDTO = req.body;\r\n await this.registerUseCase.execute(email, name, password, role, adminPassword);\r\n } catch (error) {\r\n next(error);\r\n }\r\n };\r\n\r\n refreshToken = async (req: Request, res: Response) => {\r\n const { refreshToken }: IRefreshTokenRequest = req.body;\r\n const result = await this.refreshTokenUseCase.execute(refreshToken);\r\n res.json(result);\r\n };\r\n\r\n verifyToken = async (token: string): Promise<IDecodedToken> => {\r\n return await this.refreshTokenUseCase.verityToken(token);\r\n };\r\n}\r\n","import { BaseRepository, IBaseRepository, IExtendedBaseRepository } from \"cca-core\";\r\nimport { AuthEntity } from \"cca-entities\";\r\nimport { Repository } from \"typeorm\";\r\n\r\nexport class AuthRepository\r\n extends BaseRepository<AuthEntity>\r\n implements IExtendedBaseRepository<AuthEntity> {\r\n constructor(repository: Repository<AuthEntity>) {\r\n super(repository);\r\n }\r\n\r\n async findByEmail(email: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .addSelect('auth.password')\r\n .where('auth.email = :email', { email });\r\n\r\n return await query.getOne();\r\n }\r\n\r\n async create(entity: Omit<AuthEntity, \"createdAt\">): Promise<AuthEntity> {\r\n return super.create(entity);\r\n }\r\n\r\n async findByUserId(userId: string): Promise<AuthEntity | null> {\r\n const query = this.repository.createQueryBuilder('auth')\r\n .leftJoinAndSelect('auth.user', 'user')\r\n .where('user.id = :userId', { userId });\r\n \r\n return await query.getOne();\r\n }\r\n \r\n async logout(userId: string): Promise<void> {\r\n const auth = await this.findByUserId(userId);\r\n if (!auth) {\r\n throw new Error('Auth not found');\r\n }\r\n \r\n auth.refreshToken = null as any;\r\n auth.user.isActive = false;\r\n \r\n await this.update(auth.id, auth);\r\n }\r\n}\r\n","import * as jwt from \"jsonwebtoken\";\r\nimport { Secret, SignOptions } from \"jsonwebtoken\";\r\nimport * as bcrypt from \"bcrypt\";\r\nimport { IBaseService, validateRepository } from \"cca-core\";\r\nimport { AuthEntity, UserEntity } from \"cca-entities\";\r\n\r\nimport { IJwtConfig } from \"../../domain/interfaces/IJwtConfig\";\r\nimport { IAuthService } from \"../../domain/interfaces/IAuthService\";\r\nimport { IDecodedToken } from \"../../domain/interfaces/IDecodedToken\";\r\n\r\nimport {\r\n ForbiddenError,\r\n JwtError,\r\n NotFoundError,\r\n UnauthorizedError,\r\n} from \"../../utils/Errors\";\r\n\r\nimport { AuthRepository } from \"../repository/AuthRepository\";\r\nimport { getConfig } from \"../../utils/config\";\r\n\r\nexport class JwtAuthService implements IBaseService, IAuthService {\r\n private jwtConfig: IJwtConfig | undefined;\r\n\r\n constructor(private readonly repository: AuthRepository, config?: IJwtConfig) {\r\n this.loadConfig(config);\r\n }\r\n\r\n private async loadConfig(config?: IJwtConfig) {\r\n const configData = await getConfig();\r\n this.jwtConfig = {\r\n accessTokenSecret: configData.JWT_ACCESS_SECRET || \"default-access-secret\",\r\n refreshTokenSecret: configData.JWT_REFRESH_SECRET || \"default-refresh-secret\",\r\n accessTokenExpiry: configData.ACCESS_TOKEN_EXPIRY || \"15m\",\r\n refreshTokenExpiry: configData.REFRESH_TOKEN_EXPIRY || \"7d\",\r\n ...config\r\n };\r\n this.validateConfiguration();\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await validateRepository(this.repository, repo => repo.getAll());\r\n }\r\n\r\n private validateConfiguration(): void {\r\n if (!this.jwtConfig?.accessTokenSecret || !this.jwtConfig?.refreshTokenSecret) {\r\n throw new JwtError(\"JWT secrets required in config\");\r\n }\r\n }\r\n\r\n async validateUser(email: string, password: string): Promise<AuthEntity | null> {\r\n const user = await this.repository.findByEmail(email);\r\n if (!user) {\r\n throw new NotFoundError(\"Invalid credentials\");\r\n }\r\n\r\n const validPassword = await bcrypt.compare(password, user.password);\r\n if (!validPassword) {\r\n throw new ForbiddenError(\"Invalid credentials\");\r\n }\r\n\r\n return user;\r\n }\r\n\r\n private verifyJwtConfig() {\r\n if (!this.jwtConfig) throw new JwtError(\"JWT config not loaded\");\r\n }\r\n\r\n generateAccessToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id, email: user.email, role: user.role },\r\n this.jwtConfig!.accessTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.accessTokenExpiry }\r\n );\r\n }\r\n\r\n generateRefreshToken(user: UserEntity): string {\r\n this.verifyJwtConfig();\r\n return jwt.sign(\r\n { userId: user.id },\r\n this.jwtConfig!.refreshTokenSecret as Secret,\r\n { expiresIn: this.jwtConfig!.refreshTokenExpiry }\r\n );\r\n }\r\n\r\n async verifyToken(token: string, secret: string): Promise<IDecodedToken> {\r\n try {\r\n return jwt.verify(token, secret) as IDecodedToken;\r\n } catch {\r\n throw new UnauthorizedError();\r\n }\r\n }\r\n\r\n async verifyAccessToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.accessTokenSecret);\r\n }\r\n\r\n async verifyRefreshToken(token: string): Promise<IDecodedToken> {\r\n this.verifyJwtConfig();\r\n return this.verifyToken(token, this.jwtConfig!.refreshTokenSecret);\r\n }\r\n}\r\n"],"mappings":"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","names":["AuthEntity","UserEntity","UserRole","AuthEntity","mapper","AuthEntity","UserRole","UserEntity","validateRepository","validateRepository","validateRepository","bcrypt","AuthEntity","UserEntity","UserRole","validateRepository","UserRole","AuthEntity","UserEntity","validateRepository","validateRepository","bcrypt","validateRepository","validateRepository","AuthEntity"]}
|
package/dist/metafile-cjs.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/application/dtos/UserDTO.ts":{"bytes":281,"imports":[{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/Errors.ts":{"bytes":1243,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/config.ts":{"bytes":404,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/validators/authValidation.ts":{"bytes":4340,"imports":[{"path":"yup","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/dtos/RegisterDTO.ts":{"bytes":181,"imports":[{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/createUserMappings.ts":{"bytes":1198,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/utils/mapper.ts":{"bytes":272,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"src/application/mappers/createUserMappings.ts","kind":"import-statement","original":"../createUserMappings"}],"format":"esm"},"src/application/useCase/LoginUseCase.ts":{"bytes":2762,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/LogoutUseCase .ts":{"bytes":822,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RegisterUseCase.ts":{"bytes":2554,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RefreshTokenUseCase.ts":{"bytes":1623,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/presentation/controller/AuthController.ts":{"bytes":2589,"imports":[{"path":"express","kind":"import-statement","external":true},{"path":"../../application/dtos/LoginDTO","kind":"import-statement","external":true},{"path":"../../application/dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../../application/useCase/RegisterUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LoginUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LogoutUseCase ","kind":"import-statement","external":true},{"path":"../../application/useCase/RefreshTokenUseCase","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IRefreshTokenRequest","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/repository/AuthRepository.ts":{"bytes":1366,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"typeorm","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/auth/JwtAuthService.ts":{"bytes":3373,"imports":[{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IJwtConfig","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IAuthService","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/container/createAuthContainer.ts":{"bytes":1819,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/useCase/LoginUseCase.ts","kind":"import-statement","original":"../../application/useCase/LoginUseCase"},{"path":"src/application/useCase/LogoutUseCase .ts","kind":"import-statement","original":"../../application/useCase/LogoutUseCase "},{"path":"src/application/useCase/RegisterUseCase.ts","kind":"import-statement","original":"../../application/useCase/RegisterUseCase"},{"path":"src/application/useCase/RefreshTokenUseCase.ts","kind":"import-statement","original":"../../application/useCase/RefreshTokenUseCase"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"../../presentation/controller/AuthController"},{"path":"src/infrastructure/repository/AuthRepository.ts","kind":"import-statement","original":"../repository/AuthRepository"},{"path":"src/infrastructure/auth/JwtAuthService.ts","kind":"import-statement","original":"../auth/JwtAuthService"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":214,"imports":[{"path":"src/infrastructure/container/createAuthContainer.ts","kind":"import-statement","original":"./infrastructure/container/createAuthContainer"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"./presentation/controller/AuthController"}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":40371},"dist/index.js":{"imports":[{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"@automapper/classes","kind":"require-call","external":true},{"path":"yup","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"bcrypt","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"@automapper/core","kind":"require-call","external":true},{"path":"@automapper/classes","kind":"require-call","external":true},{"path":"@automapper/core","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"bcrypt","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"jsonwebtoken","kind":"require-call","external":true},{"path":"bcrypt","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":189},"src/infrastructure/container/createAuthContainer.ts":{"bytesInOutput":1285},"src/application/useCase/LoginUseCase.ts":{"bytesInOutput":1804},"src/application/dtos/UserDTO.ts":{"bytesInOutput":480},"src/application/validators/authValidation.ts":{"bytesInOutput":3764},"src/utils/Errors.ts":{"bytesInOutput":1555},"src/utils/config.ts":{"bytesInOutput":404},"src/application/mappers/utils/mapper.ts":{"bytesInOutput":234},"src/application/mappers/createUserMappings.ts":{"bytesInOutput":1479},"src/application/dtos/RegisterDTO.ts":{"bytesInOutput":112},"src/application/useCase/LogoutUseCase .ts":{"bytesInOutput":617},"src/application/useCase/RegisterUseCase.ts":{"bytesInOutput":2015},"src/application/useCase/RefreshTokenUseCase.ts":{"bytesInOutput":1164},"src/presentation/controller/AuthController.ts":{"bytesInOutput":1698},"src/infrastructure/repository/AuthRepository.ts":{"bytesInOutput":1016},"src/infrastructure/auth/JwtAuthService.ts":{"bytesInOutput":2461}},"bytes":23211}}}
|
|
1
|
+
{"inputs":{"src/application/dtos/UserDTO.ts":{"bytes":281,"imports":[{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/Errors.ts":{"bytes":1402,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/config.ts":{"bytes":404,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/validators/authValidation.ts":{"bytes":4340,"imports":[{"path":"yup","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/dtos/RegisterDTO.ts":{"bytes":181,"imports":[{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/createUserMappings.ts":{"bytes":1198,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/utils/mapper.ts":{"bytes":272,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"src/application/mappers/createUserMappings.ts","kind":"import-statement","original":"../createUserMappings"}],"format":"esm"},"src/application/useCase/LoginUseCase.ts":{"bytes":2762,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/LogoutUseCase .ts":{"bytes":749,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RegisterUseCase.ts":{"bytes":2583,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RefreshTokenUseCase.ts":{"bytes":1623,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/presentation/controller/AuthController.ts":{"bytes":2589,"imports":[{"path":"express","kind":"import-statement","external":true},{"path":"../../application/dtos/LoginDTO","kind":"import-statement","external":true},{"path":"../../application/dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../../application/useCase/RegisterUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LoginUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LogoutUseCase ","kind":"import-statement","external":true},{"path":"../../application/useCase/RefreshTokenUseCase","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IRefreshTokenRequest","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/repository/AuthRepository.ts":{"bytes":1366,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"typeorm","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/auth/JwtAuthService.ts":{"bytes":3373,"imports":[{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IJwtConfig","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IAuthService","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/container/createAuthContainer.ts":{"bytes":1819,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/useCase/LoginUseCase.ts","kind":"import-statement","original":"../../application/useCase/LoginUseCase"},{"path":"src/application/useCase/LogoutUseCase .ts","kind":"import-statement","original":"../../application/useCase/LogoutUseCase "},{"path":"src/application/useCase/RegisterUseCase.ts","kind":"import-statement","original":"../../application/useCase/RegisterUseCase"},{"path":"src/application/useCase/RefreshTokenUseCase.ts","kind":"import-statement","original":"../../application/useCase/RefreshTokenUseCase"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"../../presentation/controller/AuthController"},{"path":"src/infrastructure/repository/AuthRepository.ts","kind":"import-statement","original":"../repository/AuthRepository"},{"path":"src/infrastructure/auth/JwtAuthService.ts","kind":"import-statement","original":"../auth/JwtAuthService"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":214,"imports":[{"path":"src/infrastructure/container/createAuthContainer.ts","kind":"import-statement","original":"./infrastructure/container/createAuthContainer"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"./presentation/controller/AuthController"}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":40536},"dist/index.js":{"imports":[{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"@automapper/classes","kind":"require-call","external":true},{"path":"yup","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"bcrypt","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"@automapper/core","kind":"require-call","external":true},{"path":"@automapper/classes","kind":"require-call","external":true},{"path":"@automapper/core","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"bcrypt","kind":"require-call","external":true},{"path":"cca-entities","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true},{"path":"jsonwebtoken","kind":"require-call","external":true},{"path":"bcrypt","kind":"require-call","external":true},{"path":"cca-core","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":189},"src/infrastructure/container/createAuthContainer.ts":{"bytesInOutput":1285},"src/application/useCase/LoginUseCase.ts":{"bytesInOutput":1804},"src/application/dtos/UserDTO.ts":{"bytesInOutput":480},"src/application/validators/authValidation.ts":{"bytesInOutput":3764},"src/utils/Errors.ts":{"bytesInOutput":1811},"src/utils/config.ts":{"bytesInOutput":404},"src/application/mappers/utils/mapper.ts":{"bytesInOutput":234},"src/application/mappers/createUserMappings.ts":{"bytesInOutput":1479},"src/application/dtos/RegisterDTO.ts":{"bytesInOutput":112},"src/application/useCase/LogoutUseCase .ts":{"bytesInOutput":510},"src/application/useCase/RegisterUseCase.ts":{"bytesInOutput":1994},"src/application/useCase/RefreshTokenUseCase.ts":{"bytesInOutput":1164},"src/presentation/controller/AuthController.ts":{"bytesInOutput":1698},"src/infrastructure/repository/AuthRepository.ts":{"bytesInOutput":1016},"src/infrastructure/auth/JwtAuthService.ts":{"bytesInOutput":2461}},"bytes":23339}}}
|
package/dist/metafile-esm.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/application/dtos/UserDTO.ts":{"bytes":281,"imports":[{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/Errors.ts":{"bytes":1243,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/config.ts":{"bytes":404,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/validators/authValidation.ts":{"bytes":4340,"imports":[{"path":"yup","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/dtos/RegisterDTO.ts":{"bytes":181,"imports":[{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/createUserMappings.ts":{"bytes":1198,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/utils/mapper.ts":{"bytes":272,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"src/application/mappers/createUserMappings.ts","kind":"import-statement","original":"../createUserMappings"}],"format":"esm"},"src/application/useCase/LoginUseCase.ts":{"bytes":2762,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/LogoutUseCase .ts":{"bytes":822,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RegisterUseCase.ts":{"bytes":2554,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RefreshTokenUseCase.ts":{"bytes":1623,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/presentation/controller/AuthController.ts":{"bytes":2589,"imports":[{"path":"express","kind":"import-statement","external":true},{"path":"../../application/dtos/LoginDTO","kind":"import-statement","external":true},{"path":"../../application/dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../../application/useCase/RegisterUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LoginUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LogoutUseCase ","kind":"import-statement","external":true},{"path":"../../application/useCase/RefreshTokenUseCase","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IRefreshTokenRequest","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/repository/AuthRepository.ts":{"bytes":1366,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"typeorm","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/auth/JwtAuthService.ts":{"bytes":3373,"imports":[{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IJwtConfig","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IAuthService","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/container/createAuthContainer.ts":{"bytes":1819,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/useCase/LoginUseCase.ts","kind":"import-statement","original":"../../application/useCase/LoginUseCase"},{"path":"src/application/useCase/LogoutUseCase .ts","kind":"import-statement","original":"../../application/useCase/LogoutUseCase "},{"path":"src/application/useCase/RegisterUseCase.ts","kind":"import-statement","original":"../../application/useCase/RegisterUseCase"},{"path":"src/application/useCase/RefreshTokenUseCase.ts","kind":"import-statement","original":"../../application/useCase/RefreshTokenUseCase"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"../../presentation/controller/AuthController"},{"path":"src/infrastructure/repository/AuthRepository.ts","kind":"import-statement","original":"../repository/AuthRepository"},{"path":"src/infrastructure/auth/JwtAuthService.ts","kind":"import-statement","original":"../auth/JwtAuthService"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":214,"imports":[{"path":"src/infrastructure/container/createAuthContainer.ts","kind":"import-statement","original":"./infrastructure/container/createAuthContainer"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"./presentation/controller/AuthController"}],"format":"esm"}},"outputs":{"dist/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":40248},"dist/index.mjs":{"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"yup","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true}],"exports":["AuthController","createAuthContainer"],"entryPoint":"src/index.ts","inputs":{"src/infrastructure/container/createAuthContainer.ts":{"bytesInOutput":1252},"src/application/useCase/LoginUseCase.ts":{"bytesInOutput":1774},"src/application/dtos/UserDTO.ts":{"bytesInOutput":394},"src/application/validators/authValidation.ts":{"bytesInOutput":3693},"src/utils/Errors.ts":{"bytesInOutput":1555},"src/utils/config.ts":{"bytesInOutput":379},"src/application/mappers/utils/mapper.ts":{"bytesInOutput":189},"src/application/mappers/createUserMappings.ts":{"bytesInOutput":1063},"src/application/dtos/RegisterDTO.ts":{"bytesInOutput":112},"src/application/useCase/LogoutUseCase .ts":{"bytesInOutput":622},"src/application/useCase/RegisterUseCase.ts":{"bytesInOutput":1989},"src/application/useCase/RefreshTokenUseCase.ts":{"bytesInOutput":1169},"src/presentation/controller/AuthController.ts":{"bytesInOutput":1698},"src/infrastructure/repository/AuthRepository.ts":{"bytesInOutput":998},"src/infrastructure/auth/JwtAuthService.ts":{"bytesInOutput":2452},"src/index.ts":{"bytesInOutput":0}},"bytes":20876}}}
|
|
1
|
+
{"inputs":{"src/application/dtos/UserDTO.ts":{"bytes":281,"imports":[{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/Errors.ts":{"bytes":1402,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/config.ts":{"bytes":404,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/validators/authValidation.ts":{"bytes":4340,"imports":[{"path":"yup","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/dtos/RegisterDTO.ts":{"bytes":181,"imports":[{"path":"cca-entities","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/createUserMappings.ts":{"bytes":1198,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/mappers/utils/mapper.ts":{"bytes":272,"imports":[{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"src/application/mappers/createUserMappings.ts","kind":"import-statement","original":"../createUserMappings"}],"format":"esm"},"src/application/useCase/LoginUseCase.ts":{"bytes":2762,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"src/application/dtos/UserDTO.ts","kind":"import-statement","original":"../dtos/UserDTO"},{"path":"../dtos/LoginDTO","kind":"import-statement","external":true},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/LogoutUseCase .ts":{"bytes":749,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RegisterUseCase.ts":{"bytes":2583,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/application/mappers/utils/mapper.ts","kind":"import-statement","original":"../mappers/utils/mapper"},{"path":"src/application/dtos/RegisterDTO.ts","kind":"import-statement","original":"../dtos/RegisterDTO"},{"path":"src/application/validators/authValidation.ts","kind":"import-statement","original":"../validators/authValidation"},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/application/useCase/RefreshTokenUseCase.ts":{"bytes":1623,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"../../infrastructure/auth/JwtAuthService","kind":"import-statement","external":true},{"path":"../../infrastructure/repository/AuthRepository","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/presentation/controller/AuthController.ts":{"bytes":2589,"imports":[{"path":"express","kind":"import-statement","external":true},{"path":"../../application/dtos/LoginDTO","kind":"import-statement","external":true},{"path":"../../application/dtos/RegisterDTO","kind":"import-statement","external":true},{"path":"../../application/useCase/RegisterUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LoginUseCase","kind":"import-statement","external":true},{"path":"../../application/useCase/LogoutUseCase ","kind":"import-statement","external":true},{"path":"../../application/useCase/RefreshTokenUseCase","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IRefreshTokenRequest","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/repository/AuthRepository.ts":{"bytes":1366,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"typeorm","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/auth/JwtAuthService.ts":{"bytes":3373,"imports":[{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IJwtConfig","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IAuthService","kind":"import-statement","external":true},{"path":"../../domain/interfaces/IDecodedToken","kind":"import-statement","external":true},{"path":"src/utils/Errors.ts","kind":"import-statement","original":"../../utils/Errors"},{"path":"../repository/AuthRepository","kind":"import-statement","external":true},{"path":"src/utils/config.ts","kind":"import-statement","original":"../../utils/config"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/infrastructure/container/createAuthContainer.ts":{"bytes":1819,"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"src/application/useCase/LoginUseCase.ts","kind":"import-statement","original":"../../application/useCase/LoginUseCase"},{"path":"src/application/useCase/LogoutUseCase .ts","kind":"import-statement","original":"../../application/useCase/LogoutUseCase "},{"path":"src/application/useCase/RegisterUseCase.ts","kind":"import-statement","original":"../../application/useCase/RegisterUseCase"},{"path":"src/application/useCase/RefreshTokenUseCase.ts","kind":"import-statement","original":"../../application/useCase/RefreshTokenUseCase"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"../../presentation/controller/AuthController"},{"path":"src/infrastructure/repository/AuthRepository.ts","kind":"import-statement","original":"../repository/AuthRepository"},{"path":"src/infrastructure/auth/JwtAuthService.ts","kind":"import-statement","original":"../auth/JwtAuthService"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":214,"imports":[{"path":"src/infrastructure/container/createAuthContainer.ts","kind":"import-statement","original":"./infrastructure/container/createAuthContainer"},{"path":"src/presentation/controller/AuthController.ts","kind":"import-statement","original":"./presentation/controller/AuthController"}],"format":"esm"}},"outputs":{"dist/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":40413},"dist/index.mjs":{"imports":[{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"yup","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"fs/promises","kind":"dynamic-import","external":true},{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"@automapper/classes","kind":"import-statement","external":true},{"path":"@automapper/core","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-entities","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true},{"path":"jsonwebtoken","kind":"import-statement","external":true},{"path":"bcrypt","kind":"import-statement","external":true},{"path":"cca-core","kind":"import-statement","external":true}],"exports":["AuthController","createAuthContainer"],"entryPoint":"src/index.ts","inputs":{"src/infrastructure/container/createAuthContainer.ts":{"bytesInOutput":1252},"src/application/useCase/LoginUseCase.ts":{"bytesInOutput":1774},"src/application/dtos/UserDTO.ts":{"bytesInOutput":394},"src/application/validators/authValidation.ts":{"bytesInOutput":3693},"src/utils/Errors.ts":{"bytesInOutput":1811},"src/utils/config.ts":{"bytesInOutput":379},"src/application/mappers/utils/mapper.ts":{"bytesInOutput":189},"src/application/mappers/createUserMappings.ts":{"bytesInOutput":1063},"src/application/dtos/RegisterDTO.ts":{"bytesInOutput":112},"src/application/useCase/LogoutUseCase .ts":{"bytesInOutput":515},"src/application/useCase/RegisterUseCase.ts":{"bytesInOutput":1968},"src/application/useCase/RefreshTokenUseCase.ts":{"bytesInOutput":1169},"src/presentation/controller/AuthController.ts":{"bytesInOutput":1698},"src/infrastructure/repository/AuthRepository.ts":{"bytesInOutput":998},"src/infrastructure/auth/JwtAuthService.ts":{"bytesInOutput":2452},"src/index.ts":{"bytesInOutput":0}},"bytes":21004}}}
|
package/dist/utils/Errors.d.ts
CHANGED