codesentry 0.1.9 → 0.1.11

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.
Files changed (3) hide show
  1. package/README.md +103 -18
  2. package/dist/index.js +465 -249
  3. package/package.json +4 -4
package/README.md CHANGED
@@ -1,9 +1,19 @@
1
+ <p align="center">
2
+ <img src="docs/assets/logo.png" alt="Logo do CodeSentry" width="640">
3
+ </p>
4
+
1
5
  # CodeSentry
2
6
 
3
7
  CLI de verificação de vulnerabilidades e qualidade de código. O scanner
4
8
  combina regras próprias para JavaScript/TypeScript e o ruleset OWASP do
5
9
  Semgrep CE para as linguagens suportadas por ele.
6
10
 
11
+ - 🔎 **Dois motores num só comando** — regras próprias em TS/JS + Semgrep CE (OWASP Top 10) para dezenas de outras linguagens.
12
+ - 📦 **Uma instalação, zero fricção** — `npm install -g codesentry` e pronto: sem Python, Docker, Semgrep ou conta em lugar nenhum.
13
+ - 🔌 **100% offline depois de instalado** — nunca consulta a Semgrep Registry nem envia métricas.
14
+ - 🪟🐧 **Windows e Linux nativamente** — sem WSL, sem container.
15
+ - 📊 **Console, JSON ou Markdown** — saída pronta tanto para ler no terminal quanto para plugar em CI.
16
+
7
17
  ## O que o CodeSentry faz
8
18
 
9
19
  Rodando `codesentry scan` num projeto, dois motores de análise trabalham
@@ -25,6 +35,22 @@ motor encontrou o problema (prefixo `semgrep/` para achados do Semgrep).
25
35
  Saídas disponíveis: tabela no console, JSON (`--json`) e, quando há mais
26
36
  de 20 problemas, um relatório Markdown detalhado é gerado automaticamente.
27
37
 
38
+ Exemplo de saída no console:
39
+
40
+ ```text
41
+ ❯ codesentry scan .
42
+ ✔ Scanning files...
43
+ ┌──────────┬──────────────────────┬─────────────────┬──────┬──────────────────────────────────────────┐
44
+ │ Severity │ Rule │ File │ Line │ Message │
45
+ ├──────────┼──────────────────────┼─────────────────┼──────┼──────────────────────────────────────────┤
46
+ │ high │ no-hardcoded-secret │ src/config.ts │ 12 │ Possível segredo hardcoded na variável... │
47
+ │ high │ semgrep/...shell-true│ scripts/run.py │ 8 │ subprocess com shell=True é perigoso... │
48
+ │ medium │ jwt-no-expiration │ src/auth.ts │ 34 │ Token JWT assinado sem "expiresIn"... │
49
+ └──────────┴──────────────────────┴─────────────────┴──────┴──────────────────────────────────────────┘
50
+
51
+ 3 problema(s) encontrado(s) em 87 arquivo(s) (4213ms). CodeSentry: 87 JS/TS; Semgrep: 64 arquivo(s).
52
+ ```
53
+
28
54
  ## Como funciona por baixo dos panos
29
55
 
30
56
  O ponto central do design é **zero fricção de instalação**: o usuário final
