Skip to content
Snippets Groups Projects
types.d.ts 20.78 KiB
type StreamUser = {
    __typename: 'User'
    displayName: string
    id: string
    login: string
    profileImageURL: string
    primaryColorHex: string
}

type Game = {
    __typename: 'Game'
    boxArtURL: string
    displayName: string
    id: string
    name: string
}

type FreeformTag = {
    __typename: 'FreeformTag'
    id: string
    name: string
}

type StreamNode = {
    __typename: 'Stream'
    broadcaster: StreamUser
    freeformTags: FreeformTag[]
    game: Game
    id: string
    previewImageURL: string
    title: string
    type: string
    viewersCount: number
}

type StreamEdge = {
    __typename: 'StreamEdge'
    cursor: string
    trackingID: string
    node: StreamNode
}

type SearchSuggestionChannel = {
    __typename: 'SearchSuggestionChannel'
    id: string
    isLive: boolean
    isVerified: boolean
    login: string
    profileImageURL: string
    user: {
        id: string
        stream: {
            id: string
            game: {
                id: string
                __typename: 'Game'
            }
            __typename: 'Stream'
        }
        __typename: 'User'
    }
}

type SearchSuggestionNode = {
    __typename: 'SearchSuggestion'
    content: SearchSuggestionChannel
    matchingCharacters: {
        __typename: 'SearchSuggestionHighlight'
        start: number
        end: number
    }
    id: string
    text: string
}

type SearchSuggestionEdge = {
    __typename: 'SearchSuggestionEdge'
    node: SearchSuggestionNode
}

type DataWrapper<Data> = {
    data: Data
    extensions: {
        durationMilliseconds: number
        operationName: string
        requestID: string
    }
}

export type HomepageResponse = DataWrapper<{
    streams: {
        edges: StreamEdge[]
        pageInfo: {
            __typename: 'PageInfo'
            hasNextPage: boolean
        }
    }
}>

export type SearchSuggestionsResponse = DataWrapper<{
    searchSuggestions: {
        __typename: 'SearchSuggestionsConnection'
        tracking: {
            __typename: 'SearchSuggestionTracking'
            modelTrackingID: string
            responseID: string
        }
        edges: SearchSuggestionEdge[]
    }
}>

type ChannelSearchResponse = {
    broadcastSettings: {
        __typename: 'BroadcastSettings'
        id: string
        title: string
    }
    displayName: string
    followers: {
        totalCount: number
        __typename: 'FollowerConnection'
    }
    id: string
    lastBroadcast: {
        __typename: 'Broadcast'
        id: string
        startedAt: string
    }
    login: string
    profileImageURL: string
    description: string
    channel: {
        __typename: 'Channel'
        id: string
        schedule: {
            __typename: 'Schedule'
            nextSegment: {
                __typename: 'ScheduleSegment'
                id: string
                startTime: string
                title: string
            }
            id: string
        }
    }
    self: any
    latestVideo: {
        __typename: 'VideoConnection'
        edges: {
            __typename: 'VideoEdge'
            node: {
                __typename: 'Video'
                id: string
                title: string
                lengthSeconds: number
                previewThumbnailURL: string
            }
        }[]
    }
    topClip: {
        __typename: 'ClipConnection'
        edges: {
            __typename: 'ClipEdge'
            node: {
                __typename: 'Clip'
                id: string
                title: string
                durationSeconds: number
                thumbnailURL: string
                slug: string
            }
        }[]
    }
    roles: {
        isPartner: boolean
        __typename: 'UserRoles'
    }
    stream: {
        __typename: 'Stream'
        id: string
        viewersCount: number
        previewImageURL: string
        game: {
            __typename: 'Game'
            id: string
            name: string
            displayName: string
        }
        freeformTags: {
            __typename: 'FreeformTag'
            id: string
            name: string
        }[]
    }
    watchParty: any
    __typename: 'User'
}

type GameSearchResponse = {
    __typename: 'Game'
    id: string
    displayName: string
    name: string
    boxArtURL: string
    tags: {
        __typename: 'Tag'
        id: string
        tagName: string
        localizedName: string
        isLanguageTag: boolean
    }[]
    viewersCount: number
}

