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

@invariance/sdk

v0.1.1

Published

TypeScript SDK for Invariance Protocol - secure execution layer for autonomous agents

Downloads

289

Readme

@invariance/sdk

TypeScript SDK for Invariance Protocol -- the verification layer for autonomous agents on Base L2.

Installation

pnpm add @invariance/sdk

Quick Start

Zero-config (recommended)

Create a .env file (see sdk/.env.example):

INVARIANCE_CHAIN=base-sepolia
INVARIANCE_RPC_URL=https://sepolia.base.org
INVARIANCE_PRIVATE_KEY=0x...
import { Invariance } from '@invariance/sdk';

// Automatically reads from .env — no args needed
const inv = new Invariance();

Explicit config

import { Invariance } from '@invariance/sdk';

const inv = new Invariance({
  chain: 'base-sepolia',
  rpcUrl: process.env.RPC_URL,
  signer: wallet, // viem Account, WalletClient, or EIP-1193 provider
});

// Wait for wallet connection
await inv.ensureWalletInit();

// Register an on-chain identity
const agent = await inv.identity.register({
  type: 'agent',
  owner: '0xYourAddress',
  label: 'TraderBot',
  capabilities: ['swap', 'transfer'],
});

// Create and attach a policy
const policy = await inv.policy.create({
  name: 'Trading Limits',
  actor: 'agent',
  rules: [
    { type: 'max-spend', config: { limit: '100000' } },
    { type: 'action-whitelist', config: { actions: ['swap', 'transfer'] } },
  ],
});
await inv.policy.attach(policy.policyId, agent.identityId);

// Execute a verified intent
const result = await inv.intent.request({
  actor: { type: 'agent', address: agent.address },
  action: 'swap',
  params: { from: 'USDC', to: 'ETH', amount: '100' },
  approval: 'auto',
});

// Verify any transaction
const verification = await inv.verify(result.proof.txHash);

Signer Types

The SDK accepts three signer types via config.signer:

| Type | Example | |------|---------| | viem Account | privateKeyToAccount('0x...') | | WalletClient | createWalletClient({ ... }) | | EIP-1193 Provider | window.ethereum, injected wallets |

Modules

All modules are lazily initialized and accessed as properties on the Invariance client.

inv.identity -- IdentityManager

Register agents, humans, and devices as verified on-chain identities.

| Method | Description | |--------|-------------| | register(opts) | Register a new identity | | get(identityId) | Get identity by ID | | resolve(address) | Resolve address to identity | | update(identityId, opts) | Update label/capabilities | | pause(identityId) | Temporarily suspend | | resume(identityId) | Resume from pause | | deactivate(identityId) | Permanently deactivate | | list(filters?) | List identities (requires indexer) | | attest(input) | Add attestation to identity | | attestations(identityId) | Get attestations |

inv.intent -- IntentProtocol

Request-approve-execute-verify handshake for agent actions.

| Method | Description | |--------|-------------| | request(opts) | Submit an intent for execution | | prepare(opts) | Dry-run with policy checks and gas estimate | | approve(intentId) | Approve a pending intent | | reject(intentId, reason) | Reject a pending intent | | status(intentId) | Get lifecycle state from on-chain data | | history(filters?) | Query intent history (requires indexer) |

inv.policy -- PolicyEngine

Composable, verifiable condition sets enforced on-chain.

| Method | Description | |--------|-------------| | create(opts) | Create a policy with rules | | attach(policyId, identityId) | Bind policy to identity | | detach(policyId, identityId) | Unbind policy | | evaluate(opts) | Check if action is allowed | | revoke(policyId) | Revoke a policy | | status(policyId) | Get policy status | | list(filters?) | List policies | | compose(policyIds) | Compose multiple policies | | onViolation(callback) | Subscribe to violations |

Rule types: max-spend, max-per-tx, daily-limit, require-balance, action-whitelist, action-blacklist, target-whitelist, target-blacklist, time-window, cooldown, rate-limit, custom

inv.escrow -- EscrowManager

USDC escrow with multi-sig and conditional release.

