UNPKG

twitch-eventsub-client

Version:

A Twitch EventSub WebSocket client for Node.js

3,332 lines 119 kB
import { EventEmitter } from 'events';
import { AxiosError } from 'axios';

interface KeepaliveMessageMetadata extends EventSubMessageMetadata {
    message_type: 'session_keepalive';
}
type KeepaliveMessagePayload = {};
type KeepaliveMessage = EventSubMessage<KeepaliveMessageMetadata, KeepaliveMessagePayload>;

interface AutomodMessageHoldEventV1 {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    message_id: string;
    message: [
        {
            text: string;
            fragments: [
                {
                    text: string;
                    emote: {
                        id: string;
                        emote_set_id: string;
                    } | null;
                    cheermote: {
                        prefix: string;
                        bits: number;
                        tier: number;
                    } | null;
                }
            ];
        }
    ];
    category: string;
    level: number;
    held_at: string;
}
interface AutomodMessageHoldEventV2 {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    message_id: string;
    message: [
        {
            text: string;
            fragments: [
                {
                    type: 'text' | 'emote' | 'cheermote';
                    text: string;
                    emote: {
                        id: string;
                        emote_set_id: string;
                    } | null;
                    cheermote: {
                        prefix: string;
                        bits: number;
                        tier: number;
                    } | null;
                }
            ];
        }
    ];
    held_at: string;
    reason: 'automod' | 'blocked_term';
    automod: {
        category: string;
        level: number;
        boundaries: [
            {
                start_pos: number;
                end_pos: number;
            }
        ];
        blocked_term: {
            terms_found: [
                {
                    term_id: string;
                    boundary: {
                        start_pos: number;
                        end_pos: number;
                    };
                    owner_broadcaster_user_id: string;
                    owner_broadcaster_user_login: string;
                    owner_broadcaster_user_name: string;
                }
            ];
        } | null;
    } | null;
}
interface AutomodMessageUpdateEventV1 {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    message_id: string;
    message: [
        {
            text: string;
            fragments: [
                {
                    text: string;
                    emote: {
                        id: string;
                        emote_set_id: string;
                    } | null;
                    cheermote: {
                        prefix: string;
                        bits: number;
                        tier: number;
                    } | null;
                }
            ];
        }
    ];
    category: string;
    level: number;
    status: 'Approved' | 'Denied' | 'Expired';
    held_at: string;
}
interface AutomodMessageUpdateEventV2 {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    message_id: string;
    message: [
        {
            text: string;
            fragments: [
                {
                    type: 'text' | 'emote' | 'cheermote';
                    text: string;
                    emote: {
                        id: string;
                        emote_set_id: string;
                    } | null;
                    cheermote: {
                        prefix: string;
                        bits: number;
                        tier: number;
                    } | null;
                }
            ];
        }
    ];
    status: 'Approved' | 'Denied' | 'Expired';
    held_at: string;
    reason: 'automod' | 'blocked_term';
    automod: {
        category: string;
        level: number;
        boundaries: [
            {
                start_pos: number;
                end_pos: number;
            }
        ];
        blocked_term: {
            terms_found: [
                {
                    term_id: string;
                    boundary: {
                        start_pos: number;
                        end_pos: number;
                    };
                    owner_broadcaster_user_id: string;
                    owner_broadcaster_user_login: string;
                    owner_broadcaster_user_name: string;
                }
            ];
        } | null;
    } | null;
}
interface AutomodSettingsUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    bullying: number;
    overall_level: number | null;
    disability: number;
    race_ethnicity_or_religion: number;
    misogyny: number;
    sexuality_sex_or_gender: number;
    aggression: number;
    sex_based_terms: number;
    swearing: number;
}
interface AutomodTermsUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    action: 'add_permitted' | 'remove_permitted' | 'add_blocked' | 'remove_blocked';
    from_automod: boolean;
    terms: string[];
}
interface ChannelAdBreakBeginEvent {
    duration_seconds: number;
    started_at: string;
    is_automatic: boolean;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    requester_user_id: string;
    requester_user_login: string;
    requester_user_name: string;
}
interface ChannelBanEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    reason: string;
    banned_at: string;
    ends_at: string | null;
    is_permanent: boolean;
}
interface ChannelBitsUseEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    bits: number;
    type: 'cheer' | 'power_up';
    message: [
        {
            text: string;
            type: 'text' | 'cheermote' | 'emote';
            fragments: [
                {
                    text: string;
                    emote: {
                        id: string;
                        emote_set_id: string;
                        owner_id: string;
                        format: string[];
                    } | null;
                    cheermote: {
                        prefix: string;
                        bits: number;
                        tier: number;
                    } | null;
                }
            ];
        }
    ] | null;
    power_up: {
        type: 'message_effect' | 'celebration' | 'gigantify_an_emote';
        emote: {
            id: string;
            name: string;
        };
        message_effect_id: string;
    };
}
interface ChannelChatClearEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcast_user_login: string;
}
interface ChannelChatClearUserMessagesEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcast_user_login: string;
    target_user_id: string;
    target_user_login: string;
    target_user_name: string;
}
interface ChannelChatMessageEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcast_user_login: string;
    chatter_user_id: string;
    chatter_user_name: string;
    chatter_user_login: string;
    message_id: string;
    message: {
        text: string;
        fragments: [
            {
                type: 'text' | 'cheermote' | 'emote' | 'mention';
                text: string;
                cheermote: {
                    prefix: string;
                    bits: number;
                    tier: number;
                } | null;
                emote: {
                    id: string;
                    emote_set_id: string;
                    owner_id: string;
                    format: string[];
                } | null;
                mention: {
                    user_id: string;
                    user_name: string;
                    user_login: string;
                } | null;
            }
        ];
    };
    message_type: 'text' | 'channel_points_highlighted' | 'channel_points_sub_only' | 'user_intro' | 'power_ups_message_effect' | 'power_ups_gigantified_emote';
    badges: [
        {
            set_id: string;
            id: string;
            info: string;
            cheer: {
                bits: number;
            } | null;
        }
    ];
    color: string;
    reply: {
        parent_message_id: string;
        parent_message_body: string;
        parent_user_id: string;
        parent_user_name: string;
        parent_user_login: string;
        thread_message_id: string;
        thread_user_id: string;
        thread_user_name: string;
        thread_user_login: string;
    } | null;
    channel_points_custom_reward_id: string | null;
    source_broadcaster_user_id: string | null;
    source_broadcaster_user_login: string | null;
    source_broadcaster_user_name: string | null;
    source_message_id: string | null;
    source_badges: [
        {
            set_id: string;
            id: string;
            info: string;
        }
    ] | null;
}
interface ChannelChatMessageDeleteEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    target_user_id: string;
    target_user_name: string;
    target_user_login: string;
    message_id: string;
}
interface ChannelChatNotificationEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    chatter_user_id: string | null;
    chatter_user_name: string | null;
    chatter_user_login: string | null;
    chatter_is_anonymous: boolean;
    color: string;
    badges: [
        {
            set_id: string;
            id: string;
            info: string;
        }
    ];
    system_message: string;
    message_id: string;
    message: {
        text: string;
        fragments: [
            {
                type: 'text' | 'cheermote' | 'emote' | 'mention';
                text: string;
                cheermote: {
                    prefix: string;
                    bits: number;
                    tier: number;
                } | null;
                emote: {
                    id: string;
                    emote_set_id: string;
                    owner_id: string;
                    format: string[];
                } | null;
                mention: {
                    user_id: string;
                    user_name: string;
                    user_login: string;
                } | null;
            }
        ];
    };
    notice_type: 'sub' | 'resub' | 'sub_gift' | 'community_sub_gift' | 'gift_paid_upgrade' | 'prime_paid_upgrade' | 'raid' | 'unraid' | 'pay_it_forward' | 'announcement' | 'bits_badge_tier' | 'charity_donation' | 'shared_chat_sub' | 'shared_chat_resub' | 'shared_chat_sub_gift' | 'shared_chat_community_sub_gift' | 'shared_chat_gift_paid_upgrade' | 'shared_chat_prime_paid_upgrade' | 'shared_chat_raid' | 'shared_chat_pay_it_forward' | 'shared_chat_announcement';
    sub: {
        sub_tier: number;
        is_prime: boolean;
        duration_months: number;
    } | null;
    resub: {
        cumulative_months: number;
        duration_months: number;
        streak_months: number;
        sub_tier: number;
        is_prime: boolean;
        is_gift: boolean;
        gifter_is_anonymous: boolean;
        gifter_user_id: string | null;
        gifter_user_name: string | null;
        gifter_user_login: string | null;
    } | null;
    sub_gift: {
        duration_months: number;
        cumulative_total: number | null;
        recipient_user_id: string;
        recipient_user_name: string;
        recipient_user_login: string;
        sub_tier: number;
        community_gift_id: string | null;
    } | null;
    community_sub_gift: {
        id: string;
        total: number;
        sub_tier: number;
        cumulative_total: number | null;
    } | null;
    gift_paid_upgrade: {
        gifter_is_anonymous: boolean;
        gifter_user_id: string | null;
        gifter_user_name: string | null;
        gifter_user_login: string | null;
    } | null;
    prime_paid_upgrade: {
        sub_tier: number;
    } | null;
    pay_it_forward: {
        gifter_is_anonymous: boolean;
        gifter_user_id: string | null;
        gifter_user_name: string | null;
        gifter_user_login: string | null;
    };
    raid: {
        user_id: string;
        user_name: string;
        user_login: string;
        viewer_count: number;
        profile_image_url: string;
    } | null;
    unraid: null;
    announcement: {
        color: string;
    } | null;
    bits_badge_tier: {
        tier: number;
    } | null;
    charity_donation: {
        charity_name: string;
        amount: {
            value: number;
            decimal_place: number;
            currency: string;
        };
    } | null;
    source_broadcaster_user_id: string | null;
    source_broadcaster_user_name: string | null;
    source_broadcaster_user_login: string | null;
    source_message_id: string | null;
    source_badges: [
        {
            set_id: string;
            id: string;
            info: string;
        }
    ] | null;
    shared_chat_sub: {
        sub_tier: number;
        is_prime: boolean;
        duration_months: number;
    } | null;
    shared_chat_resub: {
        cumulative_months: number;
        duration_months: number;
        streak_months: number;
        sub_tier: number;
        is_prime: boolean;
        is_gift: boolean;
        gifter_is_anonymous: boolean;
        gifter_user_id: string;
        gifter_user_name: string;
        gifter_user_login: string;
    } | null;
    shared_chat_sub_gift: {
        duration_months: number;
        cumulative_total: number | null;
        recipient_user_id: string;
        recipient_user_name: string;
        recipient_user_login: string;
        sub_tier: number;
        community_gift_id: string | null;
    } | null;
    shared_chat_community_sub_gift: {
        id: string;
        total: number;
        sub_tier: number;
        cumulative_total: number | null;
    } | null;
    shared_chat_gift_paid_upgrade: {
        gifter_is_anonymous: boolean;
        gifter_user_id: string | null;
        gifter_user_name: string | null;
        gifter_user_login: string | null;
    } | null;
    shared_chat_prime_paid_upgrade: {
        sub_tier: number;
    } | null;
    shared_chat_pay_it_forward: {
        gifter_is_anonymous: boolean;
        gifter_user_id: string | null;
        gifter_user_name: string | null;
        gifter_user_login: string | null;
    } | null;
    shared_chat_raid: {
        user_id: string;
        user_name: string;
        user_login: string;
        viewer_count: number;
        profile_image_url: string;
    } | null;
    shared_chat_announcement: {
        color: string;
    } | null;
}
interface ChannelChatSettingsUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    emote_mode: boolean;
    follower_mode: boolean;
    follower_mode_duration_minutes: number;
    slow_mode: boolean;
    slow_mode_wait_time_seconds: number;
    subscriber_mode: boolean;
    unique_chat_mode: boolean;
}
interface ChannelChatUserMessageHoldEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    message_id: string;
    message: [
        {
            text: string;
            fragments: [
                {
                    text: string;
                    emote: {
                        id: string;
                        emote_set_id: string;
                    } | null;
                    cheermote: {
                        prefix: string;
                        bits: number;
                        tier: number;
                    } | null;
                }
            ];
        }
    ];
}
interface ChannelChatUserMessageUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    status: 'approved' | 'denied' | 'invalid';
    message_id: string;
    message: [
        {
            text: string;
            fragments: [
                {
                    text: string;
                    emote: {
                        id: string;
                        emote_set_id: string;
                    } | null;
                    cheermote: {
                        prefix: string;
                        bits: number;
                        tier: number;
                    } | null;
                }
            ];
        }
    ];
}
interface ChannelSubscribeEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    tier: string;
    is_gift: boolean;
}
interface ChannelCheerEvent {
    is_anonymous: boolean;
    user_id: string | null;
    user_login: string | null;
    user_name: string | null;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    message: string;
    bits: number;
}
interface ChannelUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    title: string;
    language: string;
    category_id: string;
    category_name: string;
    content_classification_labels: string[];
}
interface ChannelUnbanEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
}
interface ChannelUnbanRequestCreateEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    text: string;
    created_at: string;
}
interface ChannelUnbanRequestResolveEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    resolution_text: string;
    status: 'approved' | 'canceled' | 'denied';
}
interface ChannelFollowEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    followed_at: string;
}
interface ChannelRaidEvent {
    from_broadcaster_user_id: string;
    from_broadcaster_user_login: string;
    from_broadcaster_user_name: string;
    to_broadcaster_user_id: string;
    to_broadcaster_user_login: string;
    to_broadcaster_user_name: string;
    viewers: number;
}
interface ChannelModerateEventV1 {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    source_broadcaster_user_id: string;
    source_broadcaster_user_login: string;
    source_broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    action: 'ban' | 'timeout' | 'unban' | 'untimeout' | 'clear' | 'emoteonly' | 'emoteonlyoff' | 'followers' | 'followersoff' | 'uniquechat' | 'uniquechatoff' | 'slow' | 'slowoff' | 'subscribers' | 'subscribersoff' | 'unraid' | 'delete' | 'unvip' | 'vip' | 'raid' | 'add_blocked_term' | 'add_permitted_term' | 'remove_blocked_term' | 'remove_permitted_term' | 'mod' | 'unmod' | 'approve_unban_request' | 'deny_unban_request' | 'shared_chat_ban' | 'shared_chat_timeout' | 'shared_chat_untimeout' | 'shared_chat_unban' | 'shared_chat_delete';
    followers: {
        follow_duration_minutes: number;
    } | null;
    slow: {
        wait_time_seconds: number;
    } | null;
    vip: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    unvip: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    mod: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    unmod: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    ban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    unban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    timeout: {
        user_id: string;
        user_login: string;
        user_name: string;
        reason: string;
        expires_at: string;
    } | null;
    untimeout: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    raid: {
        user_id: string;
        user_login: string;
        user_name: string;
        viewer_count: number;
    } | null;
    unraid: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    delete: {
        user_id: string;
        user_login: string;
        user_name: string;
        message_id: string;
        message_body: string;
    } | null;
    automod_terms: {
        action: 'add' | 'remove';
        list: 'blocked' | 'permitted';
        terms: string[];
        from_automod: boolean;
    } | null;
    unban_request: {
        is_approved: boolean;
        user_id: string;
        user_login: string;
        user_name: string;
        moderator_message: string;
    } | null;
    shared_chat_ban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    shared_chat_unban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    shared_chat_timeout: {
        user_id: string;
        user_login: string;
        user_name: string;
        reason: string;
        expires_at: string;
    } | null;
    shared_chat_untimeout: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    shared_chat_delete: {
        user_id: string;
        user_login: string;
        user_name: string;
        message_id: string;
        message_body: string;
    } | null;
}
interface ChannelModerateEventV2 {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    source_broadcaster_user_id: string;
    source_broadcaster_user_login: string;
    source_broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    action: 'ban' | 'timeout' | 'unban' | 'untimeout' | 'clear' | 'emoteonly' | 'emoteonlyoff' | 'followers' | 'followersoff' | 'uniquechat' | 'uniquechatoff' | 'slow' | 'slowoff' | 'subscribers' | 'subscribersoff' | 'unraid' | 'delete' | 'unvip' | 'vip' | 'raid' | 'add_blocked_term' | 'add_permitted_term' | 'remove_blocked_term' | 'remove_permitted_term' | 'mod' | 'unmod' | 'approve_unban_request' | 'deny_unban_request' | 'warn' | 'shared_chat_ban' | 'shared_chat_timeout' | 'shared_chat_untimeout' | 'shared_chat_unban' | 'shared_chat_delete';
    followers: {
        follow_duration_minutes: number;
    } | null;
    slow: {
        wait_time_seconds: number;
    } | null;
    vip: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    unvip: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    mod: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    unmod: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    ban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    unban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    timeout: {
        user_id: string;
        user_login: string;
        user_name: string;
        reason: string;
        expires_at: string;
    } | null;
    untimeout: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    raid: {
        user_id: string;
        user_login: string;
        user_name: string;
        viewer_count: number;
    } | null;
    unraid: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    delete: {
        user_id: string;
        user_login: string;
        user_name: string;
        message_id: string;
        message_body: string;
    } | null;
    automod_terms: {
        action: 'add' | 'remove';
        list: 'blocked' | 'permitted';
        terms: string[];
        from_automod: boolean;
    } | null;
    unban_request: {
        is_approved: boolean;
        user_id: string;
        user_login: string;
        user_name: string;
        moderator_message: string;
    } | null;
    warn: {
        user_id: string;
        user_login: string;
        user_name: string;
        reason: string | null;
        chat_rules_cited: string[] | null;
    } | null;
    shared_chat_ban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    shared_chat_unban: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    shared_chat_timeout: {
        user_id: string;
        user_login: string;
        user_name: string;
        reason: string;
        expires_at: string;
    } | null;
    shared_chat_untimeout: {
        user_id: string;
        user_login: string;
        user_name: string;
    } | null;
    shared_chat_delete: {
        user_id: string;
        user_login: string;
        user_name: string;
        message_id: string;
        message_body: string;
    } | null;
}
interface ChannelModeratorAddEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
}
interface ChannelModeratorRemoveEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
}
interface ChannelGuestStarSessionBeginEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    session_id: string;
    started_at: string;
}
interface ChannelGuestStarSessionEndEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    session_id: string;
    started_at: string;
    ended_at: string;
    host_user_id: string;
    host_user_name: string;
    host_user_login: string;
}
interface ChannelGuestStarGuestUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    session_id: string;
    moderator_user_id: string | null;
    moderator_user_name: string | null;
    moderator_user_login: string | null;
    guest_user_id: string | null;
    guest_user_name: string | null;
    guest_user_login: string | null;
    slot_id: string | null;
    state: 'invited' | 'accepted' | 'ready' | 'backstage' | 'live' | 'removed';
    host_user_id: string;
    host_user_name: string;
    host_user_login: string;
    host_video_enabled: boolean | null;
    host_audio_enabled: boolean | null;
    host_volume: number | null;
}
interface ChannelGuestStarSettingsUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    is_moderator_send_live_enabled: boolean;
    slot_count: number;
    is_browser_source_audio_enabled: boolean;
    group_layout: 'tiled' | 'screenshare' | 'horizontal_top' | 'horizontal_bottom' | 'vertical_left' | 'vertical_right';
}
interface ChannelPollBeginEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    title: string;
    choices: [
        {
            id: string;
            title: string;
            bits_votes: number;
            channel_points_votes: number;
            votes: number;
        }
    ];
    bits_voting: {
        is_enabled: boolean;
        amount_per_vote: number;
    };
    channel_points_voting: {
        is_enabled: boolean;
        amount_per_vote: number;
    };
    started_at: string;
    ends_at: string;
}
interface ChannelPollProgressEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    title: string;
    choices: [
        {
            id: string;
            title: string;
            bits_votes: number;
            channel_points_votes: number;
            votes: number;
        }
    ];
    bits_voting: {
        is_enabled: boolean;
        amount_per_vote: number;
    };
    channel_points_voting: {
        is_enabled: boolean;
        amount_per_vote: number;
    };
    started_at: string;
    ends_at: string;
}
interface ChannelPollEndEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    title: string;
    choices: [
        {
            id: string;
            title: string;
            bits_votes: number;
            channel_points_votes: number;
            votes: number;
        }
    ];
    bits_voting: {
        is_enabled: boolean;
        amount_per_vote: number;
    };
    channel_points_voting: {
        is_enabled: boolean;
        amount_per_vote: number;
    };
    status: 'completed' | 'archived' | 'terminated';
    started_at: string;
    ended_at: string;
}
interface ChannelPointsAutomaticRewardRedemptionAddEventV1 {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    user_id: string;
    user_login: string;
    user_name: string;
    id: string;
    reward: {
        type: 'single_message_bypass_sub_mode' | 'send_highlighted_message' | 'random_sub_emote_unlock' | 'chosen_sub_emote_unlock' | 'chosen_modified_sub_emote_unlock' | 'message_effect' | 'gigantify_an_emote' | 'celebration';
        cost: number;
        unlocked_emote: {
            id: string;
            name: string;
        } | null;
    };
    message: {
        text: string;
        emotes: [
            {
                id: string;
                begin: number;
                end: number;
            }
        ];
    };
    user_input: string | null;
    redeemed_at: string;
}
interface ChannelPointsAutomaticRewardRedemptionAddEventV2 {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    user_id: string;
    user_login: string;
    user_name: string;
    id: string;
    reward: {
        type: 'single_message_bypass_sub_mode' | 'send_highlighted_message' | 'random_sub_emote_unlock' | 'chosen_sub_emote_unlock' | 'chosen_modified_sub_emote_unlock';
        channel_points: number;
        emote: {
            id: string;
            name: string;
        } | null;
    };
    message: {
        text: string;
        type: 'text' | 'emote';
        emotes: [
            {
                id: string;
            }
        ] | null;
    } | null;
    redeemed_at: string;
}
interface ChannelPointsCustomRewardAddEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    is_enabled: boolean;
    is_paused: boolean;
    is_in_stock: boolean;
    title: string;
    cost: number;
    prompt: string;
    is_user_input_required: boolean;
    should_redemptions_skip_request_queue: boolean;
    max_per_stream: {
        is_enabled: boolean;
        value: number;
    };
    max_per_user_per_stream: {
        is_enabled: boolean;
        value: number;
    };
    background_color: string;
    image: {
        url_1x: string;
        url_2x: string;
        url_4x: string;
    } | null;
    default_image: {
        url_1x: string;
        url_2x: string;
        url_4x: string;
    };
    global_cooldown: {
        is_enabled: boolean;
        seconds: number;
    };
    cooldown_expires_at: string | null;
    redemptions_redeemed_current_stream: number | null;
}
interface ChannelPointsCustomRewardUpdateEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    is_enabled: boolean;
    is_paused: boolean;
    is_in_stock: boolean;
    title: string;
    cost: number;
    prompt: string;
    is_user_input_required: boolean;
    should_redemptions_skip_request_queue: boolean;
    max_per_stream: {
        is_enabled: boolean;
        value: number;
    };
    max_per_user_per_stream: {
        is_enabled: boolean;
        value: number;
    };
    background_color: string;
    image: {
        url_1x: string;
        url_2x: string;
        url_4x: string;
    } | null;
    default_image: {
        url_1x: string;
        url_2x: string;
        url_4x: string;
    };
    global_cooldown: {
        is_enabled: boolean;
        seconds: number;
    };
    cooldown_expires_at: string | null;
    redemptions_redeemed_current_stream: number | null;
}
interface ChannelPointsCustomRewardRemoveEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    is_enabled: boolean;
    is_paused: boolean;
    is_in_stock: boolean;
    title: string;
    cost: number;
    prompt: string;
    is_user_input_required: boolean;
    should_redemptions_skip_request_queue: boolean;
    max_per_stream: {
        is_enabled: boolean;
        value: number;
    };
    max_per_user_per_stream: {
        is_enabled: boolean;
        value: number;
    };
    background_color: string;
    image: {
        url_1x: string;
        url_2x: string;
        url_4x: string;
    } | null;
    default_image: {
        url_1x: string;
        url_2x: string;
        url_4x: string;
    };
    global_cooldown: {
        is_enabled: boolean;
        seconds: number;
    };
    cooldown_expires_at: string | null;
    redemptions_redeemed_current_stream: number | null;
}
interface ChannelPointsCustomRewardRedemptionAddEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    user_id: string;
    user_login: string;
    user_name: string;
    user_input: string | null;
    status: 'unknown' | 'unfulfilled' | 'fulfilled' | 'canceled';
    reward: {
        id: string;
        title: string;
        cost: number;
        prompt: string;
    };
    redeemed_at: string;
}
interface ChannelPointsCustomRewardRedemptionUpdateEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    user_id: string;
    user_login: string;
    user_name: string;
    user_input: string | null;
    status: 'unknown' | 'unfulfilled' | 'fulfilled' | 'canceled';
    reward: {
        id: string;
        title: string;
        cost: number;
        prompt: string;
    };
    redeemed_at: string;
}
interface ChannelPredictionBeginEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    title: string;
    outcomes: [
        {
            id: string;
            title: string;
            color: 'pink' | 'blue';
            users: number;
            channel_points: number;
            top_predictors: [
                {
                    user_id: string;
                    user_login: string;
                    user_name: string;
                    channel_points_won: number | null;
                    channel_points_used: number;
                }
            ];
        }
    ];
    started_at: string;
    locks_at: string;
}
interface ChannelPredictionProgressEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    title: string;
    outcomes: [
        {
            id: string;
            title: string;
            color: 'pink' | 'blue';
            users: number;
            channel_points: number;
            top_predictors: [
                {
                    user_id: string;
                    user_login: string;
                    user_name: string;
                    channel_points_won: number | null;
                    channel_points_used: number;
                }
            ];
        }
    ];
    started_at: string;
    locks_at: string;
}
interface ChannelPredictionLockEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    title: string;
    outcomes: [
        {
            id: string;
            title: string;
            color: 'pink' | 'blue';
            users: number;
            channel_points: number;
            top_predictors: [
                {
                    user_id: string;
                    user_login: string;
                    user_name: string;
                    channel_points_won: number | null;
                    channel_points_used: number;
                }
            ];
        }
    ];
    started_at: string;
    locked_at: string;
}
interface ChannelPredictionEndEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    title: string;
    winning_outcome_id: string;
    outcomes: [
        {
            id: string;
            title: string;
            color: 'pink' | 'blue';
            users: number;
            channel_points: number;
            top_predictors: [
                {
                    user_id: string;
                    user_login: string;
                    user_name: string;
                    channel_points_won: number | null;
                    channel_points_used: number;
                }
            ];
        }
    ];
    started_at: string;
    locked_at: string;
}
interface ChannelSharedChatSessionBeginEvent {
    session_id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    host_broadcaster_user_id: string;
    host_broadcaster_user_name: string;
    host_broadcaster_user_login: string;
    participants: [
        {
            broadcaster_user_id: string;
            broadcaster_user_name: string;
            broadcaster_user_login: string;
        }
    ];
}
interface ChannelSharedChatSessionUpdateEvent {
    session_id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    host_broadcaster_user_id: string;
    host_broadcaster_user_name: string;
    host_broadcaster_user_login: string;
    participants: [
        {
            broadcaster_user_id: string;
            broadcaster_user_name: string;
            broadcaster_user_login: string;
        }
    ];
}
interface ChannelSharedChatSessionEndEvent {
    session_id: string;
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    host_broadcaster_user_id: string;
    host_broadcaster_user_name: string;
    host_broadcaster_user_login: string;
}
interface ChannelSubscriptionEndEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    tier: string;
    is_gift: boolean;
}
interface ChannelSubscriptionGiftEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    total: number;
    tier: string;
    cumulative_total: number | null;
    is_anonymous: boolean;
}
interface ChannelSubscriptionMessageEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    tier: string;
    message: {
        text: string;
        emotes: [
            {
                begin: number;
                end: number;
                id: string;
            }
        ] | null;
    };
    cumulative_total: number;
    streak_months: number | null;
    duration_months: number;
}
interface ChannelSuspiciousUserUpdateEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    moderator_user_id: string;
    moderator_user_name: string;
    moderator_user_login: string;
    user_id: string;
    user_name: string;
    user_login: string;
    low_trust_status: 'none' | 'active_monitoring' | 'restricted';
}
interface ChannelSuspiciousUserMessageEvent {
    broadcaster_user_id: string;
    broadcaster_user_name: string;
    broadcaster_user_login: string;
    user_id: string;
    user_name: string;
    user_login: string;
    low_trust_status: 'none' | 'active_monitoring' | 'restricted';
    shared_ban_channel_ids: string[];
    types: 'manually_added' | 'ban_evader' | 'banned_in_shared_channel';
    ban_evasion_evaluation: 'unknown' | 'possible' | 'likely';
    message: {
        message_id: string;
        text: string;
        fragments: [
            {
                type: 'text' | 'cheermote' | 'emote';
                text: string;
                cheermote: {
                    prefix: string;
                    bits: string;
                    tier: string;
                } | null;
                emote: {
                    id: string;
                    emote_set_id: string;
                } | null;
            }
        ];
    };
}
interface ChannelVIPAddEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
}
interface ChannelVIPRemoveEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
}
interface ChannelWarningAcknowledgeEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
}
interface ChannelWarningSendEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    reason: string | null;
    chat_rules_cited: string[] | null;
}
interface CharityDonationEvent {
    id: string;
    campaign_id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    charity_name: string;
    charity_description: string;
    charity_logo: string;
    charity_website: string;
    amount: {
        value: number;
        decimal_places: number;
        currency: string;
    };
}
interface CharityCampaignStartEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    charity_name: string;
    charity_description: string;
    charity_logo: string;
    charity_website: string;
    current_amount: {
        value: number;
        decimal_places: number;
        currency: string;
    };
    target_amount: {
        value: number;
        decimal_places: number;
        currency: string;
    };
    started_at: string;
}
interface CharityCampaignProgressEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    charity_name: string;
    charity_description: string;
    charity_logo: string;
    charity_website: string;
    current_amount: {
        value: number;
        decimal_places: number;
        currency: string;
    };
    target_amount: {
        value: number;
        decimal_places: number;
        currency: string;
    };
}
interface CharityCampaignStopEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    charity_name: string;
    charity_description: string;
    charity_logo: string;
    charity_website: string;
    current_amount: {
        value: number;
        decimal_places: number;
        currency: string;
    };
    target_amount: {
        value: number;
        decimal_places: number;
        currency: string;
    };
    stopped_at: string;
}
interface ConduitShardDisabledEvent {
    conduit_id: string;
    shard_id: string;
    status: string;
    transport: string;
    method: string;
    callback: string | null;
    session_id: string | null;
    connected_at: string | null;
    disconnected_at: string | null;
}
interface DropEntitlementGrantEvent {
    id: string;
    data: [
        {
            organization_id: string;
            category_id: string;
            category_name: string;
            campaign_id: string;
            user_id: string;
            user_name: string;
            user_login: string;
            entitlement_id: string;
            benefit_id: string;
            created_at: string;
        }
    ];
}
interface ExtensionBitsTransactionCreateEvent {
    extension_client_id: string;
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    user_id: string;
    user_login: string;
    user_name: string;
    product: {
        name: string;
        bits: number;
        sku: string;
        in_development: boolean;
    };
}
interface GoalsEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    type: 'follow' | 'subscription' | 'subscription_count' | 'new_subscription' | 'new_subscription_count' | 'new_bit' | 'new_cheerer ';
    description: string;
    current_amount: number;
    target_amount: number;
    started_at: string;
    ended_at: string;
}
interface GoalsEndEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    type: 'follow' | 'subscription' | 'subscription_count' | 'new_subscription' | 'new_subscription_count' | 'new_bit' | 'new_cheerer ';
    description: string;
    is_achieved: boolean;
    current_amount: number;
    target_amount: number;
    started_at: string;
    ended_at: string;
}
interface HypeTrainBeginEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    total: number;
    progress: number;
    goal: number;
    top_contributions: [
        {
            user_id: string;
            user_login: string;
            user_name: string;
            type: 'bits' | 'subscription' | 'other';
            total: number;
        }
    ];
    last_contribution: {
        user_id: string;
        user_login: string;
        user_name: string;
        type: 'bits' | 'subscription' | 'other';
        total: number;
    };
    level: number;
    started_at: string;
    expires_at: string;
    is_golden_kappa_train: boolean;
}
interface HypeTrainBeginEventV2 {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    total: number;
    progress: number;
    goal: number;
    top_contributions: [
        {
            user_id: string;
            user_login: string;
            user_name: string;
            type: 'bits' | 'subscription' | 'other';
            total: number;
        }
    ];
    level: number;
    all_time_high_level: number;
    all_time_high_total: number;
    shared_train_participants: [
        {
            broadcaster_user_id: string;
            broadcaster_user_login: string;
            broadcaster_user_name: string;
        }
    ] | null;
    started_at: string;
    expires_at: string;
    type: 'treasure' | 'golden_kappa' | 'regular';
    is_shared_train: boolean;
}
interface HypeTrainProgressEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    level: number;
    total: number;
    progress: number;
    goal: number;
    top_contributions: [
        {
            user_id: string;
            user_login: string;
            user_name: string;
            type: 'bits' | 'subscription' | 'other';
            total: number;
        }
    ];
    last_contribution: {
        user_id: string;
        user_login: string;
        user_name: string;
        type: 'bits' | 'subscription' | 'other';
        total: number;
    };
    started_at: string;
    expires_at: string;
    is_golden_kappa_train: boolean;
}
interface HypeTrainProgressEventV2 {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    total: number;
    progress: number;
    goal: number;
    top_contributions: [
        {
            user_id: string;
            user_login: string;
            user_name: string;
            type: 'bits' | 'subscription' | 'other';
            total: number;
        }
    ];
    level: number;
    shared_train_participants: [
        {
            broadcaster_user_id: string;
            broadcaster_user_login: string;
            broadcaster_user_name: string;
        }
    ] | null;
    started_at: string;
    expires_at: string;
    type: 'treasure' | 'golden_kappa' | 'regular';
    is_shared_train: boolean;
}
interface HypeTrainEndEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    level: number;
    total: number;
    top_contributions: [
        {
            user_id: string;
            user_login: string;
            user_name: string;
            type: 'bits' | 'subscription' | 'other';
            total: number;
        }
    ];
    started_at: string;
    ended_at: string;
    cooldown_ends_at: string;
    is_golden_kappa_train: boolean;
}
interface HypeTrainEndEventV2 {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    total: number;
    top_contributions: [
        {
            user_id: string;
            user_login: string;
            user_name: string;
            type: 'bits' | 'subscription' | 'other';
            total: number;
        }
    ];
    level: number;
    shared_train_participants: [
        {
            broadcaster_user_id: string;
            broadcaster_user_login: string;
            broadcaster_user_name: string;
        }
    ] | null;
    started_at: string;
    cooldown_ends_at: string;
    ended_at: string;
    type: 'treasure' | 'golden_kappa' | 'regular';
    is_shared_train: boolean;
}
interface StreamOnlineEvent {
    id: string;
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    type: 'live' | 'playlist' | 'watch_party' | 'premiere' | 'rerun';
    started_at: string;
}
interface StreamOfflineEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
}
interface UserAuthorizationGrantEvent {
    client_id: string;
    user_id: string;
    user_login: string;
    user_name: string;
}
interface UserAuthorizationRevokeEvent {
    client_id: string;
    user_id: string;
    user_login: string;
    user_name: string;
}
interface UserUpdateEvent {
    user_id: string;
    user_login: string;
    user_name: string;
    email: string | null;
    email_verified: boolean;
    description: string;
}
interface WhisperReceivedEvent {
    from_user_id: string;
    from_user_name: string;
    from_user_login: string;
    to_user_id: string;
    to_user_name: string;
    to_user_login: string;
    whisper_id: string;
    whisper: {
        text: string;
    };
}
interface ShieldModeBeginEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    started_at: string;
}
interface ShieldModeEndEvent {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    ended_at: string;
}
interface ShoutoutCreate {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    to_broadcaster_user_id: string;
    to_broadcaster_user_login: string;
    to_broadcaster_user_name: string;
    moderator_user_id: string;
    moderator_user_login: string;
    moderator_user_name: string;
    viewer_count: number;
    started_at: string;
    cooldown_ends_at: string;
    target_cooldown_ends_at: string;
}
interface ShoutoutReceived {
    broadcaster_user_id: string;
    broadcaster_user_login: string;
    broadcaster_user_name: string;
    from_broadcaster_user_id: string;
    from_broadcaster_user_login: string;
    from_broadcaster_user_name: string;
    viewer_count: number;
    started_at: string;
}