type VideoSearchResponse = {
    __typename: 'Video'
    id: string
    title: string
    lengthSeconds: number
    previewThumbnailURL: string
    createdAt: string
    viewCount: number
    owner: {
        __typename: 'User'
        displayName: string
        id: string
        login: string
        roles: {
            __typename: 'UserRoles'
            isPartner: boolean
        }
    }
    game: {
        __typename: 'Game'
        id: string
        displayName: string
        name: string
    }
}

type RelatedLiveSearchResponse = {
    __typename: 'User'
    id: string
    watchParty: any
    stream: {
        __typename: 'Stream'
        id: string
        viewersCount: number
        previewImageURL: string
        game: {
            __typename: 'Game'
            id: string
            name: string
        }
        broadcaster: {
            __typename: 'User'
            id: string
            primaryColorHex: string
            login: string
            displayName: string
            broadcastSettings: {
                id: string
                title: string
                __typename: 'BroadcastSettings'
            }
            roles: {
                __typename: 'UserRoles'
                isPartner: boolean
            }
        }
    }
}

type SearchEdgeWrapper<ItemType> = {
    __typename: string
    score: number
    totalMatches: number
    cursor: string
    edges: { trackingID: string; item: ItemType; __typename: 'SearchForEdge' }[]
}

export type AllSearchResponse = DataWrapper<{
    searchFor: {
        __typename: 'SearchFor'
        channels: SearchEdgeWrapper<ChannelSearchResponse>
        channelsWithTag: SearchEdgeWrapper<ChannelSearchResponse>
        games: SearchEdgeWrapper<GameSearchResponse>
        videos: SearchEdgeWrapper<VideoSearchResponse>
        relatedLiveChannels: SearchEdgeWrapper<RelatedLiveSearchResponse>
    }
}>

type TeamBase = {
    __typename: 'Team'
    id: string
    displayName: string
    name: string
}

export type StreamMetadataResponse = DataWrapper<{
    user: {
        __typename: 'User'
        id: string
        primaryColorHex?: string
        isPartner: boolean
        profileImageURL: string
        primaryTeam: TeamBase
        squadStream: Object
        channel: {
            __typename: 'Channel'
            id: string
            chanlets?: any[]
        }
        lastBroadcast: {
            __typename: 'Broadcast'
            id: string
            title: string
        }
        stream: {
            __typename: 'Stream'
            id: string
            type: string
            game: {
                __typename: 'Game'
                id: string
                name: string
            }
        }
    }
}>

export type UseLiveResponse = DataWrapper<{
    user: {
        __typename: 'User'
        id: string
        login: string
        stream: {
            __typename: 'Stream'
            id: string
            createdAt: string
        }
    }
}>

export type ChannelAboutResponse = DataWrapper<{
    currentUser?: any
    user: {
        __typename: 'User'
        id: string
        displayName: string
        description: string
        isPartner: boolean
        primaryColorHex: string
        profileImageURL: string
        followers: {
            __typename: 'FollowerConnection'
            totalCount: number
        }
        channel: {
            __typename: 'Channel'
            id: string
            schedule: {
                __typename: 'Schedule'
                id: string
                nextSegment: {
                    __typename: 'ScheduleSegment'
                    id: string
                    startAt: string
                    hasReminder: boolean
                }
            }
            socialMedias: {
                id: string
                name: string
                title: string
                url: string
                __typename: 'SocialMedia'
            }[]
        }
        lastBroadcast: {
            __typename: 'Broadcast'
            id: string
            game: {
                __typename: 'Game'
                id: string
                displayName: string
            }
        }
        primaryTeam: TeamBase
        videos: {
            __typename: 'VideoConnection'
            edges: {
                __typename: 'VideoEdge'
                node: {
                    __typename: 'Video'
                    id: string
                    status: string
                    game: {
                        __typename: 'Game'
                        id: string
                        displayName: string
                    }
                }
            }[]
        }
    }
}>

export type ViewCountResponse = DataWrapper<{
    user: {
        __typename: 'User'
        id: string
        stream: {
            __typename: 'Stream'
            id: string
            viewersCount: number
        }
    }
}>
export type ChannelShellResponse = DataWrapper<{
    userOrError: {
        __typename: 'User'
        id: string
        displayName: string
        login: string
        primaryColorHex: string
        profileImageURL: string
        bannerImageURL: string
        stream: {
            __typename: 'Stream'
            id: string
            viewersCount: number
        }
        channel: {
            __typename: 'Channel'
            id: string
            self: {
                __typename: 'ChannelSelfEdge'
                isAuthorized: boolean
                restrictionType?: string
            }
            trailer: {
                __typename: 'Trailer'
                video?: {
                    __typename: 'Video'
                    id: string
                    title: string
                    lengthSeconds: number
                    previewThumbnailURL: string
                }
            }
            home: {
                __typename: 'ChannelHome'
                preferences: {
                    __typename: 'ChannelHomePreferences'
                    heroPreset: string
                }
            }
        }
    }
}>

export type PersonalSection = {
    __typename: 'PersonalSectionChannel'
    trackingID: string
    promotionsCampaignID: string
    user: {
        __typename: 'User'
        id: string
        displayName: string
        login: string
        profileImageURL: string
        primaryColorHex: string
        broadcastSettings: {
            __typename: 'BroadcastSettings'
            title: string
            id: string
        }
    }
    label: string
    content: {
        __typename: 'Stream'
        id: string
        viewersCount: number
        previewImageURL: string
        game: {
            __typename: 'Game'
            id: string
            displayName: string
            name: string
        }
        broadcaster: {
            __typename: 'User'
            id: string
            broadcastSettings: {
                __typename: 'BroadcastSettings'
                title: string
                id: string
            }
        }
    }
}

export type PersonalSectionsResponse = DataWrapper<{
    personalSections: {
        type: 'RECOMMENDED_SECTION'
        title: {
            __typename: 'PersonalSectionTitle'
            localizedFallback: string
            localizedTokens: {
                __typename: 'PersonalSectionTextToken'
                value: string
            }[]
        }
        items: PersonalSection[]
    }[]
}>

export type PersonalSectionsFollowedResponse = DataWrapper<{
    personalSections: {
        type: 'RECS_FOLLOWED_SECTION'
        title: {
            __typename: 'PersonalSectionTitle'
            localizedFallback: string
            localizedTokens: {
                __typename: 'PersonalSectionTextToken'
                value: string
            }[]
        }
        items: {
            __typename: 'PersonalSectionChannel'
            trackingID: string
            promotionsCampaignID: string
            user: {
                __typename: 'User'
                id: string
                displayName: string
                login: string
                profileImageURL: string
                primaryColorHex: string
                broadcastSettings: {
                    __typename: 'BroadcastSettings'
                    title: string
                    id: string
                }
            }
            label: string
            content: {
                __typename: 'VideoConnection' | 'Stream'
                id: string
                previewImageURL: string
                broadcaster: {
                    __typename: 'User'
                    id: string
                    broadcastSettings: {
                        __typename: 'BroadcastSettings'
                        title: string
                        id: string
                    }
                }
                viewersCount: number
                game: {
                    __typename: 'Game'
                    id: string
                    displayName: string
                    name: string
                }
                type: 'live'
            }
        }[]
    }[]
}>

export type PlaybackAccessTokenResponse = DataWrapper<{
    streamPlaybackAccessToken?: {
        __typename: 'StreamPlaybackAccessToken'
        value: string
        signature: string
    }
    videoPlaybackAccessToken?: {
        __typename: 'PlaybackAccessToken'
        value: string
        signature: string
    }
}>

export type ChannelVideoCoreResponse = DataWrapper<{
    video: {
        __typename: 'Video'
        id: string
        owner: {
            __typename: 'User'
            id: string
            login: string
            displayName: string
            primaryColorHex: string
            profileImageURL: string
            stream?: Object
            channel: {
                __typename: 'Channel'
                id: string
                self: {
                    __typename: 'ChannelSelfEdge'
                    isAuthorized: boolean
                    restrictionType?: string
                }
                trailer: {
                    __typename: 'Trailer'
                    video?: {
                        __typename: 'Video'
                        id: string
                        title: string
                        lengthSeconds: number
                        previewThumbnailURL: string
                    }
                }
            }
        }
    }
}>

export type VideoMetadataResponse = DataWrapper<{
    user: {
        __typename: 'User'
        id: string
        primaryColorHex: string
        isPartner: boolean
        profileImageURL: string
        lastBroadcast: {
            __typename: 'Broadcast'
            id: string
            startedAt: string
        }
    }
    video: {
        __typename: 'Video'
        id: string
        title: string
        description?: string
        previewThumbnailURL: string
        createdAt: string
        viewCount: number
        publishedAt: string
        lengthSeconds: number
        broadcastType: string
        owner: {
            __typename: 'User'
            id: string
            login: string
            displayName: string
        }
        game: {
            __typename: 'Game'
            id: string
            displayName: string
            name: string
            boxArtURL: string
        }
    }
}>

