import { Server } from "linebridge" import DbManager from "@shared-classes/DbManager" import RedisClient from "@shared-classes/RedisClient" import TaskQueueManager from "@shared-classes/TaskQueueManager" import InjectedAuth from "@shared-lib/injectedAuth" import SharedMiddlewares from "@shared-middlewares" export default class API extends Server { static refName = "posts" static useEngine = "hyper-express-ng" static enableWebsockets = true static listen_port = process.env.HTTP_LISTEN_PORT ?? 3001 middlewares = { ...SharedMiddlewares, } handleWsUpgrade = async (context, token, res) => { context = await InjectedAuth(context, token, res) if (!context.user) { res.close(401, "Unauthorized or missing auth token") return false } return res.upgrade(context) } handleWsConnection = (socket) => { console.log(`[WS] @${socket.context.user.username} connected`) } handleWsDisconnect = (socket) => { console.log(`[WS] @${socket.context.user.username} disconnected`) } contexts = { db: new DbManager(), redis: RedisClient(), } queuesManager = new TaskQueueManager({ workersPath: `${__dirname}/queues`, }) async onInitialize() { await this.contexts.db.initialize() await this.contexts.redis.initialize() await this.queuesManager.initialize({ redisOptions: this.contexts.redis.client.options, }) global.queues = this.queuesManager } } Boot(API)