asyncapi: "3.0.0"
info:
  title: "PlatPhorm Podcasts Events"
  version: "1.1.1"
  description: "Event contract for URL resolution, playlist updates, playback, clipping, archival, and handoffs."
channels:
  "podcast.url.resolved":
    address: "podcast.url.resolved"
    messages:
      event:
        "$ref": "#/components/messages/podcast_url_resolved"
  "podcast.feed.submitted":
    address: "podcast.feed.submitted"
    messages:
      event:
        "$ref": "#/components/messages/podcast_feed_submitted"
  "podcast.feed.fetched":
    address: "podcast.feed.fetched"
    messages:
      event:
        "$ref": "#/components/messages/podcast_feed_fetched"
  "podcast.feed.parsed":
    address: "podcast.feed.parsed"
    messages:
      event:
        "$ref": "#/components/messages/podcast_feed_parsed"
  "podcast.feed.validated":
    address: "podcast.feed.validated"
    messages:
      event:
        "$ref": "#/components/messages/podcast_feed_validated"
  "podcast.episode.discovered":
    address: "podcast.episode.discovered"
    messages:
      event:
        "$ref": "#/components/messages/podcast_episode_discovered"
  "podcast.audio.download.started":
    address: "podcast.audio.download.started"
    messages:
      event:
        "$ref": "#/components/messages/podcast_audio_download_started"
  "podcast.audio.download.completed":
    address: "podcast.audio.download.completed"
    messages:
      event:
        "$ref": "#/components/messages/podcast_audio_download_completed"
  "podcast.audio.media.upload.started":
    address: "podcast.audio.media.upload.started"
    messages:
      event:
        "$ref": "#/components/messages/podcast_audio_media_upload_started"
  "podcast.audio.media.upload.completed":
    address: "podcast.audio.media.upload.completed"
    messages:
      event:
        "$ref": "#/components/messages/podcast_audio_media_upload_completed"
  "podcast.audio.media.upload.failed":
    address: "podcast.audio.media.upload.failed"
    messages:
      event:
        "$ref": "#/components/messages/podcast_audio_media_upload_failed"
  "podcast.playback.started":
    address: "podcast.playback.started"
    messages:
      event:
        "$ref": "#/components/messages/podcast_playback_started"
  "podcast.playback.paused":
    address: "podcast.playback.paused"
    messages:
      event:
        "$ref": "#/components/messages/podcast_playback_paused"
  "podcast.playback.completed":
    address: "podcast.playback.completed"
    messages:
      event:
        "$ref": "#/components/messages/podcast_playback_completed"
  "podcast.clip.created":
    address: "podcast.clip.created"
    messages:
      event:
        "$ref": "#/components/messages/podcast_clip_created"
  "podcast.playlist.updated":
    address: "podcast.playlist.updated"
    messages:
      event:
        "$ref": "#/components/messages/podcast_playlist_updated"
  "podcast.share.created":
    address: "podcast.share.created"
    messages:
      event:
        "$ref": "#/components/messages/podcast_share_created"
  "podcast.tags.generated":
    address: "podcast.tags.generated"
    messages:
      event:
        "$ref": "#/components/messages/podcast_tags_generated"
  "podcast.emoji.scored":
    address: "podcast.emoji.scored"
    messages:
      event:
        "$ref": "#/components/messages/podcast_emoji_scored"
  "podcast.handoff.created":
    address: "podcast.handoff.created"
    messages:
      event:
        "$ref": "#/components/messages/podcast_handoff_created"
  "podcast.handoff.completed":
    address: "podcast.handoff.completed"
    messages:
      event:
        "$ref": "#/components/messages/podcast_handoff_completed"
  "podcast.ingestion.failed":
    address: "podcast.ingestion.failed"
    messages:
      event:
        "$ref": "#/components/messages/podcast_ingestion_failed"
  "podcast.archive.degraded":
    address: "podcast.archive.degraded"
    messages:
      event:
        "$ref": "#/components/messages/podcast_archive_degraded"
