IGPAPI
    Preparing search index...

    Interface MobileDeviceState

    interface MobileDeviceState {
        adid: string;
        adsOptOut?: boolean;
        aymhAccounts?: readonly Record<string, unknown>[];
        batteryLevel?: number;
        build: string;
        cloudTrustToken?: string;
        currentKeyboardLanguage?: string;
        descriptor: string;
        deviceStatus?: Readonly<Record<string, unknown>>;
        familyDeviceSynced?: boolean;
        familyId: string;
        flashCallPermissionsStatus?: {
            ANSWER_PHONE_CALLS: "GRANTED" | "DENIED";
            READ_CALL_LOG: "GRANTED" | "DENIED";
            READ_PHONE_STATE: "GRANTED" | "DENIED";
        };
        gmsCallRetrieverEligibility?: "eligible"
        | "not_eligible";
        hasCameraPermission?: boolean;
        id: string;
        isCharging?: boolean;
        isFoldable?: boolean;
        isLayoutRTL: boolean;
        keyboardLanguage?: string;
        language: string;
        network?: MobileNetwork;
        networkInfo?: AndroidNetworkInfo;
        phoneId: string;
        pushHpkeIdentity?: PushHpkeIdentity;
        radioType?: string;
        systemLanguages?: readonly string[];
        systemLocale?: string;
        timezoneName?: string;
        timezoneOffset: string;
        usdidIdentity?: UsdidIdentity;
        uuid: string;
    }
    Index

    Properties

    adid: string
    adsOptOut?: boolean

    Whether the device opted out of ad tracking (the tracking permission denied, "Allow Apps to Request to Track" off): iOS sends it as x-ads-opt-out (1 opted out, 0 allowed). A device fact, not a session one, and not derivable — how the app maps the permission to the header is not recorded. Optional: absent renders 0 (tracking allowed).

    aymhAccounts?: readonly Record<string, unknown>[]

    Accounts the device may have (AYMH), sent as client_input_params.aymh_accounts on send_login_request. Device-local saved-account state, empty on a first login. Optional: absent renders [] (the Genymotion captures); the AVD fresh capture carries one blank entry.

    batteryLevel?: number

    The battery percentage the device reports (0–100), sent as battery_level on the feed surfaces (feed/timeline, discover/topical_explore) and on igtv/channel. A device fact the library cannot measure: absent, every request reads the one shared fallback (batteryLevelOf in mobile.device.ts: a value simulated from the device id and the clock), so the surfaces cannot disagree about one device.

    build: string
    cloudTrustToken?: string

    The Meta cloud trust token stored on the device (two upper-case UUIDs written back to back, 72 characters), sent by iOS as x-cloud-trust-token. Optional: how the app derives it on a new device is not recorded, so a device without it sends no header rather than an invented token.

    currentKeyboardLanguage?: string

    The keyboard language currently in use (ru-RU), iOS x-ig-device-languages.

    descriptor: string
    deviceStatus?: Readonly<Record<string, unknown>>

    The device's hardware decode capability block (hw_av1_dec, chip_name, core_count, …) as the device holds it; the request that sends it (clips/discover/stream's device_status) serializes it. The library models no hardware: absent renders an empty object.

    familyDeviceSynced?: boolean

    Persisted flag: whether the family device id / app-scoped device id pair has already been synced with the server. A fresh install syncs it once (FamilyDeviceIDAppScopedDeviceIDSyncMutation); a device that already ran the sync skips it. Absent means not yet synced (fresh), matching the Genymotion fresh and cold captures; the warm AVD capture declares it true.

    familyId: string
    flashCallPermissionsStatus?: {
        ANSWER_PHONE_CALLS: "GRANTED" | "DENIED";
        READ_CALL_LOG: "GRANTED" | "DENIED";
        READ_PHONE_STATE: "GRANTED" | "DENIED";
    }

    Android runtime-permission grants the account-recovery search screen offers as client_input_params.flash_call_permissions_status. Device state the library cannot query. Optional: absent renders every permission DENIED (the login capture's spelling); the recovery recording's device granted READ_PHONE_STATE.

    gmsCallRetrieverEligibility?: "eligible" | "not_eligible"

    Google Mobile Services incoming-call-retriever eligibility, sent as client_input_params.gms_incoming_call_retriever_eligibility on send_login_request. The 448 login-home action script picks eligible / not_eligible from a device GMS signal the library cannot query, so it is device state. Optional: absent renders eligible (the Genymotion captures); the AVD fresh capture reports not_eligible.

    hasCameraPermission?: boolean

    Whether the app holds the camera permission, sent as the timeline's has_camera_permission; absent renders 1.

    id: string
    isCharging?: boolean

    Whether the device is charging, sent as is_charging; absent reads the one shared fallback (isChargingOf), like batteryLevel.

    isFoldable?: boolean

    Device foldable state, sent as x-ig-is-foldable. Optional: absent when the caller does not model the device's fold posture; the Android header layer renders false then. The AVD fresh capture's device is foldable (true); the Genymotion captures report false.

    isLayoutRTL: boolean
    keyboardLanguage?: string

    The configured keyboard language (ru-RU), iOS x-ig-device-languages.

    language: string
    network?: MobileNetwork

    The network the device is on, the single source of every network-dependent wire value (see MobileNetwork). Absent means the default network, cellular LTE (read it through networkOf): the device generators set it, and snapshots made before the field existed restore without it.

    A device is on a client network, Wi-Fi or cellular LTE. A capture may be recorded on a network the client state does not model (the emulator's Ethernet NIC); that is not a value of this field — the capture tooling attaches it to the device it renders with, out of band.

    networkInfo?: AndroidNetworkInfo

    Optional telephony/network profile. Request builders emit it as si_device_param_network_info only when present.

    phoneId: string
    pushHpkeIdentity?: PushHpkeIdentity

    Lazily populated on first Android push registration. See EnsurePushHpkeIdentity.

    radioType?: string

    The body radio_type, derived from network (radioTypeOf): a second spelling of the one network fact, kept so a restored device carries it without re-settling. Absent when the network has no captured body spelling (the capture-only Ethernet view), and then no builder sends it.

    systemLanguages?: readonly string[]

    The device's system languages in the user's order (['ru-ID', 'id-ID']), sent by iOS in x-ig-device-languages. Optional: without it the iOS layer sends the system locale alone.

    systemLocale?: string

    The system locale of the device (ru-ID: Russian language, Indonesian region), not the app language (language, ru_RU). iOS sends it as x-ig-device-locale. Optional: without it the iOS header layer renders the app language in that spelling.

    timezoneName?: string

    IANA timezone name (TimeZone.getDefault().getID()), sent as device_timezone_name on feed-surface requests. Optional: absent when the caller does not model a zone name.

    timezoneOffset: string
    usdidIdentity?: UsdidIdentity

    Lazily populated on first USDID-related operation. See EnsureUsdidIdentity.

    uuid: string