export type VideoTowerResponse = DataWrapper<{
    user: {
        __typename: 'User'
        id: string
        videos: {
            __typename: 'VideoConnection'
            pageInfo: {
                __typename: 'PageInfo'
                hasNextPage: boolean
            }
            edges: {
                __typename: 'VideoEdge'
                cursor: string
                node: {
                    __typename: 'Video'
                    id: string
                    animatedPreviewURL: string
                    game: {
                        __typename: 'Game'
                        id: string
                        displayName: string
                        name: string
                        boxArtURL: string
                    }
                    lengthSeconds: number
                    owner: {
                        __typename: 'User'
                        id: string
                        login: string
                        displayName: string
                        profileImageURL: string
                        primaryColorHex: string
                    }
                    previewThumbnailURL: string
                    publishedAt: string
                    self: {
                        __typename: 'VideoSelfEdge'
                        isRestricted: boolean
                        viewingHistory: {
                            __typename: 'VideoViewingHistory'
                            viewedAt: string
                        }
                    }
                    title: string
                    viewCount: number
                    contentTags: {
                        __typename: 'Tag'
                        id: string
                        tagName: string
                        localizedName: string
                        isLanguageTag: boolean
                    }[]
                }
            }[]
        }
    }
}>

export type BrowsePopularResponse = DataWrapper<{
    streams: {
        __typename: 'StreamConnection'
        pageInfo: {
            __typename: 'PageInfo'
            hasNextPage: boolean
        }
        edges: {
            __typename: 'StreamEdge'
            cursor: string
            trackingID: string
            node: {
                __typename: 'Stream'
                id: string
                title: string
                viewersCount: number
                previewImageURL: string
                broadcaster: {
                    __typename: 'User'
                    id: string
                    displayName: string
                    login: string
                    profileImageURL: string
                    primaryColorHex: string
                }
                freeformTags: {
                    __typename: 'FreeformTag'
                    id: string
                    name: string
                }[]
                game: {
                    __typename: 'Game'
                    id: string
                    displayName: string
                    name: string
                    boxArtURL: string
                }
                type: 'live'
            }
        }[]
    }
}>

export type PagerBaseContext = {
    page: number
    page_size: number
}

export type SearchContext = {
    q: string
    page_size: number
    cursor?: string
    results_returned: number
}

export type HomeContext = {
    cursor?: string
    page_size: number
}

export type URLContext = {
    url: string
    page_size: number
    cursor?: string
}

export type LiveEventsContext = {
    // object of emoji id to emoji name
    emojis: { [key: string]: string }
    events: LiveEvent[]
    channel_id: string
    login: string
}

export type RecentChat = {
    id: string
    deletedAt?: string
    sentAt: string
    content: {
        text: string
        fragments: {
            text: string
            content?:
                | {
                      emoteID: string
                      setID: string
                      token: string
                      __typename: 'Emote'
                  }
                | {
                      id: string
                      login: string
                      displayName: string
                      __typename: 'User'
                  }
            __typename: 'MessageFragment'
        }[]
        __typename: 'MessageContent'
    }
    parentMessage?: string
    sender: {
        id: string
        login: string
        chatColor: string
        displayName: string
        __typename: 'User'
    }
    senderBadges: {
        setID: string
        version: string
        id: string
        __typename: 'Badge'
    }[]
}

export type RecentChatsResponse = DataWrapper<{
    channel: {
        __typename: 'Channel'
        id: string
        recentChatMessages: RecentChat[]
    }
}>

type Badge = {
    id: string
    setID: string
    version: string
    title: string
    image1x: string
    image2x: string
    image4x: string
    clickAction: string
    clickURL: string
    __typename: 'Badge'
}

type BadgeUser = {
    id: string
    primaryColorHex: string
    broadcastBadges: Badge[]
    self: {
        selectedBadge?: Badge
        displayBadges: Badge[]
        __typename: 'UserSelfConnection'
    }
    squadStream: any
    __typename: 'User'
}

export type BadgeListResponse = DataWrapper<{
    user: BadgeUser
    badges: Badge[]
}>