/** * Example: Webhook server with custom callbacks * This demonstrates how to extend the server with custom event handlers */ import { WebhookServer } from '../src/server.js'; import logger from '../src/logger.js'; const server = new WebhookServer({ port: 3000, path: '/webhook' }); const handler = server.getHandler(); // Handle push events handler.on('push', async (payload, headers) => { logger.info('Processing push event'); const { repository, pusher, commits, ref } = payload; console.log('\nPush Details:'); console.log(` Repository: ${repository?.full_name || repository?.name}`); console.log(` Pusher: ${pusher?.username || pusher?.name}`); console.log(` Branch: ${ref}`); console.log(` Commits: ${commits?.length || 0}`); if (commits && commits.length > 0) { console.log('\n Recent commits:'); commits.slice(0, 3).forEach(commit => { console.log(` - ${commit.id?.substring(0, 7)}: ${commit.message}`); }); } }); // Handle create events (new branch or tag) handler.on('create', async (payload, headers) => { logger.info('Processing create event'); const { ref, ref_type, repository } = payload; console.log(`\nCreated ${ref_type}: ${ref} in ${repository?.name}`); }); // Handle delete events handler.on('delete', async (payload, headers) => { logger.info('Processing delete event'); const { ref, ref_type, repository } = payload; console.log(`\nDeleted ${ref_type}: ${ref} from ${repository?.name}`); }); // Handle pull request events handler.on('pull_request', async (payload, headers) => { logger.info('Processing pull request event'); const { action, pull_request, repository } = payload; console.log(`\nPull Request ${action}:`); console.log(` #${pull_request?.number}: ${pull_request?.title}`); console.log(` Repository: ${repository?.name}`); console.log(` Author: ${pull_request?.user?.username}`); }); // Global callback for all events handler.onAny(async (eventType, payload, headers) => { // You can add analytics, logging to external services, etc. const delivery = headers['x-gogs-delivery']; console.log(`\n[Analytics] Event: ${eventType}, Delivery ID: ${delivery}`); }); // Start the server server.start(); console.log('\nServer started with custom callbacks!'); console.log('Registered callbacks:', handler.getStats());