codesentry 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/dist/index.js +2502 -0
- package/package.json +74 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ivan Reis
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# CodeSentry
|
|
2
|
+
|
|
3
|
+
CLI de verificação de vulnerabilidades e qualidade de código. O scanner
|
|
4
|
+
combina regras próprias para JavaScript/TypeScript e o ruleset OWASP do
|
|
5
|
+
Semgrep CE para as linguagens suportadas por ele.
|
|
6
|
+
|
|
7
|
+
## O que o CodeSentry faz
|
|
8
|
+
|
|
9
|
+
Rodando `codesentry scan` num projeto, dois motores de análise trabalham
|
|
10
|
+
juntos e o resultado sai unificado em um único relatório:
|
|
11
|
+
|
|
12
|
+
- **Motor nativo** — regras próprias em TypeScript, sem dependências
|
|
13
|
+
externas, cobrindo JS/TS/JSX/TSX: segredos hardcoded, SQL injection,
|
|
14
|
+
XSS, command injection, JWT mal configurado, CORS permissivo, hash/
|
|
15
|
+
cifra fracos, promises sem tratamento de erro, complexidade excessiva
|
|
16
|
+
(funções longas, aninhamento profundo, muitos `if`/`for`/`try`), entre
|
|
17
|
+
outras. A lista completa e sempre atualizada está em `codesentry rules`.
|
|
18
|
+
- **Semgrep CE embutido** — roda o ruleset `p/owasp-top-ten` sobre todas
|
|
19
|
+
as linguagens que o Semgrep suporta (não só JS/TS), cobrindo os riscos
|
|
20
|
+
do OWASP Top 10 de forma mais ampla que regras hand-rolled sozinhas
|
|
21
|
+
conseguiriam.
|
|
22
|
+
|
|
23
|
+
Cada achado no relatório mostra o arquivo, a linha, a severidade e qual
|
|
24
|
+
motor encontrou o problema (prefixo `semgrep/` para achados do Semgrep).
|
|
25
|
+
Saídas disponíveis: tabela no console, JSON (`--json`) e, quando há mais
|
|
26
|
+
de 20 problemas, um relatório Markdown detalhado é gerado automaticamente.
|
|
27
|
+
|
|
28
|
+
## Como funciona por baixo dos panos
|
|
29
|
+
|
|
30
|
+
O ponto central do design é **zero fricção de instalação**: o usuário final
|
|
31
|
+
roda `npm install -g codesentry` e não precisa instalar Python, Docker,
|
|
32
|
+
Semgrep, nem criar conta em lugar nenhum.
|
|
33
|
+
|
|
34
|
+
Isso é possível porque o Semgrep CE e um Python portátil vêm empacotados
|
|
35
|
+
como **dependências opcionais** específicas da plataforma
|
|
36
|
+
(`codesentry-semgrep-linux-x64` / `-win32-x64`), resolvidas
|
|
37
|
+
automaticamente pelo npm na instalação. O ruleset OWASP também é
|
|
38
|
+
distribuído como pacote próprio (`codesentry-semgrep-rules`), como um
|
|
39
|
+
snapshot local fixado por versão — o scan nunca consulta a Semgrep
|
|
40
|
+
Registry nem envia métricas, e funciona 100% offline depois de instalado.
|
|
41
|
+
O racional completo está na [ADR 0004](docs/adr/0004-bundled-semgrep-runtime.md).
|
|
42
|
+
|
|
43
|
+
## Instalação
|
|
44
|
+
|
|
45
|
+
Em uma release publicada, basta uma instalação:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm install -g codesentry
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
O pacote compatível de Semgrep CE e Python portátil é instalado como
|
|
52
|
+
dependência opcional automaticamente. Não é necessário instalar Python,
|
|
53
|
+
Docker, Semgrep, criar conta ou autenticar em um site.
|
|
54
|
+
|
|
55
|
+
As plataformas inicialmente suportadas são Linux x64 e Windows x64. Os
|
|
56
|
+
pacotes têm tamanho de dezenas de MB porque incluem o runtime; essa é a troca
|
|
57
|
+
para o scan funcionar offline após a instalação. Durante o desenvolvimento,
|
|
58
|
+
use `npm link`:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git clone git@github.com:Ivan-ReisDev/code-sentry.git
|
|
62
|
+
cd code-sentry
|
|
63
|
+
npm install
|
|
64
|
+
npm run build
|
|
65
|
+
npm link
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Depois disso, o comando `codesentry` fica disponível em qualquer
|
|
69
|
+
diretório do seu terminal.
|
|
70
|
+
|
|
71
|
+
## Uso
|
|
72
|
+
|
|
73
|
+
### `codesentry scan [path]`
|
|
74
|
+
|
|
75
|
+
Analisa um diretório (padrão: diretório atual) em busca de
|
|
76
|
+
vulnerabilidades e problemas de qualidade.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
codesentry scan .
|
|
80
|
+
codesentry scan ./src
|
|
81
|
+
codesentry scan . --json
|
|
82
|
+
codesentry scan . --concurrency 4
|
|
83
|
+
codesentry scan . --config ./rules/security.yml
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
O Semgrep CE embutido é executado automaticamente depois das regras nativas,
|
|
87
|
+
usando um snapshot local do ruleset OWASP e `--metrics=off`. O comando não
|
|
88
|
+
consulta a Semgrep Registry, não envia métricas e não requer internet após a
|
|
89
|
+
instalação.
|
|
90
|
+
|
|
91
|
+
`--concurrency <n>` limita o processamento paralelo do scanner nativo; use
|
|
92
|
+
apenas inteiros positivos. Sem valor, o limite é ajustado para a máquina
|
|
93
|
+
(`min(8, availableParallelism())`). Não há `--config` remoto: atualizações de
|
|
94
|
+
Semgrep e das regras OWASP chegam em novas releases do CodeSentry. Quando
|
|
95
|
+
necessário, `--config` aceita exclusivamente um arquivo YAML local.
|
|
96
|
+
|
|
97
|
+
Em macOS, ARM e plataformas sem runtime publicado, o comando interrompe
|
|
98
|
+
explicitamente em vez de declarar uma análise parcial como completa.
|
|
99
|
+
|
|
100
|
+
### `codesentry rules`
|
|
101
|
+
|
|
102
|
+
Lista as regras de análise disponíveis.
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
codesentry rules
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### `codesentry long-functions [path]`
|
|
109
|
+
|
|
110
|
+
Analisa um diretório (padrão: diretório atual) em busca apenas de
|
|
111
|
+
funções com mais de 30 linhas (severidade `low`). Essa mesma regra
|
|
112
|
+
também roda automaticamente como parte do `codesentry scan`.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
codesentry long-functions .
|
|
116
|
+
codesentry long-functions ./src --json
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### `codesentry help`
|
|
120
|
+
|
|
121
|
+
Lista os comandos disponíveis.
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
codesentry help
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### `codesentry init`
|
|
128
|
+
|
|
129
|
+
Assistente interativo para configurar o CodeSentry no projeto atual.
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
codesentry init
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
> A persistência da configuração em arquivo ainda não está implementada
|
|
136
|
+
> (ver `src/config/config.ts`).
|
|
137
|
+
|
|
138
|
+
## Desenvolvimento
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npm install # instala as dependências
|
|
142
|
+
npm run dev # roda a CLI direto do TypeScript (via tsx)
|
|
143
|
+
npm run build # gera o build de produção em dist/
|
|
144
|
+
npm run typecheck # checagem de tipos (tsc --noEmit)
|
|
145
|
+
npm test # roda a suíte de testes uma vez
|
|
146
|
+
npm run test:watch # roda os testes em modo watch
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Este projeto segue **TDD obrigatório**: toda nova regra, comando ou
|
|
150
|
+
comportamento do scanner/reporter deve começar por um teste que falha,
|
|
151
|
+
em `tests/`, antes de qualquer implementação.
|
|
152
|
+
|
|
153
|
+
Para entender a estrutura de pastas e o fluxo de dados
|
|
154
|
+
(`command → scanner → rules → reporter`), veja
|
|
155
|
+
[docs/architecture.md](docs/architecture.md). Para o racional por trás
|
|
156
|
+
das bibliotecas usadas na CLI, veja
|
|
157
|
+
[docs/adr/0001-cli-libs.md](docs/adr/0001-cli-libs.md).
|
|
158
|
+
|
|
159
|
+
## Licença
|
|
160
|
+
|
|
161
|
+
[MIT](LICENSE)
|