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

@rpp402/sdk

v0.1.4

Published

TypeScript SDK for the Robinhood Payments Protocol. Mirrors the protocol's six primitives one-to-one, with no additional abstractions.

Readme

@rpp402/sdk

Published under MIT to the @rpp402 scope on npm.

npm install @rpp402/sdk

TypeScript SDK for RPP402. It mirrors the protocol exactly - one method per primitive, no incidental abstractions - and validates every response against @rpp402/protocol's JSON Schemas at runtime, not just at compile time. Ships ESM and CommonJS builds with full type declarations. Requires Node.js 20 or newer (it uses the global fetch).

Quickstart

import { createClient } from "@rpp402/sdk";

const rpp = createClient({ agentWallet: "0xYourAgentWalletAddress" });

const service = await rpp.discover("market-data.example");      // RPP402-001
const session = await rpp.session.create(service);              // RPP402-003

const quote = await session.quote(service, {                    // RPP402-002 (+ attaches leg)
  capability: "market-data.quote",
  params: { ticker: "NVDA" },
  settlementAsset: service.supported_assets[0],
});

await session.intent({                                          // RPP402-004
  asset: quote.price.asset,
  authorization: { type: "agentic_account_delegation", account_id: "aa_...", delegation_ref: "del_..." },
});

await session.settle();                                         // RPP402-005 (polls to a terminal state)
const receipt = await session.receipt();                        // RPP402-006

For an eip712_signature authorization instead of Agentic Account delegation, pass a signTypedData function to createClient() and omit authorization from session.intent() - the SDK builds and signs the payload itself.

What you get

  • One method per primitive. discover, session.create, session.quote, session.intent, session.settle, session.receipt - each maps to exactly one RFC.
  • Validated responses. A non-conformant server produces an Rpp402ValidationError instead of a malformed object being passed through silently.
  • Typed errors. Every non-2xx response becomes an Rpp402Error carrying the RFC 9457 problem+json type, status, and detail. Network failures, timeouts, and malformed bodies are normalized to the same error type, so you never have to catch a raw fetch rejection.
  • Exact money. Leg totals are summed with BigInt decimal-string math, never parseFloat - amounts don't drift.
  • Built-in timeout. Requests time out after 30s by default; pass timeoutMs (or your own AbortSignal) to change it.
  • No bundled wallet library. signTypedData is caller-injected, so you choose viem, ethers, or an Agentic Account SDK.

MPP interop

Client-side helpers for MPP (the Machine Payments Protocol) live under the mpp namespace, so an agent can also pay MPP-protected resources:

import { mpp } from "@rpp402/sdk";

const res = await fetch(url); // 402 with `WWW-Authenticate: Payment ...`
const challenges = mpp.parseChallenges(res.headers.get("www-authenticate") ?? "");
const authorization = mpp.buildAuthorization(signedCredential); // "Payment <base64url>"
await fetch(url, { headers: { authorization } });

MPP is an HTTP auth scheme with no third-party facilitator - settlement runs on its own rails (Stripe on Tempo). These helpers cover reading challenges and building the credential header; the method-specific credential is caller-supplied, the same way signTypedData is.

Learn more