operations:
  podcast_url_resolved:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.url.resolved"
  podcast_feed_submitted:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.feed.submitted"
  podcast_feed_fetched:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.feed.fetched"
  podcast_feed_parsed:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.feed.parsed"
  podcast_feed_validated:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.feed.validated"
  podcast_episode_discovered:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.episode.discovered"
  podcast_audio_download_started:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.audio.download.started"
  podcast_audio_download_completed:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.audio.download.completed"
  podcast_audio_media_upload_started:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.audio.media.upload.started"
  podcast_audio_media_upload_completed:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.audio.media.upload.completed"
  podcast_audio_media_upload_failed:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.audio.media.upload.failed"
  podcast_playback_started:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.playback.started"
  podcast_playback_paused:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.playback.paused"
  podcast_playback_completed:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.playback.completed"
  podcast_clip_created:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.clip.created"
  podcast_playlist_updated:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.playlist.updated"
  podcast_share_created:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.share.created"
  podcast_tags_generated:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.tags.generated"
  podcast_emoji_scored:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.emoji.scored"
  podcast_handoff_created:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.handoff.created"
  podcast_handoff_completed:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.handoff.completed"
  podcast_ingestion_failed:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.ingestion.failed"
  podcast_archive_degraded:
    action: "send"
    channel:
      "$ref": "#/channels/podcast.archive.degraded"
components:
  messages:
    podcast_url_resolved:
      name: "podcast.url.resolved"
      payload:
        type: "object"
        additionalProperties: true
    podcast_feed_submitted:
      name: "podcast.feed.submitted"
      payload:
        type: "object"
        additionalProperties: true
    podcast_feed_fetched:
      name: "podcast.feed.fetched"
      payload:
        type: "object"
        additionalProperties: true
    podcast_feed_parsed:
      name: "podcast.feed.parsed"
      payload:
        type: "object"
        additionalProperties: true
    podcast_feed_validated:
      name: "podcast.feed.validated"
      payload:
        type: "object"
        additionalProperties: true
    podcast_episode_discovered:
      name: "podcast.episode.discovered"
      payload:
        type: "object"
        additionalProperties: true
    podcast_audio_download_started:
      name: "podcast.audio.download.started"
      payload:
        type: "object"
        additionalProperties: true
    podcast_audio_download_completed:
      name: "podcast.audio.download.completed"
      payload:
        type: "object"
        additionalProperties: true
    podcast_audio_media_upload_started:
      name: "podcast.audio.media.upload.started"
      payload:
        type: "object"
        additionalProperties: true
    podcast_audio_media_upload_completed:
      name: "podcast.audio.media.upload.completed"
      payload:
        type: "object"
        additionalProperties: true
    podcast_audio_media_upload_failed:
      name: "podcast.audio.media.upload.failed"
      payload:
        type: "object"
        additionalProperties: true
    podcast_playback_started:
      name: "podcast.playback.started"
      payload:
        type: "object"
        additionalProperties: true
    podcast_playback_paused:
      name: "podcast.playback.paused"
      payload:
        type: "object"
        additionalProperties: true
    podcast_playback_completed:
      name: "podcast.playback.completed"
      payload:
        type: "object"
        additionalProperties: true
    podcast_clip_created:
      name: "podcast.clip.created"
      payload:
        type: "object"
        additionalProperties: true
    podcast_playlist_updated:
      name: "podcast.playlist.updated"
      payload:
        type: "object"
        additionalProperties: true
    podcast_share_created:
      name: "podcast.share.created"
      payload:
        type: "object"
        additionalProperties: true
    podcast_tags_generated:
      name: "podcast.tags.generated"
      payload:
        type: "object"
        additionalProperties: true
    podcast_emoji_scored:
      name: "podcast.emoji.scored"
      payload:
        type: "object"
        additionalProperties: true
    podcast_handoff_created:
      name: "podcast.handoff.created"
      payload:
        type: "object"
        additionalProperties: true
    podcast_handoff_completed:
      name: "podcast.handoff.completed"
      payload:
        type: "object"
        additionalProperties: true
    podcast_ingestion_failed:
      name: "podcast.ingestion.failed"
      payload:
        type: "object"
        additionalProperties: true
    podcast_archive_degraded:
      name: "podcast.archive.degraded"
      payload:
        type: "object"
        additionalProperties: true