Skip to content

Webhook Types

Type definitions for webhook events.

WebhookEventType

Available webhook event types.

typescript
type WebhookEventType = 
  | 'risk.created'
  | 'risk.updated'
  | 'risk.deleted'
  | 'risk.reviewed'
  | 'asset.created'
  | 'asset.updated'
  | 'asset.deleted'
  | 'asset.reviewed'
  | 'task.created'
  | 'task.assigned'
  | 'task.completed'
  | 'task.overdue'
  | 'document.created'
  | 'document.updated'
  | 'document.expired'
  | 'user.created'
  | 'user.updated'
  | 'user.deactivated'
  | 'compliance.status_changed'
  | 'audit.completed';

WebhookEvent

Structure of a webhook event payload.

typescript
interface WebhookEvent<T = unknown> {
  id: string;
  type: WebhookEventType;
  apiVersion: string;
  createdAt: string;
  tenantId: string;
  data: {
    object: T;
    previousAttributes?: Partial<T>;
  };
  metadata?: {
    correlationId?: string;
    triggeredBy?: string;
    source?: string;
  };
}

Properties

PropertyTypeDescription
idstringUnique event ID
typeWebhookEventTypeEvent type
apiVersionstringAPI version
createdAtstringISO timestamp
tenantIdstringTenant/organization ID
data.objectTThe affected resource
data.previousAttributesPartial<T>Changed fields (for updates)
metadata.correlationIdstringCorrelation ID for tracing
metadata.triggeredBystringUser who triggered the event
metadata.sourcestringEvent source

WebhookSubscription

Webhook subscription configuration.

typescript
interface WebhookSubscription {
  id: string;
  url: string;
  events: WebhookEventType[];
  status: 'active' | 'disabled';
  secret: string;
  createdAt: Date;
  updatedAt: Date;
}

Event Handling Example

typescript
import { WebhookEvent, Risk, Task, Document } from '@deiterate/sdk';
import crypto from 'crypto';

// Verify webhook signature
function verifySignature(payload: string, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}

// Handle webhook event
function handleWebhook(event: WebhookEvent) {
  console.log(`Received event: ${event.type}`);
  console.log(`Event ID: ${event.id}`);
  console.log(`Timestamp: ${event.createdAt}`);
  
  switch (event.type) {
    case 'risk.created': {
      const risk = event.data.object as Risk;
      console.log(`New risk: ${risk.risk}`);
      break;
    }
    
    case 'risk.updated': {
      const risk = event.data.object as Risk;
      const changed = event.data.previousAttributes;
      console.log(`Risk updated: ${risk.id}`);
      console.log(`Changed fields:`, Object.keys(changed || {}));
      break;
    }
    
    case 'task.completed': {
      const task = event.data.object as Task;
      console.log(`Task completed: ${task.description}`);
      break;
    }
    
    case 'task.overdue': {
      const task = event.data.object as Task;
      console.log(`Task overdue: ${task.description}`);
      // Send notification
      break;
    }
    
    case 'document.expired': {
      const doc = event.data.object as Document;
      console.log(`Document expired: ${doc.fileName}`);
      // Trigger review workflow
      break;
    }
    
    case 'audit.completed': {
      console.log('Audit completed');
      // Generate report
      break;
    }
    
    default:
      console.log(`Unhandled event type: ${event.type}`);
  }
}

// Express.js webhook endpoint
app.post('/webhooks/deiterate', (req, res) => {
  const signature = req.headers['x-deiterate-signature'] as string;
  const payload = JSON.stringify(req.body);
  
  if (!verifySignature(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).send('Invalid signature');
  }
  
  const event = req.body as WebhookEvent;
  handleWebhook(event);
  
  res.status(200).send('OK');
});

Event Categories

Risk Events

EventTrigger
risk.createdNew risk added
risk.updatedRisk modified
risk.deletedRisk deleted
risk.reviewedRisk marked as reviewed

Asset Events

EventTrigger
asset.createdNew asset added
asset.updatedAsset modified
asset.deletedAsset deleted
asset.reviewedAsset marked as reviewed

Task Events

EventTrigger
task.createdNew task created
task.assignedTask assigned to user
task.completedTask marked complete
task.overdueTask passed due date

Document Events

EventTrigger
document.createdNew document uploaded
document.updatedDocument modified
document.expiredDocument review date passed

User Events

EventTrigger
user.createdNew user added
user.updatedUser modified
user.deactivatedUser deactivated

Other Events

EventTrigger
compliance.status_changedCompliance status changed
audit.completedAudit marked complete

Released under the MIT License.