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

genuine-verify-sdk

v0.1.11

Published

Privacy-first human verification widget using React, Next.js, and TensorFlow.js

Readme

Genuine Verify SDK

npm version License: MIT TypeScript

A privacy-first, real-time human verification widget (anti-bot) for React apps. Uses TensorFlow.js and BlazeFace for gesture-based verification—no CAPTCHAs, no user friction.


📦 Installation

npm install genuine-verify-sdk
# or
yarn add genuine-verify-sdk

Peer dependencies:

  • React 18+
  • react-dom 18+

🚀 Quick Start

import { GenuineWidgetEmbeddable } from 'genuine-verify-sdk';

function MyApp() {
  const handleTokenIssued = (payload: {
    token: string;
    metadata: {
      issuedAt: string;
      expiresAt: string;
      gestureType: string;
    };
  }) => {
    // Send token to your backend or validate client-side
    console.log('Token:', payload.token);
    console.log('Metadata:', payload.metadata);
  };

  return (
    <GenuineWidgetEmbeddable
      onTokenIssued={handleTokenIssued}
      tokenTTL={300}
      debug={true}
    />
  );
}

📚 Documentation


🔍 Overview

  • Purpose: Prevent bots and ensure genuine human interaction with a privacy-first, client-side widget.
  • How it works: User completes a gesture (e.g., head tilt). The widget issues a signed presence token. You can validate this token client-side or send it to your backend for verification.

🎨 Visual Features

The widget provides real-time visual feedback during verification:

Status Indicators

  • 🔴 Red badge: No face detected
  • 🟡 Yellow badge: Face detected, looking for eyes
  • 🔵 Blue badge: Eyes detected, waiting for gesture
  • 🟢 Green badge: Gesture verified!

Detection Overlays

  • Lime green bounding boxes: Real-time face detection
  • Cyan eye landmarks: Detected eye positions
  • Blue framing guide: Optimal face positioning area

Real-time Feedback

  • Status messages: Clear text instructions
  • Positioning guidance: Help users position their face
  • Error overlays: Graceful error handling with retry options
  • Loading states: Model loading indicators

Debug Panel (Development Only)

  • Live FPS tracking: Performance monitoring
  • Confidence scores: Detection accuracy metrics
  • Detection state: Face, eyes, gesture, stability status
  • Token information: Expiration and validation status

⚙️ Widget Usage

Basic Example

import { GenuineWidgetEmbeddable } from 'genuine-verify-sdk';

function MyApp() {
  const handleTokenIssued = (payload: {
    token: string;
    metadata: {
      issuedAt: string;
      expiresAt: string;
      gestureType: string;
    };
  }) => {
    // Send token to your backend or validate client-side
    console.log('Token:', payload.token);
    console.log('Metadata:', payload.metadata);
  };

  return (
    <GenuineWidgetEmbeddable
      onTokenIssued={handleTokenIssued}
      tokenTTL={300}
      debug={true}
    />
  );
}

Props

| Prop | Type | Default | Description | |--------------------|-----------------------------------|-----------|---------------------------------------------| | onTokenIssued | (payload: { token: string; metadata: { issuedAt: string; expiresAt: string; gestureType: string; } }) => void | — | Required. Called when token is issued with metadata | | onFailure | (context: FailureContext) => void | — | Called when gesture detection fails after max attempts | | maxAttempts | number | 3 | Maximum attempts before triggering fallback | | fallback | React.ComponentType<{ failureContext: FailureContext; triggerRetry: () => void }> | — | Custom fallback component to render on failure | | tokenTTL | number | 300 | Token time-to-live (seconds) | | debug | boolean | false | Show debug panel | | headTiltThreshold| number | 15 | Head tilt angle threshold (degrees) | | persist | boolean | true | Persist token in sessionStorage | | trigger | 'auto' \| 'manual' | 'auto' | When to start detection | | onStartRef | (startFn: () => void) => void | — | Get manual start function | | onError | (error: Error) => void | — | Error callback |


🔑 Utility Functions

All utilities are available as named exports:

import {
  verifyToken,
  createPresenceToken,
  getStoredToken,
  storeToken,
  clearStoredToken,
  isStoredTokenValid,
  createMockToken
} from 'genuine-verify-sdk';

Example: Token Validation

const result = await verifyToken(token);
if (result.valid) {
  // Token is valid!
} else {
  // Token is invalid or expired
}

🔍 Verification Status Hook

Check human verification status with real-time updates:

import { useVerificationStatus } from 'genuine-verify-sdk'

function MyApp() {
  const { isVerified, token, expiresIn, timeRemaining, clearToken } = useVerificationStatus()

  return (
    <div>
      {isVerified ? (
        <div>
          <p>✅ Human verified! Expires in {timeRemaining}</p>
          <button onClick={clearToken}>Clear Verification</button>
        </div>
      ) : (
        <p>❌ Human not verified</p>
      )}
    </div>
  )
}

Hook Features:

  • Real-time updates: Auto-updates every second when verified
  • Live countdown: Shows time remaining until expiration
  • Expiration warning: Detects when token expires soon (≤60s)
  • Token management: Clear stored tokens
  • Manual refresh: Force status update
  • TypeScript support: Full type safety

🛡️ Fallback Handling

The SDK automatically handles gesture failures and edge cases.

Reasons for fallback include:

  • gesture_timeout: User didn’t complete gesture in time
  • camera_error: Camera blocked or inaccessible
  • model_error: Face detection failed
  • max_attempts_reached: Too many failed tries
  • unknown: Unexpected error

Developers can pass an onFailure callback to capture detailed failure context. You can provide a custom fallback component via the fallback prop. If no fallback is provided, the SDK shows a default UI with retry. Fallbacks also expose a triggerRetry() helper to restart verification.

Usage Example:

<GenuineWidgetEmbeddable
  onTokenIssued={handleToken}
  onFailure={handleFailure}
  maxAttempts={3}
  fallback={MyCustomFallback}
/>

🎯 Trigger Control

Control when verification starts with flexible trigger modes:

import { GenuineWidgetEmbeddable, useGenuineTrigger } from 'genuine-verify-sdk'

function MyApp() {
  const [startFunction, setStartFunction] = useState(null)

  // Auto-start (default)
  return (
    <GenuineWidgetEmbeddable
      onTokenIssued={handleTokenIssued}
      trigger="auto"
    />
  )

  // Manual button
  return (
    <GenuineWidgetEmbeddable
      onTokenIssued={handleTokenIssued}
      trigger="manual"
    />
  )

  // Programmatic control
  return (
    <GenuineWidgetEmbeddable
      onTokenIssued={handleTokenIssued}
      trigger="manualStart"
      onStartRef={setStartFunction}
    />
  )
}

Advanced Programmatic Control:

import { useGenuineTrigger } from 'genuine-verify-sdk'

function MyApp() {
  const [startFunction, setStartFunction] = useState(null)
  const [isDetectionActive, setIsDetectionActive] = useState(false)
  const [isModelReady, setIsModelReady] = useState(false)

  const triggerControls = useGenuineTrigger(
    startFunction,
    null, // stopFn
    null, // resetFn
    isDetectionActive,
    isModelReady,
    {
      onStart: () => setIsDetectionActive(true),
      onStop: () => setIsDetectionActive(false)
    }
  )

  const handleFormSubmit = (e) => {
    e.preventDefault()
    triggerControls.startDetection() // Trigger on form submit
  }

  return (
    <form onSubmit={handleFormSubmit}>
      <GenuineWidgetEmbeddable
        onTokenIssued={handleTokenIssued}
        trigger="manualStart"
        onStartRef={setStartFunction}
      />
      <button type="submit">Submit Form</button>
    </form>
  )
}

Trigger Features:

  • Auto trigger: Start detection immediately when widget loads
  • Manual trigger: User clicks button to start detection
  • Manual start: Programmatic control via start function
  • useGenuineTrigger hook: Provides programmatic control methods
  • Status tracking: Know when detection is active and model is ready
  • Event callbacks: onStart, onStop, onReset callbacks
  • Flexible integration: Trigger on form submit, route change, suspicious activity, etc.

📤 Token Endpoint (Optional)

POST /api/verify-human

  • Header: Authorization: Bearer <token>
  • Body: { "token": "<token>" }

Returns:

{
  "valid": true,
  "reason": null,
  "gestureType": "headTilt",
  "expiresIn": 299,
  "issuedAt": "2025-01-06T20:00:00.000Z"
}

🔧 Example Integration

import { GenuineWidgetEmbeddable, verifyToken } from 'genuine-verify-sdk';

function Demo() {
  const [status, setStatus] = useState<string | null>(null);

  const handleTokenIssued = async (payload: {
    token: string;
    metadata: {
      issuedAt: string;
      expiresAt: string;
      gestureType: string;
    };
  }) => {
    const result = await verifyToken(payload.token);
    setStatus(result.valid ? '✅ Valid' : '❌ Invalid');
  };

  return (
    <>
      <GenuineWidgetEmbeddable onTokenIssued={handleTokenIssued} />
      {status && <div>{status}</div>}
    </>
  );
}

📝 Exports

Components

  • GenuineWidgetEmbeddable (main widget)

Utilities

  • verifyToken, `