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

@ovra/sdk

v0.1.1

Published

Official TypeScript SDK for Ovra — the European agentic payment infrastructure.

Readme

@ovra/sdk

Official TypeScript SDK for Ovra — the European agentic payment infrastructure.

Ovra gives any AI agent its own virtual card, spending policies, and autonomous payment capability. EU-native, GDPR-first.

Install

npm install @ovra/sdk

Quick start

import { Ovra } from "@ovra/sdk";

const ovra = new Ovra({ apiKey: process.env.OVRA_API_KEY! });

// 1. Start a workflow run — every call under this run gets correlated
const run = await ovra.runs.create({ name: "weekly-procurement" });

// 2. Create an agent with typed permissions and spending limits
const agent = await ovra.agents.create({
  name: "procurement-bot",
  permissions: ["cards.issue", "transfers.create", "wallets.read"],
  limits: { perTransaction: 50_000, daily: 200_000 },
});

// 3. Issue a virtual card bound to this agent
const card = await ovra.cards.issue({
  agentId: agent.id,
  purpose: "AWS cloud costs monthly",
});

// 4. Later — query the full workflow timeline
const timeline = await ovra.runs.get(run.id);
console.log(timeline.events);     // Every event this run produced
console.log(timeline.transfers);  // Every transfer stamped with run_id

Features

  • Agents — declare autonomous actors with limits + permissions
  • Cards — virtual cards, tokenized by default. Agents never see raw card data.
  • Accounts — dedicated IBAN per account, EUR-native
  • Transfers — account-to-account and SEPA payouts
  • Split Recipes — atomic multi-leg money routing (commission splits, revenue shares)
  • Workflows — correlate every call made during one agent job
  • Delegations — scoped spending grants for B2B2B flows
  • Typed errors — branch on error.code === "E_WALLET_INSUFFICIENT" etc.

Idempotency

Every POST is safe to retry. The SDK automatically generates an Idempotency-Key (UUIDv4) per call — same request twice returns the same response, different body with same key returns 409.

Runs (the AI-native correlation primitive)

Pass a run id to group every call made during an agent workflow:

const run = await ovra.runs.create({ name: "invoice-automation" });

// Pin every subsequent call to this run
const runScoped = ovra.withRun(run.id);
await runScoped.transfers.create({ ... });
await runScoped.intents.create({ ... });

// Later: see the complete timeline
const detail = await ovra.runs.get(run.id);

Split Recipes

Atomically debit one wallet and fan out to N legs — all commit or all roll back:

await ovra.transfers.split({
  sourceWalletId: "wal_...",
  purpose: "Commission distribution for deal #123",
  legs: [
    { destinationType: "wallet",      destinationWalletId: "wal_cobroker_...", percentage: 40 },
    { destinationType: "beneficiary", destinationBeneficiaryId: "bnf_sub_...", percentage: 15 },
    { destinationType: "wallet",      destinationWalletId: "wal_vat_...",      percentage: 19 },
  ],
});

Error handling

import { Ovra, OvraError } from "@ovra/sdk";

try {
  await ovra.transfers.create({ ... });
} catch (err) {
  if (err instanceof OvraError) {
    if (err.code === "E_WALLET_INSUFFICIENT") {
      // meta carries { available, required }
      console.log("Top up:", err.meta);
    }
    if (err.code === "E_POLICY_DENIED") {
      // agent tried to exceed a policy limit
    }
  }
}

License

MIT