From 48394e24c16cee48f3df44c3d3b726cafdd6b303 Mon Sep 17 00:00:00 2001 From: Lorhan Sohaky Date: Tue, 6 Oct 2020 00:48:04 -0300 Subject: [PATCH 1/5] Fix code style --- rollup.config.js | 3 +-- src/cep-promise.js | 6 +++--- src/services/correios.js | 2 +- src/services/viacep.js | 2 +- test/e2e/cep-promise.spec.js | 23 ++++++++++++----------- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index 74401a3c..d83e4c16 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -27,7 +27,7 @@ export default [ input, plugins: [ replace({ - 'node-fetch': 'unfetch', + 'node-fetch': 'unfetch' }) ].concat(defaultPlugins, [ resolve({ @@ -43,4 +43,3 @@ export default [ } } ] - diff --git a/src/cep-promise.js b/src/cep-promise.js index 5845c735..fb057fdb 100644 --- a/src/cep-promise.js +++ b/src/cep-promise.js @@ -12,7 +12,7 @@ export default function (cepRawValue, configurations = {}) { .then(cepRawValue => { configurations.providers = configurations.providers ? configurations.providers : [] validateProviders(configurations.providers) - + return cepRawValue }) .then(removeSpecialCharacters) @@ -26,7 +26,7 @@ export default function (cepRawValue, configurations = {}) { } function validateProviders (providers) { - let availableProviders = ['brasilapi', 'correios', 'viacep', 'widenet'] + const availableProviders = ['brasilapi', 'correios', 'viacep', 'widenet'] if (!Array.isArray(providers)) { throw new CepPromiseError({ @@ -35,7 +35,7 @@ function validateProviders (providers) { errors: [ { message: - `O parâmetro providers deve ser uma lista.`, + 'O parâmetro providers deve ser uma lista.', service: 'providers_validation' } ] diff --git a/src/services/correios.js b/src/services/correios.js index e8d813b5..9c671b50 100644 --- a/src/services/correios.js +++ b/src/services/correios.js @@ -72,7 +72,7 @@ function extractValuesFromSuccessResponse (xmlObject) { city: xmlObject.cidade, neighborhood: xmlObject.bairro, street: xmlObject.end, - service: 'correios', + service: 'correios' } } diff --git a/src/services/viacep.js b/src/services/viacep.js index 2545887e..f2edabbc 100644 --- a/src/services/viacep.js +++ b/src/services/viacep.js @@ -44,7 +44,7 @@ function extractCepValuesFromResponse (responseObject) { city: responseObject.localidade, neighborhood: responseObject.bairro, street: responseObject.logradouro, - service: 'viacep', + service: 'viacep' } } diff --git a/test/e2e/cep-promise.spec.js b/test/e2e/cep-promise.spec.js index ee4ff0de..59643b00 100644 --- a/test/e2e/cep-promise.spec.js +++ b/test/e2e/cep-promise.spec.js @@ -11,24 +11,25 @@ import CepPromiseError from '../../src/errors/cep-promise.js' chai.use(chaiAsPromised) chai.use(chaiSubset) -let expect = chai.expect +const expect = chai.expect describe('[e2e] cep-promise', () => { before(() => { nock.enableNetConnect() }) - + describe('when invoked with a valid "05010000" string', () => { it('should fulfill with correct address', () => cep('05010000') - .then(address => { - expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: address.service - })}) + .then(address => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: address.service + }) + }) ) }) From e0b8dabe7a340b9a1fbabcef567cbd3895d118f8 Mon Sep 17 00:00:00 2001 From: Lorhan Sohaky Date: Tue, 6 Oct 2020 00:51:06 -0300 Subject: [PATCH 2/5] Allows you to provide settings for services --- src/cep-promise.js | 12 +++++++----- src/services/brasilapi.js | 7 ++++--- src/services/correios.js | 5 +++-- src/services/viacep.js | 5 +++-- src/services/widenet.js | 5 +++-- test/e2e/cep-promise.spec.js | 32 +++++++++++++++++++++++++------- 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/cep-promise.js b/src/cep-promise.js index fb057fdb..7de92340 100644 --- a/src/cep-promise.js +++ b/src/cep-promise.js @@ -107,17 +107,19 @@ function validateInputLength (cepWithLeftPad) { } function fetchCepFromServices (cepWithLeftPad, configurations) { - let providersServices = getAvailableServices() + const providersServices = getAvailableServices() - if (configurations.providers.length === 0) { + const { providers: providersFromConfigurations, ...configurationsWithoutProviders } = configurations + + if (providersFromConfigurations.length === 0) { return Promise.any( - Object.values(providersServices).map(provider => provider(cepWithLeftPad)) + Object.values(providersServices).map(provider => provider(cepWithLeftPad, configurationsWithoutProviders)) ) } return Promise.any( - configurations.providers.map(provider => { - return providersServices[provider](cepWithLeftPad) + providersFromConfigurations.map(provider => { + return providersServices[provider](cepWithLeftPad, configurationsWithoutProviders) }) ) } diff --git a/src/services/brasilapi.js b/src/services/brasilapi.js index 3361c6fb..4fdcd2c1 100644 --- a/src/services/brasilapi.js +++ b/src/services/brasilapi.js @@ -3,14 +3,15 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchBrasilAPIService (cepWithLeftPad) { +export default function fetchBrasilAPIService (cepWithLeftPad, { agent = undefined }) { const url = `https://brasilapi.com.br/api/cep/v1/${cepWithLeftPad}` const options = { method: 'GET', mode: 'cors', headers: { 'content-type': 'application/json;charset=utf-8' - } + }, + agent } return fetch(url, options) @@ -23,7 +24,7 @@ function parseResponse (response) { if (response.ok === false || response.status !== 200) { throw new Error('CEP não encontrado na base do BrasilAPI.') } - + return response.json() } diff --git a/src/services/correios.js b/src/services/correios.js index 9c671b50..45c6495b 100644 --- a/src/services/correios.js +++ b/src/services/correios.js @@ -3,7 +3,7 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchCorreiosService (cepWithLeftPad, proxyURL = '') { +export default function fetchCorreiosService (cepWithLeftPad, { proxyURL = '', agent = undefined }) { const url = `${proxyURL}https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente` const options = { method: 'POST', @@ -11,7 +11,8 @@ export default function fetchCorreiosService (cepWithLeftPad, proxyURL = '') { headers: { 'Content-Type': 'text/xml;charset=UTF-8', 'cache-control': 'no-cache' - } + }, + agent } return fetch(url, options) diff --git a/src/services/viacep.js b/src/services/viacep.js index f2edabbc..d0cad0a1 100644 --- a/src/services/viacep.js +++ b/src/services/viacep.js @@ -3,7 +3,7 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchViaCepService (cepWithLeftPad, proxyURL = '') { +export default function fetchViaCepService (cepWithLeftPad, { proxyURL = '', agent = undefined }) { const url = `${proxyURL}https://viacep.com.br/ws/${cepWithLeftPad}/json/` const options = { method: 'GET', @@ -11,7 +11,8 @@ export default function fetchViaCepService (cepWithLeftPad, proxyURL = '') { headers: { 'content-type': 'application/json;charset=utf-8', 'user-agent': '' - } + }, + agent } return fetch(url, options) diff --git a/src/services/widenet.js b/src/services/widenet.js index d6b234ee..fc18472c 100644 --- a/src/services/widenet.js +++ b/src/services/widenet.js @@ -3,14 +3,15 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchWideNetService (cepWithLeftPad, proxyURL = '') { +export default function fetchWideNetService (cepWithLeftPad, { proxyURL = '', agent = undefined }) { const url = `${proxyURL}https://cep.widenet.host/busca-cep/api/cep/${cepWithLeftPad}.json` const options = { method: 'GET', mode: 'cors', headers: { 'content-type': 'application/json;charset=utf-8' - } + }, + agent } return fetch(url, options) diff --git a/test/e2e/cep-promise.spec.js b/test/e2e/cep-promise.spec.js index 59643b00..e0bdcb54 100644 --- a/test/e2e/cep-promise.spec.js +++ b/test/e2e/cep-promise.spec.js @@ -4,6 +4,7 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' import chaiSubset from 'chai-subset' import nock from 'nock' +import https from 'https' import cep from '../../src/cep-promise.js' import CepPromiseError from '../../src/errors/cep-promise.js' @@ -38,13 +39,30 @@ describe('[e2e] cep-promise', () => { const address = await cep(5010000) expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: address.service - }) + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: address.service + }) + }) + }) + + describe('when invoked with a valid 05010000 number and agent', () => { + it('should fulfill with correct address', async () => { + const agent = new https.Agent({ keepAlive: true }) + + const address = await cep(5010000, { agent }) + + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: address.service + }) }) }) From e2bb7128bc0493e3fff369ec01db7faa6fce1d13 Mon Sep 17 00:00:00 2001 From: Lorhan Sohaky Date: Tue, 6 Oct 2020 00:51:13 -0300 Subject: [PATCH 3/5] Update README --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index 0c2a70b2..49130b8a 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,30 @@ cep('05010000') // } ``` +### Realizando uma consulta avançada +Para passar configurações como Proxy e Agent: + + +``` js +import cep from 'cep-promise' +import https from 'https' + +const agent = new https.Agent({ keepAlive: true }) +const proxyURL = 'socks5://127.0.0.1:1950' + +const configurations = { agent, proxyURL } +cep('05010000', configurations) + .then(console.log) + + // { + // "cep": "05010000", + // "state": "SP", + // "city": "São Paulo", + // "street": "Rua Caiubí", + // "neighborhood": "Perdizes", + // } +``` + ### Você também poderá passar o CEP como Inteiro From 7f493d087a62c1a9962d404ce42217981f32fd4e Mon Sep 17 00:00:00 2001 From: Lorhan Sohaky Date: Fri, 9 Oct 2020 01:18:31 -0300 Subject: [PATCH 4/5] Improve configs --- src/cep-promise.js | 17 +++++++++++++++-- src/services/brasilapi.js | 8 +++++--- src/services/correios.js | 8 +++++--- src/services/viacep.js | 7 ++++--- src/services/widenet.js | 8 +++++--- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/cep-promise.js b/src/cep-promise.js index 7de92340..d96d0773 100644 --- a/src/cep-promise.js +++ b/src/cep-promise.js @@ -111,15 +111,28 @@ function fetchCepFromServices (cepWithLeftPad, configurations) { const { providers: providersFromConfigurations, ...configurationsWithoutProviders } = configurations + const providersName = Object.keys(providersServices) + const { globalConfigs, specificConfigs } = Object.entries(configurationsWithoutProviders).reduce((obj, [key, value]) => { + const isAProvider = providersName.includes(key) + + if (isAProvider) { + obj.specificConfigs[key] = value + } else { + obj.globalConfigs[key] = value + } + + return obj + }, { globalConfigs: {}, specificConfigs: {} }) + if (providersFromConfigurations.length === 0) { return Promise.any( - Object.values(providersServices).map(provider => provider(cepWithLeftPad, configurationsWithoutProviders)) + Object.entries(providersServices).map(([providerName, provider]) => provider(cepWithLeftPad, { ...globalConfigs, ...specificConfigs[providerName] })) ) } return Promise.any( providersFromConfigurations.map(provider => { - return providersServices[provider](cepWithLeftPad, configurationsWithoutProviders) + return providersServices[provider](cepWithLeftPad, { ...globalConfigs, ...specificConfigs[provider] }) }) ) } diff --git a/src/services/brasilapi.js b/src/services/brasilapi.js index 4fdcd2c1..654bc96c 100644 --- a/src/services/brasilapi.js +++ b/src/services/brasilapi.js @@ -3,15 +3,17 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchBrasilAPIService (cepWithLeftPad, { agent = undefined }) { +export default function fetchBrasilAPIService (cepWithLeftPad, { agent = undefined, timeout = undefined, headers = {} }) { const url = `https://brasilapi.com.br/api/cep/v1/${cepWithLeftPad}` const options = { method: 'GET', mode: 'cors', headers: { - 'content-type': 'application/json;charset=utf-8' + 'content-type': 'application/json;charset=utf-8', + ...headers }, - agent + agent, + timeout } return fetch(url, options) diff --git a/src/services/correios.js b/src/services/correios.js index 45c6495b..15f298da 100644 --- a/src/services/correios.js +++ b/src/services/correios.js @@ -3,16 +3,18 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchCorreiosService (cepWithLeftPad, { proxyURL = '', agent = undefined }) { +export default function fetchCorreiosService (cepWithLeftPad, { proxyURL = '', agent = undefined, timeout = undefined, headers = {} }) { const url = `${proxyURL}https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente` const options = { method: 'POST', body: `\n\n \n \n \n ${cepWithLeftPad}\n \n \n`, headers: { 'Content-Type': 'text/xml;charset=UTF-8', - 'cache-control': 'no-cache' + 'cache-control': 'no-cache', + ...headers }, - agent + agent, + timeout } return fetch(url, options) diff --git a/src/services/viacep.js b/src/services/viacep.js index d0cad0a1..f351d942 100644 --- a/src/services/viacep.js +++ b/src/services/viacep.js @@ -3,16 +3,17 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchViaCepService (cepWithLeftPad, { proxyURL = '', agent = undefined }) { +export default function fetchViaCepService (cepWithLeftPad, { proxyURL = '', agent = undefined, timeout = undefined, headers = {} }) { const url = `${proxyURL}https://viacep.com.br/ws/${cepWithLeftPad}/json/` const options = { method: 'GET', mode: 'cors', headers: { 'content-type': 'application/json;charset=utf-8', - 'user-agent': '' + ...headers }, - agent + agent, + timeout } return fetch(url, options) diff --git a/src/services/widenet.js b/src/services/widenet.js index fc18472c..a106a58b 100644 --- a/src/services/widenet.js +++ b/src/services/widenet.js @@ -3,15 +3,17 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' -export default function fetchWideNetService (cepWithLeftPad, { proxyURL = '', agent = undefined }) { +export default function fetchWideNetService (cepWithLeftPad, { proxyURL = '', agent = undefined, timeout = undefined, headers = {} }) { const url = `${proxyURL}https://cep.widenet.host/busca-cep/api/cep/${cepWithLeftPad}.json` const options = { method: 'GET', mode: 'cors', headers: { - 'content-type': 'application/json;charset=utf-8' + 'content-type': 'application/json;charset=utf-8', + ...headers }, - agent + agent, + timeout } return fetch(url, options) From 5f060130ad079de87b294f662eb70e1018490571 Mon Sep 17 00:00:00 2001 From: Lorhan Sohaky Date: Fri, 9 Oct 2020 01:19:50 -0300 Subject: [PATCH 5/5] Update README --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 49130b8a..0b7f7b6c 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,7 @@ cep('05010000') ``` ### Realizando uma consulta avançada -Para passar configurações como Proxy e Agent: - +Para passar configurações como Proxy, Agent, timeout: ``` js import cep from 'cep-promise' @@ -74,7 +73,14 @@ import https from 'https' const agent = new https.Agent({ keepAlive: true }) const proxyURL = 'socks5://127.0.0.1:1950' -const configurations = { agent, proxyURL } +const configurations = { + agent, + proxyURL, + brasilapi: { + timeout:1000 + } +} + cep('05010000', configurations) .then(console.log)