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
JavaScript
;
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}`);
}
});
}
}