Servidor HTTP minimalista em TypeScript que atua como proxy para dois fluxos principais do ecossistema QaLite:
- Envio de mensagens formatadas para um webhook do Slack.
- Listagem das execuções (builds) mais recentes na BrowserStack usando credenciais fornecidas na requisição.
O código é organizado em camadas explícitas (configuração, aplicação, domínio, infraestrutura e interfaces) sem dependência de frameworks web.
| Método | Rota | Descrição |
|---|---|---|
POST |
/slack/task-summary |
Recebe um resumo de QA ou mensagem livre e repassa para o webhook do Slack. |
POST |
/browserstack/builds |
Retorna a lista de builds da BrowserStack informando usuário e access key. |
Não há persistência local ou interface visual: cada requisição é tratada de forma stateless e retorna JSON.
webhookUrlé obrigatório para todas as chamadas.- Se
messageestiver presente, ele é enviado diretamente; caso contrário,environmentSummaryé formatado antes do envio.
{
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"message": "Mensagem livre para o canal",
"environmentSummary": {
"identifier": "Suite regressiva",
"totalTime": "12m 30s",
"executedScenariosCount": 25,
"participantsCount": 3
}
}usernameeaccessKey(ou o legadoacessKey) são obrigatórios.- Retorna uma lista com
id,name,status,duration,buildTagepublicUrlpor build.
{
"username": "seu-usuario",
"accessKey": "sua-chave"
}Crie um arquivo .env (opcional) com os valores abaixo:
ALLOWED_ORIGINS=http://localhost:5173,https://seu-frontend.com
PORT=3000- Se nenhuma origem for informada, o CORS permite por padrão
http://localhost:5173ehttps://qualitydigital-qamanager.vercel.app. - O webhook do Slack não é lido via
.env; ele deve ser enviado no campowebhookUrldo corpo da requisição.
npm install
npm run build # Transpila TypeScript para dist/
npm start # Executa o servidor já compilado
# ou
npm run dev # Assiste alterações e recompila automaticamentenpm run lint # Lembre de rodar o build antes para gerar dist/
npm run format # Formata todo o código com Prettiersrc/config.ts: leitura de variáveis de ambiente e defaults de CORS/porta.src/application: casos de uso e portas (ex.:SendTaskSummaryUseCase).src/domain: contratos e formatação de mensagens enviadas ao Slack.src/infrastructure: integrações concretas (ex.: webhook do Slack, API BrowserStack).src/interfaces/http: roteador HTTP, CORS e handlers das rotas expostas.
Os hooks vivem em .husky/. Após instalar dependências, rode npm run prepare para ativá-los. O hook commit-msg usa o Commitlint com a configuração convencional:
module.exports = {
extends: ['@commitlint/config-conventional'],
}Caso precise ativar manualmente, use git config core.hooksPath .husky.