UNPKG

hra-api

Version:

The Human Reference Atlas (HRA) API deployed to https://apps.humanatlas.io/api/

87 lines (77 loc) 2.54 kB
import cors from 'cors'; import express from 'express'; import queue from 'express-queue'; import helmet from 'helmet'; import qs from 'qs'; import { longCache, noCache } from './cache-middleware.js'; import { activeQueryLimit } from './environment.js'; import './fetch-polyfill.js'; import browserRoute from './routes/browser.js'; import dsGraphRoutes from './routes/ds-graph.js'; import euiRoute from './routes/eui.js'; import ftuExplorerRoute from './routes/ftu-explorer.js'; import grlcRoutes from './routes/grlc.js'; import hraKgRoutes from './routes/hra-kg.js'; import hraPopRoutes from './routes/hra-pop.js'; import ruiRoute from './routes/rui.js'; import sparqlRoute from './routes/sparql.js'; import v1Routes from './routes/v1'; const app = express(); app.set('query parser', function (str) { return qs.parse(str, { allowDots: true }); }); // http://expressjs.com/en/advanced/best-practice-security.html app.use( helmet({ contentSecurityPolicy: { useDefaults: true, directives: { 'base-uri': ["'self'", 'cdn.humanatlas.io', 'cdn.jsdelivr.net'], 'script-src': [ "'self'", "'unsafe-inline'", "'unsafe-eval'", 'cdn.humanatlas.io', 'cdn.jsdelivr.net', 'unpkg.com', 'www.googletagmanager.com', ], 'img-src': [ "'self'", "'unsafe-eval'", 'cdn.humanatlas.io', 'cdn.jsdelivr.net', 'unpkg.com', 'www.googletagmanager.com', ], 'connect-src': ['*'], }, }, }) ); app.use(cors()); app.use(express.urlencoded({ extended: true, limit: '20mb' })); app.use(express.text({ type: ['text/*', 'application/sparql-query'] })); app.use(express.json({ limit: '20mb' })); app.set('json spaces', 2); app.use('/', longCache, browserRoute); app.use('/', longCache, euiRoute); app.use('/', longCache, ruiRoute); app.use('/', longCache, ftuExplorerRoute); app.use('/', grlcRoutes); const processingQueue = queue({ activeLimit: activeQueryLimit(), queuedLimit: -1 }); app.use('/v1', processingQueue, v1Routes); app.use('/v1/sparql', noCache, sparqlRoute); app.use('/hra-pop', processingQueue, hraPopRoutes); app.use('/ds-graph', dsGraphRoutes); app.use('/kg', hraKgRoutes); // app.use(function (err, req, res, next) { // const debugMode = req.app.get('env') === 'development'; // res.status(err.status || 500); // if (debugMode) { // res.json(err); // } else { // res.json({ message: 'error' }); // } // }); export default app;