brasil-ceps-offline 1.1.2 → 2.0.0

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/README.md CHANGED
@@ -1,237 +1,99 @@
1
- # brasil-ceps-offline
1
+ # 🗺️ Brasil CEPs Offline
2
2
 
3
- 🚀 Busca rápida de CEPs brasileiros com **zero latência de rede** dados completamente off-line usando SQLite.
3
+ Um motor de inteligência geográfica e busca de CEPs **100% offline** para Node.js e TypeScript.
4
4
 
5
- ## 🎯 Características
5
+ Esqueça limites de requisição (Rate Limits), bloqueios de IP (HTTP 429) ou latência de rede. Esta biblioteca traz um banco de dados local ultrarrápido baseado no **Censo IBGE 2022**, entregando não apenas o endereço, mas coordenadas exatas e dados fiscais em milissegundos.
6
6
 
7
- - **Zero latência de rede** – Todas as buscas são locais
8
- - 💾 **1.2M+ registros** de CEPs brasileiros
9
- - 🏎️ **Milhões de buscas por segundo** com SQLite optimizado
10
- - 📦 **Zero dependências de runtime** além de Node.js
11
- - 🔄 **Sincronização automática** via postinstall hook
12
- - 🛠️ **CLI para gerenciamento** de banco de dados
13
- - � **Gap Hunter** para detectar e preencher lacunas de CEPs
14
- - 🧠 **AI Updater** para descoberta automática de novos CEPs
15
- - 🧪 **TypeScript** com tipos completos
7
+ ## Superpoderes
16
8
 
17
- ## 📦 Instalação
9
+ - **Zero Latência:** Consultas locais em SQLite (tempo de resposta na casa dos ~1ms).
10
+ - 🏢 **Pronto para NFe (Código IBGE):** Retorna o código IBGE oficial do município, essencial para emissão de notas fiscais e integração com ERPs.
11
+ - 📍 **Precisão de GPS (Censo 2022):** Latitude e Longitude com precisão a nível de rua, prontas para cálculo de raio de entrega (Haversine) ou plotagem em mapas.
12
+ - 📱 **Inteligência de Formulários:** Retorna DDD para validação de telefones e Fuso Horário (`timezone`) para sistemas de agendamento.
13
+ - 🛡️ **Sistema de Fallback Seguro:** Se o CEP pesquisado for um loteamento inaugurado ontem e não estiver no banco local, a biblioteca busca os dados silenciosamente em APIs externas, garantindo que seu app nunca falhe.
18
14
 
19
- ```bash
20
- npm install brasil-ceps-offline
21
- ```
22
-
23
- Após a instalação, o banco de dados é automaticamente baixado via hook `postinstall` (aprox 50-100MB).
24
-
25
- ## 🚀 Uso Rápido
26
-
27
- ### Busca por CEP
28
-
29
- ```typescript
30
- import { findByCep } from 'brasil-ceps-offline';
31
-
32
- const address = findByCep('01310100');
33
- console.log(address);
34
- // {
35
- // cep: '01310100',
36
- // state: 'SP',
37
- // city: 'São Paulo',
38
- // neighborhood: 'Centro',
39
- // street: 'Avenida Paulista'
40
- // }
41
- ```
42
-
43
- ### Busca por Endereço
44
-
45
- ```typescript
46
- import { findByAddress } from 'brasil-ceps-offline';
47
-
48
- const addresses = findByAddress('SP', 'São Paulo', 'Avenida Paulista');
49
- console.log(addresses);
50
- // [
51
- // { cep: '01310100', state: 'SP', city: 'São Paulo', ... },
52
- // { cep: '01310200', state: 'SP', city: 'São Paulo', ... },
53
- // ...
54
- // ]
55
- ```
56
-
57
- ## 🎓 API Completa
58
-
59
- ### Classe `BrasilCepsOffline`
60
-
61
- ```typescript
62
- import { init, BrasilCepsOffline } from 'brasil-ceps-offline';
63
-
64
- const ceps = init(); // Inicializa/retorna singleton
65
-
66
- // Métodos:
67
- ceps.findAddressByCep(cep: string): Address | null
68
- ceps.findCepsByAddress(state, city?, street?): Address[]
69
- ceps.searchAddress(pattern, state?, limit?): Address[]
70
- ceps.getStats(): { totalRecords: number; databaseSize: string }
71
- ceps.close(): void
72
- ```
15
+ ---
73
16
 
74
- ### Funções de Conveniência
17
+ ## 🚀 Instalação e Configuração do Banco
75
18
 
76
- ```typescript
77
- findByCep(cep: string): Address | null
78
- findByAddress(state, city?, street?): Address[]
79
- search(pattern, state?, limit?): Address[]
80
- ```
81
-
82
- ## 🔄 Sincronização de Banco
19
+ Instale a biblioteca via NPM, Yarn ou pnpm:
83
20
 
