simple-chat/shared.ts

108 lines
1.8 KiB
TypeScript

// includes types that are shared between the client and server
// e.g. the websocket message protocol
export interface User {
name: string;
userId: string;
}
export interface ClientJoinMessage {
type: "JOIN";
payload: {
username: string;
};
}
export interface ClientLeaveMessage {
type: "LEAVE";
payload: {
username: string;
};
}
export interface ClientChatMessage {
type: "CHAT_MESSAGE";
payload: {
content: string;
};
}
export interface ClientDeleteMessage {
type: "DELETE_MESSAGE";
payload: {
messageId: string;
};
}
export interface ClientEditMessage {
type: "EDIT_MESSAGE";
payload: {
messageId: string;
content: string;
};
}
export type ClientMessage =
| ClientJoinMessage
| ClientLeaveMessage
| ClientChatMessage
| ClientDeleteMessage
| ClientEditMessage;
// Server messages
export interface ChatMessage {
id: string;
content: string;
timestamp: number;
author: User;
}
export interface ServerUserJoinedMessage {
type: "USER_JOINED";
payload: {
user: User;
};
}
export interface ServerUserLeftMessage {
type: "USER_LEFT";
payload: {
user: User;
};
}
export interface ServerChatMessage {
type: "CHAT_MESSAGE";
payload: ChatMessage;
}
export interface ServerMessageDeletedMessage {
type: "MESSAGE_DELETED";
payload: {
messageId: string;
};
}
export interface ServerMessageEditedMessage {
type: "MESSAGE_EDITED";
payload: {
messageId: string;
content: string;
};
}
export interface ServerUserListMessage {
type: "USER_LIST";
payload: {
users: User[];
};
}
export type ServerMessage =
| ServerUserJoinedMessage
| ServerUserLeftMessage
| ServerChatMessage
| ServerMessageDeletedMessage
| ServerMessageEditedMessage
| ServerUserListMessage;