UNPKG

nostr-dm-magiclink-utils

Version:

A comprehensive Nostr utility library for magic link authentication via direct messages, supporting both ESM and CommonJS. Features NIP-01/04 compliant message encryption, multi-relay support, internationalization (i18n) with RTL support, and TypeScript-f

67 lines 3.05 kB
import { NostrServiceInterface, MagicLinkServiceInterface } from '../types/service.js'; import { MagicLinkConfig, SendMagicLinkOptions, MagicLinkResponse } from '../types/config.js'; import { Logger } from 'pino'; /** * Manager for handling magic link authentication * Manages generation, sending, and verification of magic links through Nostr protocol */ export declare class MagicLinkManager implements MagicLinkServiceInterface { private readonly nostrService; private readonly config; private readonly logger; /** * Tracks consumed token JTIs to prevent replay attacks. * Maps jti -> expiry timestamp (seconds since epoch). * Expired entries are periodically cleaned up during verification. */ private readonly consumedTokens; private readonly defaultTemplate; /** * Creates a new instance of MagicLinkManager * @param nostrService - Service for handling Nostr protocol operations * @param config - Configuration for magic link functionality * @param logger - Optional logger instance. If not provided, creates a new logger */ constructor(nostrService: NostrServiceInterface, config: MagicLinkConfig, logger?: Logger); /** * Sends a magic link to a recipient via Nostr direct message * @param options - Options for sending the magic link * @param options.recipientPubkey - Public key of the recipient * @param options.messageOptions - Optional message formatting options * @returns Promise resolving to a response object containing success status and magic link or error */ sendMagicLink(options: SendMagicLinkOptions): Promise<MagicLinkResponse>; /** * Verifies a magic link token and returns the associated public key * @param token - The token to verify * @returns Promise resolving to the public key if verification succeeds, null otherwise */ verifyMagicLink(token: string): Promise<string | null>; /** * Returns the JWT signing secret. * Prefers config.jwtSecret; falls back to config.token (string) for backwards compatibility. * @returns The JWT signing secret string */ private getJwtSecret; /** * Generates a per-request JWT token for magic link authentication. * Each token contains the recipient's pubkey, a unique jti, and a 15-minute expiration. * @param pubkey - The recipient's public key to embed in the token * @returns Promise resolving to the generated JWT token string * @throws {NostrError} If token generation fails */ private generateToken; /** * Removes expired entries from the consumed tokens map. * Called during verification to prevent unbounded memory growth. */ private cleanupConsumedTokens; /** * Formats a message with the given template and variables * @param link - The magic link URL * @param options - Message formatting options * @returns Formatted message string */ private formatMessage; } //# sourceMappingURL=magiclink.service.d.ts.map