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

auth-component-sally

v0.1.2

Published

Reusable React authentication components built with **React + TypeScript**.

Readme

@slindgr7/auth-component

Reusable React authentication components built with React + TypeScript.

Includes AuthProvider, useAuth, LoginForm and RegisterForm.
Works out of the box with a default mock API and can be connected to a real backend by passing a custom api implementation.


Features

  • LoginForm
  • RegisterForm
  • Global auth state via AuthProvider + useAuth
  • E-mail verification support (isVerified)
  • Pluggable API (AuthApi) — use mock or connect your backend
  • Type-safe exports

Installation

Local (Monorepo with npm workspaces)

Add the dependency in your package.json:

"@slindgr7/auth-component": "workspace:*"

and run:

npm install

From npm (future release)

When published:

npm install @slindgr7/auth-component

Quick Start

Wrap your application with AuthProvider:

import { AuthProvider, LoginForm } from "@slindgr7/auth-component";

function App() {
  return (
    <AuthProvider>
      <LoginForm />
    </AuthProvider>
  );
}

export default App;

Using the useAuth Hook

import { useAuth } from "@slindgr7/auth-component";

const Dashboard = () => {
  const { user, isAuthenticated, logout } = useAuth();

  if (!isAuthenticated) return <p>Not logged in</p>;

  return (
    <div>
      <p>Logged in as {user?.email}</p>
      <button onClick={logout}>Logout</button>
    </div>
  );
};

E-mail Verification

This package supports e-mail verification flows. If your backend returns a user object with an isVerified property, the package will expose this via the useAuth hook and context.

  • If a user is not verified (isVerified: false), you can show a message or block access in your UI.
  • Example:
    const { user, isAuthenticated, isVerified } = useAuth();
    if (user && !isVerified) {
      return <div>You must verify your e-mail before you can log in.</div>;
    }

You can also add a button to resend the verification e-mail if your backend supports it.

Connecting a Custom Backend

The package includes a built-in mockApi by default, so it works without a backend.

To connect your own backend, pass a custom AuthApi implementation to AuthProvider.

Example:

import { AuthProvider, type AuthApi } from "@slindgr7/auth-component";

const realApi: AuthApi = {
  async login(email, password) {
    const res = await fetch("/api/login", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ email, password }),
    });

    const data = await res.json();
    if (!res.ok) throw new Error(data.message);

    return data.user; // Should include isVerified if your backend supports e-mail verification
  },

  async register(email, password) {
    const res = await fetch("/api/register", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ email, password }),
    });

    const data = await res.json();
    if (!res.ok) throw new Error(data.message);

    return data.user;
  },

  async logout() {
    await fetch("/api/logout", { method: "POST" });
  },
};

<AuthProvider api={realApi}>
  <App />
</AuthProvider>;

Public API

This package exports:

  • AuthProvider
  • useAuth
  • LoginForm
  • RegisterForm
  • AuthApi
  • User

Types

You can import the shared types:

import type { AuthApi, User } from "@slindgr7/auth-component";
// User: { email: string; isVerified: boolean }

Notes

  • This package is frontend-only.
  • Backend logic (JWT, database, password hashing, and e-mail verification) should be implemented in the consuming application.
  • The AuthApi interface allows you to connect any backend implementation.
  • E-mail verification is supported if your backend returns isVerified on the user object.

License

MIT

Copyright (c) 2026 Sally & Mikaela