@@ -42,20 +68,43 @@ O racional completo está na [ADR 0004](docs/adr/0004-bundled-semgrep-runtime.md
42
68
 
43
69
  ## Instalação
44
70
 
45
- Em uma release publicada, basta uma instalação:
71
+ Pré-requisito único: [Node.js](https://nodejs.org) 22.12 ou mais recente
72
+ (`node --version` para conferir). Nenhum outro requisito — não precisa
73
+ instalar Python, Docker, Semgrep, criar conta ou autenticar em nada.
74
+
75
+ ### Windows
76
+
77
+ No PowerShell ou no Prompt de Comando (não precisa de WSL):
78
+
79
+ ```powershell
80
+ npm install -g codesentry
81
+ codesentry scan .
82
+ ```
83
+
84
+ ### Linux
46
85
 
47
86
  ```bash
48
87
  npm install -g codesentry
88
+ codesentry scan .
49
89
  ```
50
90
 
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.
91
+ Em ambos os casos, o `npm install` resolve automaticamente o pacote de
92
+ runtime compatível com a sua plataforma (Semgrep CE + Python portátil) como
93
+ dependência opcional é isso que faz `codesentry scan` funcionar com
94
+ cobertura OWASP completa sem nenhuma instalação manual. Plataformas com
95
+ runtime publicado hoje: Linux x64 e Windows x64. Os pacotes têm dezenas de
96
+ MB porque incluem esse runtime embutido; essa é a troca para o scan
97
+ funcionar 100% offline depois de instalado.
54
98
 
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`:
99
+ Se `codesentry` não for encontrado no terminal depois de instalado
100
+ globalmente, feche e reabra o terminal (ou rode `npx codesentry scan .`)
101
+ alguns terminais não recarregam o PATH do npm automaticamente na mesma
102
+ sessão.
103
+
104
+ ### A partir do código-fonte (desenvolvimento)
105
+
106
+ Para rodar a partir do repositório clonado, em vez do pacote publicado, use
107
+ `npm link`:
59
108
 
60
109
  ```bash
61
110
  git clone git@github.com:Ivan-ReisDev/code-sentry.git
@@ -68,6 +117,16 @@ npm link
68
117
  Depois disso, o comando `codesentry` fica disponível em qualquer
69
118
  diretório do seu terminal.
70
119
 
120
+ > **Atenção:** `npx codesentry` rodado de dentro deste repositório clonado
121
+ > executa o `dist/index.js` local (o `package.json` daqui se chama
122
+ > `codesentry`, e o `npx` prioriza isso sobre a instalação global/publicada).
123
+ > O workspace de desenvolvimento sempre tem o ruleset do Semgrep vazio por
124
+ > design (populado só via `npm run prepare:owasp-rules` ou durante a release —
125
+ > ver [ADR 0004](docs/adr/0004-bundled-semgrep-runtime.md)), então o scan
126
+ > roda sem erro mas sempre reporta zero arquivos analisados pelo Semgrep.
127
+ > Para testar o pacote publicado de verdade, rode `codesentry scan` (sem
128
+ > `npx`) fora deste diretório.
129
+
71
130
  ## Uso
72
131
 
73
132
  ### `codesentry scan [path]`
@@ -81,6 +140,7 @@ codesentry scan ./src
81
140
  codesentry scan . --json
82
141
  codesentry scan . --concurrency 4
83
142
  codesentry scan . --config ./rules/security.yml
143
+ codesentry scan . --tests
84
144
  ```
85
145
 
86
146
  O Semgrep CE embutido é executado automaticamente depois das regras nativas,
@@ -94,36 +154,61 @@ apenas inteiros positivos. Sem valor, o limite é ajustado para a máquina
94
154
  Semgrep e das regras OWASP chegam em novas releases do CodeSentry. Quando
95
155
  necessário, `--config` aceita exclusivamente um arquivo YAML local.
96
156
 
157
+ Por padrão, arquivos de teste não são analisados: nenhum diretório chamado
158
+ `tests`, `test` ou `__tests__` (em qualquer profundidade) e nenhum arquivo
159
+ com sufixo `.spec.*`/`.test.*` (em qualquer lugar, mesmo fora dessas pastas)
160
+ entra no scan. Use `--tests` para incluí-los.
161
+
97
162
  Em macOS, ARM e plataformas sem runtime publicado, o comando interrompe
98
163
  explicitamente em vez de declarar uma análise parcial como completa.
99
164
 
100
165
  ### `codesentry rules`
101
166
 
102
- Lista as regras de análise disponíveis.
167
+ Lista as regras de análise disponíveis (id e descrição de cada uma).
103
168
 
104
169
  ```bash
105
170
  codesentry rules
106
171
  ```
107
172
 
108
- ### `codesentry long-functions [path]`
173
+ ### `codesentry help`
109
174
 
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`.
175
+ Lista **todos** os comandos disponíveis, sempre atualizada inclui tanto
176
+ os comandos gerais quanto os individuais listados a seguir.
113
177
 
114
178
  ```bash
115
- codesentry long-functions .
116
- codesentry long-functions ./src --json
179
+ codesentry help
117
180
  ```
118
181
 
119
- ### `codesentry help`
182
+ ### Comandos individuais por regra
120
183
 
121
- Lista os comandos disponíveis.
184
+ Cada regra nativa também tem um comando próprio, que roda **só ela** sobre
185
+ um diretório — útil para focar em um tipo de problema específico sem esperar
186
+ o scan completo (e sem o Semgrep, que só roda como parte de `scan`). Todos
187
+ seguem o mesmo formato:
122
188
 
123
189
  ```bash
124
- codesentry help
190
+ codesentry <comando> [path] [--json] [--tests]
125
191
  ```
126
192
 
193
+ Alguns exemplos:
194
+
195
+ ```bash
196
+ codesentry long-functions . # funções com mais de 30 linhas
197
+ codesentry no-eval ./src # uso de eval()
198
+ codesentry xss ./src --json # possíveis XSS (innerHTML, document.write, dangerouslySetInnerHTML)
199
+ codesentry unsafe-sql ./src # SQL injection por concatenação
200
+ codesentry command-injection ./src # child_process com entrada não sanitizada
201
+ codesentry weak-hash-algorithm ./src # uso de MD5/SHA-1 para hashing sensível
202
+ codesentry dependency-audit . # `npm audit` das dependências do projeto (sem --tests: não lê arquivos-fonte)
203
+ ```
204
+
205
+ Assim como em `scan`, `--tests` inclui arquivos de teste na análise (por
206
+ padrão são ignorados) — exceto em `dependency-audit`, que nunca lê
207
+ arquivos-fonte e por isso não tem essa flag.
208
+
209
+ A lista completa (30+ comandos, um por regra) sai de `codesentry help` —
210
+ mantê-la sempre em sincronia aqui manualmente não seria viável.
211
+
127
212
  ### `codesentry init`
128
213
 
129
214
  Assistente interativo para configurar o CodeSentry no projeto atual.