@playlive/realtime-pipeline
    Preparing search index...

    Interface UpdateScheduleMessage

    Wire payload for a full schedule push, keyed by campaign.

    Pushed from the UDP schedule emitter on:

    • identify (initial seed)
    • a campaign_schedule_entries mutation (sync-schedule-lambda, admin edit, upstream Tiltify change)
    • a boundary crossing (superset of the scheduleTransition nudge — carries the full array so consumers don't need to refetch to reconcile past + future blocks)

    schedule is the complete ordered list of ScheduleTransitionBlock rows for the campaign at server-time at. Consumers replace their schedules[campaignID] slot wholesale on every push — same convention as UpdateLeaderboardMessage and UpdateLeaderboardExclusionsMessage. An empty array means "campaign has no schedule" (never seen one, or the last block was deleted).

    Older clients that don't recognize "updateSchedule" silently drop the message (default: break; in processMessage) — safe to roll out ahead of the UDP-side emitter.

    interface UpdateScheduleMessage {
        data: {
            at: string;
            campaignID: string;
            schedule: ScheduleTransitionBlock[];
        };
        id: string;
        sourceType: string;
        type: "updateSchedule";
    }

    Hierarchy (View Summary)

    Index
    data: { at: string; campaignID: string; schedule: ScheduleTransitionBlock[] }

    Type Declaration

    • at: string

      Server-side ISO timestamp captured immediately before the DB lookup that produced schedule. Same semantic as ScheduleTransitionPayload.at.

    • campaignID: string

      Campaign (or team-campaign) id the schedule belongs to. Client stores flat under schedules[campaignID].

    • schedule: ScheduleTransitionBlock[]

      Full ordered schedule for the campaign at server-time at. Empty array = campaign has no schedule.

    id: string
    sourceType: string
    type: "updateSchedule"