npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tracking-correios

v1.3.5

Published

Módulo para consulta do rastreio de pacotes do Correios

Downloads

2,734

Readme

tracking-correios

Build Status npm

Módulo para consulta do rastreio de pacotes do Correios. Acessa diretamento a API do Correios (SRO).

Instalação

Requer Node.js e npm instalados.

$ npm install --save tracking-correios

Depois importe no seu código:

// via require do Node.js
const TrackingCorreios = require('tracking-correios')

// ou via ES6
import TrackingCorreios from 'tracking-correios'

Consulta de eventos do código de rastreio

Para consultas de um único código:

// passando como string
TrackingCorreios.track( 'DU897123996BR' )
    .then(console.log)

// ou como Array
TrackingCorreios.track( [ 'DU897123996BR' ] )
    .then(console.log)

> [ {
   "numero":"DU897123996BR",
   "sigla":"DU",
   "nome":"ENCOMENDA E-SEDEX",
   "categoria":"E-SEDEX",
   "evento": [ {
         "tipo":"BDE",
         "status":"01",
         "data":"12/12/2016",
         "hora":"19:06",
         "descricao":"Objeto entregue ao destinatário",
         "recebedor":"",
         "documento":"",
         "comentario":"",
         "local":"CEE BAURU",
         "codigo":"17034972",
         "cidade":"Bauru",
         "uf":"SP"
      }, { ... }, { ... }, { ... }
   ]
} ]

Exemplo de código válido, porém sem rastreio

TrackingCorreios.track([ 'SB231363632BR' ])
    .then(console.log)

> [ {
    numero: 'SB231363632BR',
    erro: 'Objeto não encontrado na base de dados dos Correios.'
} ]

Para consultas de vários códigos simultâneos:

TrackingCorreios.track([ 'DU897123996BR', 'PN273603577BR', 'DU910139445BR' ])
    .then(console.log)

> [
    { numero: 'DU897123996BR',
        sigla: 'DU',
        nome: 'ENCOMENDA E-SEDEX',
        categoria: 'E-SEDEX',
        evento: [ {...}, [Object], [Object], [Object], [Object], [Object] ] },
    { numero: 'PN273603577BR',
        sigla: 'PN',
        nome: 'ENCOMENDA PAC (ETIQ LOGICA)',
        categoria: 'ENCOMENDA PAC',
        evento: [ [Object], [Object], [Object], [Object], [Object], [Object] ] },
    { numero: 'DU910139445BR',
        sigla: 'DU',
        nome: 'ENCOMENDA E-SEDEX',
        categoria: 'E-SEDEX',
        evento: [ [Object], [Object], [Object], [Object], [Object] ] }
  ]

O método track validará automaticamente os objetos, removendo os inválidos:

TrackingCorreios.track([ 'DU897123996BR', 'invalido' ])
    .then(console.log)

> [ {
    "numero":"DU897123996BR",
    "sigla":"DU",
    "nome":"ENCOMENDA E-SEDEX",
    "categoria":"E-SEDEX",
    "evento": [...]
} ]

Se não tiver nenhum objeto válido a Promise rejeitará com TrackingError:

TrackingCorreios.track('invalido')
    .catch(console.log)

> {
    [TrackingError: Erro ao validar os objetos.]
        name: 'TrackingError',
        message: 'Erro ao validar os objetos.',
        type: 'validation_error',
        errors:
        [ { message: 'Nenhum objeto válido para pesquisa.',
            service: 'objects_validation' } ]
  }

Se não quiser filtrar, use a configuração filter:

TrackingCorreios.track('invalido', { filter: false })
    .catch(console.log)

> [ {
    numero: 'invalido',
    erro: 'Objeto não encontrado na base de dados dos Correios.'
} ]

O método track retorna uma Promise, portanto o tratamento de erros deve ser feito pelo .catch. Exemplo de API fora do ar:

TrackingCorreios.track('DU897123996BR')
    .then(console.log)
    .catch(console.log)

> {
    [TrackingError: Erro ao se conectar ao o serviço dos Correios.]
        name: 'TrackingError',
        message: 'Erro ao se conectar com o serviço dos Correios.',
        type: 'system',
        errors:
        [ { message: 'Ocorreu um erro ao se conectar ao serviço dos Correios: request to https://webservice.correios.com.br/service/rastro failed, reason: connect ECONNREFUSED webservice.correios.com.br',
            service: 'service_error' } ]
  }