84
21
  ```bash
85
- # Atualizar banco de dados
86
- npx brasil-ceps-offline sync
87
-
88
- # Ver status e estatísticas
89
- npx brasil-ceps-offline status
90
-
91
- # Ver ajuda
92
- npx brasil-ceps-offline help
22
+ npm install brasil-ceps-offline
93
23
  ```
94
24
 
95
- O comando `sync` utiliza `fs.renameSync()` para uma transição atômica. Servidores em execução continuarão usando o banco antigo até fechar a conexão, garantindo zero-downtime.
25
+ ## 📥 Sincronizando o Banco de Dados Local
96
26
 
97
- ## 🎯 Gap Hunter - Descoberta de Lacunas de CEPs
27
+ Para manter a instalação da biblioteca leve no NPM, o banco de dados geográfico de alta precisão (~167MB) é hospedado de forma segura no GitHub Releases.
98
28
 
99
- ### Modo AUTO (Recomendado)
29
+ Após a instalação, execute o comando abaixo para baixar o banco de dados mais recente para a sua máquina/servidor:
100
30
 
101
31
  ```bash
102
- npm run hunt
103
- ```
104
-
105
- Auto-detecta todos os prefixos de 5 dígitos presentes na base e testa CEPs faltantes (números 000-999) para cada um. Ideal para rodar à noite e aumentar cobertura.
106
-
107
- ### Modo MANUAL (Específico)
108
-
109
- ```bash
110
- npm run hunt -- 01310 16400 04501
32
+ # Baixa e atualiza o banco de dados local (.sqlite)
33
+ npx brasil-ceps-offline sync
111
34
  ```
112
35
 
113
- Testa apenas os prefixos especificados. Mais rápido para validação de regiões específicas.
114
-
115
- **Como funciona:**
116
-
117
- - Detecta CEPs já cadastrados
118
- - Testa números faltantes via API BrasilAPI/ViaCEP
119
- - Rate limiting: 1 requisição/segundo
120
- - Insere novos CEPs encontrados automaticamente no SQLite
121
- - Com recurso de 4.500+ prefixos: ~75-120 horas para cobertura completa
36
+ > **Recomendação:** Você pode adicionar este comando no seu CI/CD ou no script de `postinstall` do seu `package.json` para garantir que o servidor sempre inicie com o banco atualizado.
122
37
 
123
- ## 🤖 AI Updater - Automação com IA
38
+ ---
124
39
 
125
- Script que executa automaticamente a cada mês no GitHub Actions:
40
+ ## 💻 Como Usar
126
41
 
127
- 1. **Busca notícias reais** sobre novos CEPs no Google News (última semana)
128
- 2. **Processa com IA** (GPT-4o-mini) para extrair dados estruturados
129
- 3. **Insere no banco** automaticamente
42
+ A API foi desenhada para ser simples e tipada.
130
43
 
131
- Ideal para manter dados sempre atualizados com descobertas públicas.
44
+ ```ts
45
+ import { getAddress } from 'brasil-ceps-offline';
132
46
 
133
- **Executar manualmente:**
47
+ async function buscarLocalizacao() {
48
+ try {
49
+ // A biblioteca limpa automaticamente hífens e formatações
50
+ const endereco = await getAddress('74740-300');
51
+ console.log(endereco);
52
+ } catch (error) {
53
+ console.error('CEP inválido ou não encontrado.');
54
+ }
55
+ }
134
56
 
135
- ```bash
136
- OPENAI_API_KEY=sk-xxx npm run ai:update
57
+ buscarLocalizacao();
137
58
  ```
138
59
 
139
- ## 🏗️ Arquitetura
140
-
141
- ```
142
- brasil-ceps-offline/
143
- ├── src/
144
- │ ├── index.ts # API principal
145
- │ ├── database.ts # Funções do SQLite
146
- │ ├── types.ts # Interfaces TypeScript
147
- │ ├── config.ts # Configurações
148
- │ ├── scripts/
149
- │ │ ├── download-db.ts # Download automático
150
- │ │ ├── gap-hunter.ts # Descoberta de lacunas
151
- │ │ └── ai-updater.ts # Automação com IA
152
- │ └── bin/
153
- │ └── sync.ts # CLI de sincronização
154
- ├── .db/
155
- │ └── ceps.sqlite # Banco de dados (~50-100MB)
156
- └── dist/ # Código compilado
157
- ```
60
+ ---
158
61
 
159
- ## 📊 Performance
160
-
161
- - **Busca por CEP**: ~1ms (indexado)
162
- - **Busca por endereço**: ~5-50ms (depende quantidade de resultados)
163
- - **Memória**: ~100MB (cache SQLite) + código
164
- - **Taxa**: 10M+ buscas/segundo em máquinas modernas
165
-
166
- ## 📝 Schema do Banco
167
-
168
- ```sql
169
- CREATE TABLE addresses (
170
- cep TEXT PRIMARY KEY, -- CEP sem formatação (8 dígitos)
171
- state TEXT NOT NULL, -- UF (2 letras: SP, RJ, etc)
172
- city TEXT NOT NULL, -- Nome da cidade
173
- neighborhood TEXT, -- Bairro
174
- street TEXT NOT NULL -- Nome da rua/avenida
175
- );
176
-
177
- -- Índices para buscas rápidas
178
- CREATE INDEX idx_cep ON addresses(cep);
179
- CREATE INDEX idx_state ON addresses(state);
180
- CREATE INDEX idx_city ON addresses(city);
181
- CREATE INDEX idx_street ON addresses(street);
182
- CREATE INDEX idx_state_city_street ON addresses(state, city, street);
62
+ ## 📦 Resposta Enriquecida (Interface)
63
+
64
+ O retorno é um objeto padronizado com todos os dados fiscais e geográficos prontos para uso:
65
+
66
+ ```json
67
+ {
68
+ "cep": "74740300",
69
+ "state": "GO",
70
+ "city": "Goiânia",
71
+ "neighborhood": "Aruana Ii",
72
+ "street": "Rua Ar 3",
73
+ "ibge": 5208707,
74
+ "ddd": "62",
75
+ "timezone": "America/Sao_Paulo",
76
+ "latitude": -16.6925197501606,
77
+ "longitude": -49.2019380833593
78
+ }
183
79
  ```
