import { User, SecurityClearance, UserRole, Permission } from "vr-models"; import { Transaction, WhereOptions } from "sequelize"; export type UserType = "RIDER" | "PASSENGER" | "AGENT" | "ADMIN" | "SUPER_ADMIN"; export interface ProfileFormatOptions { includeSensitive?: boolean; includeSecurity?: boolean; includeFinancial?: boolean; userType?: UserType; } export interface BaseUserProfile { id: string; firstName: string; lastName: string; primaryContact: string; gender: "male" | "female"; birthDate: number | null; birthMonth: number | null; birthYear: number | null; isActive: boolean; lastLoginAt: Date | null; createdAt: Date; } export interface RiderSpecificFields { jacketId: string; plateNumber: string | null; } export interface PassengerSpecificFields { jacketId: string; plateNumber: string | null; } export interface AdminSpecificFields { jacketId: string; plateNumber: string | null; isSuspended: boolean; isDeactivated: boolean; } export interface SuperAdminSpecificFields extends AdminSpecificFields { bannedAt: Date | null; banReason: string | null; suspendedAt: Date | null; suspensionReason: string | null; deactivatedAt: Date | null; securityClearanceId: string; } export interface SecurityFields { role?: string; level?: number; permissions?: string[]; } export type RiderProfile = BaseUserProfile & RiderSpecificFields & Partial; export type PassengerProfile = BaseUserProfile & PassengerSpecificFields & Partial; export type AgentProfile = BaseUserProfile & Partial; export type AdminProfile = BaseUserProfile & AdminSpecificFields & SecurityFields; export type SuperAdminProfile = BaseUserProfile & SuperAdminSpecificFields & SecurityFields; export interface UserListResponse { data: Array; pagination: { total: number; page: number; limit: number; pages: number; }; } export interface UserSearchFilters { role?: UserRole; isActive?: boolean; isSuspended?: boolean; isBanned?: boolean; isDeactivated?: boolean; gender?: "male" | "female"; startDate?: string; endDate?: string; search?: string; } export interface EventSearchFilters { action?: string; entity?: string; startDate?: string; endDate?: string; } export interface ValidationError { field: string; message: string; } export interface GetUsersResult { users: User[]; total: number; } export declare const PHONE_REGEX: RegExp; export declare const JACKET_ID_REGEX: RegExp; export declare const JACKET_ID_PREFIX = "JKT"; /** * Format user profile based on viewer type and options * FIXED: Handle missing primaryContact gracefully */ export declare const formatUserProfile: (user: User, viewerType?: UserType, options?: ProfileFormatOptions) => RiderProfile | PassengerProfile | AgentProfile | AdminProfile | SuperAdminProfile; /** * Format user list for response (paginated) */ export declare const formatUserListResponse: (users: User[], total: number, page: number, limit: number, viewerType?: UserType) => UserListResponse; /** * Check if user has a specific role */ export declare const hasRole: (user: User, role: UserRole | UserRole[]) => boolean; /** * Check if user has a specific permission */ export declare const hasPermission: (user: User, permission: Permission) => boolean; /** * Check if user has any of the given permissions */ export declare const hasAnyPermission: (user: User, permissions: Permission[]) => boolean; /** * Check if user has all of the given permissions */ export declare const hasAllPermissions: (user: User, permissions: Permission[]) => boolean; /** * Check if account can be modified (not deactivated/suspended) */ export declare const canModifyAccount: (user: User) => boolean; /** * Check if account is active and accessible */ export declare const isAccountAccessible: (user: User) => boolean; /** * Get user by ID with security clearance */ export declare const getUserById: (userId: string, includeSecurity?: boolean, excludeSensitive?: boolean) => Promise; /** * Get users by role with optional filters */ export declare const getUsersByRole: (role: UserRole, filters?: UserSearchFilters, pagination?: { page: number; limit: number; }) => Promise; /** * Find security clearance by role */ export declare const findSecurityClearanceByRole: (role: UserRole, requireDefault?: boolean) => Promise; /** * Generate search conditions for user queries */ export declare const generateUserSearchConditions: (filters: UserSearchFilters) => WhereOptions; /** * Generate search conditions for event logs */ export declare const generateEventSearchConditions: (userId: string, filters: EventSearchFilters) => WhereOptions; /** * Get sort order for queries */ export declare const getSortOrder: (sortBy?: string, order?: string) => any[]; /** * Generate unique jacket ID */ export declare const generateJacketId: () => Promise; export interface ValidationError { field: string; message: string; } /** * Validate unique user fields (phone number is in PhoneContact table) * Note: nationalId has been removed */ export declare const validateUniqueFields: (fields: { phoneNumber?: string; email?: string | null; jacketId?: string; }, excludeUserId?: string) => Promise; /** * Validate password */ export declare const validatePassword: (plainPassword: string, hashedPassword: string | null) => Promise; /** * Hash password */ export declare const hashPassword: (password: string) => Promise; /** * Soft delete user (updated - no nationalId reference) */ export declare const softDeleteUser: (userId: string, options?: { reason?: string; deletedBy?: string; transaction?: Transaction; }) => Promise; declare const _default: { formatUserProfile: (user: User, viewerType?: UserType, options?: ProfileFormatOptions) => RiderProfile | PassengerProfile | AgentProfile | AdminProfile | SuperAdminProfile; formatUserListResponse: (users: User[], total: number, page: number, limit: number, viewerType?: UserType) => UserListResponse; hasRole: (user: User, role: UserRole | UserRole[]) => boolean; hasPermission: (user: User, permission: Permission) => boolean; hasAnyPermission: (user: User, permissions: Permission[]) => boolean; hasAllPermissions: (user: User, permissions: Permission[]) => boolean; canModifyAccount: (user: User) => boolean; isAccountAccessible: (user: User) => boolean; getUserById: (userId: string, includeSecurity?: boolean, excludeSensitive?: boolean) => Promise; getUsersByRole: (role: UserRole, filters?: UserSearchFilters, pagination?: { page: number; limit: number; }) => Promise; findSecurityClearanceByRole: (role: UserRole, requireDefault?: boolean) => Promise; generateUserSearchConditions: (filters: UserSearchFilters) => WhereOptions; generateEventSearchConditions: (userId: string, filters: EventSearchFilters) => WhereOptions; getSortOrder: (sortBy?: string, order?: string) => any[]; generateJacketId: () => Promise; validateUniqueFields: (fields: { phoneNumber?: string; email?: string | null; jacketId?: string; }, excludeUserId?: string) => Promise; validatePassword: (plainPassword: string, hashedPassword: string | null) => Promise; hashPassword: (password: string) => Promise; softDeleteUser: (userId: string, options?: { reason?: string; deletedBy?: string; transaction?: Transaction; }) => Promise; }; export default _default;