Pode também passar um objeto de configuração como segundo parâmetro.

// Valores padrão:
TrackingCorreios.track('DU897123996BR', {
        username: "ECT",
        password: "SRO",
        filter: true,
        type: "L",
        result: "T",
        language: "101",
        limit: 5000
    })

Os parâmetros username, password, type, result e language serão enviados a API dos Correios.

O parâmetro limit indica a quantidade máxima de objetos a ser enviado por requisição. Se passar 8 mil objetos e o limite for 5 mil, o módulo fará duas requisições. Se passar mil objetos e o limite for 1, fará mil requisições.

O parâmetro filter indica se deve realizar a filtragem de pacotes válidos antes de acessar a API do Correios.

As requisições não são paralelas, serão realizadas uma após a outra. A Promise só resolverá quando todas as requisições terminarem.

ATENÇÃO!

O usuário padrão do sistema é ECT. Esse é um usuário de testes, por isso tem algumas limitações (#15, #5). Só é possível fazer a consulta de 1 código por vez, e também só 1 evento é retornado. Para adquirir um usuário com mais permissões, é necessário ter um contrato com os Correios: http://www.correios.com.br/solucoes-empresariais/comercio-eletronico/sistema-de-rastreamento-de-objetos.

Validação de objetos

Esse módulo expõe três métodos auxiliares para validação de objetos.

  • isValid: verifica se o tracking é válido seguindo as regras do Correios.
  • filter: retorna somente os objetos válidos.
  • validate: retorna um objeto com os itens válidos e inválidos.

Exemplos:

isValid:

TrackingCorreios.isValid('DU897123996BR')
> true

TrackingCorreios.isValid(['DU897123996BR'])
> false

TrackingCorreios.isValid('AAAAA')
> false

TrackingCorreios.isValid()
> false

Verifica um único objeto por vez. Valida as iniciais também com as conhecidas do correios (veja category). Retorna um boolean.


filter:

TrackingCorreios.filter( 'DU897123996BR' )
> [ 'DU897123996BR' ]

TrackingCorreios.filter( [ 'DU897123996BR' ] )
> [ 'DU897123996BR' ]

TrackingCorreios.filter( [ 'DU897123996BR', 'PN273603577BR', 'DU910139445BR' ] )
> [ 'DU897123996BR', 'PN273603577BR', 'DU910139445BR' ]

TrackingCorreios.filter([ 'DU897123996BR', 'invalid' ])
> [ 'DU897123996BR' ]

TrackingCorreios.filter([ 'invalid', 'AAAA' ])
> [ ]

TrackingCorreios.filter( { } )
> [ ]

Sempre retornará um Array, independente se houver ou não itens válidos.


validate:

TrackingCorreios.validate( 'DU897123996BR' )
> { valid: [ 'DU897123996BR' ], invalid: [ ] }

TrackingCorreios.validate( [ 'DU897123996BR' ] )
> { valid: [ 'DU897123996BR' ], invalid: [ ] }

TrackingCorreios.validate( [ 'DU897123996BR', 'PN273603577BR', 'DU910139445BR' ] )
> {
    valid: [ 'DU897123996BR', 'PN273603577BR', 'DU910139445BR' ],
    invalid: [ ]
  }

TrackingCorreios.validate([ 'DU897123996BR', 'invalid' ])
> {
    valid: [ 'DU897123996BR' ],
    invalid: [ 'invalid' ]
  }

TrackingCorreios.validate([ 'invalid', 'AAAA' ])
> {
    valid: [ ],
    invalid: [ 'invalid', 'AAAA' ]
  }

TrackingCorreios.validate( { } )
> {
    valid: [ ],
    invalid: [ { } ]
  }

Sempre retornará um objeto com os campos valid e invalid.

Categoria do Objeto

O módulo expõe um método para retornar a categoria do objeto: category. Exemplo:

TrackingCorreios.category('DU897123996BR')
> 'e-SEDEX'

TrackingCorreios.category(['PN273603577BR'])
> 'PAC'

TrackingCorreios.category(['AA123123123BR'])
> undefined

TrackingCorreios.category('AAAAA')
> undefined

TrackingCorreios.category()
> undefined

Se não for um código de rastreio válido, retornará undefined.

Inspiração

Arquitetura inspirada no módulo cep-promise de Filipe Deschamps. Queria aprender mais sobre encadeamento de Promises, funções pequenas e vários outros assuntos que ele aborda nesse vídeo, por isso decidi desenvolver esse módulo.