UNPKG

secure-2fa

Version:

A secure, developer-friendly Node.js package for email-based OTP (2FA) with strong security controls

53 lines 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSecureEmailOtp = createSecureEmailOtp; exports.createDemoInstance = createDemoInstance; const secure_email_otp_1 = require("./core/secure-email-otp"); const memory_adapter_1 = require("./adapters/database/memory-adapter"); const console_adapter_1 = require("./adapters/email/console-adapter"); const memory_rate_limiter_1 = require("./adapters/rate-limiter/memory-rate-limiter"); /** * Create a SecureEmailOtp instance with zero-config setup * Perfect for development, testing, and quick prototyping */ function createSecureEmailOtp(dbAdapter, emailProvider, rateLimiter, serverSecret, config) { // Use provided adapters or defaults for demo mode const finalDbAdapter = dbAdapter || new memory_adapter_1.MemoryDatabaseAdapter(); const finalEmailProvider = emailProvider || new console_adapter_1.ConsoleEmailAdapter({ enabled: config?.demoMode !== false }); const finalRateLimiter = rateLimiter || new memory_rate_limiter_1.MemoryRateLimiterAdapter(); // Generate a secure server secret if not provided const finalServerSecret = serverSecret || generateSecureSecret(); // Merge config with defaults const finalConfig = { otpLength: 6, expiryMs: 2 * 60 * 1000, // 2 minutes maxRetries: 5, strictMode: true, rateLimit: { maxPerWindow: 3, windowMs: 15 * 60 * 1000, // 15 minutes }, ...config, }; return new secure_email_otp_1.SecureEmailOtp(finalDbAdapter, finalEmailProvider, finalRateLimiter, finalServerSecret, finalConfig); } /** * Generate a secure random secret for demo mode */ function generateSecureSecret() { const { randomBytes } = require('crypto'); return randomBytes(32).toString('hex'); } /** * Quick demo setup - returns a fully configured instance for testing */ function createDemoInstance(config) { return createSecureEmailOtp(undefined, // Use MemoryDatabaseAdapter undefined, // Use ConsoleEmailAdapter undefined, // Use MemoryRateLimiterAdapter undefined, // Auto-generate server secret { demoMode: true, ...config }); } //# sourceMappingURL=factory.js.map