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 +62 -200
- package/dist/builder.d.ts +7 -7
- package/dist/builder.js +232 -273
- package/dist/database.d.ts +5 -15
- package/dist/database.js +21 -69
- package/dist/index.d.ts +39 -63
- package/dist/index.js +121 -203
- package/dist/scripts/enricher.d.ts +1 -0
- package/dist/scripts/enricher.js +430 -0
- package/dist/scripts/local-enricher.d.ts +16 -0
- package/dist/scripts/local-enricher.js +217 -0
- package/dist/types.d.ts +27 -41
- package/package.json +17 -10
package/README.md
CHANGED
|
@@ -1,237 +1,99 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 🗺️ Brasil CEPs Offline
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Um motor de inteligência geográfica e busca de CEPs **100% offline** para Node.js e TypeScript.
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
+
## 🚀 Instalação e Configuração do Banco
|
|
75
18
|
|
|
76
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
+
## 📥 Sincronizando o Banco de Dados Local
|
|
96
26
|
|
|
97
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
38
|
+
---
|
|
124
39
|
|
|
125
|
-
|
|
40
|
+
## 💻 Como Usar
|
|
126
41
|
|
|
127
|
-
|
|
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
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import { getAddress } from 'brasil-ceps-offline';
|
|
132
46
|
|
|
133
|
-
|
|
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
|
-
|
|
136
|
-
OPENAI_API_KEY=sk-xxx npm run ai:update
|
|
57
|
+
buscarLocalizacao();
|
|
137
58
|
```
|
|
138
59
|
|
|
139
|
-
|
|
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
|
-
##
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
# Instalar dependências
|
|
189
|
-
npm install
|
|
190
|
-
|
|
191
|
-
# Compilar TypeScript
|
|
192
|
-
npm run build
|
|
81
|
+
---
|
|
193
82
|
|
|
194
|
-
|
|
195
|
-
npm run dev
|
|
83
|
+
## 🛠️ Tipagem (TypeScript)
|
|
196
84
|
|
|
197
|
-
|
|
198
|
-
npm run hunt
|
|
85
|
+
A biblioteca exporta a interface principal para facilitar a tipagem no seu projeto:
|
|
199
86
|
|
|
200
|
-
|
|
201
|
-
|
|
87
|
+
```ts
|
|
88
|
+
import type { Address } from 'brasil-ceps-offline';
|
|
202
89
|
|
|
203
|
-
|
|
204
|
-
npm test
|
|
90
|
+
const myAddress: Address = await getAddress('01001000');
|
|
205
91
|
```
|
|
206
92
|
|
|
207
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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:
|
|
3
|
+
* Builder: IBGE BigQuery CSV → SQLite
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Formato do CSV de entrada:
|
|
6
|
+
* cep, logradouro, localidade, id_municipio, nome_municipio, sigla_uf, estabelecimentos, centroide
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* 1
|
|
10
|
-
*
|
|
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
|
-
*
|
|
14
|
+
* npm run builder
|
|
15
15
|
*/
|
|
16
16
|
export {};
|