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

@empyre/vault-sdk

v1.0.0

Published

Vault secrets, temporary credentials, and keyless signing for AI agents by Empyre.

Readme

@empyre/vault-sdk

Secrets, temporary credentials, and keyless signing for AI agents — the official SDK for Vault by Empyre.

Zero runtime dependencies. Works in Node 18+, Deno, Bun, browsers, and edge runtimes.

Install

npm i @empyre/vault-sdk

The package name is @empyre/vault-sdk (scoped). npm i empyre@vault-sdk will fail with a 404 — that syntax asks npm for a package called empyre at a version tag called vault-sdk.

Quick start

Create an agent at vault.empyre.dev/dashboard/agents and copy its vlt_live_… token (shown once). Write an allow policy for it on the Policies page — a new agent starts with zero access.

// agent.mjs — run with: node agent.mjs
import { VaultAgent } from "@empyre/vault-sdk";

const vault = new VaultAgent({ token: process.env.VAULT_AGENT_TOKEN });

const secrets = await vault.secrets.list();          // names + types only
const stripeKey = await vault.secrets.access(secrets[0].id); // decrypted value
console.log(stripeKey.value);

Secrets

await vault.secrets.list();               // VaultSecretSummary[] — no values
await vault.secrets.access(secretId);     // decrypts the current version

Temporary credentials

Mint a short-lived vlt_tmp_… token to hand to a sub-process instead of your agent's own long-lived token:

const cred = await vault.credentials.issue({ secretId, ttlMinutes: 15, maxReads: 3 });
// hand cred.token to the sub-process; it never sees vault.token

const value = await vault.credentials.redeem(cred.token);

Keyless signing

The private key never leaves the vault — you get a signature back, never the key material.

const keys = await vault.signingKeys.list();
const result = await vault.sign(keys[0].id, JSON.stringify({ event: "ping" }));
console.log(result.signature, result.public_key); // verify with result.public_key

Sign up to 20 payloads in one round-trip:

const results = await vault.signBatch([
  { keyId: keys[0].id, payload: "one" },
  { keyId: keys[0].id, payload: "two" },
]);

Verifying elsewhere without a copy-pasted public key? Fetch the org's JWKS:

GET https://api.empyre.dev/vault/.well-known/jwks/{org_id}

Errors

Every failed call throws VaultError with a status and a message that tells you what to do:

import { VaultError } from "@empyre/vault-sdk";

try {
  await vault.secrets.access(secretId);
} catch (err) {
  if (err instanceof VaultError && err.status === 403) {
    console.error("Denied by policy:", err.message);
  }
  throw err;
}

A 5xx response is retried once automatically before raising.

Reference

| Method | Endpoint | | --- | --- | | vault.me() | GET /vault/agent/me | | vault.secrets.list() | GET /vault/agent/secrets | | vault.secrets.access(id) | POST /vault/agent/secrets/{id}/access | | vault.credentials.issue({ secretId, ttlMinutes, maxReads }) | POST /vault/agent/credentials | | vault.credentials.redeem(token) | POST /vault/agent/credentials/redeem | | vault.signingKeys.list() | GET /vault/agent/signing-keys | | vault.sign(keyId, payload, encoding?) | POST /vault/agent/sign | | vault.signBatch(items) | POST /vault/agent/sign/batch |