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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@pakt/auth-module

v2.0.7

Published

Authentication module for Pakt applications

Downloads

804

Readme

@pakt/auth-module

A comprehensive React authentication module for Pakt applications. This package provides a complete authentication solution with support for email/password authentication, Google OAuth, and two-factor authentication.

Features

  • Persistent Auth State: Authentication state persists across page reloads
  • Plug-and-Play Hook: Single usePaktAuth hook for all auth functionality
  • Email/Password Authentication: Complete signup, login, and password reset flows
  • Google OAuth Integration: Seamless Google authentication
  • Two-Factor Authentication: Email-based 2FA support
  • Automatic Account Fetching: Full user profile fetched automatically after login
  • Customizable UI: Theme customization support
  • TypeScript Support: Full type definitions included

Installation

yarn add @pakt/auth-module
# or
npm install @pakt/auth-module
# or
bun add @pakt/auth-module

Quick Start

import React, { useRef } from 'react';
import PaktAuth, { usePaktAuth, AuthRef, ConfigContextType } from '@pakt/auth-module';
import '@pakt/auth-module/dist/styles.css';

function App() {
  const authRef = useRef<AuthRef>(null);
  const { user, isAuthenticated, token, logout, getAccount } = usePaktAuth();

  const config: ConfigContextType = {
    baseUrl: "https://api-devpaktbuild.chain.site",
    verbose: true,
    googleOAuth: {
      clientId: "your-google-client-id.apps.googleusercontent.com",
    },
  };

  // Check authentication status
  if (isAuthenticated && user) {
    return (
      <div>
        <h1>Welcome, {user.firstName || user.email}!</h1>
        <p>Email: {user.email}</p>
        <button onClick={logout}>Logout</button>
      </div>
    );
  }

  // Show login/signup
  return (
    <div>
      <button onClick={() => authRef.current?.onLogin()}>Login</button>
      <button onClick={() => authRef.current?.onSignup()}>Sign Up</button>
      
      <PaktAuth
        config={config}
        ref={authRef}
        onLoginSuccess={() => {
          getAccount(); // Fetch full account details after login (optional - automatically called)
        }}
      />
    </div>
  );
}

Configuration

ConfigContextType

The main configuration object for the PaktAuth component:

interface ConfigContextType {
  baseUrl: string;        // Required: API base URL
  testnet?: boolean;      // Optional: Use testnet environment
  verbose?: boolean;      // Optional: Enable verbose logging
  
  // Theme customization
  theme?: ITheme;
  
  // Error handling
  errorHandler?: (errorMessage: string) => void;
  
  // Google OAuth configuration
  googleOAuth?: GoogleOAuthConfig;
}

Theme Configuration

Customize the appearance of the authentication components with semantic color tokens:

interface ITheme {
  // Brand Colors
  brandPrimary?: string;           // Main brand color for buttons, links, icons
  brandSecondary?: string;         // Secondary brand color for backgrounds
  
  // Text Colors
  headingText?: string;            // Color for headings and titles
  bodyText?: string;               // Color for body text and descriptions
  inverseText?: string;            // White text for dark backgrounds
  
  // Background Colors
  formBackground?: string;         // Background color for forms and cards
  modalOverlay?: string;           // Overlay color for modals and dialogs
  
  // Interactive Elements
  buttonPrimaryBackground?: string;    // Primary button background (supports gradients)
  buttonPrimaryText?: string;          // Primary button text color
  buttonPrimaryHover?: string;         // Primary button hover state
  buttonOutlineBackground?: string;    // Outline button background
  buttonOutlineText?: string;          // Outline button text color
  buttonOutlineHoverBackground?: string; // Outline button hover background
  buttonOutlineHoverText?: string;     // Outline button hover text
  
  // Form Input Colors
  inputBackground?: string;        // Input field background
  inputBorder?: string;            // Input field border
  inputFocusBorder?: string;       // Input field focus border
  inputPlaceholder?: string;       // Input placeholder text
  inputText?: string;              // Input text color
  inputLabel?: string;             // Input label text color
  
  // State Colors
  errorBackground?: string;        // Error state background
  errorText?: string;              // Error state text
  errorBorder?: string;            // Error state border
  successText?: string;            // Success state text
}

Example with gradients:

const config: ConfigContextType = {
  theme: {
    brandPrimary: "#007C5B",
    buttonPrimaryBackground: "linear-gradient(102.28deg, #008D6C 32.23%, #11FFC7 139.92%)",
    formBackground: "#FFFFFF",
    errorText: "#DC2626",
  },
  // ... other config
};

Google OAuth Configuration

interface GoogleOAuthConfig {
  clientId: string;           // Required: Your Google OAuth client ID
  clientSecret?: string;      // Optional: Client secret
  redirectUri?: string;       // Optional: Redirect URI
  scope?: string[];           // Optional: OAuth scopes
  hostedDomain?: string;      // Optional: Hosted domain restriction
}

PAKT SDK Configuration

interface PaktSDKConfig {
  baseUrl: string;    // Required: API base URL
  testnet?: boolean;  // Optional: Use testnet
  verbose?: boolean;  // Optional: Enable verbose logging
}

Component Props

PaktAuth Props

interface PaktAuthProps {
  config: ConfigContextType;                    // Required: Configuration object
  textConfig?: AuthTextConfig;                  // Optional: Custom text configuration
  onLoginSuccess?: (userData: any) => void;     // Optional: Login success callback
  onSignupSuccess?: (userData: any) => void;    // Optional: Signup success callback
}

Text Configuration

Customize the text displayed in authentication dialogs:

interface AuthTextConfig {
  loginTitle: string;        // Title for login dialogs
  loginDescription: string;  // Description for login dialogs
  signupTitle: string;       // Title for signup dialogs
  signupDescription: string; // Description for signup dialogs
}

Example:

const textConfig = {
  loginTitle: "Welcome Back",
  loginDescription: "Sign in to continue your journey",
  signupTitle: "Join Our Community",
  signupDescription: "Start building amazing things together"
};

AuthRef Methods

Access authentication methods through the ref:

interface AuthRef {
  onLogin: () => void;    // Opens the login dialog
  onSignup: () => void;   // Opens the signup dialog
}

Using the Hook

The usePaktAuth hook provides everything you need for authentication:

import { usePaktAuth } from '@pakt/auth-module';

function MyComponent() {
  const { 
    user,              // User data (null if not authenticated)
    isAuthenticated,   // Boolean: true if user is logged in
    token,             // Auth token (from cookie)
    logout,            // Logout function
    getAccount,        // Fetch full account details (optional token parameter)
    loading,           // Loading state
    error              // Error message
  } = usePaktAuth();

  // Check if user is authenticated
  if (isAuthenticated) {
    return <div>Welcome, {user?.email}</div>;
  }

  return <div>Please log in</div>;
}

Common Use Cases

Check if user is authenticated:

const { isAuthenticated } = usePaktAuth();

if (isAuthenticated) {
  // User is logged in
}

Access user data:

const { user } = usePaktAuth();

// User data includes: email, firstName, lastName, _id, etc.
console.log(user?.email);
console.log(user?.firstName);

Logout:

const { logout } = usePaktAuth();

const handleLogout = async () => {
  await logout(); // Clears auth state and cookies
};

Fetch account details:

const { getAccount } = usePaktAuth();

// Fetch full user profile from /account endpoint
// Token is automatically retrieved from cookie if not provided
await getAccount();

// Or provide token explicitly
await getAccount(authToken);

Get auth token:

const { token } = usePaktAuth();

// Token is automatically read from cookie
if (token) {
  // Use token for API calls
}

Usage Examples

Basic Implementation

import React, { useRef } from 'react';
import PaktAuth, { AuthRef, ConfigContextType } from '@pakt/auth-module';

function MyApp() {
  const authRef = useRef<AuthRef>(null);

  const config: ConfigContextType = {
    baseUrl: "https://api-devpaktbuild.chain.site",
  };

  const textConfig = {
    loginTitle: "Welcome Back",
    loginDescription: "Sign in to continue your journey",
    signupTitle: "Join Our Community",
    signupDescription: "Start building amazing things together"
  };

  return (
    <div>
      <button onClick={() => authRef.current?.onLogin()}>
        Login
      </button>
      <button onClick={() => authRef.current?.onSignup()}>
        Sign Up
      </button>
      
      <PaktAuth
        config={config}
        textConfig={textConfig}
        ref={authRef}
        onLoginSuccess={(userData) => {
          console.log("User logged in:", userData);
        }}
        onSignupSuccess={(userData) => {
          console.log("User signed up:", userData);
        }}
      />
    </div>
  );
}

With Google OAuth

import React, { useRef } from 'react';
import { PaktAuth, AuthRef, ConfigContextType } from '@pakt/auth-module';

function MyApp() {
  const authRef = useRef<AuthRef>(null);

  const config: ConfigContextType = {
    baseUrl: "https://api-devpaktbuild.chain.site",
    verbose: true,
    theme: {
      brandPrimary: "#007C5B",
      brandSecondary: "#19A966",
    },
    googleOAuth: {
      clientId: "your-google-client-id.apps.googleusercontent.com",
    },
  };

  return (
    <div>
      <PaktAuth
        config={config}
        ref={authRef}
        onLoginSuccess={(userData) => {
          // Handle successful login
          console.log("Login successful:", userData);
        }}
        onSignupSuccess={(userData) => {
          // Handle successful signup
          console.log("Signup successful:", userData);
        }}
      />
    </div>
  );
}

Custom Error Handling

import React, { useRef } from 'react';
import PaktAuth, { AuthRef, ConfigContextType } from '@pakt/auth-module';
import { toast } from 'react-hot-toast'; // Example toast library

function MyApp() {
  const authRef = useRef<AuthRef>(null);

  const config: ConfigContextType = {
    baseUrl: "https://api-devpaktbuild.chain.site",
    errorHandler: (errorMessage: string) => {
      // Custom error handling
      toast.error(errorMessage);
      
      // Or log to your error tracking service
      // Sentry.captureException(new Error(errorMessage));
    },
  };

  return (
    <PaktAuth
      config={config}
      ref={authRef}
      onLoginSuccess={(userData) => {
        toast.success("Login successful!");
        // Handle login success
      }}
      onSignupSuccess={(userData) => {
        toast.success("Account created successfully!");
        // Handle signup success
      }}
    />
  );
}

Authentication Flow

The PaktAuth component provides a complete authentication flow:

  1. Login Method Selection: Users can choose between email/password or Google OAuth
  2. Email/Password Login: Traditional login with email and password
  3. Google OAuth: One-click login with Google account
  4. Two-Factor Authentication: Email-based 2FA if enabled
  5. Signup Flow: Complete registration process with email verification
  6. Password Reset: Forgot password and reset functionality
  7. Email Verification: Account verification with resend capability

PAKT SDK Integration

The module integrates with the PAKT SDK for backend authentication. The SDK handles:

  • User registration and login
  • Email verification
  • Password reset
  • Two-factor authentication
  • Google OAuth validation
  • User data management

Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)

Contributing

Please refer to the CODE_OF_CONDUCT.md and LICENSE files.

License

MIT