|
|
|
export interface User { |
|
id: string |
|
email: string |
|
username: string |
|
displayName: string |
|
avatar?: string |
|
bio?: string |
|
isOnline: boolean |
|
lastSeen: Date |
|
isAdmin: boolean |
|
createdAt: Date |
|
updatedAt: Date |
|
} |
|
|
|
export interface UserProfile { |
|
id: string |
|
userId: string |
|
displayName: string |
|
bio?: string |
|
avatar?: string |
|
theme: 'light' | 'dark' | 'system' |
|
notifications: NotificationSettings |
|
privacy: PrivacySettings |
|
} |
|
|
|
export interface NotificationSettings { |
|
messages: boolean |
|
mentions: boolean |
|
groups: boolean |
|
sounds: boolean |
|
desktop: boolean |
|
} |
|
|
|
export interface PrivacySettings { |
|
showOnlineStatus: boolean |
|
showLastSeen: boolean |
|
allowDirectMessages: boolean |
|
allowGroupInvites: boolean |
|
} |
|
|
|
|
|
export interface Chat { |
|
id: string |
|
type: 'direct' | 'group' |
|
name?: string |
|
description?: string |
|
avatar?: string |
|
participants: ChatParticipant[] |
|
lastMessage?: Message |
|
unreadCount: number |
|
createdAt: Date |
|
updatedAt: Date |
|
} |
|
|
|
export interface ChatParticipant { |
|
id: string |
|
chatId: string |
|
userId: string |
|
user: User |
|
role: 'member' | 'admin' | 'owner' |
|
joinedAt: Date |
|
permissions: ChatPermissions |
|
} |
|
|
|
export interface ChatPermissions { |
|
canSendMessages: boolean |
|
canSendMedia: boolean |
|
canAddMembers: boolean |
|
canRemoveMembers: boolean |
|
canEditChat: boolean |
|
canDeleteMessages: boolean |
|
} |
|
|
|
|
|
export interface Message { |
|
id: string |
|
chatId: string |
|
senderId: string |
|
sender: User |
|
content: string |
|
type: MessageType |
|
attachments: MessageAttachment[] |
|
replyTo?: string |
|
replyToMessage?: Message |
|
reactions: MessageReaction[] |
|
isEdited: boolean |
|
isDeleted: boolean |
|
createdAt: Date |
|
updatedAt: Date |
|
} |
|
|
|
export type MessageType = 'text' | 'image' | 'file' | 'audio' | 'video' | 'system' |
|
|
|
export interface MessageAttachment { |
|
id: string |
|
messageId: string |
|
type: 'image' | 'file' | 'audio' | 'video' |
|
name: string |
|
url: string |
|
size: number |
|
mimeType: string |
|
thumbnail?: string |
|
} |
|
|
|
export interface MessageReaction { |
|
id: string |
|
messageId: string |
|
userId: string |
|
user: User |
|
emoji: string |
|
createdAt: Date |
|
} |
|
|
|
|
|
export interface Group { |
|
id: string |
|
name: string |
|
description?: string |
|
avatar?: string |
|
type: 'public' | 'private' |
|
memberCount: number |
|
maxMembers: number |
|
ownerId: string |
|
owner: User |
|
settings: GroupSettings |
|
createdAt: Date |
|
updatedAt: Date |
|
} |
|
|
|
export interface GroupSettings { |
|
allowMemberInvites: boolean |
|
requireApproval: boolean |
|
allowFileSharing: boolean |
|
allowVoiceMessages: boolean |
|
messageHistory: 'visible' | 'hidden' |
|
slowMode: number |
|
} |
|
|
|
|
|
export interface SocketEvents { |
|
|
|
connect: () => void |
|
disconnect: () => void |
|
|
|
|
|
authenticate: (token: string) => void |
|
authenticated: (user: User) => void |
|
|
|
|
|
'message:send': (data: SendMessageData) => void |
|
'message:receive': (message: Message) => void |
|
'message:edit': (data: EditMessageData) => void |
|
'message:delete': (data: DeleteMessageData) => void |
|
'message:reaction': (data: MessageReactionData) => void |
|
|
|
|
|
'typing:start': (data: TypingData) => void |
|
'typing:stop': (data: TypingData) => void |
|
'typing:update': (data: TypingData) => void |
|
|
|
|
|
'user:online': (userId: string) => void |
|
'user:offline': (userId: string) => void |
|
'user:status': (data: UserStatusData) => void |
|
|
|
|
|
'chat:join': (chatId: string) => void |
|
'chat:leave': (chatId: string) => void |
|
'chat:update': (chat: Chat) => void |
|
|
|
|
|
'group:member:add': (data: GroupMemberData) => void |
|
'group:member:remove': (data: GroupMemberData) => void |
|
'group:update': (group: Group) => void |
|
} |
|
|
|
|
|
export interface SendMessageData { |
|
chatId: string |
|
content: string |
|
type: MessageType |
|
attachments?: File[] |
|
replyTo?: string |
|
} |
|
|
|
export interface EditMessageData { |
|
messageId: string |
|
content: string |
|
} |
|
|
|
export interface DeleteMessageData { |
|
messageId: string |
|
} |
|
|
|
export interface MessageReactionData { |
|
messageId: string |
|
emoji: string |
|
action: 'add' | 'remove' |
|
} |
|
|
|
export interface TypingData { |
|
chatId: string |
|
userId: string |
|
} |
|
|
|
export interface UserStatusData { |
|
userId: string |
|
isOnline: boolean |
|
lastSeen?: Date |
|
} |
|
|
|
export interface GroupMemberData { |
|
groupId: string |
|
userId: string |
|
role?: 'member' | 'admin' | 'owner' |
|
} |
|
|
|
|
|
export interface ApiResponse<T = any> { |
|
success: boolean |
|
data?: T |
|
error?: string |
|
message?: string |
|
} |
|
|
|
export interface PaginatedResponse<T> { |
|
data: T[] |
|
total: number |
|
page: number |
|
limit: number |
|
hasMore: boolean |
|
} |
|
|
|
export interface LoginRequest { |
|
email: string |
|
password: string |
|
} |
|
|
|
export interface RegisterRequest { |
|
email: string |
|
username: string |
|
password: string |
|
displayName: string |
|
} |
|
|
|
export interface CreateChatRequest { |
|
type: 'direct' | 'group' |
|
name?: string |
|
description?: string |
|
participantIds: string[] |
|
} |
|
|
|
export interface UpdateProfileRequest { |
|
displayName?: string |
|
bio?: string |
|
avatar?: File |
|
} |
|
|
|
|
|
export interface AdminStats { |
|
totalUsers: number |
|
activeUsers: number |
|
totalChats: number |
|
totalMessages: number |
|
storageUsed: number |
|
serverUptime: number |
|
} |
|
|
|
export interface AdminUser extends User { |
|
messageCount: number |
|
chatCount: number |
|
lastActivity: Date |
|
status: 'active' | 'suspended' | 'banned' |
|
} |
|
|
|
export interface AdminChat extends Chat { |
|
messageCount: number |
|
activeMembers: number |
|
reportCount: number |
|
status: 'active' | 'archived' | 'suspended' |
|
} |
|
|
|
|
|
export interface AppError { |
|
code: string |
|
message: string |
|
details?: any |
|
} |
|
|
|
export type ErrorCode = |
|
| 'AUTH_REQUIRED' |
|
| 'INVALID_CREDENTIALS' |
|
| 'USER_NOT_FOUND' |
|
| 'CHAT_NOT_FOUND' |
|
| 'MESSAGE_NOT_FOUND' |
|
| 'PERMISSION_DENIED' |
|
| 'VALIDATION_ERROR' |
|
| 'SERVER_ERROR' |
|
| 'NETWORK_ERROR' |
|
|