import { Controller, Get, Header, Query, Res } from '@nestjs/common'; import { httpDocVersion, readHttpGuide, renderHttpGuide } from './docs/reader'; @Controller('client-docs') export class OpenApiDocsController { @Get() @Header('Cache-Control', 'no-cache') getGuide( @Query('format') format: string | undefined, @Res() response: { type: (value: string) => void; setHeader: (name: string, value: string) => void; send: (value: string) => void; }, ) { const markdown = readHttpGuide(); response.setHeader('X-Document-Version', httpDocVersion(markdown)); response.setHeader('X-Content-Type-Options', 'nosniff'); if (format === 'md') { response.type('text/markdown; charset=utf-8'); response.setHeader('Content-Disposition', 'attachment; filename="client-http-api-guide.md"'); response.send(markdown); return; } response.type('text/html; charset=utf-8'); response.setHeader( 'Content-Security-Policy', "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; connect-src 'none'; img-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'self'", ); response.send(renderHttpGuide(markdown, process.env.HTTP_API_PUBLIC_ORIGIN?.replace(/\/+$/, '') ?? '')); } }