nostr-websocket-utils
Version:
Robust WebSocket utilities for Nostr applications with automatic reconnection, supporting both ESM and CommonJS. Features channel-based messaging, heartbeat monitoring, message queueing, and comprehensive error handling with type-safe handlers.
61 lines • 1.9 kB
JavaScript
/**
* @file Crypto handlers for Nostr messages
* @module crypto/handlers
*/
import { getLogger } from '../utils/logger.js';
import { MESSAGE_TYPES } from '../types/messages.js';
import { validateRelayMessage as validateEvent, verifySignature } from 'nostr-crypto-utils';
const logger = getLogger('crypto');
/**
* Validates a signed message
* @param message - Message to validate
* @returns Promise resolving to true if message is valid
*/
export async function validateSignedMessage(message) {
try {
if (!Array.isArray(message) || message[0] !== MESSAGE_TYPES.EVENT || !message[1]) {
logger.debug('Invalid message format');
return false;
}
const event = message[1];
if (!validateEvent(event)) {
logger.debug('Invalid event format');
return false;
}
const isValid = await verifySignature(event);
if (!isValid) {
logger.debug('Invalid signature');
return false;
}
return true;
}
catch (error) {
logger.error('Error validating signed message:', error);
return false;
}
}
/**
* Validates a signature
* @param message - Message to validate
* @param logger - Logger instance
* @returns True if signature is valid
*/
export function validateSignature(message, logger) {
try {
if (!Array.isArray(message) || message[0] !== MESSAGE_TYPES.EVENT) {
return true; // Not an event message
}
const event = message[1];
if (!event.sig || typeof event.sig !== 'string') {
logger.debug('Missing or invalid signature');
return false;
}
// Additional validation logic...
return true;
}
catch (error) {
logger.error('Error validating signature:', error);
return false;
}
}
//# sourceMappingURL=handlers.js.map