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

@edssa/sdk

v0.2.3

Published

TypeScript SDK for EdSSA — Ephemeral · Decentralised · Stateless · Structural Authentication. Auth fabric without a vault; per-request credentials via Web Crypto. Node ≥18, Deno, Bun, browsers, Cloudflare Workers.

Readme

@edssa/sdk — TypeScript SDK for EdSSA

EdSSA — Ephemeral · Decentralised · Stateless · Structural Authentication. Auth fabric without a vault.

Status: v0.2.3 — heartbeat minting LIVE; Trigger + PayloadFrame variants deferred to v0.3.x. Cross-language byte-for-byte parity asserted against a Rust-generated fixture in test/fixtures/heartbeat-v1.json. Live-wire heartbeat demo in examples/. The variant surfaces (F-26 Trigger / F-27 PayloadFrame / F-28 Pedersen commitment) return after the §5.19 patent- continuation files (hard deadline 2027-04-15) per the design doc.

npm publish is operator-gated — see roadmap/specs/npm-publish-runbook.md.

What ships in v0.2.2

Algorithm (full Phase-2 heartbeat path)

  • deriveCells(seed, N) — Phase-2 ratchet cell derivation via Web Crypto SHA-256. Mirrors RatchetState::derive byte- for-byte
  • advanceRatchet(cells, cursor, steps) — F-09 cell advance loop; mirrors RatchetState::step per tick
  • composeState(cells, N, chaffC, thresholdT) — assembles the verifier-facing ActiveEdssaState (expectedBytes + chaffMask + thresholdRequired); mirrors RatchetState::compose
  • derivePhase2State(seed, opts) — convenience that does derive → advance → compose in one call. Mirrors edssa_client::derive_phase2_state
  • mintHeartbeat(state, options) — constructs an N-byte authenticated credential with chaff fill + non-chaff overlay
    • sub-ID tail. Mirrors construct_token + the Client::mint_heartbeat overlay
  • verifyToken(token, state) — server-side verification. Mirrors edssa_core::engine::verify_token. Mostly for cross-language test parity; production verification stays in the Rust proxy
  • Client — high-level wrapper with one-time fleet config
    • cached state + invalidateState() for ratchet-advance handling

Pure-function helpers

  • encodeSubId / decodeSubId + SUB_ID_SLOTS / SUB_ID_MAX
  • wireByte / wireBytes / buildHeader — ASCII-safe HTTP-header filter
  • packVersion / unpackVersion + WireVersion / VersionDecodeError — Pre-flight 1.2 wire-format-era selector

What's deferred to v0.3.x

The Phase-7 variant surfaces — mintTrigger, mintPayloadFrame, the FragmentHeader shape, Pedersen commitment chain (F-28) — are intentionally NOT in v0.2.2's public package. The §5.19 continuation patent filing has a hard deadline of 2027-04-15; shipping the algorithmic specifics of these variants on a public npm registry before the continuation locks claims would create §54 / §102 novelty bars in the EPO and PCT jurisdictions (US has a 1-year grace period; international filings don't).

The Rust reference impl in code/edssa-client/src/lib.rs carries the variant logic for internal testing + cross-language fixture generation. v0.3.x of this package re-introduces the variant surfaces after the continuation files. Operators who need Trigger / PayloadFrame today configure the Rust SDK directly until then.

Installation

npm install @edssa/sdk
# or
pnpm add @edssa/sdk
# or
yarn add @edssa/sdk

Requires Node ≥18 (Web Crypto API), or any Deno / Bun / browser / Cloudflare Workers runtime with Web Crypto.

The package is scoped under @edssa so future packages (@edssa/cli, @edssa/llm-agent, etc.) share one brand namespace.

Usage

import { Client } from '@edssa/sdk';
import { readFileSync } from 'node:fs';

// One-time fleet configuration. `seed` is the operator-provided
// fleet seed file (32+ bytes, treat as sensitive).
const seed = new Uint8Array(readFileSync('/etc/edssa/fleet.seed'));
const client = new Client({
  fleetId: 'acme-prod',
  seed,
  widthN: 64,        // matches the proxy's `<fleet>.toml` width_N
  chaffC: 16,        // matches the proxy's chaff count
  thresholdT: 33,    // matches the proxy's threshold T
});

// Per-request: mint a heartbeat credential
const token = await client.mintHeartbeat({ subId: 42 });
const headerValue = client.buildHeader(token);

// POST to the EdSSA proxy
const resp = await fetch('https://demo.edssa.io/echo', {
  method: 'POST',
  headers: { 'X-EdSSA-Token': headerValue, 'Content-Type': 'text/plain' },
  body: 'hello',
});
console.log(resp.status, await resp.text());

See examples/heartbeat-demo.ts for a runnable Node / Deno / Bun script.

Why pure JS + Web Crypto API (not WASM)

  • Bundle size — ~10 KB pure-TS vs ~100 KB+ WASM
  • Runtime portability — Web Crypto is universal across modern Node, Deno, Bun, browsers, Cloudflare Workers, React Native
  • Maintenance — small algorithm port; cross-language fixtures keep drift in check
  • Auditability — TS source is readable + reviewable by every downstream consumer

Trade-off: the SDK is ESM-only + async-only (Web Crypto is Promise-based). Modern Node ≥18 / Deno / Bun all support ESM natively.

License

Dual-licensed under MIT OR Apache-2.0, matching the Rust workspace. See LICENSE-MIT + LICENSE-APACHE.

Cross-references