owncast/web/interfaces/socket-events.ts

69 lines
1.6 KiB
TypeScript

import { User } from './user.model';
export enum MessageType {
CHAT = 'CHAT',
PING = 'PING',
NAME_CHANGE = 'NAME_CHANGE',
COLOR_CHANGE = 'COLOR_CHANGE',
PONG = 'PONG',
SYSTEM = 'SYSTEM',
USER_JOINED = 'USER_JOINED',
USER_PARTED = 'USER_PARTED',
CHAT_ACTION = 'CHAT_ACTION',
FEDIVERSE_ENGAGEMENT_FOLLOW = 'FEDIVERSE_ENGAGEMENT_FOLLOW',
FEDIVERSE_ENGAGEMENT_LIKE = 'FEDIVERSE_ENGAGEMENT_LIKE',
FEDIVERSE_ENGAGEMENT_REPOST = 'FEDIVERSE_ENGAGEMENT_REPOST',
CONNECTED_USER_INFO = 'CONNECTED_USER_INFO',
ERROR_USER_DISABLED = 'ERROR_USER_DISABLED',
ERROR_NEEDS_REGISTRATION = 'ERROR_NEEDS_REGISTRATION',
ERROR_MAX_CONNECTIONS_EXCEEDED = 'ERROR_MAX_CONNECTIONS_EXCEEDED',
VISIBILITY_UPDATE = 'VISIBILITY-UPDATE',
}
export interface SocketEvent {
id: string;
timestamp: Date;
type: MessageType;
}
export interface ConnectedClientInfoEvent extends SocketEvent {
user: User;
}
export class ChatEvent implements SocketEvent {
constructor(message) {
this.id = message.id;
this.timestamp = message.timestamp;
this.type = message.type;
this.body = message.body;
if (message.user) {
this.user = new User(message.user);
}
}
timestamp: Date;
type: MessageType;
id: string;
user: User;
body: string;
}
export interface NameChangeEvent extends SocketEvent {
user: User;
oldName: string;
}
export interface MessageVisibilityEvent extends SocketEvent {
visible: boolean;
ids: string[];
}
export interface FediverseEvent extends SocketEvent {
title: string;
image: string;
link: string;
body: string;
}