type Condition<T extends Record<string, string | number | boolean>> = T;
type ConditionBroadcasterUserId = Condition<{
    broadcaster_user_id: string;
}>;
type ConditionBroadcasterModeratorUserId = Condition<{
    broadcaster_user_id: string;
    moderator_user_id: string;
}>;
type ConditionBroadcasterUserIdUserId = Condition<{
    broadcaster_user_id: string;
    user_id: string;
}>;
type ConditionBroadcasterRewardId = Condition<{
    broadcaster_user_id: string;
    reward_id?: string;
}>;
type ConditionOrganizationId = Condition<{
    organization_id: string;
}>;
type ConditionOrganizationCategoryExtensionClientId = Condition<{
    organization_id: string;
    category_id: string;
    extension_client_id: string;
}>;
type ConditionClientId = Condition<{
    client_id: string;
}>;
type ConditionUserId = Condition<{
    user_id: string;
}>;
interface SubscriptionDetailsMap {
    'automod.message.hold:1': {
        type: 'automod.message.hold';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: AutomodMessageHoldEventV1;
    };
    'automod.message.hold:2': {
        type: 'automod.message.hold';
        version: '2';
        condition: ConditionBroadcasterModeratorUserId;
        event: AutomodMessageHoldEventV2;
    };
    'automod.message.update:1': {
        type: 'automod.message.update';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: AutomodMessageUpdateEventV1;
    };
    'automod.message.update:2': {
        type: 'automod.message.update';
        version: '2';
        condition: ConditionBroadcasterModeratorUserId;
        event: AutomodMessageUpdateEventV2;
    };
    'automod.settings.update:1': {
        type: 'automod.settings.update';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: AutomodSettingsUpdateEvent;
    };
    'automod.terms.update:1': {
        type: 'automod.terms.update';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: AutomodTermsUpdateEvent;
    };
    'channel.bits.use:1': {
        type: 'channel.bits.use';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelBitsUseEvent;
    };
    'channel.update:2': {
        type: 'channel.update';
        version: '2';
        condition: ConditionBroadcasterUserId;
        event: ChannelUpdateEvent;
    };
    'channel.follow:2': {
        type: 'channel.follow';
        version: '2';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelFollowEvent;
    };
    'channel.ad_break.begin:1': {
        type: 'channel.ad_break.begin';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelAdBreakBeginEvent;
    };
    'channel.chat.clear:1': {
        type: 'channel.chat.clear';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatClearEvent;
    };
    'channel.chat.clear_user_messages:1': {
        type: 'channel.chat.clear_user_messages';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatClearUserMessagesEvent;
    };
    'channel.chat.message:1': {
        type: 'channel.chat.message';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatMessageEvent;
    };
    'channel.chat.message_delete:1': {
        type: 'channel.chat.message_delete';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatMessageDeleteEvent;
    };
    'channel.chat.notification:1': {
        type: 'channel.chat.notification';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatNotificationEvent;
    };
    'channel.chat_settings.update:1': {
        type: 'channel.chat_settings.update';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatSettingsUpdateEvent;
    };
    'channel.chat.user_message_hold:1': {
        type: 'channel.chat.user_message_hold';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatUserMessageHoldEvent;
    };
    'channel.chat.user_message_update:1': {
        type: 'channel.chat.user_message_update';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelChatUserMessageUpdateEvent;
    };
    'channel.shared_chat.begin:1': {
        type: 'channel.shared_chat.begin';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelSharedChatSessionBeginEvent;
    };
    'channel.shared_chat.update:1': {
        type: 'channel.shared_chat.update';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelSharedChatSessionUpdateEvent;
    };
    'channel.shared_chat.end:1': {
        type: 'channel.shared_chat.end';
        version: '1';
        condition: ConditionBroadcasterUserIdUserId;
        event: ChannelSharedChatSessionEndEvent;
    };
    'channel.subscribe:1': {
        type: 'channel.subscribe';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelSubscribeEvent;
    };
    'channel.subscription.end:1': {
        type: 'channel.subscription.end';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelSubscriptionEndEvent;
    };
    'channel.subscription.gift:1': {
        type: 'channel.subscription.gift';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelSubscriptionGiftEvent;
    };
    'channel.subscription.message:1': {
        type: 'channel.subscription.message';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelSubscriptionMessageEvent;
    };
    'channel.cheer:1': {
        type: 'channel.cheer';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelCheerEvent;
    };
    'channel.raid:1': {
        type: 'channel.raid';
        version: '1';
        condition: Condition<{
            to_broadcaster_user_id: string;
        } | {
            from_broadcaster_user_id: string;
        }>;
        event: ChannelRaidEvent;
    };
    'channel.ban:1': {
        type: 'channel.ban';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelBanEvent;
    };
    'channel.unban:1': {
        type: 'channel.unban';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelUnbanEvent;
    };
    'channel.unban_request.create:1': {
        type: 'channel.unban_request.create';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelUnbanRequestCreateEvent;
    };
    'channel.unban_request.resolve:1': {
        type: 'channel.unban_request.resolve';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelUnbanRequestResolveEvent;
    };
    'channel.moderate:1': {
        type: 'channel.moderate';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelModerateEventV1;
    };
    'channel.moderate:2': {
        type: 'channel.moderate';
        version: '2';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelModerateEventV2;
    };
    'channel.moderator.add:1': {
        type: 'channel.moderator.add';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelModeratorAddEvent;
    };
    'channel.moderator.remove:1': {
        type: 'channel.moderator.remove';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelModeratorRemoveEvent;
    };
    'channel.guest_star_session.begin:beta': {
        type: 'channel.guest_star_session.begin';
        version: 'beta';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelGuestStarSessionBeginEvent;
    };
    'channel.guest_star_session.end:beta': {
        type: 'channel.guest_star_session.end';
        version: 'beta';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelGuestStarSessionEndEvent;
    };
    'channel.guest_star_guest.update:beta': {
        type: 'channel.guest_star_guest.update';
        version: 'beta';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelGuestStarSettingsUpdateEvent;
    };
    'channel.guest_star_settings.update:beta': {
        type: 'channel.guest_star_settings.update';
        version: 'beta';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelGuestStarSettingsUpdateEvent;
    };
    'channel.channel_points_automatic_reward_redemption.add:1': {
        type: 'channel.channel_points_automatic_reward_redemption.add';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPointsAutomaticRewardRedemptionAddEventV1;
    };
    'channel.channel_points_automatic_reward_redemption.add:2': {
        type: 'channel.channel_points_automatic_reward_redemption.add';
        version: '2';
        condition: ConditionBroadcasterUserId;
        event: ChannelPointsAutomaticRewardRedemptionAddEventV2;
    };
    'channel.channel_points_custom_reward.add:1': {
        type: 'channel.channel_points_custom_reward.add';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPointsCustomRewardAddEvent;
    };
    'channel.channel_points_custom_reward.update:1': {
        type: 'channel.channel_points_custom_reward.update';
        version: '1';
        condition: ConditionBroadcasterRewardId;
        event: ChannelPointsCustomRewardUpdateEvent;
    };
    'channel.channel_points_custom_reward.remove:1': {
        type: 'channel.channel_points_custom_reward.remove';
        version: '1';
        condition: ConditionBroadcasterRewardId;
        event: ChannelPointsCustomRewardRemoveEvent;
    };
    'channel.channel_points_custom_reward_redemption.add:1': {
        type: 'channel.channel_points_custom_reward_redemption.add';
        version: '1';
        condition: ConditionBroadcasterRewardId;
        event: ChannelPointsCustomRewardRedemptionAddEvent;
    };
    'channel.channel_points_custom_reward_redemption.update:1': {
        type: 'channel.channel_points_custom_reward_redemption.update';
        version: '1';
        condition: ConditionBroadcasterRewardId;
        event: ChannelPointsCustomRewardRedemptionUpdateEvent;
    };
    'channel.poll.begin:1': {
        type: 'channel.poll.begin';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPollBeginEvent;
    };
    'channel.poll.progress:1': {
        type: 'channel.poll.progress';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPollProgressEvent;
    };
    'channel.poll.end:1': {
        type: 'channel.poll.end';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPollEndEvent;
    };
    'channel.prediction.begin:1': {
        type: 'channel.prediction.begin';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPredictionBeginEvent;
    };
    'channel.prediction.progress:1': {
        type: 'channel.prediction.progress';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPredictionProgressEvent;
    };
    'channel.prediction.lock:1': {
        type: 'channel.prediction.lock';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPredictionLockEvent;
    };
    'channel.prediction.end:1': {
        type: 'channel.prediction.end';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelPredictionEndEvent;
    };
    'channel.suspicious_user.message:1': {
        type: 'channel.suspicious_user.message';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelSuspiciousUserMessageEvent;
    };
    'channel.suspicious_user.update:1': {
        type: 'channel.suspicious_user.update';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelSuspiciousUserUpdateEvent;
    };
    'channel.vip.add:1': {
        type: 'channel.vip.add';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelVIPAddEvent;
    };
    'channel.vip.remove:1': {
        type: 'channel.vip.remove';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: ChannelVIPRemoveEvent;
    };
    'channel.warning.acknowledge:1': {
        type: 'channel.warning.acknowledge';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelWarningAcknowledgeEvent;
    };
    'channel.warning.send:1': {
        type: 'channel.warning.send';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ChannelWarningSendEvent;
    };
    'channel.charity_campaign.donate:1': {
        type: 'channel.charity_campaign.donate';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: CharityDonationEvent;
    };
    'channel.charity_campaign.start:1': {
        type: 'channel.charity_campaign.start';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: CharityCampaignStartEvent;
    };
    'channel.charity_campaign.progress:1': {
        type: 'channel.charity_campaign.progress';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: CharityCampaignProgressEvent;
    };
    'channel.charity_campaign.stop:1': {
        type: 'channel.charity_campaign.stop';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: CharityCampaignStopEvent;
    };
    'conduit.shard.disabled:1': {
        type: 'conduit.shard.disabled';
        version: '1';
        condition: ConditionClientId;
        event: ConduitShardDisabledEvent;
    };
    'drop.entitlement.grant:1': {
        type: 'drop.entitlement.grant';
        version: '1';
        condition: ConditionOrganizationId | ConditionOrganizationCategoryExtensionClientId;
        event: DropEntitlementGrantEvent;
    };
    'extension.bits_transaction.create:1': {
        type: 'extension.bits_transaction.create';
        version: '1';
        condition: ConditionClientId;
        event: ExtensionBitsTransactionCreateEvent;
    };
    'channel.goal.begin:1': {
        type: 'channel.goal.begin';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: GoalsEvent;
    };
    'channel.goal.progress:1': {
        type: 'channel.goal.progress';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: GoalsEvent;
    };
    'channel.goal.end:1': {
        type: 'channel.goal.end';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: GoalsEndEvent;
    };
    'channel.hype_train.begin:1': {
        type: 'channel.hype_train.begin';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: HypeTrainBeginEvent;
    };
    'channel.hype_train.begin:2': {
        type: 'channel.hype_train.begin';
        version: '2';
        condition: ConditionBroadcasterUserId;
        event: HypeTrainBeginEventV2;
    };
    'channel.hype_train.progress:1': {
        type: 'channel.hype_train.progress';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: HypeTrainProgressEvent;
    };
    'channel.hype_train.progress:2': {
        type: 'channel.hype_train.progress';
        version: '2';
        condition: ConditionBroadcasterUserId;
        event: HypeTrainProgressEventV2;
    };
    'channel.hype_train.end:1': {
        type: 'channel.hype_train.end';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: HypeTrainEndEvent;
    };
    'channel.hype_train.end:2': {
        type: 'channel.hype_train.end';
        version: '2';
        condition: ConditionBroadcasterUserId;
        event: HypeTrainEndEventV2;
    };
    'channel.shield_mode.begin:1': {
        type: 'channel.shield_mode.begin';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ShieldModeBeginEvent;
    };
    'channel.shield_mode.end:1': {
        type: 'channel.shield_mode.end';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ShieldModeEndEvent;
    };
    'channel.shoutout.create:1': {
        type: 'channel.shoutout.create';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ShoutoutCreate;
    };
    'channel.shoutout.receive:1': {
        type: 'channel.shoutout.receive';
        version: '1';
        condition: ConditionBroadcasterModeratorUserId;
        event: ShoutoutReceived;
    };
    'stream.online:1': {
        type: 'stream.online';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: StreamOnlineEvent;
    };
    'stream.offline:1': {
        type: 'stream.offline';
        version: '1';
        condition: ConditionBroadcasterUserId;
        event: StreamOfflineEvent;
    };
    'user.authorization.grant:1': {
        type: 'user.authorization.grant';
        version: '1';
        condition: ConditionClientId;
        event: UserAuthorizationGrantEvent;
    };
    'user.authorization.revoke:1': {
        type: 'user.authorization.revoke';
        version: '1';
        condition: ConditionClientId;
        event: UserAuthorizationRevokeEvent;
    };
    'user.update:1': {
        type: 'user.update';
        version: '1';
        condition: ConditionUserId;
        event: UserUpdateEvent;
    };
    'user.whisper.message:1': {
        type: 'user.whisper.message';
        version: '1';
        condition: ConditionUserId;
        event: WhisperReceivedEvent;
    };
}
type SubscriptionTypeVersionKey = keyof SubscriptionDetailsMap;
type GetSubscriptionDetails<TKey extends SubscriptionTypeVersionKey> = SubscriptionDetailsMap[TKey];
type SpecificSubscriptionRequest<TKey extends SubscriptionTypeVersionKey> = SubscriptionRequest<GetSubscriptionDetails<TKey>['type'], GetSubscriptionDetails<TKey>['version'], GetSubscriptionDetails<TKey>['condition']>;
type AnySubscriptionRequest = {
    [K in SubscriptionTypeVersionKey]: {
        type: SubscriptionDetailsMap[K]['type'];
        version: SubscriptionDetailsMap[K]['version'];
        condition: SubscriptionDetailsMap[K]['condition'];
    };
}[SubscriptionTypeVersionKey] | {
    type: string;
    version: string;
    condition: Record<string, string | number | boolean>;
} | {
    type: string;
    version: string;
    condition: Record<string, string | number | boolean | undefined>;
};

