"""
Base interface for all Stream Feed types. Activities is omitted so users can implement custom activity types if need be. They can also implement the StreamActivityInterface
"""
interface StreamFeedInterface {
    """
    The StreamID for this feed.
    """
    id: StreamID!
    """
    The feeds that follow this feed.
    """
    followers: [StreamFlatFeed!]
    """
    The feeds that this feed follows.
    """
    following: [StreamFlatFeed!]
    """
    The count of followers for this feed.
    """
    followerCount(slugs: [String!]): Int!
    """
    The count of feeds that this feed follows.
    """
    followingCount(slugs: [String!]): Int!
}

type StreamFlatFeed implements StreamFeedInterface {
    """
    The activities for this feed.
    """
    activities(options: StreamActivityQueryOptions): [StreamActivity!]
    """
    The StreamID for this feed.
    """
    id: StreamID!
    """
    The feeds that follow this feed.
    """
    followers: [StreamFlatFeed!]
    """
    The feeds that this feed follows.
    """
    following: [StreamFlatFeed!]
    """
    The count of followers for this feed.
    """
    followerCount(slugs: [String!]): Int!
    """
    The count of feeds that this feed follows.
    """
    followingCount(slugs: [String!]): Int!
}

type StreamAggregatedFeed implements StreamFeedInterface {
    """
    The activities for this feed.
    """
    activities(options: StreamActivityQueryOptions): [StreamAggregatedActivity!]
    """
    The StreamID for this feed.
    """
    id: StreamID!
    """
    The feeds that follow this feed.
    """
    followers: [StreamFlatFeed!]
    """
    The feeds that this feed follows.
    """
    following: [StreamFlatFeed!]
    """
    The count of followers for this feed.
    """
    followerCount(slugs: [String!]): Int!
    """
    The count of feeds that this feed follows.
    """
    followingCount(slugs: [String!]): Int!
}

type StreamNotificationFeed implements StreamFeedInterface {
    """
    The activities for this feed.
    """
    activities(options: StreamActivityQueryOptions): [StreamNotificationActivity!]
    """
    The StreamID for this feed.
    """
    id: StreamID!
    """
    The feeds that follow this feed.
    """
    followers: [StreamFlatFeed!]
    """
    The feeds that this feed follows.
    """
    following: [StreamFlatFeed!]
    """
    The count of followers for this feed.
    """
    followerCount(slugs: [String!]): Int!
    """
    The count of feeds that this feed follows.
    """
    followingCount(slugs: [String!]): Int!
}

type StreamRealtimeFeed {
    """
    All activities deleted by this update
    """
    deleted: [UUID!]
    """
    A pair of foreign_id and time of the deleted activities
    """
    deleted_foreign_ids: [UUID!]
    """
    All activities created by this update
    """
    new: [StreamActivity!]
    """
    Time of the update in ISO format
    """
    published_at: String!
}
