import './controllers/authorize'; import './controllers/playlist'; import './controllers/user'; import 'reflect-metadata'; import * as bodyParser from 'body-parser'; import cookieParser from 'cookie-parser'; import { RequestHandler, Request, Response, NextFunction } from 'express'; import { Container } from 'inversify'; import { InversifyExpressServer } from 'inversify-express-utils'; import { authorize } from './authorization/authorization'; import TYPES from './constants/types'; import Playlist from './model/playlist'; import Token from './model/token'; import User from './model/user'; import { LocalPlaylistStore, LocalTokenStore, LocalUserStore } from './store/localStore'; import Store from './store/store'; import { playlistControllerFactory } from './controllers/playlist'; // load everything needed to the Container const container = new Container(); container .bind>(TYPES.UserStore) .to(LocalUserStore) .inSingletonScope(); container .bind>(TYPES.PlaylistStore) .to(LocalPlaylistStore) .inSingletonScope(); container .bind>(TYPES.TokenStore) .to(LocalTokenStore) .inSingletonScope(); container .bind(TYPES.Authorization) .toConstantValue((req: Request, res: Response, next: NextFunction) => { return authorize(container.get>(TYPES.TokenStore))(req, res, next); }); playlistControllerFactory(container); // create the server const expressServer = new InversifyExpressServer(container); expressServer.setConfig((application) => { application.use( bodyParser.urlencoded({ extended: true, }), cookieParser(), ); application.use(bodyParser.json()); }); const app = expressServer.build(); export default app;