interface NotificationMessageMetadata extends EventSubMessageMetadata {
    message_type: 'notification';
    subscription_type: string;
    subscription_version: string;
}
interface NotificationMessagePayload<TCondition extends Record<string, any> = Record<string, any>, TEvent extends Record<string, any> = Record<string, any>> {
    subscription: EventSubSubscriptionData<TCondition>;
    event: TEvent;
}
declare class NotificationMessage implements EventSubMessage<NotificationMessageMetadata, NotificationMessagePayload> {
    readonly metadata: NotificationMessageMetadata;
    readonly payload: NotificationMessagePayload;
    constructor(rawMessage: any);
    isAutomodMessageHoldV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['automod.message.hold:1']['condition'], SubscriptionDetailsMap['automod.message.hold:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'automod.message.hold';
            subscription_version: '1';
        };
    };
    isAutomodMessageHoldV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['automod.message.hold:2']['condition'], SubscriptionDetailsMap['automod.message.hold:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'automod.message.hold';
            subscription_version: '2';
        };
    };
    isAutomodMessageUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['automod.message.update:1']['condition'], SubscriptionDetailsMap['automod.message.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'automod.message.update';
            subscription_version: '1';
        };
    };
    isAutomodMessageUpdateV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['automod.message.update:2']['condition'], SubscriptionDetailsMap['automod.message.update:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'automod.message.update';
            subscription_version: '2';
        };
    };
    isAutomodSettingsUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['automod.settings.update:1']['condition'], SubscriptionDetailsMap['automod.settings.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'automod.settings.update';
            subscription_version: '1';
        };
    };
    isAutomodTermsUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['automod.terms.update:1']['condition'], SubscriptionDetailsMap['automod.terms.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'automod.terms.update';
            subscription_version: '1';
        };
    };
    isChannelBitsUseV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.bits.use:1']['condition'], SubscriptionDetailsMap['channel.bits.use:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.bits.use';
            subscription_version: '1';
        };
    };
    isChannelUpdateV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.update:2']['condition'], SubscriptionDetailsMap['channel.update:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.update';
            subscription_version: '2';
        };
    };
    isChannelFollowV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.follow:2']['condition'], SubscriptionDetailsMap['channel.follow:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.follow';
            subscription_version: '2';
        };
    };
    isChannelAdBreakBeginV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.ad_break.begin:1']['condition'], SubscriptionDetailsMap['channel.ad_break.begin:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.ad_break.begin';
            subscription_version: '1';
        };
    };
    isChannelChatClearV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat.clear:1']['condition'], SubscriptionDetailsMap['channel.chat.clear:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat.clear';
            subscription_version: '1';
        };
    };
    isChannelChatClearUserMessagesV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat.clear_user_messages:1']['condition'], SubscriptionDetailsMap['channel.chat.clear_user_messages:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat.clear_user_messages';
            subscription_version: '1';
        };
    };
    isChannelChatMessageV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat.message:1']['condition'], SubscriptionDetailsMap['channel.chat.message:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat.message';
            subscription_version: '1';
        };
    };
    isChannelChatMessageDeleteV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat.message_delete:1']['condition'], SubscriptionDetailsMap['channel.chat.message_delete:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat.message_delete';
            subscription_version: '1';
        };
    };
    isChannelChatNotificationV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat.notification:1']['condition'], SubscriptionDetailsMap['channel.chat.notification:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat.notification';
            subscription_version: '1';
        };
    };
    isChannelChatSettingsUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat_settings.update:1']['condition'], SubscriptionDetailsMap['channel.chat_settings.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat_settings.update';
            subscription_version: '1';
        };
    };
    isChannelChatUserMessageHoldV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat.user_message_hold:1']['condition'], SubscriptionDetailsMap['channel.chat.user_message_hold:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat.user_message_hold';
            subscription_version: '1';
        };
    };
    isChannelChatUserMessageUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.chat.user_message_update:1']['condition'], SubscriptionDetailsMap['channel.chat.user_message_update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.chat.user_message_update';
            subscription_version: '1';
        };
    };
    isChannelSharedChatBeginV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.shared_chat.begin:1']['condition'], SubscriptionDetailsMap['channel.shared_chat.begin:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.shared_chat.begin';
            subscription_version: '1';
        };
    };
    isChannelSharedChatUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.shared_chat.update:1']['condition'], SubscriptionDetailsMap['channel.shared_chat.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.shared_chat.update';
            subscription_version: '1';
        };
    };
    isChannelSharedChatEndV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.shared_chat.end:1']['condition'], SubscriptionDetailsMap['channel.shared_chat.end:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.shared_chat.end';
            subscription_version: '1';
        };
    };
    isChannelSubscribeV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.subscribe:1']['condition'], SubscriptionDetailsMap['channel.subscribe:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.subscribe';
            subscription_version: '1';
        };
    };
    isChannelSubscriptionEndV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.subscription.end:1']['condition'], SubscriptionDetailsMap['channel.subscription.end:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.subscription.end';
            subscription_version: '1';
        };
    };
    isChannelSubscriptionGiftV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.subscription.gift:1']['condition'], SubscriptionDetailsMap['channel.subscription.gift:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.subscription.gift';
            subscription_version: '1';
        };
    };
    isChannelSubscriptionMessageV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.subscription.message:1']['condition'], SubscriptionDetailsMap['channel.subscription.message:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.subscription.message';
            subscription_version: '1';
        };
    };
    isChannelCheerV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.cheer:1']['condition'], SubscriptionDetailsMap['channel.cheer:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.cheer';
            subscription_version: '1';
        };
    };
    isChannelRaidV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.raid:1']['condition'], SubscriptionDetailsMap['channel.raid:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.raid';
            subscription_version: '1';
        };
    };
    isChannelBanV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.ban:1']['condition'], SubscriptionDetailsMap['channel.ban:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.ban';
            subscription_version: '1';
        };
    };
    isChannelUnbanV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.unban:1']['condition'], SubscriptionDetailsMap['channel.unban:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.unban';
            subscription_version: '1';
        };
    };
    isChannelUnbanRequestCreateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.unban_request.create:1']['condition'], SubscriptionDetailsMap['channel.unban_request.create:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.unban_request.create';
            subscription_version: '1';
        };
    };
    isChannelUnbanRequestResolveV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.unban_request.resolve:1']['condition'], SubscriptionDetailsMap['channel.unban_request.resolve:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.unban_request.resolve';
            subscription_version: '1';
        };
    };
    isChannelModerateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.moderate:1']['condition'], SubscriptionDetailsMap['channel.moderate:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.moderate';
            subscription_version: '1';
        };
    };
    isChannelModerateV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.moderate:2']['condition'], SubscriptionDetailsMap['channel.moderate:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.moderate';
            subscription_version: '2';
        };
    };
    isChannelModeratorAddV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.moderator.add:1']['condition'], SubscriptionDetailsMap['channel.moderator.add:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.moderator.add';
            subscription_version: '1';
        };
    };
    isChannelModeratorRemoveV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.moderator.remove:1']['condition'], SubscriptionDetailsMap['channel.moderator.remove:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.moderator.remove';
            subscription_version: '1';
        };
    };
    isChannelGuestStarSessionBeginBeta(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.guest_star_session.begin:beta']['condition'], SubscriptionDetailsMap['channel.guest_star_session.begin:beta']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.guest_star_session.begin';
            subscription_version: 'beta';
        };
    };
    isChannelGuestStarSessionEndBeta(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.guest_star_session.end:beta']['condition'], SubscriptionDetailsMap['channel.guest_star_session.end:beta']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.guest_star_session.end';
            subscription_version: 'beta';
        };
    };
    isChannelGuestStarGuestUpdateBeta(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.guest_star_guest.update:beta']['condition'], SubscriptionDetailsMap['channel.guest_star_guest.update:beta']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.guest_star_guest.update';
            subscription_version: 'beta';
        };
    };
    isChannelGuestStarSettingsUpdateBeta(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.guest_star_settings.update:beta']['condition'], SubscriptionDetailsMap['channel.guest_star_settings.update:beta']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.guest_star_settings.update';
            subscription_version: 'beta';
        };
    };
    isChannelChannelPointsAutomaticRewardRedemptionAddV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.channel_points_automatic_reward_redemption.add:1']['condition'], SubscriptionDetailsMap['channel.channel_points_automatic_reward_redemption.add:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.channel_points_automatic_reward_redemption.add';
            subscription_version: '1';
        };
    };
    isChannelChannelPointsAutomaticRewardRedemptionAddV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.channel_points_automatic_reward_redemption.add:2']['condition'], SubscriptionDetailsMap['channel.channel_points_automatic_reward_redemption.add:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.channel_points_automatic_reward_redemption.add';
            subscription_version: '2';
        };
    };
    isChannelChannelPointsCustomRewardAddV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.channel_points_custom_reward.add:1']['condition'], SubscriptionDetailsMap['channel.channel_points_custom_reward.add:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.channel_points_custom_reward.add';
            subscription_version: '1';
        };
    };
    isChannelChannelPointsCustomRewardUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.channel_points_custom_reward.update:1']['condition'], SubscriptionDetailsMap['channel.channel_points_custom_reward.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.channel_points_custom_reward.update';
            subscription_version: '1';
        };
    };
    isChannelChannelPointsCustomRewardRemoveV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.channel_points_custom_reward.remove:1']['condition'], SubscriptionDetailsMap['channel.channel_points_custom_reward.remove:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.channel_points_custom_reward.remove';
            subscription_version: '1';
        };
    };
    isChannelChannelPointsCustomRewardRedemptionAddV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.channel_points_custom_reward_redemption.add:1']['condition'], SubscriptionDetailsMap['channel.channel_points_custom_reward_redemption.add:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.channel_points_custom_reward_redemption.add';
            subscription_version: '1';
        };
    };
    isChannelChannelPointsCustomRewardRedemptionUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.channel_points_custom_reward_redemption.update:1']['condition'], SubscriptionDetailsMap['channel.channel_points_custom_reward_redemption.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.channel_points_custom_reward_redemption.update';
            subscription_version: '1';
        };
    };
    isChannelPollBeginV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.poll.begin:1']['condition'], SubscriptionDetailsMap['channel.poll.begin:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.poll.begin';
            subscription_version: '1';
        };
    };
    isChannelPollProgressV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.poll.progress:1']['condition'], SubscriptionDetailsMap['channel.poll.progress:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.poll.progress';
            subscription_version: '1';
        };
    };
    isChannelPollEndV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.poll.end:1']['condition'], SubscriptionDetailsMap['channel.poll.end:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.poll.end';
            subscription_version: '1';
        };
    };
    isChannelPredictionBeginV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.prediction.begin:1']['condition'], SubscriptionDetailsMap['channel.prediction.begin:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.prediction.begin';
            subscription_version: '1';
        };
    };
    isChannelPredictionProgressV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.prediction.progress:1']['condition'], SubscriptionDetailsMap['channel.prediction.progress:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.prediction.progress';
            subscription_version: '1';
        };
    };
    isChannelPredictionLockV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.prediction.lock:1']['condition'], SubscriptionDetailsMap['channel.prediction.lock:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.prediction.lock';
            subscription_version: '1';
        };
    };
    isChannelPredictionEndV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.prediction.end:1']['condition'], SubscriptionDetailsMap['channel.prediction.end:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.prediction.end';
            subscription_version: '1';
        };
    };
    isChannelSuspiciousUserMessageV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.suspicious_user.message:1']['condition'], SubscriptionDetailsMap['channel.suspicious_user.message:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.suspicious_user.message';
            subscription_version: '1';
        };
    };
    isChannelSuspiciousUserUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.suspicious_user.update:1']['condition'], SubscriptionDetailsMap['channel.suspicious_user.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.suspicious_user.update';
            subscription_version: '1';
        };
    };
    isChannelVipAddV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.vip.add:1']['condition'], SubscriptionDetailsMap['channel.vip.add:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.vip.add';
            subscription_version: '1';
        };
    };
    isChannelVipRemoveV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.vip.remove:1']['condition'], SubscriptionDetailsMap['channel.vip.remove:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.vip.remove';
            subscription_version: '1';
        };
    };
    isChannelWarningAcknowledgeV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.warning.acknowledge:1']['condition'], SubscriptionDetailsMap['channel.warning.acknowledge:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.warning.acknowledge';
            subscription_version: '1';
        };
    };
    isChannelWarningSendV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.warning.send:1']['condition'], SubscriptionDetailsMap['channel.warning.send:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.warning.send';
            subscription_version: '1';
        };
    };
    isChannelCharityCampaignDonateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.charity_campaign.donate:1']['condition'], SubscriptionDetailsMap['channel.charity_campaign.donate:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.charity_campaign.donate';
            subscription_version: '1';
        };
    };
    isChannelCharityCampaignStartV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.charity_campaign.start:1']['condition'], SubscriptionDetailsMap['channel.charity_campaign.start:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.charity_campaign.start';
            subscription_version: '1';
        };
    };
    isChannelCharityCampaignProgressV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.charity_campaign.progress:1']['condition'], SubscriptionDetailsMap['channel.charity_campaign.progress:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.charity_campaign.progress';
            subscription_version: '1';
        };
    };
    isChannelCharityCampaignStopV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.charity_campaign.stop:1']['condition'], SubscriptionDetailsMap['channel.charity_campaign.stop:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.charity_campaign.stop';
            subscription_version: '1';
        };
    };
    isConduitShardDisabledV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['conduit.shard.disabled:1']['condition'], SubscriptionDetailsMap['conduit.shard.disabled:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'conduit.shard.disabled';
            subscription_version: '1';
        };
    };
    isDropEntitlementGrantV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['drop.entitlement.grant:1']['condition'], SubscriptionDetailsMap['drop.entitlement.grant:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'drop.entitlement.grant';
            subscription_version: '1';
        };
    };
    isExtensionBitsTransactionCreateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['extension.bits_transaction.create:1']['condition'], SubscriptionDetailsMap['extension.bits_transaction.create:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'extension.bits_transaction.create';
            subscription_version: '1';
        };
    };
    isChannelGoalBeginV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.goal.begin:1']['condition'], SubscriptionDetailsMap['channel.goal.begin:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.goal.begin';
            subscription_version: '1';
        };
    };
    isChannelGoalProgressV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.goal.progress:1']['condition'], SubscriptionDetailsMap['channel.goal.progress:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.goal.progress';
            subscription_version: '1';
        };
    };
    isChannelGoalEndV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.goal.end:1']['condition'], SubscriptionDetailsMap['channel.goal.end:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.goal.end';
            subscription_version: '1';
        };
    };
    /**
     * @deprecated This method is deprecated use isChannelHypeTrainBeginV2 instead.
     */
    isChannelHypeTrainBeginV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.hype_train.begin:1']['condition'], SubscriptionDetailsMap['channel.hype_train.begin:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.hype_train.begin';
            subscription_version: '1';
        };
    };
    isChannelHypeTrainBeginV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.hype_train.begin:2']['condition'], SubscriptionDetailsMap['channel.hype_train.begin:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.hype_train.begin';
            subscription_version: '2';
        };
    };
    /**
     * @deprecated This method is deprecated use isChannelHypeTrainProgressV2 instead.
     */
    isChannelHypeTrainProgressV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.hype_train.progress:1']['condition'], SubscriptionDetailsMap['channel.hype_train.progress:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.hype_train.progress';
            subscription_version: '1';
        };
    };
    isChannelHypeTrainProgressV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.hype_train.progress:2']['condition'], SubscriptionDetailsMap['channel.hype_train.progress:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.hype_train.progress';
            subscription_version: '2';
        };
    };
    /**
     * @deprecated This method is deprecated use isChannelHypeTrainEndV2 instead.
     */
    isChannelHypeTrainEndV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.hype_train.end:1']['condition'], SubscriptionDetailsMap['channel.hype_train.end:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.hype_train.end';
            subscription_version: '1';
        };
    };
    isChannelHypeTrainEndV2(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.hype_train.end:2']['condition'], SubscriptionDetailsMap['channel.hype_train.end:2']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.hype_train.end';
            subscription_version: '2';
        };
    };
    isChannelShieldModeBeginV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.shield_mode.begin:1']['condition'], SubscriptionDetailsMap['channel.shield_mode.begin:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.shield_mode.begin';
            subscription_version: '1';
        };
    };
    isChannelShieldModeEndV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.shield_mode.end:1']['condition'], SubscriptionDetailsMap['channel.shield_mode.end:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.shield_mode.end';
            subscription_version: '1';
        };
    };
    isChannelShoutoutCreateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.shoutout.create:1']['condition'], SubscriptionDetailsMap['channel.shoutout.create:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.shoutout.create';
            subscription_version: '1';
        };
    };
    isChannelShoutoutReceiveV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['channel.shoutout.receive:1']['condition'], SubscriptionDetailsMap['channel.shoutout.receive:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'channel.shoutout.receive';
            subscription_version: '1';
        };
    };
    isStreamOnlineV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['stream.online:1']['condition'], SubscriptionDetailsMap['stream.online:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'stream.online';
            subscription_version: '1';
        };
    };
    isStreamOfflineV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['stream.offline:1']['condition'], SubscriptionDetailsMap['stream.offline:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'stream.offline';
            subscription_version: '1';
        };
    };
    isUserAuthorizationGrantV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['user.authorization.grant:1']['condition'], SubscriptionDetailsMap['user.authorization.grant:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'user.authorization.grant';
            subscription_version: '1';
        };
    };
    isUserAuthorizationRevokeV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['user.authorization.revoke:1']['condition'], SubscriptionDetailsMap['user.authorization.revoke:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'user.authorization.revoke';
            subscription_version: '1';
        };
    };
    isUserUpdateV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['user.update:1']['condition'], SubscriptionDetailsMap['user.update:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'user.update';
            subscription_version: '1';
        };
    };
    isUserWhisperMessageV1(): this is NotificationMessage & {
        payload: NotificationMessagePayload<SubscriptionDetailsMap['user.whisper.message:1']['condition'], SubscriptionDetailsMap['user.whisper.message:1']['event']>;
        metadata: NotificationMessageMetadata & {
            subscription_type: 'user.whisper.message';
            subscription_version: '1';
        };
    };
}

