mirror of
https://github.com/dadosfera/maestro.git
synced 2026-09-12 09:24:48 +00:00
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
if (process.env.ENV !== 'local') require('elastic-apm-node/start');
|
|
import { NestFactory } from '@nestjs/core';
|
|
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
|
|
import helmet from 'helmet';
|
|
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
|
|
|
|
import { AppModule } from './app.module';
|
|
import { writeFileSync } from 'fs';
|
|
import { execSync } from 'child_process';
|
|
import { INestApplication } from '@nestjs/common';
|
|
async function bootstrap() {
|
|
DadosferaLogger.setupLogger({
|
|
serviceName: 'maestro',
|
|
serviceEnvironment: process.env.ENV,
|
|
});
|
|
const logger = new DadosferaLogger();
|
|
|
|
const app = await NestFactory.create(AppModule, {
|
|
logger,
|
|
cors: {
|
|
origin: '*',
|
|
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
|
|
preflightContinue: false,
|
|
optionsSuccessStatus: 204,
|
|
},
|
|
});
|
|
app.use(helmet());
|
|
configureSwagger(app);
|
|
await app.listen(3333);
|
|
if (process.env.KILL_AFTER_START) await app.close();
|
|
}
|
|
|
|
function configureSwagger(app: INestApplication) {
|
|
let branchName = '';
|
|
try {
|
|
branchName = execSync('git rev-parse --abbrev-ref HEAD')
|
|
.toString()
|
|
.replace('\n', '')
|
|
.trim();
|
|
} catch (error) {
|
|
console.warn("Can't get branch name", error);
|
|
}
|
|
const swaggerTitle = branchName ? `Maestro - ${branchName}` : 'Maestro';
|
|
|
|
const config = new DocumentBuilder()
|
|
.setTitle(swaggerTitle)
|
|
.setDescription('Documentation for Maestro gateway')
|
|
.addSecurity('access-token', {
|
|
type: 'apiKey',
|
|
name: 'Authorization',
|
|
in: 'header',
|
|
})
|
|
.setDescription('This is the Maestro API')
|
|
.addServer('https://maestro.stg.dadosfera.ai', 'Ambiente STG')
|
|
.addServer('https://maestro-2.stg.dadosfera.ai', 'Ambiente STG2')
|
|
.addServer('https://maestro.dadosfera.ai', 'Ambiente PRD')
|
|
.build();
|
|
|
|
const document = SwaggerModule.createDocument(app, config);
|
|
|
|
const swaggerJsonFile =
|
|
process.env.INTERNAL_SWAGGER === 'true'
|
|
? 'docsfera.json'
|
|
: 'docsfera.external.json';
|
|
|
|
if (process.env.ENV === 'local') SwaggerModule.setup('api', app, document);
|
|
|
|
writeFileSync(
|
|
swaggerJsonFile,
|
|
JSON.stringify(
|
|
{
|
|
service: '${DOCS_API_TOKEN}',
|
|
pageId: '${DOCS_PAGE_ID}',
|
|
blockId: '${DOCS_BLOCK_ID}',
|
|
schema: document,
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
}
|
|
bootstrap();
|