Skip to content

Implement Webhook Delivery System with Retry and Signature Verification #332

Description

@llinsss

Problem

Third-party applications can't receive real-time notifications about events (transactions, deposits, KYC updates). Need webhook system for event delivery.

Proposed Solution

Build comprehensive webhook system with event subscriptions, delivery tracking, retry logic, and signature verification.

Technical Implementation

New Files:

  • backend/services/WebhookDeliveryService.js - Webhook delivery service
  • backend/services/webhook/SignatureGenerator.js - HMAC signature generation
  • backend/services/webhook/RetryManager.js - Retry logic
  • backend/models/WebhookEndpoint.js - Webhook endpoint model
  • backend/models/WebhookDelivery.js - Delivery tracking model
  • backend/controllers/webhookController.js - Webhook management endpoints
  • backend/routes/webhooks.js - Webhook routes
  • backend/migrations/20260327000016_create_webhook_endpoints.js - Migration
  • backend/migrations/20260327000017_create_webhook_deliveries.js - Migration
  • backend/workers/webhookDelivery.js - Background delivery worker
  • backend/tests/webhook.test.js - Test suite

Modify:

  • backend/services/WebhookService.js - Enhance with delivery tracking
  • backend/controllers/transactionController.js - Trigger webhooks
  • backend/services/KycService.js - Trigger KYC webhooks
  • backend/.env.example - Add webhook configuration

Webhook Events

const WEBHOOK_EVENTS = {
  // Transaction events
  'transaction.created': 'Transaction initiated',
  'transaction.completed': 'Transaction completed',
  'transaction.failed': 'Transaction failed',
  
  // Payment events
  'payment.received': 'Payment received',
  'payment.sent': 'Payment sent',
  
  // Deposit/Withdrawal events
  'deposit.confirmed': 'Deposit confirmed on-chain',
  'withdrawal.completed': 'Withdrawal completed',
  
  // KYC events
  'kyc.submitted': 'KYC submitted for review',
  'kyc.approved': 'KYC approved',
  'kyc.rejected': 'KYC rejected',
  
  // Account events
  'account.created': 'Account created',
  'tag.registered': 'Tag registered'
};

Webhook Payload

{
  "id": "evt_1234567890",
  "type": "transaction.completed",
  "created": 1706284800,
  "data": {
    "transaction_id": "txn_abc123",
    "from_tag": "@sender",
    "to_tag": "@recipient",
    "amount": "100.00",
    "currency": "USDC",
    "chain": "base",
    "status": "completed"
  },
  "signature": "sha256=abc123..."
}

Acceptance Criteria

  • Webhook endpoint registration and management
  • Event subscription filtering
  • HMAC-SHA256 signature verification
  • Automatic retry (3 attempts with exponential backoff)
  • Delivery status tracking
  • Webhook testing endpoint
  • Rate limiting per endpoint
  • Test coverage > 85%

Priority

High - Important for third-party integrations


Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions