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

ageproof-sdk

v0.1.0

Published

Dependency-free client for AgeProof — provable, tamper-evident age-gating compliance for app developers (App Store Accountability Act: TX SB 2420, AL, UT, LA). Apply per-state rules and record audit evidence without storing age data.

Readme

ageproof-sdk

Dependency-free client for AgeProof — provable, tamper-evident age-gating compliance for app developers subject to US App Store Accountability Act laws (Texas SB 2420, Alabama, Utah, Louisiana).

Apple and Google hand your app an age-range signal. AgeProof applies the right per-state rule, returns a gate decision (allow / block / require parental consent), and records hash-chained audit evidence — storing zero age data and zero personal identifiers.

  • Works anywhere fetch exists: browsers, Node 18+, React Native / Expo
  • Zero runtime dependencies · dual ESM + CJS · full TypeScript types
  • test keys write a sandbox chain; live keys write the regulator-facing record

Install

npm install ageproof-sdk

Quickstart

import { ComplianceClient } from "ageproof-sdk";

const compliance = new ComplianceClient({
  baseUrl: "https://age-gate-compliance.fly.dev",
  apiKey: process.env.AGEPROOF_API_KEY!, // ak_test_… while developing, ak_live_… in prod
});

// One call: decide the gate AND record the tamper-evident evidence.
const { decision } = await compliance.gate({
  platform: "ios",
  state: "TX",
  action: "in_app_purchase",
  ageBracket: "age_16_17", // from the Apple/Google signal — never a raw age
  subjectRef: "opaque-session-ref", // pseudonymous; never a real id, email, or DOB
});

if (decision.outcome === "blocked") {
  // stop the action
} else if (decision.outcome === "parental_consent_required") {
  // route to your parental-consent flow
}

Get an API key by signing up at https://age-gate-compliance.fly.dev/signup — you receive a sandbox test key instantly (no credit card).

API

new ComplianceClient(options)

| option | type | notes | | --- | --- | --- | | baseUrl | string | Your AgeProof deployment URL | | apiKey | string | Per-app key (ak_test_… / ak_live_…) | | fetchImpl | typeof fetch | Optional — inject a polyfill or a mock |

gate(input): Promise<GateResult>

Decide and log a gated action. input: { platform, state, action, ageBracket, subjectRef, clientTs? }. Returns { decision, mode?, event }.

recordEvent(input): Promise<EventResult>

Record a non-gate event such as a parental-consent check or withdrawal. input: { platform, eventType, ageBracket, subjectRef, gateOutcome, stateRuleId, clientTs? }.

Errors

Any non-2xx response throws ComplianceError with .status and the parsed .body (e.g. code: "pii_rejected" if you accidentally send a forbidden field).

Exported constants & types

PLATFORMS, AGE_BRACKETS, EVENT_TYPES, GATE_OUTCOMES, STATE_CODES, ACTIONS (const arrays), plus the matching TypeScript unions and the GateDecision interface.

Not legal advice

AgeProof produces technical compliance evidence; per-state rule interpretations are DRAFT pending review by licensed counsel. It does not verify identity and is not a guarantee against fines. See the Trust page.

MIT © AgeProof