UNPKG

@projectlibertylabs/p2p-peer-test

Version:

CLI tool to test libp2p connections and discover peer protocols

75 lines (69 loc) 2.24 kB
import { multiaddr } from '@multiformats/multiaddr'; import { DEFAULT_CONFIG, ERROR_MESSAGES } from './config.js'; import { safeParseInt, isEmpty } from './utils.js'; /** * Validates a multiaddr string format * @param {string} multiaddrStr - The multiaddr string to validate * @returns {{isValid: boolean, error?: string}} Validation result */ export function validateMultiaddr(multiaddrStr) { if (isEmpty(multiaddrStr)) { return { isValid: false, error: ERROR_MESSAGES.EMPTY_MULTIADDR }; } try { multiaddr(multiaddrStr); return { isValid: true }; } catch (error) { return { isValid: false, error: error instanceof Error ? error.message : 'Invalid multiaddr format' }; } } /** * Validates timeout option * @param {string|number} timeout - Timeout value to validate * @returns {number} Validated timeout in milliseconds * @throws {Error} If timeout is invalid */ const validateTimeout = (timeout) => { const parsed = safeParseInt(timeout, DEFAULT_CONFIG.TIMEOUT_MS, (n) => n > 0); if (parsed === null) { throw new Error(ERROR_MESSAGES.INVALID_TIMEOUT); } return parsed; }; /** * Validates retries option * @param {string|number} retries - Number of retries to validate * @returns {number} Validated number of retries * @throws {Error} If retries is invalid */ const validateRetries = (retries) => { const parsed = safeParseInt(retries, DEFAULT_CONFIG.DEFAULT_RETRIES, (n) => n >= 0); if (parsed === null) { throw new Error(ERROR_MESSAGES.INVALID_RETRIES); } return parsed; }; /** * Validates CLI options and normalizes them * @param {Object} options - Raw CLI options * @param {string|number} [options.timeout] - Connection timeout * @param {string|number} [options.retries] - Number of retries * @param {boolean} [options.json] - JSON output flag * @param {boolean} [options.verbose] - Verbose output flag * @returns {{timeout: number, retries: number, json: boolean, verbose: boolean}} Validated options * @throws {Error} If any option is invalid */ export function validateOptions(options) { return { timeout: validateTimeout(options.timeout), retries: validateRetries(options.retries), json: Boolean(options.json), verbose: Boolean(options.verbose) }; }