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 🙏

© 2025 – Pkg Stats / Ryan Hefner

cotacao-cafe

v1.3.0

Published

Biblioteca para buscar a cotação do café da Cooabriel

Readme

Cotação do Café - Cooabriel

CI npm version npm downloads TypeScript License: MIT

Busca programaticamente a cotação diária do café Conilon da Cooabriel.

🚀 Instalação

pnpm add cotacao-cafe

🖥️ CLI

Execute direto no terminal:

npx cotacao-cafe

Ou instale globalmente:

npm install -g cotacao-cafe
cotacao-cafe

Opções disponíveis

cotacao-cafe [opções]

Opções:
  -V, --version        Exibe versão do pacote
  -j, --json           Exibe saída em formato JSON
  -q, --quiet          Modo silencioso (apenas erros)
  -l, --limit <numero> Limita quantidade de cotações na tabela (0 = todas, padrão: 10)
  --no-colors          Desabilita cores no output
  --no-charts          Desabilita gráficos ASCII
  -h, --help           Exibe ajuda

Exemplos:

# Saída JSON para integração com scripts
cotacao-cafe --json | jq '.historicoMensal[0]'

# Mostrar todas as cotações na tabela
cotacao-cafe --limit 0

# Mostrar últimas 20 cotações
cotacao-cafe --limit 20

# Sem gráficos (mais rápido)
cotacao-cafe --no-charts

# Versão do pacote
cotacao-cafe --version

📖 Uso

Cotação do dia

import { buscarCotacaoCooabriel } from 'cotacao-cafe';

async function main() {
  const cotacoes = await buscarCotacaoCooabriel();
  console.table(cotacoes);
}

main();

Saída:

┌─────────┬─────────────┬────────────┬───────┬────────┐
│ (index) │   tipo      │    data    │ hora  │ preco  │
├─────────┼─────────────┼────────────┼───────┼────────┤
│    0    │ Conilon 7   │ 05/12/2025 │ 10:30 │ 1360   │
│    1    │ Conilon 7/8 │ 05/12/2025 │ 10:30 │ 1355   │
│    2    │ Conilon 8.  │ 05/12/2025 │ 10:30 │ 1350   │
└─────────┴─────────────┴────────────┴───────┴────────┘

Histórico mensal

import { buscarHistoricoMensal } from 'cotacao-cafe';

const cotacoes = await buscarHistoricoMensal();
console.log(`Total: ${cotacoes.length} cotações`);

// Filtrar por tipo
const conilon7 = cotacoes.filter((c) => c.tipo === 'Conilon 7');
console.table(conilon7.slice(-5)); // Últimas 5 cotações

Formatando para exibição

import { buscarCotacaoCooabriel } from 'cotacao-cafe';

const cotacoes = await buscarCotacaoCooabriel();
const formatador = new Intl.NumberFormat('pt-BR', {
  style: 'currency',
  currency: 'BRL',
});

cotacoes.forEach((cotacao) => {
  console.log(
    `${cotacao.tipo.padEnd(12)} | ${cotacao.data} | ${cotacao.hora} | ${formatador.format(cotacao.preco)}`
  );
});

Saída formatada:

Conilon 7    | 05/12/2025 | 10:30 | R$ 1.360,00
Conilon 7/8  | 05/12/2025 | 10:30 | R$ 1.355,00
Conilon 8    | 05/12/2025 | 10:30 | R$ 1.350,00

🧩 Tipos

type CotacaoCafe = {
  tipo: string; // "Conilon 7", "Conilon 7/8", etc.
  data: string; // "dd/mm/aaaa"
  hora: string; // "hh:mm"
  preco: number; // valor em reais (1360.0)
};

🎯 Por que usar?

  • Útil: Cotação oficial da Cooabriel é referência para produtores de café Conilon no ES
  • Simples: Funções async diretas
  • Completo: Cotação do dia + histórico mensal
  • Tipado: TypeScript com tipos claros
  • Testado: 100% de cobertura de testes
  • Offline: Testes usam fixture, não depende da internet

⚠️ Limitações

  • Depende da estrutura HTML da página da Cooabriel
  • Pode quebrar se o site mudar o layout da tabela
  • Rate limiting: não faça requests muito frequentes

🛠️ Desenvolvimento

git clone https://github.com/gattifernando/cotacao-cafe
cd cotacao-cafe
pnpm install
pnpm dev              # testa contra site real
pnpm test             # testes unitários (com fixtures)
pnpm test:integration # testes de integração (requisições reais)
pnpm test:all         # todos os testes

Scripts Disponíveis

  • pnpm dev - Executa script de desenvolvimento com dados reais
  • pnpm cli - Testa CLI localmente
  • pnpm build - Compila TypeScript
  • pnpm test - Testes unitários (offline, com fixtures)
  • pnpm test:integration - Testes de integração (online, contra site real)
  • pnpm test:all - Todos os testes (unitários + integração)
  • pnpm test:dev - Testes em modo watch
  • pnpm typecheck - Verificação de tipos
  • pnpm lint - ESLint
  • pnpm format - Prettier

🧪 Testes

O projeto possui dois tipos de testes:

Testes Unitários (offline)

  • Usam fixtures HTML salvos
  • Rápidos e confiáveis
  • Não dependem do site estar no ar
  • Executam no CI a cada commit

Testes de Integração (online)

  • Fazem requisições reais ao site
  • Validam se o scraping ainda funciona
  • Detectam mudanças na estrutura do site
  • Execute manualmente: pnpm test:integration
  • Executam automaticamente todos os dias às 9h via GitHub Actions
  • Criam uma issue automaticamente se detectarem falha

⚠️ Aviso Legal e Limitações

IMPORTANTE: Este pacote é fornecido "como está", sem garantias de qualquer tipo.

  • Não nos responsabilizamos pela exatidão, completude ou uso das informações fornecidas
  • 📊 Os dados são extraídos de fontes públicas e podem conter erros ou imprecisões
  • ⏱️ O serviço está sujeito a indisponibilidade ou alterações na fonte de dados
  • 💼 Não deve ser utilizado como única fonte para decisões comerciais ou financeiras
  • 🔍 Sempre valide as informações através de fontes oficiais antes de tomar decisões
  • 🛡️ O autor e contribuidores não se responsabilizam por prejuízos resultantes do uso deste pacote

Este é um projeto de código aberto para fins educacionais e informativos.

🤝 Contribuindo

Contribuições são bem-vindas! Veja CONTRIBUTING.md para detalhes.

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feat/nova-feature)
  3. Commit suas mudanças usando Conventional Commits
  4. Push para a branch (git push origin feat/nova-feature)
  5. Abra um Pull Request

📄 Licença

MIT - veja LICENSE para detalhes.

📧 Contato