import express from 'express'; import http, { OutgoingHttpHeaders } from 'http' import cookieParser from 'cookie-parser'; import sanitize from 'sanitize'; import fs from 'fs' import path from 'path' import mimes from 'mime-types' import auth, { checkAuth } from '@ideadesignmedia/develop/pwa/src/auth' const app = express(); app.set('trust proxy', true) app.use(express.json({ limit: '50mb' })) app.use(express.urlencoded({ extended: false, limit: '50mb', parameterLimit: 100 })) app.use(cookieParser()) app.all('*', (req, res, next) => { res.header('Access-Control-Allow-Origin', '*') res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS') res.setHeader('Access-Control-Allow-Credentials', 'true') res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Content-Length, Authorization') next() }) app.options('*', (req, res) => res.status(200).json({ methods: 'PUT, GET, POST, DELETE, OPTIONS' })) app.use(sanitize.middleware); app.use(auth) app.get('*', (req, res, next) => { if (req.headers['accept-encoding'] && req.headers['accept-encoding'].includes('gzip')) { let p = '' let paths = req.path.split('/') for (let i = 1; i < paths.length; i++) p += '/' + paths[i] + (i === paths.length - 1 ? '.gz' : '') p = path.join(process.cwd(), 'client/dist', p) if (fs.existsSync(p)) { try { const stream = fs.createReadStream(p) res.writeHead(200, { 'Content-Type': mimes.lookup(path.extname(req.path)), 'Content-Encoding': 'gzip' } as OutgoingHttpHeaders) return stream.pipe(res) } catch (e) { console.log(e) if (res.headersSent) return res.end() } } } return next() }) app.use(express.static(path.join(process.cwd(), 'client/dist'))); app.get('*', (req, res) => { res.sendFile(path.join(process.cwd(), 'client/dist/index.html')) }) http.createServer(app).listen(process.env.PORT || 3001) console.log(`Web server listening on port ${process.env.PORT || 3001}`) process.on('uncaughtException', (e) => console.error(e)) process.on('unhandledRejection', (e) => console.error(e))