184
80
 
185
- ## 🛠️ Desenvolvimento Local
186
-
187
- ```bash
188
- # Instalar dependências
189
- npm install
190
-
191
- # Compilar TypeScript
192
- npm run build
81
+ ---
193
82
 
194
- # Ver tipos TypeScript
195
- npm run dev
83
+ ## 🛠️ Tipagem (TypeScript)
196
84
 
197
- # Executar Gap Hunter (testes de lacunas)
198
- npm run hunt
85
+ A biblioteca exporta a interface principal para facilitar a tipagem no seu projeto:
199
86
 
200
- # Executar AI Updater (automação com IA)
201
- OPENAI_API_KEY=sk-xxx npm run ai:update
87
+ ```ts
88
+ import type { Address } from 'brasil-ceps-offline';
202
89
 
203
- # Testar
204
- npm test
90
+ const myAddress: Address = await getAddress('01001000');
205
91
  ```
206
92
 
207
- ## 🔒 Segurança
208
-
209
- - Banco de dados é **somente-leitura** para aplicações
210
- - Sem conexões de rede (exceto Gap Hunter e AI Updater opcionais)
211
- - Sem coleta de dados ou telemetria
212
- - Open-source e auditável
213
-
214
- ## 🤝 Contribuindo
215
-
216
- Contribuições são bem-vindas! Areas de interesse:
217
-
218
- - Melhorias de performance
219
- - Compressão de banco (ex: zstd)
220
- - Suporte a múltiplas versões de banco
221
- - Testes mais abrangentes
222
- - Documentação
223
-
224
- ## 📄 Licença
225
-
226
- MIT – Use livremente
227
-
228
- ## 🙏 Referências
93
+ ---
229
94
 
230
- - [CEP Aberto](https://cepaberto.com.br/) Fonte de dados
231
- - [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) – Driver SQLite
232
- - [OpenAI API](https://openai.com/api/) – Para automação com IA
233
- - [Google News RSS](https://news.google.com/) – Para descoberta de novos CEPs
95
+ ## ⚖️ Licença e Fonte dos Dados
234
96
 
235
- ---
97
+ **Código fonte:** MIT License
236
98
 
237
- **Made with ❤️ para a comunidade Brasil dev**
99
+ **Dados:** Baseados no Cadastro Nacional de Endereços do Censo 2022 (IBGE). Dados públicos de uso livre.
package/dist/builder.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Builder: Processa CSVs massivos de CEPs para SQLite com alta performance
3
+ * Builder: IBGE BigQuery CSV SQLite
4
4
  *
5
- * Stack: better-sqlite3 + csv-parse + Node.js Streams
6
- * RAM: Eficiente - não carrega arquivos inteiros na memória
5
+ * Formato do CSV de entrada:
6
+ * cep, logradouro, localidade, id_municipio, nome_municipio, sigla_uf, estabelecimentos, centroide
7
7
  *
8
- * Suporta dois formatos:
9
- * 1. Com headers: cep, uf, cidade, bairro, logradouro
10
- * 2. Sem headers: cep, logradouro, desc, bairro, municipio_code
8
+ * Stack : better-sqlite3 + csv-parse (streams)
9
+ * RAM : O(1) apenas o batch corrente fica em memória
10
+ * Output : .db/ceps.sqlite
11
11
  *
12
12
  * Uso:
13
13
  * ts-node src/builder.ts
14
- * npx ts-node src/builder.ts
14
+ * npm run builder
15
15
  */
16
16
  export {};