34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
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(/\/+$/, '') ?? ''));
|
|
}
|
|
}
|