secure-2fa
Version:
A secure, developer-friendly Node.js package for email-based OTP (2FA) with strong security controls
53 lines • 2.23 kB
JavaScript
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
;