-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
80 lines (72 loc) · 1.59 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
'use strict'
const got = require('got')
const slug = require('slug')
const iconv = require('iconv-lite')
const utility = require('./lib/utility')
const parse = utility.parse
const cleanup = utility.cleanup
function response(message, req, success = false, dados = []) {
return {
success,
message,
req,
dados
}
}
function falha(err, req) {
return Promise.reject({
success: false,
request: req,
message: err.message,
code: err.code
})
}
function fixData(dado) {
dado = cleanup(dado, 'logradouro')
dado = cleanup(dado, 'endere\u00E7o')
if (dado['endere\u00E7o']) {
dado.logradouro = dado['endere\u00E7o']
}
}
function sucesso(res, req) {
const data = response('Falha na requisição', req)
data.code = res.statusCode
if (res.statusCode === 200) {
const dados = parse(iconv.decode(res.body, 'iso-8859-1'))
if (dados && dados.length > 0) {
data.success = true
data.request = req
for (const dado of dados) {
fixData(dado)
}
data.dados = dados
data.message = 'OK'
return Promise.resolve(data)
}
data.message = 'Dados não encontrado ou erro de análise'
}
return falha(data, req)
}
function consulta(req, timeout = 5000, retries = 2) {
const input = slug(String(req), {
lowercase: false,
replacement: ' ',
remove: /[-]/g
})
const formData = {
body: {
cepEntrada: input,
tipoCep: '',
cepTemp: '',
metodo: 'buscarCep'
},
encoding: null,
timeout,
retries
}
return got
.post('http://m.correios.com.br/movel/buscaCepConfirma.do', formData)
.then(res => sucesso(res, req))
.catch(err => falha(err, req))
}
module.exports = consulta