import express from 'express'; import path from "path"; import fs from "fs"; import request from "request"; const server = express(); const port = parseInt(process.env.APP_PORT) || 3000; const host = process.env.APP_HOST || '0.0.0.0'; const api = process.env.APP_API || "https://cojedzie.pl/api"; const gtm_tracking = process.env.APP_GTM || ''; const version = "2020.11-dev"; const manifest = JSON.parse( fs.readFileSync(path.join(__dirname, "../resources/manifest.json")).toString("utf-8") ); const provider_manifests = {} function generateProviderManifest(provider: any) { return { ...manifest, start_url: `/${provider.id}`, name: `${manifest.name} - ${provider.name}`, short_name: `${manifest.short_name} - ${provider.shortName}`, }; } server.set("views", path.join(__dirname, "../resources/views/")); server.set("view engine", "ejs"); server.use(express.static(path.join(__dirname, "../build/public/"))) server.get("/:provider?/manifest.json", (req, res) => { const provider = req.params.provider; if (typeof provider === "undefined") { res.send(manifest); return; } if (typeof provider_manifests[provider] !== "undefined") { res.send(provider_manifests[provider]); return; } console.log(`No manifest entry for ${provider}, calling ${api}/providers/${provider}`); request.get(`${api}/v1/providers/${provider}`, (err, _, body) => { try { const info = JSON.parse(body); provider_manifests[provider] = generateProviderManifest(info); console.info(`Generated manifest for ${provider}`, provider_manifests[provider]); res.send(provider_manifests[provider]); } catch(error) { console.error(`Problem with generating manifest for ${provider}: ${error.message}`); res.send(manifest); } }) }) server.get("/:provider?/*", (req, res) => { const manifest_path = req.params.provider ? `/${req.params.provider}/manifest.json` : "/manifest.json"; const year = (new Date()).getFullYear(); res.render("index", { manifest_path, gtm_tracking, version, year, }) }) server.listen(port, host, () => { console.info(`Server started at ${host}:${port}`); }); process.on('SIGINT', function() { console.info("Terminating server..."); process.exit(); });