interface ReconnectMessageMetadata extends EventSubMessageMetadata {
    message_type: 'session_reconnect';
}
interface ReconnectMessagePayload {
    session: EventSubSessionData;
}
type ReconnectMessage = EventSubMessage<ReconnectMessageMetadata, ReconnectMessagePayload>;

type RevocationStatus = 'user_removed' | 'authorization_revoked' | 'version_removed' | 'chat_user_banned' | string;
interface RevocationMessageMetadata extends EventSubMessageMetadata {
    message_type: 'revocation';
    subscription_type: string;
    subscription_version: string;
}
interface RevocationMessagePayload<TCondition extends Record<string, any> = Record<string, any>> {
    subscription: EventSubSubscriptionData<TCondition> & {
        status: RevocationStatus;
    };
}
type RevocationMessage = EventSubMessage<RevocationMessageMetadata, RevocationMessagePayload<any>>;

interface WelcomeMessageMetadata extends EventSubMessageMetadata {
    message_type: 'session_welcome';
}
interface WelcomeMessagePayload {
    session: EventSubSessionData;
}
type WelcomeMessage = EventSubMessage<WelcomeMessageMetadata, WelcomeMessagePayload>;

type TwitchEventSubMessage = WelcomeMessage | KeepaliveMessage | NotificationMessage | ReconnectMessage | RevocationMessage;
interface EventSubMessageMetadata {
    message_id: string;
    message_type: string;
    message_timestamp: string;
    subscription_type?: string;
    subscription_version?: string;
}
interface EventSubTransport {
    method: 'websocket' | 'webhook' | 'conduit';
    session_id?: string;
    connected_at?: string;
    disconnected_at?: string;
    callback?: string;
    conduit_id?: string;
}
interface EventSubSubscriptionData<TCondition extends Record<string, any> = Record<string, any>> {
    id: string;
    status: string;
    type: string;
    version: string;
    cost: number;
    condition: TCondition;
    transport: EventSubTransport;
    created_at: string;
}
interface EventSubSessionData {
    id: string;
    status: 'connected' | 'reconnecting';
    connected_at: string;
    keepalive_timeout_seconds: number | null;
    reconnect_url: string | null;
}
interface EventSubMessage<TMetadata extends EventSubMessageMetadata, TPayload extends Record<string, any> | {}> {
    metadata: TMetadata;
    payload: TPayload;
}
interface EventSubClientConfig {
    clientId: string;
    token: string;
    keepaliveTimeoutSeconds?: number;
    apiBaseUrl?: string;
    websocketUrl?: string;
    reconnectBackoff?: {
        initialDelay?: number;
        maxDelay?: number;
        multiplier?: number;
        maxRetries?: number;
    };
    skipKeepaliveValidation?: boolean;
}
interface SubscriptionRequest<TType extends string, TVersion extends string, TCondition extends Record<string, any>> {
    type: TType;
    version: TVersion;
    condition: TCondition;
}
interface CreateSubscriptionSuccessResponse {
    data: EventSubSubscriptionData<any>[];
    total: number;
    total_cost: number;
    max_total_cost: number;
}
interface TwitchApiErrorResponse {
    error: string;
    status: number;
    message: string;
}
interface GetSubscriptionsSuccessResponse extends CreateSubscriptionSuccessResponse {
    pagination: {
        cursor?: string;
    };
}

