Every event in Granit follows two naming conventions enforced by architecture tests:
- Domain events (
IDomainEvent) — suffix *Event, in-process, after commit
- Integration events (
IIntegrationEvent) — suffix *Eto, durable Wolverine outbox
See the Event Bus page for architecture and usage patterns.
| Event | Type | Trigger | Compliance |
|---|
ApiKeyCreatedEvent | Domain | ApiKeyEntry.Create() | ISO 27001 |
ApiKeyRevokedEvent | Domain | Service layer | ISO 27001 |
ApiKeyRotatedEvent | Domain | Service layer | ISO 27001 |
ApiKeyScopesUpdatedEvent | Domain | Service layer | ISO 27001 |
ApiKeyUsedEto | Integration | ApiKeyEntry.RecordUsage() | ISO 27001 |
ApiKeyExpiredEvent | Domain | ApiKeyEntry.MarkAsExpired() | ISO 27001 |
| Event | Type | Trigger | Compliance |
|---|
IdentityUserUpdatedEvent | Wolverine | Identity provider webhook | — |
IdentityUserDeletedEvent | Wolverine | Identity provider webhook | GDPR Art. 17 |
UserCacheEntryErasedEvent | Domain | After hard-delete in handler | GDPR Art. 17 |
UserCacheSyncedEto | Integration | After cache upsert in handler | — |
| Event | Type | Trigger | Compliance |
|---|
PersonalDataDeletionRequestedEto | Integration | GDPR Art. 17 request | GDPR |
PersonalDataDeletedEto | Integration | After provider deletion | GDPR + ISO 27001 |
PersonalDataRequestedEto | Integration | GDPR Art. 15/20 export | GDPR |
PersonalDataPreparedEto | Integration | Provider fragment ready | GDPR |
ExportCompletedEto | Integration | All fragments assembled | GDPR |
ExportTimedOutEvent | Domain | Provider deadline exceeded | GDPR |
LegalAgreementAcceptedEto | Integration | User accepts agreement | GDPR Art. 7 |
LegalAgreementObsoleteEto | Integration | Document version superseded | GDPR Art. 7 |
| Event | Type | Trigger | Compliance |
|---|
PermissionGrantChangedEvent | Domain | Permission grant mutation | ISO 27001 |
| Event | Type | Trigger | Compliance |
|---|
UserNotificationCreatedEvent | Domain | UserNotification.RaiseCreatedEvent() | — |
UserNotificationReadEvent | Domain | UserNotification.MarkAsRead() | — |
| Event | Type | Trigger | Compliance |
|---|
WebhookSubscriptionCreatedEvent | Domain | WebhookSubscription.Create() | ISO 27001 |
WebhookSubscriptionActivatedEvent | Domain | WebhookSubscription.Activate() | — |
WebhookSubscriptionSuspendedEvent | Domain | WebhookSubscription.Suspend() | ISO 27001 |
WebhookSubscriptionDeactivatedEvent | Domain | WebhookSubscription.Deactivate() | — |
WebhookDeliverySucceededEvent | Domain | WebhookSubscription.RecordSuccess() | — |
WebhookDeliveryFailureThresholdExceededEto | Integration | RecordFailure() (threshold: 5) | SLA |
| Event | Type | Trigger | Compliance |
|---|
BackgroundJobPausedEvent | Domain | BackgroundJobDefinition.Pause() | ISO 27001 |
BackgroundJobResumedEvent | Domain | BackgroundJobDefinition.Resume() | — |
BackgroundJobDefinitionChangedEvent | Domain | UpdateDefinition() (cron changed) | ISO 27001 |
BackgroundJobExecutionStartedEto | Integration | RecordExecutionStart() | — |
BackgroundJobFailureThresholdExceededEto | Integration | RecordFailure() (threshold: 3) | SLA |
| Event | Type | Trigger | Compliance |
|---|
BlobUploadStartedEvent | Domain | BlobDescriptor.MarkAsUploading() | — |
BlobValidatedEvent | Domain | BlobDescriptor.MarkAsValid() | — |
BlobRejectedEvent | Domain | BlobDescriptor.MarkAsRejected() | — |
BlobDeletedEvent | Domain | BlobDescriptor.MarkAsDeleted() | GDPR Art. 17 |
| Event | Type | Trigger | Compliance |
|---|
ImportJobCompletedEvent | Wolverine | Import orchestrator | — |
ImportJobCancelledEvent | Domain | ImportJob.Cancel() | ISO 27001 |
ExportJobCompletedEvent | Wolverine | Export orchestrator | — |
ExportJobFailedEto | Integration | Export orchestrator catch block | SLA |
| Event | Type | Trigger | Compliance |
|---|
TimelineEntryPostedEvent | Domain | TimelineEntry.RaisePostedEvent() | — |
TimelineEntrySoftDeletedEvent | Domain | TimelineEntry.SoftDelete() | ISO 27001 |
| Event | Type | Trigger | Compliance |
|---|
WorkflowTransitionedEvent<TState> | Domain | State transition | — |
WorkflowStateChangedEvent | Domain | State change | — |
WorkflowApprovalRequestedEvent | Domain | Approval requested | — |
Entities implementing IEmitEntityLifecycleEvents automatically emit six events via EntityLifecycleEventInterceptor:
| Domain Event | Integration Event | Trigger |
|---|
EntityCreatedEvent<T> | EntityCreatedEto<T> | First SaveChanges |
EntityUpdatedEvent<T> | EntityUpdatedEto<T> | Property change detected |
EntityDeletedEvent<T> | EntityDeletedEto<T> | Entity removed or soft-deleted |
| Entity | Module | Use case |
|---|
SettingRecord | Settings.EntityFrameworkCore | Config cache invalidation |
TenantFeatureOverride | Features.EntityFrameworkCore | Feature flag cache refresh |
LocalizationOverride | Localization.EntityFrameworkCore | Translation cache + CDN invalidation |
ReferenceDataEntity | ReferenceData | Client-side cache invalidation |
See Entity Lifecycle Events for setup details.
| Category | Custom | Lifecycle (auto) | Total |
|---|
| Security & Audit | 14 | 0 | 14 |
| Delivery & Observability | 12 | 0 | 12 |
| Data Pipeline | 11 | 0 | 11 |
| Cache Invalidation | 0 | 24 (4 entities x 6) | 24 |
| Total | 37 | 24 | 61 |