adds generic solution for custom events handling instead of any data type
This commit is contained in:
+2
-1
@@ -9,7 +9,7 @@ import {RestAuth} from "./rest/auth";
|
||||
import {config} from "./config";
|
||||
import cookieParser from 'cookie-parser';
|
||||
import {authLimiter, spotifyLimiter} from "./rest/middleware/rateLimit";
|
||||
import {extractTokenFromCookie} from "./rest/middleware/extractTokenFromCookie ";
|
||||
import {extractTokenFromCookie} from "./rest/middleware/extractTokenFromCookie";
|
||||
import {UserService} from "./db/services/db/UserService";
|
||||
import {randomUUID} from "crypto";
|
||||
import {JwtAuthenticator} from "./utils/jwtAuthenticator";
|
||||
@@ -22,6 +22,7 @@ export async function startServer(jwtSecret: string) {
|
||||
app.set("trust proxy", 1);
|
||||
app.use(cookieParser());
|
||||
|
||||
// test
|
||||
app.use(cors({
|
||||
origin: config.cors.origin,
|
||||
credentials: config.cors.credentials,
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
export interface NoData{
|
||||
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
import {ExtendedWebSocket} from "../../../interfaces/extendedWebsocket";
|
||||
|
||||
export abstract class CustomWebsocketEvent {
|
||||
export abstract class CustomWebsocketEvent<T = any> {
|
||||
abstract event: string;
|
||||
abstract handler: (data: any) => void;
|
||||
abstract handler: (data: T) => void;
|
||||
protected ws: ExtendedWebSocket;
|
||||
|
||||
public constructor(ws: ExtendedWebSocket) {
|
||||
|
||||
@@ -2,7 +2,7 @@ import {ExtendedWebSocket} from "../../../interfaces/extendedWebsocket";
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {UserService} from "../../../db/services/db/UserService";
|
||||
|
||||
export abstract class CustomWebsocketEventUserService extends CustomWebsocketEvent {
|
||||
export abstract class CustomWebsocketEventUserService<T = any> extends CustomWebsocketEvent<T> {
|
||||
protected readonly userService: UserService;
|
||||
|
||||
public constructor(ws: ExtendedWebSocket, userService: UserService) {
|
||||
|
||||
@@ -2,16 +2,20 @@ import {WebsocketEventType} from "./websocketEventType";
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {ExtendedWebSocket} from "../../../interfaces/extendedWebsocket";
|
||||
|
||||
export class ErrorEvent extends CustomWebsocketEvent {
|
||||
interface ErrorData {
|
||||
message: string;
|
||||
traceback: string
|
||||
}
|
||||
|
||||
export class ErrorEvent extends CustomWebsocketEvent<ErrorData> {
|
||||
event: string = WebsocketEventType.ERROR;
|
||||
|
||||
constructor(ws: ExtendedWebSocket) {
|
||||
super(ws);
|
||||
}
|
||||
|
||||
handler = async (data: any) => {
|
||||
const {message, traceback} = data;
|
||||
console.warn("Error message received", message);
|
||||
console.warn("Traceback", traceback);
|
||||
handler = async (data: ErrorData) => {
|
||||
console.warn("Error message received", data.message);
|
||||
console.warn("Traceback", data.traceback);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {WebsocketEventType} from "./websocketEventType";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export class GetSettingsEvent extends CustomWebsocketEvent {
|
||||
export class GetSettingsEvent extends CustomWebsocketEvent<NoData> {
|
||||
|
||||
event = WebsocketEventType.GET_SETTINGS;
|
||||
|
||||
|
||||
@@ -3,10 +3,11 @@ import {WebsocketEventType} from "./websocketEventType";
|
||||
import {SpotifyTokenService} from "../../../db/services/spotifyTokenService";
|
||||
import {getCurrentlyPlaying} from "../../../db/services/spotifyApiService";
|
||||
import {CustomWebsocketEventUserService} from "./customWebsocketEventUserService";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export const SpotifyAsyncUpdateEvent = "SPOTIFY_UPDATE";
|
||||
|
||||
export class GetSpotifyUpdatesEvent extends CustomWebsocketEvent {
|
||||
export class GetSpotifyUpdatesEvent extends CustomWebsocketEvent<NoData> {
|
||||
|
||||
event = WebsocketEventType.GET_SPOTIFY_UPDATES;
|
||||
|
||||
@@ -26,7 +27,7 @@ export class GetSpotifyUpdatesEvent extends CustomWebsocketEvent {
|
||||
}
|
||||
}
|
||||
|
||||
export class GetSingleSpotifyUpdateEvent extends CustomWebsocketEventUserService {
|
||||
export class GetSingleSpotifyUpdateEvent extends CustomWebsocketEventUserService<NoData> {
|
||||
|
||||
event = WebsocketEventType.GET_SINGLE_SPOTIFY_UPDATE;
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {WebsocketEventType} from "./websocketEventType";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export class GetStateEvent extends CustomWebsocketEvent {
|
||||
export class GetStateEvent extends CustomWebsocketEvent<NoData> {
|
||||
event = WebsocketEventType.GET_STATE;
|
||||
|
||||
handler = async () => {
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {WebsocketEventType} from "./websocketEventType";
|
||||
import {getCurrentWeather} from "../../../db/services/owmApiService";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export const WeatherAsyncUpdateEvent = "WEATHER_UPDATE";
|
||||
|
||||
export class GetWeatherUpdatesEvent extends CustomWebsocketEvent {
|
||||
export class GetWeatherUpdatesEvent extends CustomWebsocketEvent<NoData> {
|
||||
|
||||
event = WebsocketEventType.GET_WEATHER_UPDATES;
|
||||
|
||||
@@ -24,7 +25,7 @@ export class GetWeatherUpdatesEvent extends CustomWebsocketEvent {
|
||||
}
|
||||
}
|
||||
|
||||
export class GetSingleWeatherUpdateEvent extends CustomWebsocketEvent {
|
||||
export class GetSingleWeatherUpdateEvent extends CustomWebsocketEvent<NoData> {
|
||||
|
||||
event = WebsocketEventType.GET_SINGLE_WEATHER_UPDATE;
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {WebsocketEventType} from "./websocketEventType";
|
||||
import {SpotifyAsyncUpdateEvent} from "./getSpotifyUpdatesEvent";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export class StopSpotifyUpdatesEvent extends CustomWebsocketEvent {
|
||||
export class StopSpotifyUpdatesEvent extends CustomWebsocketEvent<NoData> {
|
||||
|
||||
event = WebsocketEventType.STOP_SPOTIFY_UPDATES;
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import {WebsocketEventType} from "./websocketEventType";
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {UserAsyncUpdateEvent} from "./updateUserEvent";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export class StopUpdateUserEvent extends CustomWebsocketEvent {
|
||||
export class StopUpdateUserEvent extends CustomWebsocketEvent<NoData> {
|
||||
|
||||
event = WebsocketEventType.STOP_UPDATE_USER;
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {WebsocketEventType} from "./websocketEventType";
|
||||
import {WeatherAsyncUpdateEvent} from "./getWeatherUpdatesEvent";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export class StopWeatherUpdatesEvent extends CustomWebsocketEvent {
|
||||
export class StopWeatherUpdatesEvent extends CustomWebsocketEvent<NoData> {
|
||||
|
||||
event = WebsocketEventType.STOP_WEATHER_UPDATES;
|
||||
|
||||
|
||||
@@ -2,10 +2,11 @@ import {WebsocketEventType} from "./websocketEventType";
|
||||
import {CustomWebsocketEvent} from "./customWebsocketEvent";
|
||||
import {IUser} from "../../../db/models/user";
|
||||
import {CustomWebsocketEventUserService} from "./customWebsocketEventUserService";
|
||||
import {NoData} from "./NoData";
|
||||
|
||||
export const UserAsyncUpdateEvent = "USER_UPDATE";
|
||||
|
||||
export class UpdateUserEvent extends CustomWebsocketEventUserService {
|
||||
export class UpdateUserEvent extends CustomWebsocketEventUserService<NoData> {
|
||||
event = WebsocketEventType.UPDATE_USER;
|
||||
|
||||
handler = async () => {
|
||||
@@ -23,7 +24,7 @@ export class UpdateUserEvent extends CustomWebsocketEventUserService {
|
||||
}
|
||||
}
|
||||
|
||||
export class UpdateUserSingleEvent extends CustomWebsocketEvent {
|
||||
export class UpdateUserSingleEvent extends CustomWebsocketEvent<IUser> {
|
||||
event = WebsocketEventType.UPDATE_USER_SINGLE;
|
||||
|
||||
handler = async (data: IUser) => {
|
||||
|
||||
Reference in New Issue
Block a user