1.0.6 β€’ Published 6 months ago

@biswajitaich/email-auth v1.0.6

Weekly downloads
-
License
ISC
Repository
github
Last release
6 months ago

πŸ“§ email-auth

A lightweight, type-safe Node.js package for email-based OTP authentication, optimized for performance with Redis. Perfect for applications that require secure, fast, and simple email verification.


πŸ“¦ Installation

npm install @biswajitaich/email-auth

πŸš€ Features

πŸ”’ Generate secure, time-bound one-time passwords (OTPs)

πŸ“€ Send OTPs via email using nodemailer

⚑ Store and verify OTPs in Redis for high-speed lookups

⏳ OTP expires in 5 minutes (configurable via code)

πŸ”§ TypeScript-first with full type safety

🧼 Graceful Redis shutdown handling

Usage

Setup Environment Variables

Create a .env file in your project root:

# Redis Configuration
REDIS_USERNAME=your_redis_username
REDIS_PASSWORD=your_redis_password
REDIS_HOST=your_redis_host
REDIS_PORT=6379

# Email SMTP Configuration
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_email_app_password

πŸ’‘Basic Usage in NextJs api route:

import { sendOtpEmail, verifyOtpCode } from '@biswajitaich/email-auth';
import { NextResponse } from 'next/server';

export async function POST(req: Request) {
    const { email, otp } = await req.json();

    // Step 1: Send OTP
    const result = await sendOtpEmail(email, "YourCompany");
    if (result.success) {
        return NextResponse.json({ success: true, message: result.message });
    }

    // Step 2: Verify OTP
    const verifyResult = await verifyOtpCode(email, otp);
    if (verifyResult.success) {
        return NextResponse.json({
            success: true,
            message: 'Email verified',
            data: {
                email,
                verified: true,
                timestamp: new Date().toISOString(),
            }
        });
    }

    return NextResponse.json({ success: false, message: verifyResult.message }, { status: 400 });
}

API Reference

sendOtpEmail(email: string, from?: string): Promise<{ success: boolean; message: string }>

Sends an OTP email to the user.

email β€” Target recipient's email

from (optional) β€” Brand name to show as sender

verifyOtpCode(email: string, otp: string): Promise<{ success: boolean; message: string }>

Verifies the OTP submitted by the user.

email β€” Email used for registration/verification

otp β€” OTP entered by the user

closeRedisConnection(): Promise<void>

Gracefully closes the Redis connection when the server shuts down.

🧠 Notes

Uses modern SET with EX instead of deprecated SETEX.

Redis ensures fast read/write with OTP TTL enforced on storage.

OTP is hashed before storing for added security.

πŸ“„ License

MIT License Β© Biswajit Aich

1.0.6

6 months ago

1.0.5

6 months ago

1.0.4

6 months ago

1.0.3

6 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago