import { format } from 'date-fns' ; import { Router } from 'express' ; import { RouteNotFoundException } from '../exceptions' ; import { respond } from '../middleware/respond' ; import { ServerService , SpecificationService } from '../services' ; import asyncHandler from '../utils/async-handler' ; const router = Router ( ) ; router . get ( '/specs/oas' , asyncHandler ( async ( req , res , next ) => { const service = new SpecificationService ( { accountability : req . accountability , schema : req . schema , } ) ; res . locals . payload = await service . oas . generate ( ) ; return next ( ) ; } ) , respond ) ; router . get ( '/specs/graphql/:scope?' , asyncHandler ( async ( req , res ) => { const service = new SpecificationService ( { accountability : req . accountability , schema : req . schema , } ) ; const serverService = new ServerService ( { accountability : req . accountability , schema : req . schema , } ) ; const scope = req . params . scope || 'items' ; if ( [ 'items' , 'system' ] . includes ( scope ) === false ) throw new RouteNotFoundException ( req . path ) ; const info = await serverService . serverInfo ( ) ; const result = await service . graphql . generate ( scope as 'items' | 'system' ) ; const filename = info . project . project_name + '_' + format ( new Date ( ) , 'yyyy-MM-dd' ) + '.graphql' ; res . attachment ( filename ) ; res . send ( result ) ; } ) ) ; router . get ( '/ping' , ( req , res ) => res . send ( 'pong' ) ) ; router . get ( '/info' , asyncHandler ( async ( req , res , next ) => { const service = new ServerService ( { accountability : req . accountability , schema : req . schema , } ) ; const data = await service . serverInfo ( ) ; res . locals . payload = { data } ; return next ( ) ; } ) , respond ) ; router . get ( '/health' , asyncHandler ( async ( req , res , next ) => { const service = new ServerService ( { accountability : req . accountability , schema : req . schema , } ) ; const data = await service . health ( ) ; res . setHeader ( 'Content-Type' , 'application/health+json' ) ; if ( data . status === 'error' ) res . status ( 503 ) ; res . locals . payload = data ; res . locals . cache = false ; return next ( ) ; } ) , respond ) ; export default router ;