unifi-client
Version:
NodeJs client for Unifi products (https://www.ui.com/)
287 lines (286 loc) • 11.7 kB
TypeScript
import { dateISOString, email, ipV4Address, ipv4CIDR, ipv6Address, ipv6CIDR, LANWAN, lanwan, macAddress, percentageToOne, semverVersion, timestampDate, uuid } from '../commons/types';
import { IUserRole, IUserGroup } from '../User';
export interface IControllerStorage {
id: number;
type: 'emmc' | 'hdd' | string;
mounted: boolean;
mountPoint: string;
canErase: boolean;
size: number;
used: number;
avail: number;
}
export interface ICPU {
model: string;
speed: number;
times: {
user: number;
nice: number;
sys: number;
idle: number;
irq: number;
};
}
export interface IInterface {
address: ipV4Address | ipv6Address;
netmask: ipV4Address | ipv6Address;
family: 'IPv4' | 'IPv6';
mac: macAddress;
internal: boolean;
cidr: ipv4CIDR | ipv6CIDR;
scopeid?: number;
}
export type ledStatus = 'Configured' | string;
export type controllerStatuses = 'READY';
export interface IUIConfig {
baseUrl: string;
publicPath: string;
cdnPublicPaths: Array<string>;
prefetch: [];
icon: string;
hotkey: string;
entrypoint: string;
swaiVersion: number;
apiPrefix: string;
}
export interface IApp {
name: string;
type: 'app';
swaiVersion: number;
uiCdn: string;
uiVersion: string;
uiNpmPackageName: string;
ui: IUIConfig;
}
export interface IControllerClient {
deviceModel: number;
hostname: string;
ip: string;
isGuest: boolean;
isWired: boolean;
latestAssocTime: timestampDate;
satisfaction: number;
}
export interface IPort {
ifname: string;
name: string;
throughputRx: number;
throughputTx: number;
type: lanwan;
usageRx: number;
usageTx: number;
}
export type unifiDeviceState = 'NOT_AVAILABLE';
export interface IUnifiCareDevice {
mac: macAddress;
state: unifiDeviceState;
}
export interface IEventController {
name: string;
type: 'controller';
ui: IUIConfig;
required: boolean;
updatable: boolean;
releaseChannel: string;
isInstalled: boolean;
isRunning: boolean;
isConfigured: boolean;
unadoptedDevices: [];
state: string;
version: string;
status: string;
statusMessage: string;
updateAvailable: unknown;
info: {
timestamp: timestampDate;
startedAt: timestampDate;
udmConnected: boolean;
isReadyForSetup: boolean;
udmProvisionCompleted: boolean;
alertCount: number;
apCount: number;
switchCount: number;
wifiExperienceScore: number;
wanStatus: string;
health: {
label: string;
score: number;
};
network_status: {
health: string;
historical_satisfaction: [number, number, number, number, number, number, number, number, number, number, number, number];
};
clientCount: number;
wiredClients: number;
wirelessClients: number;
guestClients: number;
clientList: Array<IControllerClient>;
lastSpeedTest: {
downloadSpeed: number;
ping: number;
runDate: timestampDate;
uploadSpeed: number;
};
updateAvailable: boolean;
portTable: Array<IPort>;
throughput: number;
};
controllerStatus: controllerStatuses;
unifiCareDevices: Array<IUnifiCareDevice>;
swaiVersion: number;
port: number;
uiCdn: string;
abridged: boolean;
}
export type permissionRole = 'admin' | string;
export interface IPortStatus {
id: string;
plugged: boolean;
type: LANWAN;
}
export type releaseChannels = 'release' | 'beta' | 'release-candidate' | 'early-access';
export interface ISystem {
info: {
ip: string;
mac: string;
latestUpdateCheck: timestampDate;
updateSchedule: unknown;
firmwareDownload: {
progress: number;
state: string;
};
uptime: number;
hostname: string;
deviceId: string;
ports: Record<'http' | 'https' | 'ipc' | string, number>;
ucareState: unifiDeviceState;
now: timestampDate;
ucore_version: semverVersion;
hardware: {
sysid: number;
name: string;
shortname: string;
subtype: string;
reboot: string;
upgrade: string;
'cpu.id': string;
uuid: uuid;
bom: string;
hwrev: number;
serialno: string;
qrid: string;
firmwareVersion: semverVersion;
};
features: {
speedTest: true;
adoptDevices: true;
setupConfigUFN: true;
waitForUFN: true;
hasFirewall: true;
hasPortStatus: true;
hasLedStatus: true;
cloudBackup: true;
systoolSupportDump: true;
UFNSetsHostname: true;
systoolAnonId: true;
};
storage: Array<IControllerStorage>;
cpu: {
model: string;
speed: number;
cores: number;
currentload: number;
loadavg: [number, number, number];
temperature: number;
cpus: Array<ICPU>;
};
memory: {
free: number;
total: number;
available: number;
};
network: {
interfaces: Record<string, Array<IInterface>>;
};
ssh: boolean;
ledStatus: ledStatus;
owner: {
unique_id: uuid;
first_name: string;
last_name: string;
full_name: string;
email: email;
email_status: string;
phone: string;
avatar_relative_path: string;
avatar_rpath2: string;
status: string;
employee_number: string;
create_time: timestampDate;
extras: unknown;
username: string;
local_account_exist: boolean;
password_revision: number;
sso_account: email;
sso_uuid: uuid;
sso_username: string;
sso_picture: string;
uid_sso_id: string;
uid_sso_account: string;
groups: Array<IUserGroup>;
roles: Array<IUserRole>;
permissions: Record<permission, [permissionRole]>;
scopes: Array<scopes>;
cloud_access_granted: boolean;
update_time: timestampDate;
avatar: string;
nfc_token: string;
nfc_display_id: string;
nfc_card_type: string;
nfc_card_status: string;
id: string;
isOwner: boolean;
isSuperAdmin: boolean;
};
portStatus: Array<IPortStatus>;
};
hasInternet: boolean;
deviceState: string;
deviceStateLastChanged: timestampDate;
publicIp: ipV4Address;
cloudConnected: boolean;
}
export interface IReleaseInformations {
timestamp: timestampDate;
channel: releaseChannels;
created: dateISOString;
file_size: number;
id: uuid;
md5: string;
sha256: string;
platform: string;
product: string;
updated: dateISOString;
tags: Record<string, string>;
version: semverVersion;
version_major: number;
version_minor: number;
version_patch: number;
probability: percentageToOne;
probability_computed: number;
release_date: dateISOString;
_links: {
self: {
href: string;
};
upload: Array<{
name: string;
href: string;
}>;
data: {
href: string;
};
};
}
export type scopes = 'write:protect.viewer' | 'write:protect.user:$' | 'write:protect.user' | 'write:protect.sensor' | 'write:protect.recordingSchedule' | 'write:protect.nvr' | 'write:protect.light' | 'write:protect.group' | 'write:protect.camera' | 'write:protect.bridge' | 'view:user_timezone' | 'view:user' | 'view:systemlog' | 'view:system_info' | 'view:sso' | 'view:settings' | 'view:role:viewer' | 'view:role:admin' | 'view:role' | 'view:permission:viewer' | 'view:permission:super_admin' | 'view:permission:owner' | 'view:permission:admin' | 'view:permission' | 'view:notification' | 'view:location_policy' | 'view:location_device' | 'view:location_activity' | 'view:location' | 'view:holiday_timezone' | 'view:holiday' | 'view:group' | 'view:door_group' | 'view:controller:uid-agent' | 'view:controller:talk' | 'view:controller:protect' | 'view:controller:network' | 'view:controller:led' | 'view:controller:connect' | 'view:controller:access' | 'view:controller' | 'view:cloud_access' | 'view:backup' | 'view:app:users' | 'view:app:settings' | 'view:app:locations' | 'view:access.visitor' | 'view:access.systemlog' | 'view:access.settings' | 'view:access.schedule' | 'view:access.policy' | 'view:access.pin_code' | 'view:access.nfc_card' | 'view:access.face' | 'view:access.device' | 'view:access.dashboard' | 'update:access.device' | 'systemlog:user' | 'systemlog:system' | 'systemlog:location' | 'systemlog:access' | 'readmedia:protect.camera' | 'read:protect.viewer' | 'read:protect.user:$' | 'read:protect.user' | 'read:protect.sensor' | 'read:protect.recordingSchedule' | 'read:protect.nvr' | 'read:protect.light' | 'read:protect.group' | 'read:protect.camera' | 'read:protect.bridge' | 'open:door' | 'notify:user' | 'notify:talk' | 'notify:protect' | 'notify:network' | 'notify:location' | 'notify:led' | 'notify:access' | 'manage:controller:talk' | 'manage:controller:network' | 'manage:controller:led' | 'manage:controller:connect' | 'manage:controller:access' | 'manage:controller' | 'edit:user_timezone' | 'edit:user_credential' | 'edit:user' | 'edit:systemlog' | 'edit:system_info' | 'edit:sso' | 'edit:settings' | 'edit:role:viewer' | 'edit:role:admin' | 'edit:role' | 'edit:permission:viewer' | 'edit:permission:super_admin' | 'edit:permission:owner' | 'edit:permission:admin' | 'edit:permission' | 'edit:notification' | 'edit:location_policy' | 'edit:location_device' | 'edit:location_activity' | 'edit:location' | 'edit:holiday_timezone' | 'edit:holiday' | 'edit:group' | 'edit:feedback' | 'edit:door_group' | 'edit:controller:uid-agent' | 'edit:cloud_access' | 'edit:backup' | 'edit:access.visitor' | 'edit:access.settings' | 'edit:access.schedule' | 'edit:access.policy' | 'edit:access.pin_code' | 'edit:access.nfc_card' | 'edit:access.face' | 'edit:access.device' | 'deletemedia:protect.camera' | 'delete:protect.viewer' | 'delete:protect.user:$' | 'delete:protect.user' | 'delete:protect.sensor' | 'delete:protect.recordingSchedule' | 'delete:protect.nvr' | 'delete:protect.light' | 'delete:protect.group' | 'delete:protect.camera' | 'delete:protect.bridge' | 'delete:access.device' | 'create:protect.viewer' | 'create:protect.user' | 'create:protect.sensor' | 'create:protect.recordingSchedule' | 'create:protect.liveview' | 'create:protect.light' | 'create:protect.group' | 'create:protect.camera' | 'create:protect.bridge' | 'cloud_access:system' | 'cloud_access:controller' | 'assign:role_super_admin' | 'assign:role:viewer' | 'assign:role:admin' | 'assign:role' | 'adopt:access.device' | 'access.open_door:location' | 'access.open_door:floor' | 'access.open_door:door_group' | 'access.open_door:door' | 'access.open_door:building';
export type permission = 'access.management' | 'connect.management' | 'led.management' | 'network.management' | 'protect.management' | 'system.management.location' | 'system.management.user' | 'talk.management';