| Method | Description | |--------|-------------| | create(opts) | Create escrow between parties | | fund(escrowId) | Fund with USDC | | release(escrowId) | Release funds to beneficiary | | refund(escrowId) | Refund to depositor | | dispute(escrowId, reason) | Open a dispute | | resolve(escrowId, opts) | Resolve a dispute | | approve(escrowId) | Add multi-sig approval | | approvals(escrowId) | Get approval status | | status(escrowId) | Get escrow state | | list(filters?) | List escrows | | onStateChange(callback) | Subscribe to state changes |

inv.ledger -- EventLedger

Immutable on-chain logging with dual signatures (actor + platform).

| Method | Description | |--------|-------------| | log(event) | Log a single entry | | batch(events) | Log multiple entries in one tx | | query(filters) | Query entries (requires indexer) | | stream(filters, callback) | Real-time event stream | | export(filters) | Export as JSON/CSV |

inv.verify -- Verifier

Cryptographic verification and public explorer URLs. Callable directly as inv.verify(txHash) and via sub-methods.

| Method | Description | |--------|-------------| | inv.verify(txHash) | Verify a transaction (direct call) | | inv.verify.action(opts) | Verify by actor + action | | inv.verify.identity(address) | Full identity audit | | inv.verify.escrow(escrowId) | Escrow audit trail | | inv.verify.proof(proofHash) | Decode and validate a proof | | inv.verify.bulk(txHashes) | Batch verify transactions | | inv.verify.url(intentId) | Generate public explorer URL |

inv.reputation -- ReputationEngine

Auto-calculated scores and 1-5 star reviews.

| Method | Description | |--------|-------------| | get(address) | Full reputation profile | | review(opts) | Submit on-chain review | | getReviews(address) | Get reviews for address | | score(address) | Calculate overall score | | compare(addresses) | Rank multiple addresses | | badge(address) | Get reputation badge | | history(address) | Score history over time |

inv.wallet -- WalletManager

| Method | Description | |--------|-------------| | get() | Get wallet info | | balance() | Get ETH balance | | getAddress() | Get connected address | | isConnected() | Check connection status |

inv.gas -- GasManager

| Method | Description | |--------|-------------| | estimate(opts) | Estimate gas for an action | | balance() | Get ETH balance for gas |

inv.x402 -- X402Manager

Pay-per-action execution and agent-to-agent payments via x402.

| Method | Description | |--------|-------------| | payForAction(opts) | Execute a paid action | | verifyPayment(txHash) | Verify a payment receipt | | history(filters?) | Query payment history | | estimateCost(action) | Estimate cost for an action | | configure(settings) | Configure payment settings |

inv.erc8004 -- ERC8004Manager

Standalone ERC-8004 (Trustless Agents) manager for on-chain agent identity, reputation, and validation.

inv.erc8004Bridge -- InvarianceBridge

Bridge between ERC-8004 and Invariance modules: link identities, bridge reputation, cross-protocol validation.

Error Handling

import { InvarianceError, ErrorCode } from '@invariance/sdk';

try {
  await inv.intent.request({ ... });
} catch (err) {
  if (err instanceof InvarianceError) {
    console.log(err.code);    // ErrorCode enum value
    console.log(err.message); // Human-readable description
  }
}

Key error codes: IDENTITY_NOT_FOUND, POLICY_DENIED, ESCROW_NOT_FOUND, TX_REVERTED, VERIFICATION_FAILED, WALLET_NOT_CONNECTED, NETWORK_ERROR, NOT_IMPLEMENTED

Events

Subscribe to SDK events via the shared event emitter:

inv.on('identity.registered', (data) => { ... });
inv.on('intent.requested', (data) => { ... });
inv.on('policy.created', (data) => { ... });
inv.on('policy.violation', (data) => { ... });
inv.on('escrow.created', (data) => { ... });
inv.on('ledger.logged', (data) => { ... });
inv.on('reputation.reviewed', (data) => { ... });

Examples

See examples/ for complete working applications:

| Example | Description | |---------|-------------| | examples/verified-treasury/ | CLI: policy-gated spending, verified intents, audit trails | | examples/governance-dao/ | Web: democratic AI governance with multi-sig approval | | examples/agent-marketplace/ | Web: hire agents, USDC escrow, reviews, reputation |

License

MIT