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.