igpapi — Instagram private API Simulator for Node.js (API reference) 4.14.0
    Preparing search index...

    Variable ExploreScreenConst

    ExploreScreen: ScreenDefinition<
        "Explore",
        "tab",
        undefined,
        {
            recent: readonly { fullName: string; userId: string; username: string }[];
        },
        ExploreState,
        IgApiError
        | RequestError
        | ParseError
        | TransportError
        | ScreenDataError,

            | PlainJsonApiHttp
            | Signature
            | MobileSession
            | MobileDevice
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation
            | MobileUserFlows
            | AndroidThrottlingDetector
            | AndroidQuickPromotionStash,
        {
            openSearchInput: (
                self: ScreenHandle,
                state: ExploreState,
            ) => ScreenEdgeBound<
                ScreenEdgeShape<
                    ScreenDefinition<
                        "SearchInput",
                        "screen",
                        | {
                            lastSeenMedia?: readonly {
                                mediaIds: ...;
                                surfaceType: ...;
                                timestamp: ...;
                            }[];
                            query: string;
                            session?: {
                                clientUuidRankToken?: (...)
                                | (...);
                                searchSessionId: string;
                                serpSessionId?: (...) | (...);
                                typeaheadSessionId?: (...) | (...);
                            };
                        }
                        | {
                            recent: readonly {
                                fullName: string;
                                userId: string;
                                username: string;
                            }[];
                        },
                        {
                            query: string;
                            rankToken: string;
                            recentAccounts: readonly {
                                fullName: string;
                                userId: string;
                                username: string;
                            }[];
                            results: readonly (
                                | {
                                    __typename: "unknown";
                                    item: { kind: ...; kindKey?: ...; raw: ... };
                                    key: string;
                                }
                                | {
                                    __typename: "XDTTypeaheadSearchKeyword";
                                    key: string;
                                    keyword_lazified: { id: ...; name: ...; user?: ... };
                                }
                                | {
                                    __typename: "XDTTypeaheadSearchUser";
                                    key: string;
                                    rank_token?: (...)
                                    | (...);
                                    user: {
                                        full_name?: ...;
                                        id: ...;
                                        is_private?: ...;
                                        is_verified?: ...;
                                        latest_reel_media?: ...;
                                        profile_pic_url?: ...;
                                        search_serp_type?: ...;
                                        username: ...;
                                    };
                                }
                                | {
                                    __typename: "XDTTypeaheadSearchHashtag";
                                    hashtag: { id: ...; media_count?: ...; name: ... };
                                    key: string;
                                }
                                | {
                                    __typename: "XDTTypeaheadSearchOverfetchedKeywords";
                                    key: string;
                                    keywords: readonly (...)[];
                                    num_keywords_to_show?: (...) | (...);
                                    query_text: string;
                                }
                            )[];
                            session?: {
                                clientUuidRankToken: string;
                                searchSessionId: string;
                                serpSessionId?: string;
                                typeaheadSessionId: string;
                            };
                        },
                        SearchInputState,
                        | IgApiError
                        | RequestError
                        | ParseError
                        | TransportError
                        | SchemaError
                        | GraphqlRootFieldMissingError,
                        MobileDevice
                        | GraphqlJsonHttp
                        | MobileApplication
                        | MobileNavigation,
                        {
                            change: (
                                self: ScreenHandle,
                                state: SearchInputState,
                            ) => ScreenDataMember<
                                ScreenDataShape,
                                (...args: [query: ...]) => Effect<(...), (...), (...)>,
                            >;
                            search: (
                                self: ScreenHandle,
                                state: SearchInputState,
                            ) => ScreenEdgeBound<
                                ScreenEdgeShape<
                                    ScreenDefinition<
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                    >,
                                    readonly [(...)],
                                    "search_result",
                                    AndroidScreens,
                                >,
                                (...args: readonly [(...)]) => Effect<(...), (...), (...)>,
                            >;
                        },
                        {
                            recentAccounts: {
                                at: "recentAccounts";
                                item: ScreenItemDefinition<
                                    "RecentSearchAccount",
                                    { fullName: string; userId: string; username: string },
                                    { fullName: string; userId: string; username: string },
                                    RecentSearchAccountState,
                                    never,
                                    never,
                                    { openProfile: (self: ..., state: ...) => ... },
                                    undefined,
                                    never,
                                >;
                                key: "userId";
                                source: ScreenNoItemNodes;
                            };
                            results: {
                                at: "results";
                                by: "__typename";
                                key: "key";
                                source: ScreenNoItemNodes;
                                variants: {
                                    unknown: ScreenItemDefinition<
                                        "SearchInputUnknownResult",
                                        { __typename: ...; item: ...; key: ... },
                                        { __typename: ...; item: ...; key: ... },
                                        Record<(...), (...)>,
                                        never,
                                        never,
                                        {},
                                        undefined,
                                        never,
                                    >;
                                    XDTTypeaheadSearchHashtag: ScreenItemDefinition<
                                        "SearchInputHashtagResult",
                                        { __typename: ...; hashtag: ...; key: ... },
                                        { __typename: ...; hashtag: ...; key: ... },
                                        Record<(...), (...)>,
                                        never,
                                        never,
                                        {},
                                        undefined,
                                        never,
                                    >;
                                    XDTTypeaheadSearchKeyword: ScreenItemDefinition<
                                        "SearchInputKeywordResult",
                                        { __typename: ...; key: ...; keyword_lazified: ... },
                                        { __typename: ...; key: ...; keyword_lazified: ... },
                                        Record<(...), (...)>,
                                        never,
                                        never,
                                        {},
                                        undefined,
                                        never,
                                    >;
                                    XDTTypeaheadSearchOverfetchedKeywords: ScreenItemDefinition<
                                        "SearchInputOverfetchedKeywordsResult",
                                        {
                                            __typename: ...;
                                            key: ...;
                                            keywords: ...;
                                            num_keywords_to_show?: ...;
                                            query_text: ...;
                                        },
                                        {
                                            __typename: ...;
                                            key: ...;
                                            keywords: ...;
                                            num_keywords_to_show?: ...;
                                            query_text: ...;
                                        },
                                        Record<(...), (...)>,
                                        never,
                                        never,
                                        {},
                                        undefined,
                                        never,
                                    >;
                                    XDTTypeaheadSearchUser: ScreenItemDefinition<
                                        "SearchInputUserResult",
                                        { __typename: ...; key: ...; rank_token?: ...; user: ... },
                                        { __typename: ...; key: ...; rank_token?: ...; user: ... },
                                        TypeaheadUserRowState,
                                        never,
                                        never,
                                        { openProfile: ... },
                                        undefined,
                                        never,
                                    >;
                                };
                            };
                        },
                        never,
                        never,
                    >,
                    [],
                    "button",
                    AndroidScreens,
                >,
                (
                    ...args: [],
                ) => Effect<
                    AssembledHandle<
                        "SearchInput",
                        "screen",
                        {
                            query: string;
                            rankToken: string;
                            recentAccounts: readonly {
                                fullName: string;
                                userId: string;
                                username: string;
                            }[];
                            results: readonly (
                                | { __typename: ...; item: ...; key: ... }
                                | { __typename: ...; key: ...; keyword_lazified: ... }
                                | { __typename: ...; key: ...; rank_token?: ...; user: ... }
                                | { __typename: ...; hashtag: ...; key: ... }
                                | {
                                    __typename: ...;
                                    key: ...;
                                    keywords: ...;
                                    num_keywords_to_show?: ...;
                                    query_text: ...;
                                }
                            )[];
                            session?: {
                                clientUuidRankToken: string;
                                searchSessionId: string;
                                serpSessionId?: (...)
                                | (...);
                                typeaheadSessionId: string;
                            };
                        },
                        {
                            change: (
                                self: ScreenHandle,
                                state: SearchInputState,
                            ) => ScreenDataMember<ScreenDataShape, (...args: ...) => ...>;
                            search: (
                                self: ScreenHandle,
                                state: SearchInputState,
                            ) => ScreenEdgeBound<
                                ScreenEdgeShape<(...), (...), (...), (...)>,
                                (...args: ...) => ...,
                            >;
                        },
                        {
                            recentAccounts: {
                                at: "recentAccounts";
                                item: ScreenItemDefinition<
                                    "RecentSearchAccount",
                                    { fullName: ...; userId: ...; username: ... },
                                    { fullName: ...; userId: ...; username: ... },
                                    RecentSearchAccountState,
                                    never,
                                    never,
                                    { openProfile: ... },
                                    undefined,
                                    never,
                                >;
                                key: "userId";
                                source: ScreenNoItemNodes;
                            };
                            results: {
                                at: "results";
                                by: "__typename";
                                key: "key";
                                source: ScreenNoItemNodes;
                                variants: {
                                    unknown: ScreenItemDefinition<
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                    >;
                                    XDTTypeaheadSearchHashtag: ScreenItemDefinition<
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                    >;
                                    XDTTypeaheadSearchKeyword: ScreenItemDefinition<
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                    >;
                                    XDTTypeaheadSearchOverfetchedKeywords: ScreenItemDefinition<
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                    >;
                                    XDTTypeaheadSearchUser: ScreenItemDefinition<
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                        (...),
                                    >;
                                };
                            };
                        },
                        ScreenHandle,
                        "required",
                        true,
                        never,
                        AndroidScreens,
                    >,
                    | IgApiError
                    | RequestError
                    | ParseError
                    | TransportError
                    | SchemaError
                    | GraphqlRootFieldMissingError
                    | ScreenDataError
                    | ScreenEnterConcurrentError
                    | ScreenEdgeInputError,
                    | MobileDevice
                    | GraphqlJsonHttp
                    | MobileApplication
                    | MobileNavigation
                    | ScreenStack
                    | ScreenCatalog,
                >,
            >;
        },
        Record<never, never>,
        never,
        never,
    > = ...

    The Explore tab (the bottom bar's search entry): ExploreFragment, module explore_popular, reached from the feed's search tab (main_search). It shows a search field over a grid of posts.

    Wire: the enter sends the playback configuration (clips/autoplay_configs/) at once, waits the app's own fragment settle, then asks for the recent searches, the search null state and — when the process's stash holds no fresh answer for the tab's surfaces — the search surface's quick promotions, as the the app's tab does; the recent request goes out while the feed is still in front (fbsearch/recent_searches reports the feed's endpoint, the null state reports the tab's), so the enter yields the navigation between them. When the account's popular-keyword cache is more than a day old the tab also refreshes it, right after the configuration. The tab's quick-promotion slot (EXPLORE) fires its four screen-load triggers once the fragment is loaded — after the autoplay configuration, which the app sends without them — and they run over the fragment's requests and the slot's batch, so the recent searches and the null state carry 332008142,332009826,332019700,332020325 exactly as the app's do. The grid itself is not requested by the tab: the app prefetches it at launch (discover/topical_explore with is_prefetch=true) and the tab tap sends no grid request at all, so the grid is the process's launch prefetch, not this screen's data. The launch burst does not model that prefetch yet, so the screen's data is what its own enter fetches: the recent accounts.

    openSearchInput opens the search field with the recent accounts and sends nothing (the 451 app's field open has no request of its own).

    Confirmed on Android 451: the feed's search tab opened, then the field; and the tab, the field and its first recent account opened into a profile.

    Screenshot: none; the tab's grid shows other accounts' posts, which are not the test accounts' to publish. The screen ships without one.

    Guide: Explore tab