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

pymnt-forward

v0.1.0

Published

Deliver captured webhooks to a URL on your own machine — the localhost half of a webhook capture endpoint.

Readme

pymnt-forward

Deliver webhooks captured at a tools.moveahead.tech endpoint to a URL on your own machine.

npx pymnt-forward fwd_YOUR_TOKEN --to http://localhost:3000/webhooks

Why this exists

A capture endpoint can replay a delivery to any address on the public internet. It cannot replay to localhost:3000, because that address means something different on every machine — including ours. This program runs where localhost means your machine.

That inversion is also the reason to prefer this over a tunnel. A tunnel points the internet at your laptop and stops working the moment you close it. Here the endpoint keeps capturing whether or not anything is listening, so whatever arrived while you were away is still there when you start forwarding.

Usage

pymnt-forward <fwd_token> --to <url> [options]

  --to <url>          where to POST each delivery (required)
  --from-start        replay everything already captured, not just new arrivals
  --interval <secs>   how often to poll (default 2)
  --api <origin>      the capture host (default https://tools.moveahead.tech)
  --help

The token can also come from PYMNT_FORWARD_TOKEN.

Tokens

The forwarder token (fwd_…) is not the endpoint URL token (hk_…), and the difference is deliberate. The hk_ token lives in a URL: it gets pasted into gateway dashboards, into Slack while debugging, into config files. If it also authorised reading stored payloads, every one of those places would become a place that can read your webhook bodies.

So reading needs its own credential. Generate one from the endpoint's page, keep it out of URLs, and rotate it whenever you like — rotating costs nobody a gateway reconfiguration.

What gets sent

The exact bytes that arrived, with the sender's headers, using the method the gateway used. Headers your capture host added on the way in are stripped, and that decision is made server-side rather than here — this program deliberately knows nothing about which headers are whose, so it cannot drift from what the dashboard shows you.

Your own signature check should therefore pass on a forwarded delivery exactly as it would on the original. If it does not, that is a real finding rather than an artefact of forwarding.

Failures

A delivery your local service refuses or times out on is reported and dropped, not retried. A dev server that is restarting would otherwise collect a queue of retries that arrive out of order — a bug this program would have invented in your debugging session. Use --from-start to replay again once it is back up.

Losing the connection to the capture API is not fatal: it backs off and keeps trying, because this is meant to be left running.