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

@sksoftofficial/pingwire

v1.0.2

Published

Reusable alert notification CLI for worker/process failure alerts.

Readme

pingwire

Telegram alerts for workers, cron jobs, and scripts.

Pingwire Node.js npm alert CLI workflow

Pingwire is a tiny Node.js npm alert CLI for worker monitoring, cron job notifications, process failure alerts, and DevOps automation through reusable Telegram notification channels.

  • Website: https://skbilisim.com/en/projects/pingwire
  • npm: https://www.npmjs.com/package/@sksoftofficial/pingwire

MVP channel: Telegram bot. Plain-text messages only for now.

Configure a Telegram channel

  1. Create a Telegram bot with BotFather.
  2. Get the chat id for the destination chat/user/group.
  3. Add the channel:
pingwire channels add
pingwire channels add --cooldown-seconds 600

The add flow asks for:

  1. Channel id — your reusable reference, e.g. main, ops-1. It must start and end with an alphanumeric character and may contain only alphanumeric characters and -.
  2. Provider — currently only telegram.
  3. Telegram bot token.
  4. Telegram pairing — Pingwire prints a 4-digit code and waits while you DM your bot:
/pair 1234

When the correct pair command arrives, Pingwire saves that Telegram chat id for the channel. New channels default to a 300-second duplicate notification cooldown; set --cooldown-seconds <seconds> during add, or edit the channel JSON later. Use 0 to disable cooldown.

Pingwire stores each channel in ~/.pingwire/channels/<channel-id>.json, for example ~/.pingwire/channels/main.json. Duplicate notification state is stored in ~/.pingwire/cache/ and cleaned up on every notify call. Override the home directory with PINGWIRE_HOME=/path/to/dir.

Security note: the MVP stores channel secrets in local plaintext JSON with restrictive file permissions. Treat ~/.pingwire/channels/*.json as sensitive.

Channels

pingwire channels
pingwire channels add
pingwire channels show main
pingwire channels enable main
pingwire channels disable main
pingwire channels remove main
pingwire channels test main --message "hello"

show masks Telegram bot tokens in normal output.

Notify

Notify an explicit channel:

pingwire notify \
  --channel main \
  --message "Worker job failed: task 3421 was marked error" \
  --app worker \
  --severity error

Minimal usage:

pingwire notify --channel main --message "Worker failed"

Cooldown behavior:

  • Pingwire hashes message, app, and severity together.
  • If the same alert is sent to the same channel during that channel's cooldown window, it is skipped.
  • Default cooldown is 300 seconds.
  • Configure per channel with --cooldown-seconds <seconds> when adding the channel or by editing the channel JSON.
  • Cache files are empty files named by the alert hash under ~/.pingwire/cache/<channel-id>/.
  • Expired cache files are cleaned up on every notify call using each file's modified time.

Module usage

import { createPingwire } from 'pingwire';

const notifier = createPingwire();
await notifier.send({
  message: 'Worker job failed: task 3421 was marked error',
  severity: 'error',
  app: 'worker',
});

The CLI uses configured channels from ~/.pingwire/channels/*.json.

Alert shape

{
  message: string,
  severity: 'info' | 'warning' | 'error' | 'critical',
  app: string | null,
  createdAt: string
}