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

ringup-vapi-init

v0.5.0

Published

Provision Ringup's pre-built payment agent into your Vapi workspace. Recognize callers by phone, charge their saved card on your own payment processor.

Readme

ringup-vapi-init

Add card-on-file payments to a Vapi voice agent. Returning callers are recognized by phone number and pay with their saved card in one sentence; charges settle on the merchant's own payment processor. You write no payment prompt and configure no models, transcribers, or languages: the payment step inherits everything from your agent.

Every element of what this CLI provisions was validated on live voice calls (2026-07-06), end to end, on two verticals. Evidence record: voice-platforms/vapi/KNOWLEDGE.md.

Commands

npx ringup-vapi-init test       talk to a finished demo first: pick a vertical (food, auto
                                parts, booking, insurance), get a fully wired demo squad and
                                a try-saying script; `test --clean` removes it
npx ringup-vapi-init            provision: builds everything, touches NOTHING you own
npx ringup-vapi-init stage      rehearse on a private test number: a disposable twin of your
                                agent with payments wired in, on a free canary line; your
                                real agent and number stay untouched
npx ringup-vapi-init go-live    the consented switch: points your number at the squad, THEN
                                makes the two changes (that order keeps mid-switch callers on
                                your current flow), deletes the rehearsal rig
npx ringup-vapi-init check      verifies the wiring from the API (15 assertions)
npx ringup-vapi-init rollback   reverses go-live exactly, your number included

Provision asks two things and nothing else: your Vapi private key (hidden input, used only for these API calls, never stored) and what to add payments to:

  • (a)ssistant: pick your agent; the CLI assembles the squad around it.
  • (s)quad: pick the squad, then pick which member confirms the order.
  • (m)anual: provisions only the Ringup pieces and prints the wiring steps, for platforms that manage their own squads and templates. RINGUP_INIT_RESULT (last line, JSON) is machine-readable for provisioning scripts.

You are never asked for a business name, payment policy, model, transcriber, or language. The business is identified from the number the call comes in on; the policy is a merchant setting served by Ringup per purchase; everything else is inherited from your agent.

What provision creates (new objects only)

| Object | What it does | |---|---| | Payment member | Silently checks whether payment is needed for THIS purchase, then takes it (or says nothing at all). Inherits your agent's voice, model, and transcriber. | | Wrap-up member | YOUR agent in wrap-up mode (its prompt verbatim, only the Task replaced): announces success, reads back the payment confirmation number, thanks and ends the call. | | Five ringup_* tools | payment_policy / identify / charge / payment_status / send_link as static apiRequest tools against Ringup's REST face. Static config: nothing is fetched at handoff time. Caller and merchant resolve server-side from trusted headers; the model never types either. | | Handoff tool | The validated shape (required destination enum, "One moment." transition, neutral failure line). | | A new squad | Your agent (referenced live, untouched) -> payment -> wrap-up. |

Your assistant is byte-for-byte unmodified after provision, and the squad carries no traffic.

Stage, go-live, and rollback

stage builds a disposable rehearsal rig: a byte-copy twin of your confirming member with the two go-live changes baked in, a three-member rehearsal squad (twin -> payment -> wrap-up), and a free canary number pointed at it. Call the canary and hear exactly what your customers are about to hear; re-run stage after any fix. Nothing you own changes. Only the delta go-live introduces is rehearsed: your other members and hops run identically before and after, so they are not copied.

go-live does two things IN THIS ORDER, after showing them and asking once: points your number(s) at the squad, then makes exactly two changes to your assistant (append the handoff tool to its toolIds, append one line to its prompt). Number-first matters: a caller landing in the seconds between simply gets your current payment-free flow, while the reverse order strands callers with an agent reaching for a payment step that is not there yet (live-tested). It records where each number pointed, deletes the rehearsal rig (or keeps it as a permanent test line if you prefer), and rollback reverses everything: the two changes byte-for-byte and each number back to its exact prior destination. Choices are remembered in ~/.ringup/vapi.json, so the lifecycle commands need no flags; flags override for CI.

The call flow (every call, every merchant)

your agent takes the order -> "One moment." (always the same silent handoff)
  -> payment member silently asks Ringup: is payment needed for THIS purchase?
       required      -> "Let's knock out payment now..." (must complete before the call ends)
       optional      -> one offer, never blocks
       not_required  -> says nothing at all -> wrap-up closes as your agent normally would
  -> wrap-up (your agent): announces success, reads the confirmation number, closes politely

A merchant changing their payment rule (or connecting to Ringup later) changes call behavior immediately, with no agent edits and no redeploy.

Notes

  • The Vapi dashboard cannot render squad-scoped wiring: the Tools list shows apiRequest tools without names, and the squad canvas may show "No handoff tools configured" on your member before go-live. check reads the API and is the source of truth.
  • --demo-caller +1... pins the caller id for dashboard/web test calls (they have no real caller id). Omit for production; the real caller flows via {{customer.number}}.
  • --escalation +1... provisions a human-transfer fallback tool (temporary flag; escalation is becoming a Ringup merchant setting).