IGPAPI
    Preparing search index...

    Variable loginHomepageActionsConst Internal

    loginHomepageActions: {
        createNewAccount: (
            self: ScreenHandle,
            state: {
                aac: string;
                attestationChallengeNonce?: string;
                loginEntryPoint: "login-home" | "landing-screen";
                oauthQpl: { instanceId: number; markerId: number };
                passwordTextInputId: string;
                qpl: { instanceId: number; markerId: number };
                recoveryTicket?: string & Brand<"RecoveryActionTicket">;
                usernameTextInputId: string;
                waterfallId: string;
            },
        ) => ScreenEdgeBound<
            ScreenEdgeShape<RegistrationPhoneNumberDefinition, [], "button">,
            (
                ...args: [],
            ) => Effect<
                AssembledHandle<
                    "RegistrationPhoneNumber",
                    "screen",
                    {},
                    {
                        submitPhoneNumber: (
                            self: ScreenHandle,
                            state: State,
                        ) => (
                            ...args: [phoneNumber: string],
                        ) => Effect<
                            AssembledHandle<
                                (...),
                                (...),
                                (...),
                                (...),
                                (...),
                                (...),
                                (...),
                                (...),
                            >,

                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...),
                            (...) | (...) | (...) | (...) | (...) | (...) | (...),
                        >;
                    },
                    Record<never, never>,
                    ScreenHandle,
                    "required",
                    true,
                >,

                    | IgNotFoundError
                    | IgRateLimitError
                    | IgSpamError
                    | IgSignupBlockError
                    | IgCheckpointError
                    | IgAccountSuspendedError
                    | IgAccountDisabledError
                    | IgCookieConsentRequiredError
                    | IgLoginRequiredError
                    | IgUserLoggedOutError
                    | IgChallengeWrongCodeError
                    | IgPrivateUserError
                    | IgInactiveUserError
                    | IgSentryBlockError
                    | IgUploadVideoError
                    | IgConfigureVideoError
                    | IgExactUserNotFoundError
                    | IgUserIdNotFoundError
                    | IgNetworkError
                    | IgDecompressionError
                    | IgParseError
                    | IgIpBlockError
                    | IgLoginTwoFactorRequiredError
                    | IgRequestsLimitError
                    | IgNotResolvableError
                    | RequestError
                    | ParseError
                    | TransportError
                    | IgBloks429Error
                    | InvalidSkipOrdinalsError
                    | ScreenDataError
                    | ScreenEnterNavigationError
                    | ScreenEnterConcurrentError
                    | ScreenEdgeInputError
                    | ScreenNotOnTopError,
                | PlainJsonApiHttp
                | MobileSession
                | MobileDevice
                | GraphqlJsonHttp
                | MobileApplication
                | BloksHttp
                | MobileNavigation
                | ScreenCatalog
                | ScreenStack,
            >,
        >;
        logIn: (
            self: LoginHomepageFrame,
            state: {
                aac: string;
                attestationChallengeNonce?: string;
                loginEntryPoint: "login-home" | "landing-screen";
                oauthQpl: { instanceId: number; markerId: number };
                passwordTextInputId: string;
                qpl: { instanceId: number; markerId: number };
                recoveryTicket?: string & Brand<"RecoveryActionTicket">;
                usernameTextInputId: string;
                waterfallId: string;
            },
        ) => (
            ...args: [credentials: LoginInput],
        ) => Effect<
            LoginHomepageAnswer,
            | IgNotFoundError
            | IgRateLimitError
            | IgSpamError
            | IgSignupBlockError
            | IgCheckpointError
            | IgAccountSuspendedError
            | IgAccountDisabledError
            | IgCookieConsentRequiredError
            | IgLoginRequiredError
            | IgUserLoggedOutError
            | IgChallengeWrongCodeError
            | IgPrivateUserError
            | IgInactiveUserError
            | IgSentryBlockError
            | IgUploadVideoError
            | IgConfigureVideoError
            | IgExactUserNotFoundError
            | IgUserIdNotFoundError
            | IgNetworkError
            | IgDecompressionError
            | IgParseError
            | IgIpBlockError
            | IgLoginTwoFactorRequiredError
            | IgRequestsLimitError
            | IgNotResolvableError
            | RequestError
            | ParseError
            | TransportError
            | PasswordEncryptionKeysUnavailableError
            | LoginBloksParseError
            | LoginBloksRejectedError
            | LoginTwoFactorEntrypointParseError
            | LoginAccountRecoveryRequiredError
            | LoginAccountRecoveryContinueError
            | IgBloks429Error
            | IgLoginBadPasswordError
            | InvalidSkipOrdinalsError
            | AccountRecoveryBloksIssuedParamsMissingError
            | ScreenDataError
            | ScreenFeedPageError
            | ScreenEnterNavigationError
            | ScreenEnterConcurrentError
            | ScreenLaunchFirstScreenError
            | ScreenLaunchScreenNotInCatalogError
            | ScreenLaunchSplashNotOnTopError
            | ScreenLaunchSplashScreenError
            | AppAlreadyStartedError
            | ProcessNotSignedInError
            | AccountRecoveryTicketUnknownError
            | ScreenEdgeInputError
            | ScreenNotOnTopError
            | TwoFactorTicketUnknownError,
            | PlainJsonApiHttp
            | MobileSession
            | MobileDevice
            | MobileApplication
            | SessionHeaderParser
            | BloksHttp
            | MobileNavigation
            | AccountRecoveryTickets
            | ScreenCatalog
            | ScreenStack
            | TwoFactorTickets,
        >;
        openApproveFromAnotherDevice: <Self extends ScreenHandle>(
            self: Self,
            state: {
                aac: string;
                attestationChallengeNonce?: string;
                loginEntryPoint: "login-home" | "landing-screen";
                oauthQpl: { instanceId: number; markerId: number };
                passwordTextInputId: string;
                qpl: { instanceId: number; markerId: number };
                recoveryTicket?: string & Brand<"RecoveryActionTicket">;
                usernameTextInputId: string;
                waterfallId: string;
            },
        ) => ScreenEdgeBound<
            ScreenEdgeShape<
                ScreenDefinition<
                    "LoginTwoFactorEntrypoint",
                    "screen",
                    undefined,
                    { ticket: string & Brand<"TwoFactorApprovalTicket"> },
                    LoginTwoFactorApproveFromAnotherDeviceState,

                        | InvalidSkipOrdinalsError
                        | ScreenEnterNavigationError
                        | TwoFactorTicketUnknownError,
                    MobileNavigation
                    | TwoFactorTickets,
                    {
                        checkApproval: (
                            self: ScreenHandle,
                            state: LoginTwoFactorApproveFromAnotherDeviceState,
                        ) => (
                            ...args: [],
                        ) => Effect<
                            LoginTwoFactorApproveFromAnotherDeviceCheck,
                            | IgNotFoundError
                            | IgRateLimitError
                            | IgSpamError
                            | IgSignupBlockError
                            | IgCheckpointError
                            | IgAccountSuspendedError
                            | IgAccountDisabledError
                            | IgCookieConsentRequiredError
                            | IgLoginRequiredError
                            | IgUserLoggedOutError
                            | IgChallengeWrongCodeError
                            | IgPrivateUserError
                            | IgInactiveUserError
                            | IgSentryBlockError
                            | IgUploadVideoError
                            | IgConfigureVideoError
                            | IgExactUserNotFoundError
                            | IgUserIdNotFoundError
                            | IgNetworkError
                            | IgDecompressionError
                            | IgParseError
                            | IgIpBlockError
                            | IgLoginTwoFactorRequiredError
                            | IgRequestsLimitError
                            | IgNotResolvableError
                            | RequestError
                            | ParseError
                            | TransportError
                            | LoginBloksParseError
                            | IgBloks429Error
                            | InvalidSkipOrdinalsError
                            | ScreenDataError
                            | ScreenFeedPageError
                            | ScreenEnterNavigationError
                            | ScreenEnterConcurrentError
                            | ScreenLaunchFirstScreenError
                            | ScreenLaunchScreenNotInCatalogError
                            | ScreenLaunchSplashNotOnTopError
                            | ScreenLaunchSplashScreenError
                            | AppAlreadyStartedError
                            | ProcessNotSignedInError
                            | ScreenNotOnTopError
                            | TwoFactorTicketUnknownError
                            | LoginTwoFactorApprovalDeclinedError,
                            | MobileSession
                            | MobileDevice
                            | MobileApplication
                            | SessionHeaderParser
                            | BloksHttp
                            | MobileNavigation
                            | ScreenStack
                            | TwoFactorTickets,
                        >;
                        tryAnotherWay: (
                            self: ScreenHandle,
                            state: LoginTwoFactorApproveFromAnotherDeviceState,
                        ) => ScreenEdgeBound<
                            ScreenEdgeShape<
                                ScreenDefinition<
                                    "LoginTwoFactorMethodPicker",
                                    "screen",
                                    { ticket?: ... },
                                    { offeredMethods: ...; preselected?: ...; ticket: ... },
                                    LoginTwoFactorChooseMethodState,
                                    (...) | (...) | (...) | (...),
                                    (...) | (...) | (...) | (...) | (...),
                                    { chooseAuthenticationApp: ... },
                                    Record<(...), (...)>,
                                    never,
                                >,
                                [],
                                "button",
                            >,
                            (
                                ...args: [],
                            ) => Effect<
                                AssembledHandle<
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                >,
                                (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                                (...) | (...) | (...) | (...) | (...) | (...) | (...),
                            >,
                        >;
                    },
                    Record<never, never>,
                    never,
                >,
                [],
                "button",
            >,
            (
                ...args: [],
            ) => Effect<
                AssembledHandle<
                    "LoginTwoFactorEntrypoint",
                    "screen",
                    { ticket: string & Brand<"TwoFactorApprovalTicket"> },
                    {
                        checkApproval: (
                            self: ScreenHandle,
                            state: LoginTwoFactorApproveFromAnotherDeviceState,
                        ) => (
                            ...args: [],
                        ) => Effect<
                            LoginTwoFactorApproveFromAnotherDeviceCheck,
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...),
                            (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                        >;
                        tryAnotherWay: (
                            self: ScreenHandle,
                            state: LoginTwoFactorApproveFromAnotherDeviceState,
                        ) => ScreenEdgeBound<
                            ScreenEdgeShape<
                                ScreenDefinition<
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                >,
                                [],
                                "button",
                            >,
                            (...args: []) => Effect<(...), (...), (...)>,
                        >;
                    },
                    Record<never, never>,
                    Self,
                    "required",
                    true,
                >,

                    | InvalidSkipOrdinalsError
                    | ScreenDataError
                    | ScreenEnterNavigationError
                    | ScreenEnterConcurrentError
                    | ScreenEdgeInputError
                    | ScreenNotOnTopError
                    | TwoFactorTicketUnknownError,
                MobileNavigation
                | ScreenCatalog
                | ScreenStack
                | TwoFactorTickets,
            >,
        >;
        openEmailCode: <Self extends ScreenHandle>(
            self: Self,
            state: {
                aac: string;
                attestationChallengeNonce?: string;
                loginEntryPoint: "login-home" | "landing-screen";
                oauthQpl: { instanceId: number; markerId: number };
                passwordTextInputId: string;
                qpl: { instanceId: number; markerId: number };
                recoveryTicket?: string & Brand<"RecoveryActionTicket">;
                usernameTextInputId: string;
                waterfallId: string;
            },
        ) => ScreenEdgeBound<
            ScreenEdgeShape<
                ScreenDefinition<
                    "AccountRecoveryEmailCode",
                    "screen",
                    undefined,
                    {
                        maskedContact?: string;
                        ticket: string & Brand<"LastResortCodeEntryTicket">;
                    },
                    {
                        maskedContact?: string;
                        ticket: string & Brand<"LastResortCodeEntryTicket">;
                    },
                    | BloksHttpError
                    | InvalidSkipOrdinalsError
                    | AccountRecoveryBloksIssuedParamsMissingError
                    | ScreenEnterNavigationError
                    | AccountRecoveryTicketUnknownError,
                    | MobileSession
                    | MobileDevice
                    | MobileApplication
                    | BloksHttp
                    | MobileNavigation
                    | AccountRecoveryTickets,
                    {
                        requestNewCode: (
                            self: ScreenHandle,
                            state: {
                                maskedContact?: string;
                                ticket: string & Brand<"LastResortCodeEntryTicket">;
                            },
                        ) => (
                            ...args: [],
                        ) => Effect<
                            AccountRecoveryFirstScreen
                            | undefined,

                                | IgNotFoundError
                                | IgRateLimitError
                                | IgSpamError
                                | IgSignupBlockError
                                | IgCheckpointError
                                | IgAccountSuspendedError
                                | IgAccountDisabledError
                                | IgCookieConsentRequiredError
                                | IgLoginRequiredError
                                | IgUserLoggedOutError
                                | IgChallengeWrongCodeError
                                | IgPrivateUserError
                                | IgInactiveUserError
                                | IgSentryBlockError
                                | IgUploadVideoError
                                | IgConfigureVideoError
                                | IgExactUserNotFoundError
                                | IgUserIdNotFoundError
                                | IgNetworkError
                                | IgDecompressionError
                                | IgParseError
                                | IgIpBlockError
                                | IgLoginTwoFactorRequiredError
                                | IgRequestsLimitError
                                | IgNotResolvableError
                                | RequestError
                                | ParseError
                                | TransportError
                                | LoginBloksParseError
                                | IgBloks429Error
                                | InvalidSkipOrdinalsError
                                | AccountRecoveryBloksUnknownResponseError
                                | AccountRecoveryBloksInvalidCodeError
                                | ScreenDataError
                                | ScreenFeedPageError
                                | ScreenEnterNavigationError
                                | ScreenEnterConcurrentError
                                | ScreenLaunchFirstScreenError
                                | ScreenLaunchScreenNotInCatalogError
                                | ScreenLaunchSplashNotOnTopError
                                | ScreenLaunchSplashScreenError
                                | AppAlreadyStartedError
                                | ProcessNotSignedInError
                                | AccountRecoveryTicketUnknownError
                                | ScreenNotOnTopError,
                            | MobileSession
                            | MobileDevice
                            | MobileApplication
                            | SessionHeaderParser
                            | BloksHttp
                            | MobileNavigation
                            | AccountRecoveryTickets
                            | ScreenStack,
                        >;
                        submitCode: (
                            self: ScreenHandle,
                            state: {
                                maskedContact?: string;
                                ticket: string & Brand<"LastResortCodeEntryTicket">;
                            },
                        ) => (
                            ...args: [code: string],
                        ) => Effect<
                            AccountRecoveryFirstScreen,
                            | IgNotFoundError
                            | IgRateLimitError
                            | IgSpamError
                            | IgSignupBlockError
                            | IgCheckpointError
                            | IgAccountSuspendedError
                            | IgAccountDisabledError
                            | IgCookieConsentRequiredError
                            | IgLoginRequiredError
                            | IgUserLoggedOutError
                            | IgChallengeWrongCodeError
                            | IgPrivateUserError
                            | IgInactiveUserError
                            | IgSentryBlockError
                            | IgUploadVideoError
                            | IgConfigureVideoError
                            | IgExactUserNotFoundError
                            | IgUserIdNotFoundError
                            | IgNetworkError
                            | IgDecompressionError
                            | IgParseError
                            | IgIpBlockError
                            | IgLoginTwoFactorRequiredError
                            | IgRequestsLimitError
                            | IgNotResolvableError
                            | RequestError
                            | ParseError
                            | TransportError
                            | LoginBloksParseError
                            | IgBloks429Error
                            | InvalidSkipOrdinalsError
                            | AccountRecoveryBloksUnknownResponseError
                            | AccountRecoveryBloksInvalidCodeError
                            | ScreenDataError
                            | ScreenFeedPageError
                            | ScreenEnterNavigationError
                            | ScreenEnterConcurrentError
                            | ScreenLaunchFirstScreenError
                            | ScreenLaunchScreenNotInCatalogError
                            | ScreenLaunchSplashNotOnTopError
                            | ScreenLaunchSplashScreenError
                            | AppAlreadyStartedError
                            | ProcessNotSignedInError
                            | AccountRecoveryTicketUnknownError
                            | ScreenNotOnTopError,
                            | MobileSession
                            | MobileDevice
                            | MobileApplication
                            | SessionHeaderParser
                            | BloksHttp
                            | MobileNavigation
                            | AccountRecoveryTickets
                            | ScreenStack,
                        >;
                    },
                    Record<never, never>,
                    never,
                >,
                [],
                "button",
            >,
            (
                ...args: [],
            ) => Effect<
                AssembledHandle<
                    "AccountRecoveryEmailCode",
                    "screen",
                    {
                        maskedContact?: string;
                        ticket: string & Brand<"LastResortCodeEntryTicket">;
                    },
                    {
                        requestNewCode: (
                            self: ScreenHandle,
                            state: { maskedContact?: string; ticket: string & Brand<(...)> },
                        ) => (
                            ...args: [],
                        ) => Effect<
                            (...)
                            | (...),

                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...)
                                | (...),
                            (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                        >;
                        submitCode: (
                            self: ScreenHandle,
                            state: { maskedContact?: string; ticket: string & Brand<(...)> },
                        ) => (
                            ...args: [code: string],
                        ) => Effect<
                            AccountRecoveryFirstScreen,
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...)
                            | (...),
                            (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                        >;
                    },
                    Record<never, never>,
                    Self,
                    "required",
                    true,
                >,

                    | BloksHttpError
                    | InvalidSkipOrdinalsError
                    | AccountRecoveryBloksIssuedParamsMissingError
                    | ScreenDataError
                    | ScreenEnterNavigationError
                    | ScreenEnterConcurrentError
                    | AccountRecoveryTicketUnknownError
                    | ScreenEdgeInputError
                    | ScreenNotOnTopError,
                | MobileSession
                | MobileDevice
                | MobileApplication
                | BloksHttp
                | MobileNavigation
                | AccountRecoveryTickets
                | ScreenCatalog
                | ScreenStack,
            >,
        >;
        openMethodPicker: <Self extends ScreenHandle>(
            self: Self,
            state: {
                aac: string;
                attestationChallengeNonce?: string;
                loginEntryPoint: "login-home" | "landing-screen";
                oauthQpl: { instanceId: number; markerId: number };
                passwordTextInputId: string;
                qpl: { instanceId: number; markerId: number };
                recoveryTicket?: string & Brand<"RecoveryActionTicket">;
                usernameTextInputId: string;
                waterfallId: string;
            },
        ) => ScreenEdgeBound<
            ScreenEdgeShape<
                ScreenDefinition<
                    "LoginTwoFactorMethodPicker",
                    "screen",
                    { ticket?: string & Brand<"TwoFactorApprovalTicket"> },
                    {
                        offeredMethods: readonly (
                            | "approve_from_another_device"
                            | "whatsapp"
                            | "totp"
                            | "sms"
                            | "backup_codes"
                        )[];
                        preselected?: | "approve_from_another_device"
                        | "whatsapp"
                        | "totp"
                        | "sms"
                        | "backup_codes";
                        ticket: string & Brand<"TwoFactorPickerTicket">;
                    },
                    LoginTwoFactorChooseMethodState,
                    | BloksHttpError
                    | InvalidSkipOrdinalsError
                    | ScreenEnterNavigationError
                    | TwoFactorTicketUnknownError,
                    | MobileDevice
                    | MobileApplication
                    | BloksHttp
                    | MobileNavigation
                    | TwoFactorTickets,
                    {
                        chooseAuthenticationApp: (
                            self: ScreenHandle,
                            state: LoginTwoFactorChooseMethodState,
                        ) => ScreenEdgeBound<
                            ScreenEdgeShape<
                                ScreenDefinition<
                                    "LoginTwoFactorEnterTotpCode",
                                    "screen",
                                    { ticket: ... },
                                    { ticket: ... },
                                    LoginTwoFactorAuthenticationAppCodeState,
                                    (...) | (...) | (...) | (...) | (...),
                                    (...) | (...) | (...) | (...) | (...),
                                    { checkApproval: ...; submitCode: ... },
                                    Record<(...), (...)>,
                                    never,
                                >,
                                [],
                                "button",
                            >,
                            (
                                ...args: [],
                            ) => Effect<
                                AssembledHandle<
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                >,
                                (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                                (...) | (...) | (...) | (...) | (...) | (...) | (...),
                            >,
                        >;
                    },
                    Record<never, never>,
                    never,
                >,
                [],
                "button",
            >,
            (
                ...args: [],
            ) => Effect<
                AssembledHandle<
                    "LoginTwoFactorMethodPicker",
                    "screen",
                    {
                        offeredMethods: readonly (
                            | "approve_from_another_device"
                            | "whatsapp"
                            | "totp"
                            | "sms"
                            | "backup_codes"
                        )[];
                        preselected?: | "approve_from_another_device"
                        | "whatsapp"
                        | "totp"
                        | "sms"
                        | "backup_codes";
                        ticket: string & Brand<"TwoFactorPickerTicket">;
                    },
                    {
                        chooseAuthenticationApp: (
                            self: ScreenHandle,
                            state: LoginTwoFactorChooseMethodState,
                        ) => ScreenEdgeBound<
                            ScreenEdgeShape<
                                ScreenDefinition<
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                >,
                                [],
                                "button",
                            >,
                            (...args: []) => Effect<(...), (...), (...)>,
                        >;
                    },
                    Record<never, never>,
                    Self,
                    "required",
                    true,
                >,

                    | BloksHttpError
                    | InvalidSkipOrdinalsError
                    | ScreenDataError
                    | ScreenEnterNavigationError
                    | ScreenEnterConcurrentError
                    | ScreenEdgeInputError
                    | ScreenNotOnTopError
                    | TwoFactorTicketUnknownError,
                | MobileDevice
                | MobileApplication
                | BloksHttp
                | MobileNavigation
                | ScreenCatalog
                | ScreenStack
                | TwoFactorTickets,
            >,
        >;
        recoverPassword: (
            self: ScreenHandle,
            state: {
                aac: string;
                attestationChallengeNonce?: string;
                loginEntryPoint: "login-home" | "landing-screen";
                oauthQpl: { instanceId: number; markerId: number };
                passwordTextInputId: string;
                qpl: { instanceId: number; markerId: number };
                recoveryTicket?: string & Brand<"RecoveryActionTicket">;
                usernameTextInputId: string;
                waterfallId: string;
            },
        ) => ScreenEdgeBound<
            ScreenEdgeShape<
                ScreenDefinition<
                    "AccountRecoverySearch",
                    "screen",
                    { aac: string; ticket?: string & Brand<"RecoveryActionTicket"> },
                    {
                        aac: string;
                        searchScreenType: string;
                        searchTicket: string & Brand<"SearchTicket">;
                        textInputId: string;
                        waterfallId: string;
                    },
                    {
                        aac: string;
                        searchScreenType: string;
                        searchTicket: string & Brand<"SearchTicket">;
                        textInputId: string;
                        waterfallId: string;
                    },
                    | BloksHttpError
                    | InvalidSkipOrdinalsError
                    | AccountRecoveryBloksIssuedParamsMissingError
                    | ScreenEnterNavigationError
                    | AccountRecoveryTicketUnknownError,
                    | MobileDevice
                    | MobileApplication
                    | BloksHttp
                    | MobileNavigation
                    | AccountRecoveryTickets,
                    {
                        findAccount: (
                            self: ScreenHandle,
                            state: {
                                aac: string;
                                searchScreenType: string;
                                searchTicket: string & Brand<"SearchTicket">;
                                textInputId: string;
                                waterfallId: string;
                            },
                        ) => ScreenEdgeBound<
                            ScreenEdgeShape<
                                ScreenDefinition<
                                    "AccountRecoveryAuthenticationConfirmation",
                                    "screen",
                                    { identifier: ...; ticket: ... },
                                    { ticket: ... },
                                    { ticket: ... },
                                    (...) | (...) | (...) | (...) | (...) | (...),
                                    (...) | (...) | (...) | (...) | (...),
                                    { logInWithCode: ... },
                                    Record<(...), (...)>,
                                    never,
                                >,
                                readonly [string],
                                "button",
                            >,
                            (
                                ...args: readonly [string],
                            ) => Effect<
                                AssembledHandle<
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                >,

                                    | (...)
                                    | (...)
                                    | (...)
                                    | (...)
                                    | (...)
                                    | (...)
                                    | (...)
                                    | (...)
                                    | (...)
                                    | (...),
                                (...) | (...) | (...) | (...) | (...) | (...) | (...),
                            >,
                        >;
                    },
                    Record<never, never>,
                    never,
                >,
                [],
                "button",
            >,
            (
                ...args: [],
            ) => Effect<
                AssembledHandle<
                    "AccountRecoverySearch",
                    "screen",
                    {
                        aac: string;
                        searchScreenType: string;
                        searchTicket: string & Brand<"SearchTicket">;
                        textInputId: string;
                        waterfallId: string;
                    },
                    {
                        findAccount: (
                            self: ScreenHandle,
                            state: {
                                aac: string;
                                searchScreenType: string;
                                searchTicket: string & Brand<(...)>;
                                textInputId: string;
                                waterfallId: string;
                            },
                        ) => ScreenEdgeBound<
                            ScreenEdgeShape<
                                ScreenDefinition<
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                    (...),
                                >,
                                readonly [(...)],
                                "button",
                            >,
                            (...args: readonly [(...)]) => Effect<(...), (...), (...)>,
                        >;
                    },
                    Record<never, never>,
                    ScreenHandle,
                    "required",
                    true,
                >,

                    | BloksHttpError
                    | InvalidSkipOrdinalsError
                    | AccountRecoveryBloksIssuedParamsMissingError
                    | ScreenDataError
                    | ScreenEnterNavigationError
                    | ScreenEnterConcurrentError
                    | AccountRecoveryTicketUnknownError
                    | ScreenEdgeInputError
                    | ScreenNotOnTopError,
                | MobileDevice
                | MobileApplication
                | BloksHttp
                | MobileNavigation
                | AccountRecoveryTickets
                | ScreenCatalog
                | ScreenStack,
            >,
        >;
    } = ...

    The login home's actions, keyed exactly as the frame carries them.

    Type Declaration

    • createNewAccount: (
          self: ScreenHandle,
          state: {
              aac: string;
              attestationChallengeNonce?: string;
              loginEntryPoint: "login-home" | "landing-screen";
              oauthQpl: { instanceId: number; markerId: number };
              passwordTextInputId: string;
              qpl: { instanceId: number; markerId: number };
              recoveryTicket?: string & Brand<"RecoveryActionTicket">;
              usernameTextInputId: string;
              waterfallId: string;
          },
      ) => ScreenEdgeBound<
          ScreenEdgeShape<RegistrationPhoneNumberDefinition, [], "button">,
          (
              ...args: [],
          ) => Effect<
              AssembledHandle<
                  "RegistrationPhoneNumber",
                  "screen",
                  {},
                  {
                      submitPhoneNumber: (
                          self: ScreenHandle,
                          state: State,
                      ) => (
                          ...args: [phoneNumber: string],
                      ) => Effect<
                          AssembledHandle<
                              (...),
                              (...),
                              (...),
                              (...),
                              (...),
                              (...),
                              (...),
                              (...),
                          >,

                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...),
                          (...) | (...) | (...) | (...) | (...) | (...) | (...),
                      >;
                  },
                  Record<never, never>,
                  ScreenHandle,
                  "required",
                  true,
              >,

                  | IgNotFoundError
                  | IgRateLimitError
                  | IgSpamError
                  | IgSignupBlockError
                  | IgCheckpointError
                  | IgAccountSuspendedError
                  | IgAccountDisabledError
                  | IgCookieConsentRequiredError
                  | IgLoginRequiredError
                  | IgUserLoggedOutError
                  | IgChallengeWrongCodeError
                  | IgPrivateUserError
                  | IgInactiveUserError
                  | IgSentryBlockError
                  | IgUploadVideoError
                  | IgConfigureVideoError
                  | IgExactUserNotFoundError
                  | IgUserIdNotFoundError
                  | IgNetworkError
                  | IgDecompressionError
                  | IgParseError
                  | IgIpBlockError
                  | IgLoginTwoFactorRequiredError
                  | IgRequestsLimitError
                  | IgNotResolvableError
                  | RequestError
                  | ParseError
                  | TransportError
                  | IgBloks429Error
                  | InvalidSkipOrdinalsError
                  | ScreenDataError
                  | ScreenEnterNavigationError
                  | ScreenEnterConcurrentError
                  | ScreenEdgeInputError
                  | ScreenNotOnTopError,
              | PlainJsonApiHttp
              | MobileSession
              | MobileDevice
              | GraphqlJsonHttp
              | MobileApplication
              | BloksHttp
              | MobileNavigation
              | ScreenCatalog
              | ScreenStack,
          >,
      >

      The login home's "Create new account": the registration's first screen, "What's your phone number?". The recorded button answer (aymh_create_account_button.async) is the target screen's enter, so the transition itself sends nothing; the login home stays under it.

    • logIn: (
          self: LoginHomepageFrame,
          state: {
              aac: string;
              attestationChallengeNonce?: string;
              loginEntryPoint: "login-home" | "landing-screen";
              oauthQpl: { instanceId: number; markerId: number };
              passwordTextInputId: string;
              qpl: { instanceId: number; markerId: number };
              recoveryTicket?: string & Brand<"RecoveryActionTicket">;
              usernameTextInputId: string;
              waterfallId: string;
          },
      ) => (
          ...args: [credentials: LoginInput],
      ) => Effect<
          LoginHomepageAnswer,
          | IgNotFoundError
          | IgRateLimitError
          | IgSpamError
          | IgSignupBlockError
          | IgCheckpointError
          | IgAccountSuspendedError
          | IgAccountDisabledError
          | IgCookieConsentRequiredError
          | IgLoginRequiredError
          | IgUserLoggedOutError
          | IgChallengeWrongCodeError
          | IgPrivateUserError
          | IgInactiveUserError
          | IgSentryBlockError
          | IgUploadVideoError
          | IgConfigureVideoError
          | IgExactUserNotFoundError
          | IgUserIdNotFoundError
          | IgNetworkError
          | IgDecompressionError
          | IgParseError
          | IgIpBlockError
          | IgLoginTwoFactorRequiredError
          | IgRequestsLimitError
          | IgNotResolvableError
          | RequestError
          | ParseError
          | TransportError
          | PasswordEncryptionKeysUnavailableError
          | LoginBloksParseError
          | LoginBloksRejectedError
          | LoginTwoFactorEntrypointParseError
          | LoginAccountRecoveryRequiredError
          | LoginAccountRecoveryContinueError
          | IgBloks429Error
          | IgLoginBadPasswordError
          | InvalidSkipOrdinalsError
          | AccountRecoveryBloksIssuedParamsMissingError
          | ScreenDataError
          | ScreenFeedPageError
          | ScreenEnterNavigationError
          | ScreenEnterConcurrentError
          | ScreenLaunchFirstScreenError
          | ScreenLaunchScreenNotInCatalogError
          | ScreenLaunchSplashNotOnTopError
          | ScreenLaunchSplashScreenError
          | AppAlreadyStartedError
          | ProcessNotSignedInError
          | AccountRecoveryTicketUnknownError
          | ScreenEdgeInputError
          | ScreenNotOnTopError
          | TwoFactorTicketUnknownError,
          | PlainJsonApiHttp
          | MobileSession
          | MobileDevice
          | MobileApplication
          | SessionHeaderParser
          | BloksHttp
          | MobileNavigation
          | AccountRecoveryTickets
          | ScreenCatalog
          | ScreenStack
          | TwoFactorTickets,
      >

      The identified login: oauth token fetch with the typed username, then send_login_request. Its answer continues the process into the feed, or opens the two-factor approval screen or the method picker, or the last-resort recovery code-entry screen — each as a normal edge the login home stays under. The handle it takes its edges from is the login home's own frame (LoginHomepageFrame), so each edge returns a handle back()-typed to that frame without an assertion.

      Each call is one login, as written: two concurrent calls send two logins.

    • openApproveFromAnotherDevice: <Self extends ScreenHandle>(
          self: Self,
          state: {
              aac: string;
              attestationChallengeNonce?: string;
              loginEntryPoint: "login-home" | "landing-screen";
              oauthQpl: { instanceId: number; markerId: number };
              passwordTextInputId: string;
              qpl: { instanceId: number; markerId: number };
              recoveryTicket?: string & Brand<"RecoveryActionTicket">;
              usernameTextInputId: string;
              waterfallId: string;
          },
      ) => ScreenEdgeBound<
          ScreenEdgeShape<
              ScreenDefinition<
                  "LoginTwoFactorEntrypoint",
                  "screen",
                  undefined,
                  { ticket: string & Brand<"TwoFactorApprovalTicket"> },
                  LoginTwoFactorApproveFromAnotherDeviceState,

                      | InvalidSkipOrdinalsError
                      | ScreenEnterNavigationError
                      | TwoFactorTicketUnknownError,
                  MobileNavigation
                  | TwoFactorTickets,
                  {
                      checkApproval: (
                          self: ScreenHandle,
                          state: LoginTwoFactorApproveFromAnotherDeviceState,
                      ) => (
                          ...args: [],
                      ) => Effect<
                          LoginTwoFactorApproveFromAnotherDeviceCheck,
                          | IgNotFoundError
                          | IgRateLimitError
                          | IgSpamError
                          | IgSignupBlockError
                          | IgCheckpointError
                          | IgAccountSuspendedError
                          | IgAccountDisabledError
                          | IgCookieConsentRequiredError
                          | IgLoginRequiredError
                          | IgUserLoggedOutError
                          | IgChallengeWrongCodeError
                          | IgPrivateUserError
                          | IgInactiveUserError
                          | IgSentryBlockError
                          | IgUploadVideoError
                          | IgConfigureVideoError
                          | IgExactUserNotFoundError
                          | IgUserIdNotFoundError
                          | IgNetworkError
                          | IgDecompressionError
                          | IgParseError
                          | IgIpBlockError
                          | IgLoginTwoFactorRequiredError
                          | IgRequestsLimitError
                          | IgNotResolvableError
                          | RequestError
                          | ParseError
                          | TransportError
                          | LoginBloksParseError
                          | IgBloks429Error
                          | InvalidSkipOrdinalsError
                          | ScreenDataError
                          | ScreenFeedPageError
                          | ScreenEnterNavigationError
                          | ScreenEnterConcurrentError
                          | ScreenLaunchFirstScreenError
                          | ScreenLaunchScreenNotInCatalogError
                          | ScreenLaunchSplashNotOnTopError
                          | ScreenLaunchSplashScreenError
                          | AppAlreadyStartedError
                          | ProcessNotSignedInError
                          | ScreenNotOnTopError
                          | TwoFactorTicketUnknownError
                          | LoginTwoFactorApprovalDeclinedError,
                          | MobileSession
                          | MobileDevice
                          | MobileApplication
                          | SessionHeaderParser
                          | BloksHttp
                          | MobileNavigation
                          | ScreenStack
                          | TwoFactorTickets,
                      >;
                      tryAnotherWay: (
                          self: ScreenHandle,
                          state: LoginTwoFactorApproveFromAnotherDeviceState,
                      ) => ScreenEdgeBound<
                          ScreenEdgeShape<
                              ScreenDefinition<
                                  "LoginTwoFactorMethodPicker",
                                  "screen",
                                  { ticket?: ... },
                                  { offeredMethods: ...; preselected?: ...; ticket: ... },
                                  LoginTwoFactorChooseMethodState,
                                  (...) | (...) | (...) | (...),
                                  (...) | (...) | (...) | (...) | (...),
                                  { chooseAuthenticationApp: ... },
                                  Record<(...), (...)>,
                                  never,
                              >,
                              [],
                              "button",
                          >,
                          (
                              ...args: [],
                          ) => Effect<
                              AssembledHandle<
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                              >,
                              (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                              (...) | (...) | (...) | (...) | (...) | (...) | (...),
                          >,
                      >;
                  },
                  Record<never, never>,
                  never,
              >,
              [],
              "button",
          >,
          (
              ...args: [],
          ) => Effect<
              AssembledHandle<
                  "LoginTwoFactorEntrypoint",
                  "screen",
                  { ticket: string & Brand<"TwoFactorApprovalTicket"> },
                  {
                      checkApproval: (
                          self: ScreenHandle,
                          state: LoginTwoFactorApproveFromAnotherDeviceState,
                      ) => (
                          ...args: [],
                      ) => Effect<
                          LoginTwoFactorApproveFromAnotherDeviceCheck,
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...),
                          (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                      >;
                      tryAnotherWay: (
                          self: ScreenHandle,
                          state: LoginTwoFactorApproveFromAnotherDeviceState,
                      ) => ScreenEdgeBound<
                          ScreenEdgeShape<
                              ScreenDefinition<
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                              >,
                              [],
                              "button",
                          >,
                          (...args: []) => Effect<(...), (...), (...)>,
                      >;
                  },
                  Record<never, never>,
                  Self,
                  "required",
                  true,
              >,

                  | InvalidSkipOrdinalsError
                  | ScreenDataError
                  | ScreenEnterNavigationError
                  | ScreenEnterConcurrentError
                  | ScreenEdgeInputError
                  | ScreenNotOnTopError
                  | TwoFactorTicketUnknownError,
              MobileNavigation
              | ScreenCatalog
              | ScreenStack
              | TwoFactorTickets,
          >,
      >

      The transition into the two-factor approval screen when the login answer's entrypoint schedules the trusted-notification poll. A normal screen edge from the login home: the login home stays under the approval screen, back() returns to it and a trail records the step. The edge takes no input: the challenge and the entrypoint's issued poll reach the target as a process handoff (TwoFactorTickets.handOffApproval), never as an edge argument a trail would carry. logIn is the transition's normal caller; taking it directly in a fresh process requires that handoff as a precondition (the checkpoint work, #314, is what carries a pending challenge between processes). The target is the catalog's 2FA entrypoint screen (com.bloks.www.two_step_verification.entrypoint, shown in the CDS container).

    • openEmailCode: <Self extends ScreenHandle>(
          self: Self,
          state: {
              aac: string;
              attestationChallengeNonce?: string;
              loginEntryPoint: "login-home" | "landing-screen";
              oauthQpl: { instanceId: number; markerId: number };
              passwordTextInputId: string;
              qpl: { instanceId: number; markerId: number };
              recoveryTicket?: string & Brand<"RecoveryActionTicket">;
              usernameTextInputId: string;
              waterfallId: string;
          },
      ) => ScreenEdgeBound<
          ScreenEdgeShape<
              ScreenDefinition<
                  "AccountRecoveryEmailCode",
                  "screen",
                  undefined,
                  {
                      maskedContact?: string;
                      ticket: string & Brand<"LastResortCodeEntryTicket">;
                  },
                  {
                      maskedContact?: string;
                      ticket: string & Brand<"LastResortCodeEntryTicket">;
                  },
                  | BloksHttpError
                  | InvalidSkipOrdinalsError
                  | AccountRecoveryBloksIssuedParamsMissingError
                  | ScreenEnterNavigationError
                  | AccountRecoveryTicketUnknownError,
                  | MobileSession
                  | MobileDevice
                  | MobileApplication
                  | BloksHttp
                  | MobileNavigation
                  | AccountRecoveryTickets,
                  {
                      requestNewCode: (
                          self: ScreenHandle,
                          state: {
                              maskedContact?: string;
                              ticket: string & Brand<"LastResortCodeEntryTicket">;
                          },
                      ) => (
                          ...args: [],
                      ) => Effect<
                          AccountRecoveryFirstScreen
                          | undefined,

                              | IgNotFoundError
                              | IgRateLimitError
                              | IgSpamError
                              | IgSignupBlockError
                              | IgCheckpointError
                              | IgAccountSuspendedError
                              | IgAccountDisabledError
                              | IgCookieConsentRequiredError
                              | IgLoginRequiredError
                              | IgUserLoggedOutError
                              | IgChallengeWrongCodeError
                              | IgPrivateUserError
                              | IgInactiveUserError
                              | IgSentryBlockError
                              | IgUploadVideoError
                              | IgConfigureVideoError
                              | IgExactUserNotFoundError
                              | IgUserIdNotFoundError
                              | IgNetworkError
                              | IgDecompressionError
                              | IgParseError
                              | IgIpBlockError
                              | IgLoginTwoFactorRequiredError
                              | IgRequestsLimitError
                              | IgNotResolvableError
                              | RequestError
                              | ParseError
                              | TransportError
                              | LoginBloksParseError
                              | IgBloks429Error
                              | InvalidSkipOrdinalsError
                              | AccountRecoveryBloksUnknownResponseError
                              | AccountRecoveryBloksInvalidCodeError
                              | ScreenDataError
                              | ScreenFeedPageError
                              | ScreenEnterNavigationError
                              | ScreenEnterConcurrentError
                              | ScreenLaunchFirstScreenError
                              | ScreenLaunchScreenNotInCatalogError
                              | ScreenLaunchSplashNotOnTopError
                              | ScreenLaunchSplashScreenError
                              | AppAlreadyStartedError
                              | ProcessNotSignedInError
                              | AccountRecoveryTicketUnknownError
                              | ScreenNotOnTopError,
                          | MobileSession
                          | MobileDevice
                          | MobileApplication
                          | SessionHeaderParser
                          | BloksHttp
                          | MobileNavigation
                          | AccountRecoveryTickets
                          | ScreenStack,
                      >;
                      submitCode: (
                          self: ScreenHandle,
                          state: {
                              maskedContact?: string;
                              ticket: string & Brand<"LastResortCodeEntryTicket">;
                          },
                      ) => (
                          ...args: [code: string],
                      ) => Effect<
                          AccountRecoveryFirstScreen,
                          | IgNotFoundError
                          | IgRateLimitError
                          | IgSpamError
                          | IgSignupBlockError
                          | IgCheckpointError
                          | IgAccountSuspendedError
                          | IgAccountDisabledError
                          | IgCookieConsentRequiredError
                          | IgLoginRequiredError
                          | IgUserLoggedOutError
                          | IgChallengeWrongCodeError
                          | IgPrivateUserError
                          | IgInactiveUserError
                          | IgSentryBlockError
                          | IgUploadVideoError
                          | IgConfigureVideoError
                          | IgExactUserNotFoundError
                          | IgUserIdNotFoundError
                          | IgNetworkError
                          | IgDecompressionError
                          | IgParseError
                          | IgIpBlockError
                          | IgLoginTwoFactorRequiredError
                          | IgRequestsLimitError
                          | IgNotResolvableError
                          | RequestError
                          | ParseError
                          | TransportError
                          | LoginBloksParseError
                          | IgBloks429Error
                          | InvalidSkipOrdinalsError
                          | AccountRecoveryBloksUnknownResponseError
                          | AccountRecoveryBloksInvalidCodeError
                          | ScreenDataError
                          | ScreenFeedPageError
                          | ScreenEnterNavigationError
                          | ScreenEnterConcurrentError
                          | ScreenLaunchFirstScreenError
                          | ScreenLaunchScreenNotInCatalogError
                          | ScreenLaunchSplashNotOnTopError
                          | ScreenLaunchSplashScreenError
                          | AppAlreadyStartedError
                          | ProcessNotSignedInError
                          | AccountRecoveryTicketUnknownError
                          | ScreenNotOnTopError,
                          | MobileSession
                          | MobileDevice
                          | MobileApplication
                          | SessionHeaderParser
                          | BloksHttp
                          | MobileNavigation
                          | AccountRecoveryTickets
                          | ScreenStack,
                      >;
                  },
                  Record<never, never>,
                  never,
              >,
              [],
              "button",
          >,
          (
              ...args: [],
          ) => Effect<
              AssembledHandle<
                  "AccountRecoveryEmailCode",
                  "screen",
                  {
                      maskedContact?: string;
                      ticket: string & Brand<"LastResortCodeEntryTicket">;
                  },
                  {
                      requestNewCode: (
                          self: ScreenHandle,
                          state: { maskedContact?: string; ticket: string & Brand<(...)> },
                      ) => (
                          ...args: [],
                      ) => Effect<
                          (...)
                          | (...),

                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...)
                              | (...),
                          (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                      >;
                      submitCode: (
                          self: ScreenHandle,
                          state: { maskedContact?: string; ticket: string & Brand<(...)> },
                      ) => (
                          ...args: [code: string],
                      ) => Effect<
                          AccountRecoveryFirstScreen,
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...)
                          | (...),
                          (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                      >;
                  },
                  Record<never, never>,
                  Self,
                  "required",
                  true,
              >,

                  | BloksHttpError
                  | InvalidSkipOrdinalsError
                  | AccountRecoveryBloksIssuedParamsMissingError
                  | ScreenDataError
                  | ScreenEnterNavigationError
                  | ScreenEnterConcurrentError
                  | AccountRecoveryTicketUnknownError
                  | ScreenEdgeInputError
                  | ScreenNotOnTopError,
              | MobileSession
              | MobileDevice
              | MobileApplication
              | BloksHttp
              | MobileNavigation
              | AccountRecoveryTickets
              | ScreenCatalog
              | ScreenStack,
          >,
      >

      The transition the login takes into the last-resort-recovery code-entry screen. logIn takes it when the answer escalates, after handing the issued entrypoint values to the screen through the process registry — the ticket is client state, never an edge argument, so the trail step carries nothing and a retrace in a fresh process is given the handoff as a precondition, like the two-factor chain (#314 carries both across processes).

    • openMethodPicker: <Self extends ScreenHandle>(
          self: Self,
          state: {
              aac: string;
              attestationChallengeNonce?: string;
              loginEntryPoint: "login-home" | "landing-screen";
              oauthQpl: { instanceId: number; markerId: number };
              passwordTextInputId: string;
              qpl: { instanceId: number; markerId: number };
              recoveryTicket?: string & Brand<"RecoveryActionTicket">;
              usernameTextInputId: string;
              waterfallId: string;
          },
      ) => ScreenEdgeBound<
          ScreenEdgeShape<
              ScreenDefinition<
                  "LoginTwoFactorMethodPicker",
                  "screen",
                  { ticket?: string & Brand<"TwoFactorApprovalTicket"> },
                  {
                      offeredMethods: readonly (
                          | "approve_from_another_device"
                          | "whatsapp"
                          | "totp"
                          | "sms"
                          | "backup_codes"
                      )[];
                      preselected?: | "approve_from_another_device"
                      | "whatsapp"
                      | "totp"
                      | "sms"
                      | "backup_codes";
                      ticket: string & Brand<"TwoFactorPickerTicket">;
                  },
                  LoginTwoFactorChooseMethodState,
                  | BloksHttpError
                  | InvalidSkipOrdinalsError
                  | ScreenEnterNavigationError
                  | TwoFactorTicketUnknownError,
                  | MobileDevice
                  | MobileApplication
                  | BloksHttp
                  | MobileNavigation
                  | TwoFactorTickets,
                  {
                      chooseAuthenticationApp: (
                          self: ScreenHandle,
                          state: LoginTwoFactorChooseMethodState,
                      ) => ScreenEdgeBound<
                          ScreenEdgeShape<
                              ScreenDefinition<
                                  "LoginTwoFactorEnterTotpCode",
                                  "screen",
                                  { ticket: ... },
                                  { ticket: ... },
                                  LoginTwoFactorAuthenticationAppCodeState,
                                  (...) | (...) | (...) | (...) | (...),
                                  (...) | (...) | (...) | (...) | (...),
                                  { checkApproval: ...; submitCode: ... },
                                  Record<(...), (...)>,
                                  never,
                              >,
                              [],
                              "button",
                          >,
                          (
                              ...args: [],
                          ) => Effect<
                              AssembledHandle<
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                              >,
                              (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...) | (...),
                              (...) | (...) | (...) | (...) | (...) | (...) | (...),
                          >,
                      >;
                  },
                  Record<never, never>,
                  never,
              >,
              [],
              "button",
          >,
          (
              ...args: [],
          ) => Effect<
              AssembledHandle<
                  "LoginTwoFactorMethodPicker",
                  "screen",
                  {
                      offeredMethods: readonly (
                          | "approve_from_another_device"
                          | "whatsapp"
                          | "totp"
                          | "sms"
                          | "backup_codes"
                      )[];
                      preselected?: | "approve_from_another_device"
                      | "whatsapp"
                      | "totp"
                      | "sms"
                      | "backup_codes";
                      ticket: string & Brand<"TwoFactorPickerTicket">;
                  },
                  {
                      chooseAuthenticationApp: (
                          self: ScreenHandle,
                          state: LoginTwoFactorChooseMethodState,
                      ) => ScreenEdgeBound<
                          ScreenEdgeShape<
                              ScreenDefinition<
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                              >,
                              [],
                              "button",
                          >,
                          (...args: []) => Effect<(...), (...), (...)>,
                      >;
                  },
                  Record<never, never>,
                  Self,
                  "required",
                  true,
              >,

                  | BloksHttpError
                  | InvalidSkipOrdinalsError
                  | ScreenDataError
                  | ScreenEnterNavigationError
                  | ScreenEnterConcurrentError
                  | ScreenEdgeInputError
                  | ScreenNotOnTopError
                  | TwoFactorTicketUnknownError,
              | MobileDevice
              | MobileApplication
              | BloksHttp
              | MobileNavigation
              | ScreenCatalog
              | ScreenStack
              | TwoFactorTickets,
          >,
      >

      The transition into the method picker when the login answer's entrypoint schedules no approval poll — the server's default is another method (the authenticator app, WhatsApp, SMS or a backup code), so the app goes straight to "Choose a way to confirm it’s you". The login answer already fetched the picker's rows and its selection QPL; they reach the screen as a process handoff (TwoFactorTickets.handOffPicker), never as an edge argument, and the trail step carries nothing. The target is the catalog's method-picker screen (com.bloks.www.two_step_verification.method_picker).

    • recoverPassword: (
          self: ScreenHandle,
          state: {
              aac: string;
              attestationChallengeNonce?: string;
              loginEntryPoint: "login-home" | "landing-screen";
              oauthQpl: { instanceId: number; markerId: number };
              passwordTextInputId: string;
              qpl: { instanceId: number; markerId: number };
              recoveryTicket?: string & Brand<"RecoveryActionTicket">;
              usernameTextInputId: string;
              waterfallId: string;
          },
      ) => ScreenEdgeBound<
          ScreenEdgeShape<
              ScreenDefinition<
                  "AccountRecoverySearch",
                  "screen",
                  { aac: string; ticket?: string & Brand<"RecoveryActionTicket"> },
                  {
                      aac: string;
                      searchScreenType: string;
                      searchTicket: string & Brand<"SearchTicket">;
                      textInputId: string;
                      waterfallId: string;
                  },
                  {
                      aac: string;
                      searchScreenType: string;
                      searchTicket: string & Brand<"SearchTicket">;
                      textInputId: string;
                      waterfallId: string;
                  },
                  | BloksHttpError
                  | InvalidSkipOrdinalsError
                  | AccountRecoveryBloksIssuedParamsMissingError
                  | ScreenEnterNavigationError
                  | AccountRecoveryTicketUnknownError,
                  | MobileDevice
                  | MobileApplication
                  | BloksHttp
                  | MobileNavigation
                  | AccountRecoveryTickets,
                  {
                      findAccount: (
                          self: ScreenHandle,
                          state: {
                              aac: string;
                              searchScreenType: string;
                              searchTicket: string & Brand<"SearchTicket">;
                              textInputId: string;
                              waterfallId: string;
                          },
                      ) => ScreenEdgeBound<
                          ScreenEdgeShape<
                              ScreenDefinition<
                                  "AccountRecoveryAuthenticationConfirmation",
                                  "screen",
                                  { identifier: ...; ticket: ... },
                                  { ticket: ... },
                                  { ticket: ... },
                                  (...) | (...) | (...) | (...) | (...) | (...),
                                  (...) | (...) | (...) | (...) | (...),
                                  { logInWithCode: ... },
                                  Record<(...), (...)>,
                                  never,
                              >,
                              readonly [string],
                              "button",
                          >,
                          (
                              ...args: readonly [string],
                          ) => Effect<
                              AssembledHandle<
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                              >,

                                  | (...)
                                  | (...)
                                  | (...)
                                  | (...)
                                  | (...)
                                  | (...)
                                  | (...)
                                  | (...)
                                  | (...)
                                  | (...),
                              (...) | (...) | (...) | (...) | (...) | (...) | (...),
                          >,
                      >;
                  },
                  Record<never, never>,
                  never,
              >,
              [],
              "button",
          >,
          (
              ...args: [],
          ) => Effect<
              AssembledHandle<
                  "AccountRecoverySearch",
                  "screen",
                  {
                      aac: string;
                      searchScreenType: string;
                      searchTicket: string & Brand<"SearchTicket">;
                      textInputId: string;
                      waterfallId: string;
                  },
                  {
                      findAccount: (
                          self: ScreenHandle,
                          state: {
                              aac: string;
                              searchScreenType: string;
                              searchTicket: string & Brand<(...)>;
                              textInputId: string;
                              waterfallId: string;
                          },
                      ) => ScreenEdgeBound<
                          ScreenEdgeShape<
                              ScreenDefinition<
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                                  (...),
                              >,
                              readonly [(...)],
                              "button",
                          >,
                          (...args: readonly [(...)]) => Effect<(...), (...), (...)>,
                      >;
                  },
                  Record<never, never>,
                  ScreenHandle,
                  "required",
                  true,
              >,

                  | BloksHttpError
                  | InvalidSkipOrdinalsError
                  | AccountRecoveryBloksIssuedParamsMissingError
                  | ScreenDataError
                  | ScreenEnterNavigationError
                  | ScreenEnterConcurrentError
                  | AccountRecoveryTicketUnknownError
                  | ScreenEdgeInputError
                  | ScreenNotOnTopError,
              | MobileDevice
              | MobileApplication
              | BloksHttp
              | MobileNavigation
              | AccountRecoveryTickets
              | ScreenCatalog
              | ScreenStack,
          >,
      >

      The login home's "Forgot password": the account-recovery search screen, with the opaque ticket of the action the launch issued and the aac its process state holds. The screen refuses with the recovery step's own error when the action graph issued no entry.