Track Brazilian Post Office (Correios) packages

EN: Track Brazilian Post Office (Correios) packages. PT: Rastreie encomendas dos Correios.

Image preview of Track Brazilian Post Office (Correios) packages plugin.

track-correios-packages.1h.js

Edit
Open on GitHub
#!/usr/bin/env /usr/local/bin/node

/* jshint esversion: 6 */

/*
 * <xbar.title>Track Brazilian Post Office (Correios) packages</xbar.title>
 * <xbar.version>v1.0</xbar.version>
 * <xbar.author>Carlos E. Torres</xbar.author>
 * <xbar.author.github>cetorres</xbar.author.github>
 * <xbar.desc>EN: Track Brazilian Post Office (Correios) packages. PT: Rastreie encomendas dos Correios.</xbar.desc>
 * <xbar.abouturl>https://github.com/cetorres/bitbar-track-correios-packages</xbar.abouturl>
 * <xbar.image>https://raw.githubusercontent.com/cetorres/bitbar-track-correios-packages/master/screenshot.png</xbar.image>
 * <xbar.dependencies>node</xbar.dependencies>
 */

// Enter the track code here.
// Informe o código de rastreio aqui.
var code = ""; // Ex.: AA123456789BR

// Don't change anything else below this line.
// Não altere mais nada a partir desta linha.
const fs = require('fs');
const https = require('https');
var url = "https://wsmobile.correios.com.br/service/rest/rastro/rastroMobile/FALECONOSC/7KMJ6FISA4/L/T/" + code + "/101";
var logFile = ".track-correios-package.log";

var getLogData = function(callback) {
    fs.readFile(__dirname + '/' + logFile, (e, data) => {
        if (e) {
            callback(null);
        }
        callback(data);
    });
};

var saveLogData = function(data) {
    fs.writeFile(__dirname + '/' + logFile, data, function(err) {
        if (err) {
            console.log(err);
        }
    });
};

var refreshMenu = function() {
    console.log("---");
    console.log("Atualizar | refresh=true");
};

var aboutMenu = function() {
    console.log('---');
    console.log('by Carlos E. Torres | href=http://cetorres.com');
};

const toTitleCase = (phrase) => {    
    return phrase ? phrase
        .toLowerCase()
        .split(' ')
        .map(word => word.charAt(0).toUpperCase() + word.slice(1))
        .join(' ') : "";
};

if (!fs.existsSync(__dirname + '/' + logFile)) {
    saveLogData(0);
}

https.get(url, (res) => {

    res.setEncoding('utf-8');
    var responseString = '';

    res.on('data', function(data) {
        responseString += data;
    });

    res.on('end', function() {       
        var responseObject = JSON.parse(responseString);
        var nomeObjeto = responseObject.objeto[0].nome != undefined ? responseObject.objeto[0].nome : "OBJETO";
        var eventos = responseObject.objeto[0].evento;
        var eventosTotal = eventos != undefined ? eventos.length : 0;

        if (nomeObjeto != "OBJETO" && eventosTotal == 0) {
            console.log("📦 0 | color=yellow");
            console.log("---");
            console.log(nomeObjeto + "\n");
            console.log("Código: " + code);
            console.log("---");
            console.log("Sem eventos no momento.");      
            
            refreshMenu();
            aboutMenu(); 
        }
        else if (nomeObjeto == "OBJETO" && eventosTotal == 0) {
            console.log("📦 0 | color=yellow");
            console.log("---");
            console.log(nomeObjeto + "\n");
            console.log("Código: " + code);
            console.log("---");
            console.log("Objeto não encontrado."); 

            refreshMenu();
            aboutMenu(); 
        }
        else if (nomeObjeto != "" && eventosTotal > 0) {
            var header = eventos.filter(evento => evento.tipo == "PO")[0];            
            
            getLogData((data) => {
                var newEvents = false;
                var eventosLog = data;
            
                if (eventosLog != undefined) {
                    if (eventosLog != eventosTotal) {
                        newEvents = true;
                    }
                }            
                
                saveLogData(eventosTotal);

                var objetoEntregue = eventos.find(e => e.tipo == "BDE") != undefined ? true : false;

                if (objetoEntregue) {
                    console.log("📦 ✓ | color=green");    
                }
                else {
                    console.log("📦 " + eventosTotal + (newEvents ? ' | color=green' : ''));
                }
                console.log("---");            
                console.log(nomeObjeto + "\n");
                console.log("Código: " + code);
                console.log('Postado em: ' + (header == undefined ? eventos[0].dataPostagem : header.postagem.datapostagem));

                eventos.forEach(evento => {                
                    console.log("---");
                    console.log(evento.data + " - " + evento.hora + "\n");                 
                    if (evento.tipo == "RO") {            
                        console.log(evento.descricao.trim() + "\n");                                                        
                        console.log("Para: " + toTitleCase(evento.destino[0].local) + (evento.destino[0].cidade != undefined ? (" em " + toTitleCase(evento.destino[0].cidade)) : ""));
                        console.log("De: " + toTitleCase(evento.unidade.local) + (evento.unidade.cidade != undefined ? (" em " + toTitleCase(evento.unidade.cidade) + "\n") : ""));   
                    } 
                    else if (evento.tipo == "PAR") {
                        console.log(evento.descricao.trim() + "\n");                                                        
                        console.log(toTitleCase(evento.unidade.local));
                    }
                    else {
                        console.log(evento.descricao.trim() + "\n");
                        if (evento.detalhe != undefined) {
                            console.log(evento.detalhe.trim() + "\n");                                
                        }                        
                        if (evento.postagem != undefined) {
                            console.log("Para: " + toTitleCase(evento.postagem.destinatario));
                        }
                        console.log("De: " + toTitleCase(evento.unidade.local) + (evento.unidade.cidade != undefined ? (" em " + toTitleCase(evento.unidade.cidade) + "\n") : "")); 
                    }               
                });

                console.log("---");
                console.log("Ver online | href=" + url); 
                
                refreshMenu();
                aboutMenu(); 
            });                 
            
        }
        
    });

})
.on('error', (e) => {
    console.log('✖︎ | color=red');
    console.log('---');
    console.log('Erro ao ler dados do serviço dos Correios.\n' + e);
    refreshMenu();
    aboutMenu();
});