directus
86 строк · 2.1 Кб
1import { format } from 'date-fns';2import { Router } from 'express';3import { RouteNotFoundError } from '@directus/errors';4import { respond } from '../middleware/respond.js';5import { ServerService } from '../services/server.js';6import { SpecificationService } from '../services/specifications.js';7import asyncHandler from '../utils/async-handler.js';8
9const router = Router();10
11router.get(12'/specs/oas',13asyncHandler(async (req, res, next) => {14const service = new SpecificationService({15accountability: req.accountability,16schema: req.schema,17});18
19res.locals['payload'] = await service.oas.generate(req.headers.host);20return next();21}),22respond,23);24
25router.get(26'/specs/graphql/:scope?',27asyncHandler(async (req, res) => {28const service = new SpecificationService({29accountability: req.accountability,30schema: req.schema,31});32
33const serverService = new ServerService({34accountability: req.accountability,35schema: req.schema,36});37
38const scope = req.params['scope'] || 'items';39
40if (['items', 'system'].includes(scope) === false) throw new RouteNotFoundError({ path: req.path });41
42const info = await serverService.serverInfo();43const result = await service.graphql.generate(scope as 'items' | 'system');44const filename = info['project'].project_name + '_' + format(new Date(), 'yyyy-MM-dd') + '.graphql';45
46res.attachment(filename);47res.send(result);48}),49);50
51router.get(52'/info',53asyncHandler(async (req, res, next) => {54const service = new ServerService({55accountability: req.accountability,56schema: req.schema,57});58
59const data = await service.serverInfo();60res.locals['payload'] = { data };61return next();62}),63respond,64);65
66router.get(67'/health',68asyncHandler(async (req, res, next) => {69const service = new ServerService({70accountability: req.accountability,71schema: req.schema,72});73
74const data = await service.health();75
76res.setHeader('Content-Type', 'application/health+json');77
78if (data['status'] === 'error') res.status(503);79res.locals['payload'] = data;80res.locals['cache'] = false;81return next();82}),83respond,84);85
86export default router;87