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

@ironfang/financewolf

v0.1.0

Published

Financewolf API validation client for UBL Invoice and CreditNote documents

Readme

Financewolf TypeScript client

Review candidate @ironfang/financewolf 0.1.0, Node.js 20+ ESM, no runtime dependencies. Install the reviewed .tgz with npm install /path/to/package.tgz. Public npm publication is not claimed by this candidate.

import { readFile } from 'node:fs/promises';
import { Financewolf, FinancewolfError } from '@ironfang/financewolf';

const client = new Financewolf({ apiKey: process.env.FINANCEWOLF_API_KEY ?? '' });
const result = await client.validate(await readFile('invoice.xml'), {
  ruleset: 'fwrs_bis3_billing_invoice_2026_5_r3',
});
console.log(result.outcome);

Use a Financewolf key scoped to financewolf:einvoices:write. Keep it in a secret manager/environment variable; this is a server-side Node client, not a browser integration. Optional timeoutMs defaults to 30 seconds; signal supports cancellation. A timeout/cancel does not cancel work already accepted by the API.

The SDK snapshots the exact bytes before sending them, checks the returned hash and length, verifies completed validation layers and rejects a different pinned ruleset. PHIVE remains the validator: the SDK does not implement invoice rules, correct XML or reinterpret warnings. valid and invalid return structured results. Other failures throw FinancewolfError with safe code/HTTP status.

Pin an immutable document-type-specific ruleset for CI, or deliberately use latest (the default) for current active rules. CreditNote uses its own ruleset, for example fwrs_bis3_billing_creditnote_2026_5_r3. Retired/unavailable rulesets produce service errors, never a silently substituted version.

There is one HTTP attempt, no idempotency key and no automatic retry. Repeated calls can be billable. Redirects are refused, XML is capped at 5 MiB, and the streamed response at 4 MiB. The optional injected fetch is a trusted transport and receives the credential; use it only for tests or a reviewed integration.

Full results can contain invoice text. Do not log/store them without appropriate access and retention. XML is sent to Financewolf under the authenticated API's retention policy. Validation does not send invoices through Peppol, establish Access Point status, certify tax/legal compliance or guarantee acceptance.