interface EventSubClientEvents {
    connect: (session: EventSubSessionData) => void;
    disconnect: (data: {
        code: number;
        reason: string;
    }) => void;
    error: (error: Error | AxiosError<TwitchApiErrorResponse>) => void;
    rawMessage: (message: TwitchEventSubMessage) => void;
    welcome: (message: WelcomeMessage) => void;
    keepalive: (message: KeepaliveMessage) => void;
    reconnect: (message: ReconnectMessage) => void;
    revocation: (message: RevocationMessage) => void;
    notification: (message: NotificationMessage) => void;
}
declare interface EventSubClient {
    on<K extends keyof EventSubClientEvents>(event: K, listener: EventSubClientEvents[K]): this;
    once<K extends keyof EventSubClientEvents>(event: K, listener: EventSubClientEvents[K]): this;
    emit<K extends keyof EventSubClientEvents>(event: K, ...args: Parameters<EventSubClientEvents[K]>): boolean;
    off<K extends keyof EventSubClientEvents>(event: K, listener: EventSubClientEvents[K]): this;
    removeAllListeners<K extends keyof EventSubClientEvents>(event?: K): this;
}
declare class EventSubClient extends EventEmitter {
    private readonly clientId;
    private token;
    private readonly apiClient;
    private readonly wsHandler;
    private activeSubscriptions;
    constructor(options: EventSubClientConfig);
    updateToken(newToken: string): void;
    connect(): void;
    disconnect(): void;
    isConnected(): boolean;
    getSessionId(): string | null;
    subscribe(this: EventSubClient, requests: AnySubscriptionRequest | AnySubscriptionRequest[]): Promise<CreateSubscriptionSuccessResponse[]>;
    private _doSubscribe;
    unsubscribe(ids: string | string[]): Promise<void>;
    getAllSubscriptions(filter?: {
        status: string;
    } | {
        type: string;
    } | {
        user_id: string;
    }): Promise<EventSubSubscriptionData<any>[]>;
    getSubscriptionsPage(filter?: {
        status: string;
    } | {
        type: string;
    } | {
        user_id: string;
    }, after?: string): Promise<GetSubscriptionsSuccessResponse>;
    private handleReconnect;
}

