import cors from 'cors' import type { Application } from 'express' import config from '#application/config' import { AuthController } from '#controllers/auth' import { AvatarController } from '#controllers/avatar' import { CacheController } from '#controllers/cache' import { TexturesController } from '#controllers/textures' /** * HTTP manager */ class HttpManager { private readonly authController: AuthController = new AuthController() private readonly avatarController: AvatarController = new AvatarController() private readonly texturesController: TexturesController = new TexturesController() private readonly cacheController: CacheController = new CacheController() /** * Initialize HTTP manager * @param app */ public async boot(app: Application) { // Add CORS middleware app.use( cors({ origin: config.CLIENT_URL, methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], // Add supported methods allowedHeaders: ['Content-Type', 'Authorization'], // Add allowed headers credentials: true }) ) // Add routes await this.addRoutes(app) } private async addRoutes(app: Application) { // Auth routes app.post('/login', (req, res) => this.authController.login(req, res)) app.post('/register', (req, res) => this.authController.register(req, res)) app.post('/reset-password-request', (req, res) => this.authController.requestPasswordReset(req, res)) app.post('/reset-password', (req, res) => this.authController.resetPassword(req, res)) // Avatar routes app.get('/avatar/:characterName', (req, res) => this.avatarController.getByName(req, res)) app.get('/avatar/s/:characterTypeId/:characterHairId?', (req, res) => this.avatarController.getByParams(req, res)) // Download texture file app.get('/textures/:type/:spriteId?/:file', (req, res) => this.texturesController.download(req, res)) // Cache routes app.get('/cache/tiles', (req, res) => this.cacheController.tiles(req, res)) app.get('/cache/maps', (req, res) => this.cacheController.maps(req, res)) app.get('/cache/map_objects', (req, res) => this.cacheController.mapObjects(req, res)) app.get('/cache/sprites', (req, res) => this.cacheController.sprites(req, res)) app.get('/cache/character_types', (req, res) => this.cacheController.characterTypes(req, res)) app.get('/cache/character_hair', (req, res) => this.cacheController.characterHair(req, res)) } } export default new HttpManager()