UNPKG

hook-engine

Version:

Production-grade webhook engine with comprehensive adapter support, security, reliability, structured logging, and CLI tools.

82 lines (81 loc) โ€ข 3.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.testCommand = testCommand; const promises_1 = __importDefault(require("fs/promises")); const fs_1 = require("fs"); async function testCommand(endpoint, options) { console.log('๐Ÿงช Testing webhook endpoint...\n'); const count = parseInt(options.count, 10); console.log(`๐ŸŽฏ Target: ${endpoint}`); console.log(`๐Ÿ“Š Test count: ${count}\n`); try { // Load payload if specified let payload = { test: true, timestamp: new Date().toISOString() }; if (options.payload && (0, fs_1.existsSync)(options.payload)) { const payloadContent = await promises_1.default.readFile(options.payload, 'utf-8'); payload = JSON.parse(payloadContent); console.log(`๐Ÿ“„ Loaded payload from: ${options.payload}`); } // Run tests const results = []; for (let i = 0; i < count; i++) { console.log(`๐Ÿ”„ Test ${i + 1}/${count}...`); const result = await runSingleTest(endpoint, payload); results.push(result); if (i < count - 1) { await new Promise(resolve => setTimeout(resolve, 1000)); } } // Display results displayResults(results); } catch (error) { console.error('โŒ Test failed:', error.message); process.exit(1); } } async function runSingleTest(endpoint, payload) { const startTime = Date.now(); try { // Simulate HTTP request await new Promise(resolve => setTimeout(resolve, Math.random() * 500 + 100)); const duration = Date.now() - startTime; const success = Math.random() > 0.1; // 90% success rate for demo return { success, duration, status: success ? 200 : 500, error: success ? null : 'Simulated error' }; } catch (error) { return { success: false, duration: Date.now() - startTime, status: 0, error: error.message }; } } function displayResults(results) { const successful = results.filter(r => r.success).length; const failed = results.length - successful; const avgDuration = results.reduce((sum, r) => sum + r.duration, 0) / results.length; console.log('\n๐Ÿ“Š Test Results:'); console.log('โ”€'.repeat(40)); console.log(`โœ… Successful: ${successful}/${results.length}`); console.log(`โŒ Failed: ${failed}/${results.length}`); console.log(`โฑ๏ธ Average duration: ${avgDuration.toFixed(2)}ms`); console.log(`๐Ÿ“ˆ Success rate: ${((successful / results.length) * 100).toFixed(1)}%`); if (failed > 0) { console.log('\nโŒ Failed requests:'); results.forEach((result, index) => { if (!result.success) { console.log(` ${index + 1}. Status: ${result.status}, Error: ${result.error}`); } }); } }