export { type AnySubscriptionRequest, type AutomodMessageHoldEventV1, type AutomodMessageHoldEventV2, type AutomodMessageUpdateEventV1, type AutomodMessageUpdateEventV2, type AutomodSettingsUpdateEvent, type AutomodTermsUpdateEvent, type ChannelAdBreakBeginEvent, type ChannelBanEvent, type ChannelBitsUseEvent, type ChannelChatClearEvent, type ChannelChatClearUserMessagesEvent, type ChannelChatMessageDeleteEvent, type ChannelChatMessageEvent, type ChannelChatNotificationEvent, type ChannelChatSettingsUpdateEvent, type ChannelChatUserMessageHoldEvent, type ChannelChatUserMessageUpdateEvent, type ChannelCheerEvent, type ChannelFollowEvent, type ChannelGuestStarGuestUpdateEvent, type ChannelGuestStarSessionBeginEvent, type ChannelGuestStarSessionEndEvent, type ChannelGuestStarSettingsUpdateEvent, type ChannelModerateEventV1, type ChannelModerateEventV2, type ChannelModeratorAddEvent, type ChannelModeratorRemoveEvent, type ChannelPointsAutomaticRewardRedemptionAddEventV1, type ChannelPointsAutomaticRewardRedemptionAddEventV2, type ChannelPointsCustomRewardAddEvent, type ChannelPointsCustomRewardRedemptionAddEvent, type ChannelPointsCustomRewardRedemptionUpdateEvent, type ChannelPointsCustomRewardRemoveEvent, type ChannelPointsCustomRewardUpdateEvent, type ChannelPollBeginEvent, type ChannelPollEndEvent, type ChannelPollProgressEvent, type ChannelPredictionBeginEvent, type ChannelPredictionEndEvent, type ChannelPredictionLockEvent, type ChannelPredictionProgressEvent, type ChannelRaidEvent, type ChannelSharedChatSessionBeginEvent, type ChannelSharedChatSessionEndEvent, type ChannelSharedChatSessionUpdateEvent, type ChannelSubscribeEvent, type ChannelSubscriptionEndEvent, type ChannelSubscriptionGiftEvent, type ChannelSubscriptionMessageEvent, type ChannelSuspiciousUserMessageEvent, type ChannelSuspiciousUserUpdateEvent, type ChannelUnbanEvent, type ChannelUnbanRequestCreateEvent, type ChannelUnbanRequestResolveEvent, type ChannelUpdateEvent, type ChannelVIPAddEvent, type ChannelVIPRemoveEvent, type ChannelWarningAcknowledgeEvent, type ChannelWarningSendEvent, type CharityCampaignProgressEvent, type CharityCampaignStartEvent, type CharityCampaignStopEvent, type CharityDonationEvent, type ConduitShardDisabledEvent, type CreateSubscriptionSuccessResponse, type DropEntitlementGrantEvent, EventSubClient, type EventSubClientConfig, type EventSubMessage, type EventSubMessageMetadata, type EventSubSessionData, type EventSubSubscriptionData, type EventSubTransport, type ExtensionBitsTransactionCreateEvent, type GetSubscriptionsSuccessResponse, type GoalsEndEvent, type GoalsEvent, type HypeTrainBeginEvent, type HypeTrainBeginEventV2, type HypeTrainEndEvent, type HypeTrainEndEventV2, type HypeTrainProgressEvent, type HypeTrainProgressEventV2, type KeepaliveMessage, type KeepaliveMessageMetadata, type KeepaliveMessagePayload, NotificationMessage, type NotificationMessageMetadata, type NotificationMessagePayload, type ReconnectMessage, type ReconnectMessageMetadata, type ReconnectMessagePayload, type RevocationMessage, type RevocationMessageMetadata, type RevocationMessagePayload, type RevocationStatus, type ShieldModeBeginEvent, type ShieldModeEndEvent, type ShoutoutCreate, type ShoutoutReceived, type SpecificSubscriptionRequest, type StreamOfflineEvent, type StreamOnlineEvent, type SubscriptionDetailsMap, type SubscriptionRequest, type SubscriptionTypeVersionKey, type TwitchApiErrorResponse, type TwitchEventSubMessage, type UserAuthorizationGrantEvent, type UserAuthorizationRevokeEvent, type UserUpdateEvent, type WelcomeMessage, type WelcomeMessageMetadata, type WelcomeMessagePayload, type WhisperReceivedEvent, EventSubClient as default };