Skip to main content

Events

:::info Source Sourced from services/media-service/EVENT_SCHEMAS.md in the documentation repo. :::

1. Envelope

Standard. retentionClass = operational.

2. Events Published

2.1 media.asset.uploaded.v1

interface AssetUploadedV1 { assetId: MediaAssetId; tenantId: TenantId; ownerUserId: UserId; kind: string; mime: string; sizeBytes: number; sha256: SHA256; uploadedAt: ISODate; }

2.2 media.asset.scanned.v1

interface AssetScannedV1 { assetId: MediaAssetId; tenantId: TenantId; result: 'clean' | 'quarantined'; detections?: string[]; scannedAt: ISODate; }

2.3 media.asset.transcoded.v1

interface AssetTranscodedV1 { assetId: MediaAssetId; tenantId: TenantId; variants: Array<{ profile: string; key: string; sizeBytes: number }>; durationSeconds?: number; width?: number; height?: number; transcodedAt: ISODate; }

2.4 media.asset.ready.v1

interface AssetReadyV1 { assetId: MediaAssetId; tenantId: TenantId; kind: string; ownerUserId: UserId; readyAt: ISODate; variantCount: number; }

2.5 media.asset.failed.v1 / .quarantined.v1 / .deleted.v1

2.6 media.caption.generated.v1 / .reviewed.v1

interface CaptionGeneratedV1 { captionId: ULID; assetId: MediaAssetId; tenantId: TenantId; language: Locale; source: 'ai' | 'human'; aiProvenance?: AIProvenance; generatedAt: ISODate; }

2.7 media.transcript.generated.v1

2.8 media.ai_image.generated.v1 / media.ai_audio.generated.v1

interface AIImageGeneratedV1 { assetId: MediaAssetId; tenantId: TenantId; promptHash: string; model: string; costMicroUSD: number; aiProvenance: AIProvenance; generatedAt: ISODate; }

3. Events Consumed

  • authoring.block.added.v1 — tracks media references for lifecycle.
  • authoring.course_draft.published.v1 — freeze references (retention extended).
  • gdpr.subject_request.received.v1 — delete user assets.
  • content.play_package.bundle.published.v1 — trigger retention extension for bundled assets.

4. Versioning

All v1 additive. Variant profile list extensible.

5. Idempotency

Inbox dedups.

6. Outbox / Inbox

Standard.

7. Partition Key

partitionKey = tenantId.

8. DLQ

media.dlq — poison messages.