64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import express, { NextFunction, Request, Response } from 'express';
|
|
import axios from 'axios';
|
|
import axiosRetry from 'axios-retry';
|
|
import { setupCache } from 'axios-cache-interceptor';
|
|
import winston from 'winston';
|
|
import { CineHDPlus, FrenchCloud, Handler, KinoKiste, MeineCloud, MostraGuarda, VerHdLink } from './handler';
|
|
import { EmbedExtractorRegistry } from './embed-extractor';
|
|
import { ConfigureController, ManifestController, StreamController } from './controller';
|
|
import { Fetcher, StreamResolver } from './utils';
|
|
|
|
const logger = winston.createLogger({
|
|
transports: [
|
|
new winston.transports.Console({
|
|
format: winston.format.combine(
|
|
winston.format.cli(),
|
|
winston.format.timestamp(),
|
|
winston.format.printf(({ level, message, timestamp }) => `${timestamp} ${level}: ${message}`),
|
|
),
|
|
}),
|
|
],
|
|
});
|
|
|
|
setupCache(axios);
|
|
axiosRetry(axios, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
|
|
|
|
const fetcher = new Fetcher(axios, logger);
|
|
|
|
const embedExtractors = new EmbedExtractorRegistry(logger, fetcher);
|
|
|
|
const handlers: Handler[] = [
|
|
// ES / MX
|
|
new CineHDPlus(fetcher, embedExtractors),
|
|
new VerHdLink(fetcher, embedExtractors),
|
|
// DE
|
|
new KinoKiste(fetcher, embedExtractors),
|
|
new MeineCloud(fetcher, embedExtractors),
|
|
// FR
|
|
new FrenchCloud(fetcher, embedExtractors),
|
|
// IT
|
|
new MostraGuarda(fetcher, embedExtractors),
|
|
];
|
|
|
|
const addon = express();
|
|
addon.set('trust proxy', true);
|
|
|
|
addon.use((_req: Request, res: Response, next: NextFunction) => {
|
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
res.setHeader('Access-Control-Allow-Headers', '*');
|
|
|
|
next();
|
|
});
|
|
|
|
addon.use('/', (new ConfigureController(handlers)).router);
|
|
addon.use('/', (new ManifestController(handlers)).router);
|
|
addon.use('/', (new StreamController(logger, handlers, new StreamResolver(logger))).router);
|
|
|
|
addon.get('/', (_req: Request, res: Response) => {
|
|
res.redirect('/configure');
|
|
});
|
|
|
|
const port = parseInt(process.env['PORT'] || '51546');
|
|
addon.listen(port, () => {
|
|
logger.info(`Add-on Repository URL: http://127.0.0.1:${port}/manifest.json`);
|
|
});
|