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

@waxseal/verify

v1.0.0

Published

Verify Wax Seal Ed25519 identities locally and on-chain. Zero dependencies, works in Node.js 18+ and modern browsers.

Readme

@waxseal/verify

Verify Wax Seal Ed25519 identities locally and on-chain.

  • Zero dependencies — uses the built-in WebCrypto API.
  • Universal — works in Node.js 18+ and all modern browsers.
  • Dual package — ships both ESM and CommonJS builds with full TypeScript types.

A Wax Seal is a generative wax-seal NFT bound to a single Ed25519 keypair. This library lets any app confirm that:

  1. A signature was produced by the key behind a given fingerprint (offline, no network), and
  2. That fingerprint is minted on-chain as a Wax Seal identity.

Install

npm install @waxseal/verify
# or: pnpm add @waxseal/verify / yarn add @waxseal/verify

Quick start

import { verifySeal } from '@waxseal/verify';

const result = await verifySeal({
  fingerprint: 'a1b2c3d4...',              // 64-char hex = SHA-256(public key DER)
  publicKeyPem: '-----BEGIN PUBLIC KEY-----\n...',
  message: 'I authored this post.',
  signature: 'base64url-encoded-ed25519-sig',
});

if (result.valid && result.onChain) {
  console.log('Verified:', result.displayName, 'on', result.chain?.name);
}

Omit message / signature to do an on-chain-only lookup (just confirm the fingerprint is a minted identity):

const result = await verifySeal({ fingerprint: 'a1b2c3d4...' });
// result.onChain → true | false

API

verifySeal(params): Promise<VerifyResult>

Full verification. Verifies the Ed25519 signature locally (if publicKeyPem + message + signature are supplied) and checks the fingerprint on-chain.

| Param | Type | Required | Description | | -------------- | -------- | -------- | ------------------------------------------------------------------ | | fingerprint | string | yes | 64-char hex (SHA-256 of the Ed25519 public key DER). 0x optional.| | publicKeyPem | string | no | PEM-encoded Ed25519 public key. Required for signature checks. | | message | string | no | The signed message. Required for signature checks. | | signature | string | no | Base64url-encoded Ed25519 signature. | | chain | string | no | Preferred chain key (e.g. "base", "bsc") to speed up lookup. | | apiBase | string | no | Override API base URL. Defaults to https://api.waxseal.id. |

VerifyResult

interface VerifyResult {
  valid: boolean;              // signature valid (or on-chain existence when no sig given)
  onChain: boolean;            // fingerprint is minted on a supported chain
  fingerprint: string;         // normalized 64-char hex
  keyId: string;               // last 16 hex chars, uppercased
  displayName?: string;        // on-chain display name
  owner?: string;              // wallet that owns the NFT
  mintedAt?: number;           // unix seconds
  chain?: { name: string; chainId: number; key: string };
  publicKeyVerified?: boolean; // publicKeyPem hashes to the claimed fingerprint
  error?: string;              // human-readable failure reason
}

Other exports

  • computeFingerprint(publicKeyPem) — hex(SHA-256(DER)) for a PEM key.
  • verifySignatureLocal(publicKeyPem, message, signature) — offline Ed25519 check, no network.
  • checkOnChain(fingerprint, { apiBase?, chain? }) — on-chain lookup only.
  • createVerifier(apiBase) — bind all helpers to a custom/self-hosted API base.

REST equivalent

This package wraps a single public endpoint. You can call it directly from any stack:

POST https://api.waxseal.id/api/verify/seal
Content-Type: application/json

{ "fingerprint": "<64-char hex>", "publicKeyPem"?: "...", "message"?: "...", "signature"?: "...", "chain"?: "base" }

The response shape matches VerifyResult above.

License

MIT