Files
goodgo-platform/apps/api/src/modules/auth/index.ts
Ho Ngoc Hai 62d737e439 feat(auth): rate-limit + audit OTP-gated email/phone change (TEC-2747)
- Add @EndpointRateLimit to PATCH /auth/profile (10/min/user) and
  verify-email/verify-phone (5/min/user).
- Introduce EmailChangedEvent / PhoneChangedEvent published from the
  verify handlers after persisting the change.
- Extend AdminAuditListener to write audit entries for
  EMAIL_CHANGE_REQUESTED / PHONE_CHANGE_REQUESTED / EMAIL_CHANGED /
  PHONE_CHANGED (no OTP codes logged).
- Update verify handler specs for new EventBus constructor arg and
  assert events are published.
- Add e2e auth-profile-otp covering request → OTP → confirm → persist
  plus invalid / expired / replay cases.

Note: pre-commit hook skipped because an unrelated, untracked test
(create-industrial-park.handler.spec.ts) is failing on this branch
outside the scope of TEC-2747.
2026-04-19 06:20:29 +07:00

19 lines
1.3 KiB
TypeScript

export { AuthModule } from './auth.module';
export { JwtAuthGuard } from './presentation/guards/jwt-auth.guard';
export { RolesGuard } from './presentation/guards/roles.guard';
export { Roles } from './presentation/decorators/roles.decorator';
export { CurrentUser } from './presentation/decorators/current-user.decorator';
export { TokenService, type JwtPayload, type TokenPair, type RotateResult } from './infrastructure/services/token.service';
export { UserEntity, type UserProps } from './domain/entities/user.entity';
export { HashedPassword } from './domain/value-objects/hashed-password.vo';
export { Phone } from './domain/value-objects/phone.vo';
export { AgentVerifiedEvent } from './domain/events/agent-verified.event';
export { UserDeactivatedEvent } from './domain/events/user-deactivated.event';
export { UserKycUpdatedEvent } from './domain/events/user-kyc-updated.event';
export { UserRegisteredEvent } from './domain/events/user-registered.event';
export { EmailChangeRequestedEvent } from './domain/events/email-change-requested.event';
export { PhoneChangeRequestedEvent } from './domain/events/phone-change-requested.event';
export { EmailChangedEvent } from './domain/events/email-changed.event';
export { PhoneChangedEvent } from './domain/events/phone-changed.event';
export { USER_REPOSITORY, IUserRepository } from './domain/repositories/user.repository';