with-callbacks.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. * Example: Webhook server with custom callbacks
  3. * This demonstrates how to extend the server with custom event handlers
  4. */
  5. import { WebhookServer } from '../src/server.js';
  6. import logger from '../src/logger.js';
  7. const server = new WebhookServer({
  8. port: 3000,
  9. path: '/webhook'
  10. });
  11. const handler = server.getHandler();
  12. // Handle push events
  13. handler.on('push', async (payload, headers) => {
  14. logger.info('Processing push event');
  15. const { repository, pusher, commits, ref } = payload;
  16. console.log('\nPush Details:');
  17. console.log(` Repository: ${repository?.full_name || repository?.name}`);
  18. console.log(` Pusher: ${pusher?.username || pusher?.name}`);
  19. console.log(` Branch: ${ref}`);
  20. console.log(` Commits: ${commits?.length || 0}`);
  21. if (commits && commits.length > 0) {
  22. console.log('\n Recent commits:');
  23. commits.slice(0, 3).forEach(commit => {
  24. console.log(` - ${commit.id?.substring(0, 7)}: ${commit.message}`);
  25. });
  26. }
  27. });
  28. // Handle create events (new branch or tag)
  29. handler.on('create', async (payload, headers) => {
  30. logger.info('Processing create event');
  31. const { ref, ref_type, repository } = payload;
  32. console.log(`\nCreated ${ref_type}: ${ref} in ${repository?.name}`);
  33. });
  34. // Handle delete events
  35. handler.on('delete', async (payload, headers) => {
  36. logger.info('Processing delete event');
  37. const { ref, ref_type, repository } = payload;
  38. console.log(`\nDeleted ${ref_type}: ${ref} from ${repository?.name}`);
  39. });
  40. // Handle pull request events
  41. handler.on('pull_request', async (payload, headers) => {
  42. logger.info('Processing pull request event');
  43. const { action, pull_request, repository } = payload;
  44. console.log(`\nPull Request ${action}:`);
  45. console.log(` #${pull_request?.number}: ${pull_request?.title}`);
  46. console.log(` Repository: ${repository?.name}`);
  47. console.log(` Author: ${pull_request?.user?.username}`);
  48. });
  49. // Global callback for all events
  50. handler.onAny(async (eventType, payload, headers) => {
  51. // You can add analytics, logging to external services, etc.
  52. const delivery = headers['x-gogs-delivery'];
  53. console.log(`\n[Analytics] Event: ${eventType}, Delivery ID: ${delivery}`);
  54. });
  55. // Start the server
  56. server.start();
  57. console.log('\nServer started with custom callbacks!');
  58. console.log('Registered callbacks:', handler.getStats());