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 🙏

© 2026 – Pkg Stats / Ryan Hefner

butaca

v0.2.0

Published

Cartelera, funciones y recomendación de butacas contiguas de Cinemark Argentina desde la terminal.

Readme

butaca

Cartelera y disponibilidad de butacas de Cinemark Hoyts Argentina, desde la terminal. Pensado para que lo use un agente y lo supervise una persona.

npx butaca palermo
hoy 29 jul · 5 funciones

LA ODISEA  · 2D · SUB  · 5 funciones
  butaca funciones --cine palermo --peli la-odisea
  00:40  161366   sala 2  143/143  ░░░░░░░░░░  vacía
  21:00  161314   sala 2  1/143    ██████████  casi llena
  22:00  161310   sala 8  8/102    █████████░  casi llena
  22:30  161312   sala 1  48/142   ███████░░░  casi llena
  23:00  161309   sala 6  106/141  ██░░░░░░░░  media

ocupación por hora  ▁█▆▂  00h a 23h

Ver butacas: butaca butacas 161314 --cine palermo

Qué resuelve

Elegir función sin abrir el sitio: qué dan cerca tuyo, en qué formato, y cuántas butacas quedan libres de verdad.

La barra es ocupación calculada sobre butacas vendidas, no el campo de estado de la API, que dice "HIGH" hasta en salas al 98 por ciento.

Instalación

npm i -g butaca      # o bun add -g butaca

Node 20 o superior. Nada de esto necesita cuenta, salvo el mapa de la sala.

Comandos

butaca cines                       # los 24 complejos
butaca cartelera --cine palermo    # qué se está dando
butaca funciones --cine palermo    # horarios con butacas libres
butaca estrenos --cine palermo     # preventa y próximos
butaca recomendar spiderman --cine palermo --fecha mañana --personas 2 --formato 2D --idioma SUB
butaca palermo                     # atajo de "funciones --cine"
butaca schema                      # shapes JSON de cada comando, para agentes
butaca cadenas                     # qué cadenas soporta

Filtros de funciones: --peli, --fecha, --formato, --idioma, --libres, --todas.

recomendar acepta un título parcial, resuelve la mejor función con lugares para --personas y propone el mejor grupo contiguo mediante un ranking geométrico. --dry-run elige la función sin autenticar ni abrir una orden. --preflight valida sesión y precio sin abrirla. Consultar el mapa necesita confirmación porque crea una orden, pero no hace hold. Devuelve el comando reservar exacto para continuar con esa misma orden. elegir conserva el flujo anterior que recomienda y hace el hold.

Tu cine por defecto

butaca config set cine palermo
butaca funciones                   # ya no hace falta --cine

Precedencia: el flag gana, después BUTACA_CINE, después lo guardado. Vive en ~/.butaca/prefs.json, aparte de la sesión, así que auth logout no lo borra.

Cadenas

Hoy solo Cinemark Hoyts Argentina está soportada. El registro (src/providers.ts) está armado para sumar otras: cada una declara su host, su header de país y su token de canal.

Cineplanet Perú está declarada como planned. Su CDN responde 403 a todo pedido desde fuera de Perú, así que falta mapear su superficie desde una conexión peruana antes de escribir el adapter. scripts/recon-pe.sh junta lo necesario.

El mapa de la sala

Con cuenta de Cinemark (butaca auth login), butaca butacas <id> --cine <slug> dibuja la sala:

                    P A N T A L L A
   ────────────────────────────────────────────────

   171 libres de 250

1  ◼◼          ◼◼       ◼◼       ◼◼       ◼◼
2  ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼       ◼◼
3  ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼       ◼◼ ◼◼
7  ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼ ◼◼       ◼◼ ◼◼

◼ libre   ◼ ocupada   ◼ accesible   ◼ preasignada

Se dibuja por coordenada de grilla, así que los pasillos son huecos reales y no columnas colapsadas. --numeros pone el número de butaca dentro de cada cuadro.

Para agentes

Todo comando acepta --json, y devuelve JSON automáticamente cuando stdout no es una terminal, sin pasar el flag.

butaca funciones --cine palermo --json | jq '.data[0]'
butaca schema butacas            # el shape exacto, sin parsear --help

El payload de butacas trae sugeridas: las mejores butacas libres ya rankeadas, con el label listo para pasar a otro comando.

{"label": "6-10", "distanciaPantalla": 0.67, "desviacionCentro": 0.05, "score": 0.96}

Así se recomienda sin re-derivar la geometría de la sala. Las butacas de accesibilidad quedan fuera del ranking a propósito: son de alguien que las necesita.

Códigos de salida: 0 bien, 1 error del usuario, 2 falla del sistema. Datos a stdout, diagnósticos a stderr, siempre.

Qué NO hace

No paga. Cinemark guarda el carrito en el navegador y no en la cuenta, así que ninguna URL puede continuar una orden abierta desde acá. La compra se termina en el sitio.

Existe butaca reservar, que toma inventario real y funciona, pero por lo anterior su resultado no se puede pagar. Está fuera del camino principal a propósito.

Los payloads de reservar, recomendar y elegir exponen browserCheckoutAvailable: false, sideEffect y siteUrl. siteUrl vuelve al sitio, pero no preserva la orden ni es una URL de checkout.

Tampoco resuelve captchas ni automatiza medios de pago.

Cómo funciona

Habla con la misma API que usa el sitio, sin scraping de HTML.

Dos detalles que el CLI corrige y están en CONTRACT.md:

  • Los horarios vienen marcados como UTC y en realidad son hora de Buenos Aires.
  • La ocupación se calcula acá, por lo dicho arriba sobre el campo de estado.

Desarrollo

bun install
bun test          # 215 tests, sin red
bun run src/cli.ts cines

AGENTS.md tiene las reglas del repo, cada una con el defecto real que la originó.

Licencia

MIT. Proyecto independiente, no afiliado a Cinemark.