mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 21:47:20 +00:00
362 lines
9.8 KiB
TypeScript
362 lines
9.8 KiB
TypeScript
import PropTypes from "prop-types";
|
||
import hostPolicyInterface, { IHostPolicy } from "./policy";
|
||
import hostUserInterface, { IHostUser } from "./host_users";
|
||
import labelInterface, { ILabel } from "./label";
|
||
import packInterface, { IPack } from "./pack";
|
||
import softwareInterface, { ISoftware } from "./software";
|
||
import hostQueryResult from "./campaign";
|
||
import queryStatsInterface, { IQueryStats } from "./query_stats";
|
||
import { ILicense, IDeviceGlobalConfig } from "./config";
|
||
import {
|
||
IHostMdmProfile,
|
||
MdmEnrollmentStatus,
|
||
BootstrapPackageStatus,
|
||
DiskEncryptionStatus,
|
||
} from "./mdm";
|
||
import { HostPlatform } from "./platform";
|
||
|
||
export default PropTypes.shape({
|
||
created_at: PropTypes.string,
|
||
updated_at: PropTypes.string,
|
||
id: PropTypes.number,
|
||
detail_updated_at: PropTypes.string,
|
||
last_restarted_at: PropTypes.string,
|
||
label_updated_at: PropTypes.string,
|
||
policy_updated_at: PropTypes.string,
|
||
last_enrolled_at: PropTypes.string,
|
||
seen_time: PropTypes.string,
|
||
refetch_requested: PropTypes.bool,
|
||
hostname: PropTypes.string,
|
||
uuid: PropTypes.string,
|
||
platform: PropTypes.string,
|
||
osquery_version: PropTypes.string,
|
||
orbit_version: PropTypes.string,
|
||
fleet_desktop_version: PropTypes.string,
|
||
os_version: PropTypes.string,
|
||
build: PropTypes.string,
|
||
platform_like: PropTypes.string,
|
||
code_name: PropTypes.string,
|
||
uptime: PropTypes.number,
|
||
memory: PropTypes.number,
|
||
cpu_type: PropTypes.string,
|
||
cpu_subtype: PropTypes.string,
|
||
cpu_brand: PropTypes.string,
|
||
cpu_physical_cores: PropTypes.number,
|
||
cpu_logical_cores: PropTypes.number,
|
||
hardware_vendor: PropTypes.string,
|
||
hardware_model: PropTypes.string,
|
||
hardware_version: PropTypes.string,
|
||
hardware_serial: PropTypes.string,
|
||
computer_name: PropTypes.string,
|
||
primary_ip: PropTypes.string,
|
||
primary_mac: PropTypes.string,
|
||
distributed_interval: PropTypes.number,
|
||
config_tls_refresh: PropTypes.number,
|
||
logger_tls_period: PropTypes.number,
|
||
team_id: PropTypes.number,
|
||
pack_stats: PropTypes.arrayOf(
|
||
PropTypes.shape({
|
||
pack_id: PropTypes.number,
|
||
pack_name: PropTypes.string,
|
||
query_stats: PropTypes.arrayOf(queryStatsInterface),
|
||
})
|
||
),
|
||
team_name: PropTypes.string,
|
||
additional: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
||
percent_disk_space_available: PropTypes.number,
|
||
gigs_disk_space_available: PropTypes.number,
|
||
// On Linux hosts, `gigs_total_disk_space` only includes disk space from the "/" partition
|
||
gigs_total_disk_space: PropTypes.number,
|
||
// `gigs_all_disk_space` includes disk space from all partitions
|
||
gigs_all_disk_space: PropTypes.number,
|
||
labels: PropTypes.arrayOf(labelInterface),
|
||
packs: PropTypes.arrayOf(packInterface),
|
||
software: PropTypes.arrayOf(softwareInterface),
|
||
status: PropTypes.string,
|
||
display_name: PropTypes.string,
|
||
users: PropTypes.arrayOf(hostUserInterface),
|
||
policies: PropTypes.arrayOf(hostPolicyInterface),
|
||
query_results: PropTypes.arrayOf(hostQueryResult),
|
||
batteries: PropTypes.arrayOf(
|
||
PropTypes.shape({
|
||
cycle_count: PropTypes.number,
|
||
health: PropTypes.string,
|
||
})
|
||
),
|
||
});
|
||
|
||
export type HostStatus = "online" | "offline" | "new" | "missing";
|
||
export interface IDeviceUser {
|
||
email: string;
|
||
source: string;
|
||
}
|
||
|
||
export interface IMunkiData {
|
||
version: string;
|
||
}
|
||
|
||
export type MacDiskEncryptionActionRequired = "log_out" | "rotate_key";
|
||
|
||
export type HostAndroidCertStatus =
|
||
| "verified"
|
||
| "failed"
|
||
// all below display "pending" in UI
|
||
| "pending"
|
||
| "delivering"
|
||
| "delivered";
|
||
|
||
export interface IHostAndroidCert {
|
||
name: string;
|
||
status: HostAndroidCertStatus;
|
||
operation_type: "install" | "remove";
|
||
detail: string;
|
||
}
|
||
|
||
export type RecoveryLockPasswordStatus =
|
||
| "verified"
|
||
| "verifying"
|
||
| "pending"
|
||
| "failed";
|
||
|
||
// Prefer this over IMdmMacOsSettings, introduced MDM has expanded to non-mac platforms
|
||
export interface IOSSettings {
|
||
disk_encryption: {
|
||
status: DiskEncryptionStatus | null;
|
||
detail: string;
|
||
};
|
||
recovery_lock_password?: {
|
||
status: RecoveryLockPasswordStatus;
|
||
detail: string;
|
||
password_available: boolean;
|
||
};
|
||
certificates: IHostAndroidCert[];
|
||
}
|
||
|
||
// Legacy Mac mdm settings. Prefer IOSSettings
|
||
interface IMdmMacOsSettings {
|
||
disk_encryption: DiskEncryptionStatus | null;
|
||
action_required: MacDiskEncryptionActionRequired | null;
|
||
}
|
||
|
||
interface IMdmMacOsSetup {
|
||
bootstrap_package_status: BootstrapPackageStatus | "";
|
||
details: string;
|
||
bootstrap_package_name: string;
|
||
}
|
||
|
||
export type HostMdmDeviceStatus = "unlocked" | "locked" | "wiped";
|
||
export type HostMdmPendingAction = "unlock" | "lock" | "wipe" | "location" | "";
|
||
|
||
export interface IHostMdmData {
|
||
encryption_key_available: boolean;
|
||
/**
|
||
* encryption_key_archived indicates where there is any archived key for the host. It is only
|
||
* populated for GET /hosts/:id and GET /hosts/identifiers/:identifier endpoints. It is not
|
||
* populated for list hosts or other hosts endpoints.
|
||
*/
|
||
encryption_key_archived?: boolean;
|
||
enrollment_status: MdmEnrollmentStatus | null;
|
||
dep_profile_error?: boolean;
|
||
name?: string;
|
||
id?: number;
|
||
server_url: string | null;
|
||
profiles: IHostMdmProfile[] | null;
|
||
os_settings?: IOSSettings;
|
||
macos_settings?: IMdmMacOsSettings;
|
||
macos_setup?: IMdmMacOsSetup;
|
||
device_status: HostMdmDeviceStatus;
|
||
pending_action: HostMdmPendingAction;
|
||
connected_to_fleet?: boolean;
|
||
}
|
||
|
||
export interface IHostMaintenanceWindow {
|
||
starts_at: string; // e.g. "2024-06-18T13:27:18−07:00"
|
||
timezone: string | null; // e.g. "America/Los_Angeles"
|
||
}
|
||
|
||
export interface IMunkiIssue {
|
||
id: number;
|
||
name: string;
|
||
type: "error" | "warning";
|
||
created_at: string;
|
||
}
|
||
|
||
interface IMacadminMDMData {
|
||
enrollment_status: MdmEnrollmentStatus | null;
|
||
name?: string;
|
||
server_url: string | null;
|
||
id?: number;
|
||
}
|
||
|
||
export interface IMacadminsResponse {
|
||
macadmins: null | {
|
||
munki: null | IMunkiData;
|
||
mobile_device_management: null | IMacadminMDMData;
|
||
munki_issues: IMunkiIssue[];
|
||
};
|
||
}
|
||
|
||
export interface IPackStats {
|
||
pack_id: number;
|
||
pack_name: string;
|
||
query_stats: IQueryStats[];
|
||
type: string;
|
||
}
|
||
|
||
export interface IPolicyHostResponse {
|
||
id: number;
|
||
display_name: string;
|
||
query_results?: unknown[];
|
||
status?: string;
|
||
}
|
||
|
||
export interface IGeoLocation {
|
||
country_iso: string;
|
||
city_name: string;
|
||
geometry?: {
|
||
type: string;
|
||
coordinates: number[];
|
||
};
|
||
}
|
||
|
||
interface IBattery {
|
||
cycle_count: number;
|
||
health: string;
|
||
}
|
||
|
||
export interface IHostResponse {
|
||
host: IHost;
|
||
}
|
||
|
||
// Device User Page
|
||
export interface IDUPDetails {
|
||
host: IHostDevice;
|
||
license: ILicense;
|
||
org_logo_url: string;
|
||
org_logo_url_light_background: string;
|
||
org_contact_url: string;
|
||
disk_encryption_enabled?: boolean;
|
||
platform?: HostPlatform;
|
||
global_config: IDeviceGlobalConfig;
|
||
self_service: boolean;
|
||
}
|
||
|
||
export interface IHostEncrpytionKeyResponse {
|
||
host_id: number;
|
||
encryption_key: {
|
||
updated_at: string;
|
||
key: string;
|
||
};
|
||
}
|
||
|
||
export interface IHostRecoveryLockPasswordResponse {
|
||
host_id: number;
|
||
recovery_lock_password: {
|
||
updated_at: string;
|
||
password: string;
|
||
auto_rotate_at?: string;
|
||
};
|
||
}
|
||
|
||
export interface IHostIssues {
|
||
total_issues_count: number;
|
||
critical_vulnerabilities_count?: number; // Premium
|
||
failing_policies_count: number;
|
||
}
|
||
export interface IHostEndUser {
|
||
idp_id?: string;
|
||
idp_username?: string;
|
||
idp_full_name?: string;
|
||
idp_info_updated_at: string | null;
|
||
idp_groups?: string[];
|
||
idp_department?: string;
|
||
other_emails?: Array<{
|
||
email: string;
|
||
source: string;
|
||
}>;
|
||
}
|
||
|
||
export interface IHost {
|
||
created_at: string;
|
||
updated_at: string;
|
||
software_updated_at?: string;
|
||
id: number;
|
||
detail_updated_at: string;
|
||
last_restarted_at: string;
|
||
label_updated_at: string;
|
||
policy_updated_at: string;
|
||
last_enrolled_at: string;
|
||
last_mdm_enrolled_at: string;
|
||
seen_time: string;
|
||
refetch_requested: boolean;
|
||
refetch_critical_queries_until: string | null;
|
||
hostname: string;
|
||
uuid: string;
|
||
platform: HostPlatform;
|
||
osquery_version: string;
|
||
orbit_version: string | null;
|
||
fleet_desktop_version: string | null;
|
||
os_version: string;
|
||
build: string;
|
||
platform_like: string; // TODO: replace with more specific union type
|
||
code_name: string;
|
||
uptime: number;
|
||
memory: number;
|
||
cpu_type: string;
|
||
cpu_subtype: string;
|
||
cpu_brand: string;
|
||
cpu_physical_cores: number;
|
||
cpu_logical_cores: number;
|
||
hardware_vendor: string;
|
||
hardware_model: string;
|
||
hardware_version: string;
|
||
hardware_serial: string;
|
||
computer_name: string;
|
||
public_ip: string;
|
||
primary_ip: string;
|
||
primary_mac: string;
|
||
distributed_interval: number;
|
||
config_tls_refresh: number;
|
||
logger_tls_period: number;
|
||
team_id: number | null;
|
||
pack_stats: IPackStats[] | null;
|
||
team_name: string | null;
|
||
additional?: object; // eslint-disable-line @typescript-eslint/ban-types
|
||
percent_disk_space_available: number;
|
||
gigs_disk_space_available: number;
|
||
// On Linux hosts, `gigs_total_disk_space` only includes disk space from the "/" partition
|
||
gigs_total_disk_space?: number;
|
||
// `gigs_all_disk_space` includes disk space from all partitions
|
||
gigs_all_disk_space?: number;
|
||
labels: ILabel[];
|
||
packs: IPack[];
|
||
software?: ISoftware[];
|
||
issues: IHostIssues;
|
||
status: HostStatus;
|
||
display_text: string;
|
||
display_name: string;
|
||
target_type?: string;
|
||
scripts_enabled: boolean | null;
|
||
users: IHostUser[];
|
||
device_users?: IDeviceUser[];
|
||
munki?: IMunkiData;
|
||
maintenance_window?: IHostMaintenanceWindow;
|
||
mdm: IHostMdmData;
|
||
policies: IHostPolicy[];
|
||
query_results?: unknown[];
|
||
geolocation?: IGeoLocation;
|
||
batteries?: IBattery[];
|
||
disk_encryption_enabled?: boolean;
|
||
device_mapping: IDeviceUser[] | null;
|
||
/** There will be at most 1 end user */
|
||
end_users?: IHostEndUser[];
|
||
conditional_access_bypassed: boolean;
|
||
}
|
||
|
||
/*
|
||
* IHostDevice is an extension of IHost that is returned by the /devices endpoint. It includes the
|
||
* dep_assigned_to_fleet field, which is not returned by the /hosts endpoint.
|
||
*/
|
||
export interface IHostDevice extends IHost {
|
||
dep_assigned_to_fleet: boolean;
|
||
}
|