modern-totp
Version:
Modern TypeScript TOTP generator and verifier (RFC 6238)
100 lines (73 loc) • 2.9 kB
Markdown
A simple utility to generate **One-Time Passwords (OTPs)** and **OTP Auth URLs** for applications like Google Authenticator, Authy, and Microsoft Authenticator.
Supports **TOTP** (Time-based OTP) with configurable parameters and **QR code generation**.
## 📦 Installation
```bash
npm install modern-totp
```
## 🚀 Usage
### 1. ES Module (import)
```javascript
import { generateOtp, generateOtpAuthUrl } from 'modern-totp';
import QRCode from 'qrcode';
// Generate an OTP
const otp = generateOtp('JBSWY3DPEHPK3PXP'); // secret
console.log('Generated OTP:', otp);
// Generate OTP Auth URL
const otpAuthUrl = generateOtpAuthUrl(
'JBSWY3DPEHPK3PXP', // secret
'user@example.com', // account
'MyApp' // issuer
);
console.log('OTP Auth URL:', otpAuthUrl);
// Generate QR Code
QRCode.toDataURL(otpAuthUrl, (err, imageUrl) => {
if (err) throw err;
console.log('QR Code Data URL:', imageUrl);
});
```
```javascript
const { generateOtp, generateOtpAuthUrl } = require('modern-totp');
const QRCode = require('qrcode');
// Generate an OTP
const otp = generateOtp('JBSWY3DPEHPK3PXP'); // secret
console.log('Generated OTP:', otp);
// Generate OTP Auth URL
const otpAuthUrl = generateOtpAuthUrl(
'JBSWY3DPEHPK3PXP', // secret
'user@example.com', // account
'MyApp' // issuer
);
console.log('OTP Auth URL:', otpAuthUrl);
// Generate QR Code
QRCode.toDataURL(otpAuthUrl, (err, imageUrl) => {
if (err) throw err;
console.log('QR Code Data URL:', imageUrl);
});
```
Generates a **time-based OTP**.
* **`secret`**: Base32 encoded secret key.
* **`digits`**: OTP length (default: `6`).
* **`period`**: Validity in seconds (default: `30`).
* **`algorithm`**: Hash algorithm (`SHA1`, `SHA256`, `SHA512`).
### `generateOtpAuthUrl(secret: string, account: string, issuer: string, algorithm?: string, digits?: number, period?: number): string`
Generates an **otpauth://** URL for TOTP apps.
* **`secret`**: Base32 encoded secret.
* **`account`**: User account identifier (email, username, etc.).
* **`issuer`**: App or service name.
* **`algorithm`**: `SHA1`, `SHA256`, or `SHA512` (default: `SHA1`).
* **`digits`**: OTP length (default: `6`).
* **`period`**: Validity in seconds (default: `30`).
## 🔹 Example Output
```
Generated OTP: 482193
OTP Auth URL: otpauth://totp/MyApp:user%40example.com?secret=JBSWY3DPEHPK3PXP&issuer=MyApp&algorithm=SHA1&digits=6&period=30
QR Code Data URL: data:image/png;base64,iVBORw0...
```
* The **OTP Auth URL** can be scanned in Google Authenticator, Authy, or any TOTP-compatible app.
* Use the `qrcode` package to generate QR codes for easier setup.
* Keep your secret key safe — anyone with it can generate valid OTPs.