import * as R from './Resource'; import * as P from './Presentation'; import * as A from './Application'; import * as PL from './Playlist'; import * as T from './Theme'; import { Profile } from './User'; import { Day } from './Resource'; import * as L from './Location'; import { Connection, ConnectionResponse } from './Connection'; export type ScreenOrientation = 'normal' | 'left' | 'right' | 'inverted'; export type DeviceModel = | 'Amazon Signage Stick' | 'Axon_PS02' | 'Axon_PS03' | 'Azulle_Access4' | 'Azulle_Access4_V30' | 'Azulle_Access4_V30_N4020' | 'Azulle_Byte4_Elite_i7' | 'AzulleAccess4' | 'AzulleAccess4_V10' | 'Brightsign' | 'IntelComputeStick' | 'Microsoft_Surface_Pro_8' | 'MinixComputeStick' | 'MinixZ83A' | 'NUC7JYB' | 'Poly' | 'Raydiant_PC_Stick' | 'RaydiantLite' | 'SecondScreen' | 'SurfaceGo' | 'SurfaceGo2' | 'Unknown' | 'VivoStickTS10'; export interface DeviceFeatures { wifi: boolean; lte: boolean; } export type JSONValue = string | number | boolean | JSONObject | JSONArray; export interface JSONObject { [x: string]: JSONValue; } export type JSONArray = Array; export interface DeviceAIOption { $id: string; properties?: Record; visibility?: 'Admin' | 'CS' | 'Client' | 'CS_advanced' | 'Hidden'; title: string; type: string; minimum?: number; maximum?: number; enum?: Array; description?: string; default_value?: string | number | boolean; number_format?: string; } export interface DeviceAIStatus { LicenceKey_Status: string; // "NOT_SET"|"VALID"|"NO_VALID"; (changed often enough that we're going with the less restrictive type) VideoSource_Status: string; Streaming_Status: string; } export type DeviceAIResponse = { settings: JSONObject; schema: { $schema: string; definitions: Record; required: string[]; properties: Record; }; status: DeviceAIStatus; }; export type DeviceAIVideoResponse = { playback_url: string; }; export type DeviceServiceChangeRequest = undefined; export type DeviceServiceChangeResponse = { device_id: string; services: Array; added: Array; removed: Array; }; export type PerchviewRegionResponse = { id?: string; name: string; width: number; height: number; depth: number; position_x: number; position_y: number; position_z: number; surge_count: number; surge_frames: number; volume_average_frame: number; }; export type PerchviewRegion = { id?: string; name: string; width: number; height: number; depth: number; positionX: number; positionY: number; positionZ: number; surgeCount: number; surgeFrames: number; volumeAverageFrame: number; }; export type PostPerchviewSettingsRequest = { device_service_id: string; camera_position_x: number; camera_position_y: number; camera_position_z: number; camera_rotation_x: number; camera_rotation_y: number; camera_rotation_z: number; min_points: number; frame_threshold: number; regions: Array; created_at: string; updated_at: string; }; export type PostV2PerchviewSettingsRequest = { device_service_id: string; settings: { [key: string]: unknown; }; created_at: string; updated_at: string; }; export type PatchPerchviewSettingsRequest = { device_service_id?: string; camera_position_x?: number; camera_position_y?: number; camera_position_z?: number; camera_rotation_x?: number; camera_rotation_y?: number; camera_rotation_z?: number; min_points?: number; frame_threshold?: number; regions?: Array; created_at?: string; updated_at?: string; }; export type PatchV2PerchviewSettingsRequest = { device_service_id?: string; settings?: { [key: string]: unknown; }; created_at?: string; updated_at?: string; }; export type PerchviewSettingsResponse = { id: string; device_service_id: string; camera_position_x: number; camera_position_y: number; camera_position_z: number; camera_rotation_x: number; camera_rotation_y: number; camera_rotation_z: number; min_points: number; frame_threshold: number; regions: Array; created_at: string; updated_at: string; settings: { [key: string]: unknown; }; }; export type V2PerchviewSettingsResponse = { id: string; device_service_id: string; settings: { [key: string]: unknown; }; created_at: string; updated_at: string; }; export type PerchviewSettings = { id: string; deviceServiceId: string; cameraPositionX: number; cameraPositionY: number; cameraPositionZ: number; cameraRotationX: number; cameraRotationY: number; cameraRotationZ: number; minPoints: number; frameThreshold: number; regions: Array; createdAt: string; updatedAt: string; settings: { [key: string]: unknown; }; }; export type V2PerchviewSettings = { id: string; deviceServiceId: string; settings: { [key: string]: unknown; }; createdAt: string; updatedAt: string; }; export type GetPerchviewSettingsRequest = undefined; export type DevicePlaylistResponse = { id: string; name: string; resource: R.ResourceResponse; }; export type DeviceResponse = { id: string; name: string; description: string; model: DeviceModel; device_features: DeviceFeatures; metrics: DeviceMetricsResponse | null; published_at: string | null; registered_at: string; screen_dimensions: string; screen_orientation: ScreenOrientation; application_thumbnail_url: string; resin_uuid: string; playlist_id: string | null; playlist: DevicePlaylistResponse | null; is_uhd: boolean; is_audio_only: boolean; resource: R.ResourceResponse; last_heartbeat_at: string | null; last_online_at: string | null; is_lite: boolean; publish_ack: boolean; publish_playback_success: boolean; publish_playback_error: boolean; timezone: string; active_hours_start: string | null; active_hours_end: string | null; daily_reboot_time: string | null; daily_restart_time: string | null; toast_restaurant_guid: string | null; services: string[]; device_type: string | null; screen_manufacturer: string | null; screen_model: string | null; screen_os_version: string | null; screen_serial_number: string | null; location: L.LocationResponse | null; terminal: { id: string; external_id: string; created_at: string; updated_at: string; connection: null; } | null; active_monitors: ActiveMonitors | null; ai_camera_status: ConnectedDeviceStatus | null; rx_camera_status: ConnectedDeviceStatus | null; rx_ir_frame_status: ConnectedDeviceStatus | null; is_disabled: boolean; }; export type V4ReportingDeviceResponse = { id: string; name: string; }; export type V5DevicePlaylistResponse = { id: string; name: string; last_activity_at: string | null; updated_at: string | null; owned_by: R.V5DeviceProfileResponse; }; type V5DeviceTagTypeResponse = { id: string; key: string; value: T['value']; label: string; type: T['type']; }; export type V5TagTextResponse = V5DeviceTagTypeResponse<{ value: string; type: 'text'; }>; export type V5TagDateResponse = V5DeviceTagTypeResponse<{ value: string; type: 'date'; }>; export type V5TagDayResponse = V5DeviceTagTypeResponse<{ value: Day[]; type: 'days_of_week'; }>; export type V5TagTimeResponse = V5DeviceTagTypeResponse<{ value: string; type: 'time'; }>; export type V5DeviceLocationTagResponse = | V5TagTextResponse | V5TagDateResponse | V5TagDayResponse | V5TagTimeResponse; export type GetV5DeviceRequest = undefined; export type GetV5DeviceResponse = { name: string; registration_status: string; confirmation_token: string | null; published_at: string | null; }; export type V5DeviceResponse = { id: string; mac_address: string | null; playlist_id: string | null; name: string; description: string; model: DeviceModel; resource_id: string; last_activity_at: string | null; updated_at: string | null; published_at: string | null; screen_dimensions: string; screen_orientation: ScreenOrientation; registration_status: string; registered_at: string; resin_uuid: string; is_online: boolean; is_disabled: boolean; is_audio_only: boolean; timezone: string; daily_restart_time: string | null; daily_reboot_time: string | null; active_hours_start: string | null; active_hours_end: string | null; last_heartbeat_at: string | null; is_lite: boolean; publish_ack: boolean; publish_playback_success: boolean; publish_playback_error: boolean; toast_restaurant_guid: string | null; is_uhd: boolean; services: string[]; owned_by: R.V5DeviceProfileResponse; device_features: DeviceFeatures; metrics: DeviceMetricsResponse | null; playlist: V5DevicePlaylistResponse | null; location: L.LocationResponse | null; tags: V5DeviceLocationTagResponse[]; acl: L.LocationACLResponse[]; device_type: string | null; screen_manufacturer: string | null; screen_model: string | null; screen_os_version: string | null; screen_serial_number: string | null; terminal: { id: string; external_id: string; created_at: string; updated_at: string; connection: null; } | null; active_monitors: ActiveMonitors | null; ai_camera_status: ConnectedDeviceStatus | null; rx_camera_status: ConnectedDeviceStatus | null; rx_ir_frame_status: ConnectedDeviceStatus | null; }; export type DeviceContentResponse = { playlist_id?: string | null; playlists?: { [key: string]: PL.PlaylistV2Response; }; presentations?: { [key: string]: P.PresentationV2Response; }; application_versions?: { [key: string]: A.ApplicationVersionResponse; }; themes?: { [key: string]: T.ThemeV2Response; }; applications?: { [key: string]: A.ApplicationV2Response; }; device?: DeviceV2Response; is_multitimezone_enabled?: boolean; }; export type AffectedDeviceResponse = { id: string; name: string; }; export interface DeviceMetricsResponse { wifi: WifiMetricsResponse | null; lte: LTEMetricsResponse | null; system: SystemMetricsResponse | null; last_metric_time: string; connection_type: string | null; active_monitors: ActiveMonitors | null; ai_camera_status: ConnectedDeviceStatus | null; rx_camera_status: ConnectedDeviceStatus | null; rx_ir_frame_status: ConnectedDeviceStatus | null; } export interface WifiMetricsResponse { rssi: number; ssid: string; last_metric_time: string; } export interface LTEMetricsResponse { rssi: number; last_metric_time: string; } export interface SystemMetricsResponse { cpu_used_percent: number; mem_used_percent: number; disk_used_percent: number; last_metric_time: string; } export interface DeviceHeartbeatRequest { connection_type?: string | null; ssid?: string | null; rssi?: number | null; active_monitors?: ActiveMonitors | null; ai_camera_status?: ConnectedDeviceStatus | null; rx_camera_status?: ConnectedDeviceStatus | null; rx_ir_frame_status?: ConnectedDeviceStatus | null; } export interface DeviceHeartbeatResponse { name: string; registration_status: string; confirmation_token: string | null; is_disabled: boolean; screen_orientation: string; published_at: string | null; publish_ack: boolean; publish_playback_success: boolean; publish_playback_error: boolean; poly_service_level: 'full' | 'free' | null; } export type DevicePublishedContentResponse = DeviceContentResponse; export type DeviceAdContentResponse = DeviceContentResponse; export type DevicePlaylist = { id: string; name: string; resource: R.Resource; }; export type Device = { id: string; name: string; description: string; model: DeviceModel; features: DeviceFeatures; metrics: DeviceMetrics | null; screenDimensions: string; screenOrientation: ScreenOrientation; publishedAt: string | null; registeredAt: string; resinUuid: string; playlistId: string | null; playlist: DevicePlaylist | null; isAudioOnly: boolean; isUhd: boolean; resource: R.Resource; lastHeartbeatAt: string | null; lastOnlineAt: string | null; isLite: boolean; publishAck: boolean; publishPlaybackSuccess: boolean; publishPlaybackError: boolean; timezone: string; activeHoursStart: string | null; activeHoursEnd: string | null; dailyRebootTime: string | null; dailyRestartTime: string | null; toastRestaurantGuid: string | null; services: string[]; deviceType: string | null; screenManufacturer: string | null; screenModel: string | null; screenOsVersion: string | null; screenSerialNumber: string | null; location: L.Location | null; terminal: { id: string; externalId: string; createdAt: string; updatedAt: string; connection: null; } | null; activeMonitors: ActiveMonitors | null; aiCameraStatus: ConnectedDeviceStatus | null; rxCameraStatus: ConnectedDeviceStatus | null; rxIrFrameStatus: ConnectedDeviceStatus | null; isDisabled: boolean; }; export type AffectedDevice = { id: string; name: string; }; export interface DeviceMetrics { wifi: WifiMetrics | null; lte: LTEMetrics | null; system: SystemMetrics | null; lastMetricTime: string; connectionType: string | null; activeMonitors: ActiveMonitors | null; aiCameraStatus: ConnectedDeviceStatus | null; rxCameraStatus: ConnectedDeviceStatus | null; rxIrFrameStatus: ConnectedDeviceStatus | null; } export interface WifiMetrics { rssi: number; ssid: string; lastMetricTime: string; } export interface LTEMetrics { rssi: number; lastMetricTime: string; } export interface SystemMetrics { cpuUsedPercent: number; memUsedPercent: number; diskUsedPercent: number; lastMetricTime: string; } export type SYBSoundZoneResponse = { id: string; name: string; }; export type SYBSoundZone = { id: string; name: string; }; export type SYBPairingCodeResponse = { pairing_code: string; }; export type SYBPairingCode = { id: string; pairingCode: string; }; export interface DeviceHeartbeat { name: string; registrationStatus: string; confirmationToken: string | null; isDisabled: boolean; screenOrientation: string; publishedAt: string | null; publishAck: boolean; publishPlaybackSuccess: boolean; publishPlaybackError: boolean; polyServiceLevel: 'full' | 'free' | null; } export interface DeviceContent { playlistId?: string | null; playlists?: { [key: string]: PL.PlaylistV2; }; presentations?: { [key: string]: P.PresentationV2; }; applicationVersions?: { [key: string]: A.ApplicationVersion; }; themes?: { [key: string]: T.ThemeV2; }; applications?: { [key: string]: A.ApplicationV2; }; device?: DeviceV2; isMultitimezoneEnabled?: boolean; } export type DevicePublishedContent = DeviceContent; export type DeviceAdContent = DeviceContent; export type GetDevicesRequest = undefined; export type GetDevicesResponse = DeviceResponse[]; export type GetV4ReportingDevicesRequest = undefined; export type GetV4ReportingDevicesResponse = V4ReportingDeviceResponse[]; export type GetV5DevicesRequest = undefined; export type GetV5DevicesResponse = { total: number; data: V5DeviceResponse[]; }; export type GetV5Devices = { total: number; data: V5Device[]; }; export type GetDeviceRequest = undefined; export type GetDeviceResponse = DeviceResponse; export type GetDeviceAIRequest = undefined; export type GetDeviceAIResponse = DeviceAIResponse; export type GetDeviceAIVideoResponse = DeviceAIVideoResponse; export type UpdateDevice = { id: string; name?: string; screenDimensions?: string; screenOrientation?: string; description?: string; playlistId?: string | null; isAudioOnly?: boolean; isUhd?: boolean; timezone?: string; activeHoursStart?: string | null; activeHoursEnd?: string | null; dailyRebootTime?: string | null; dailyRestartTime?: string | null; resource?: { r?: { tags?: Omit[]; }; }; toastRestaurantGuid?: string | null; }; export type UpdateDeviceRequest = { id?: string; name?: string; screen_dimensions?: string; screen_orientation?: string; description?: string; playlist_id?: string | null; is_audio_only?: boolean; is_uhd?: boolean; timezone?: string; active_hours_start?: string | null; active_hours_end?: string | null; daily_reboot_time?: string | null; daily_restart_time?: string | null; resource?: { r?: { tags?: Omit[]; }; }; toast_restaurant_guid?: string | null; }; export type UpdateDeviceResponse = DeviceResponse; export type CreateDeviceGroupRequest = { name: string; device_ids: string[]; }; export type RegisterDeviceRequest = { confirmation_token: string; name: string; timezone: string; location_id: string; }; export type RegisterDeviceResponse = DeviceResponse; export type AddToDeviceGroupRequest = { device_ids: string[]; }; export type AddToDeviceGroupResponse = undefined; export type UpdateDeviceDefaultSequenceRequest = { presentations: string[]; }; export type UpdateDeviceDefaultSequenceResponse = DeviceResponse; export type UpdateDeviceGroupDefaultSequenceRequest = { presentations: string[]; }; export type RestartDeviceRequest = undefined; export type RestartDeviceResponse = undefined; export type RebootDeviceRequest = undefined; export type RebootDeviceResponse = undefined; export type DeleteDeviceGroupRequest = undefined; export type DeleteDeviceGroupResponse = undefined; export type DeleteScheduledSequenceRequest = undefined; export type DeleteScheduledSequenceResponse = string; export type RemoveDevicesFromDeviceGroupRequest = undefined; export type RemoveDevicesFromDeviceGroupResponse = undefined; export type PublishDeviceRequest = undefined; export type PublishDeviceResponse = DeviceResponse; export type RegisterDevice = { activationCode: string; name: string; timezone: string; locationId: string; }; export type GetSYBSoundZoneRequest = undefined; export type GetSYBSoundZoneResponse = SYBSoundZoneResponse | null; export type GenerateSYBPairingCodeRequest = undefined; export type GenerateSYBPairingCodeResponse = SYBPairingCodeResponse; export type GetAffectedDevicesRequest = { presentation_ids: string[]; playlist_ids: string[]; folder_ids: string[]; }; export type GetAffectedDevicesResponse = AffectedDeviceResponse[]; export type DevicePubnubAuthResponse = { auth_key: string; channel_id: string; expires_at: number; }; export type DevicePubnubAuthRequest = { session_id: string; }; export type DevicePubnubAuth = { authKey: string; channelId: string; expiresAt: number; }; export type RecentDeviceError = { timestamp: string; deviceId: string; event: string; errorMessage: string; presentationId: string; presentationName: string; }; export type RecentDeviceErrorResponse = { timestamp: string; device_id: string; event: string; error_message: string; presentation_id: string; presentation_name: string; }; export type GetRecentDeviceErrorsResponse = RecentDeviceErrorResponse[]; export type CreateDeviceChargeRequest = { orderId?: string; subTotal: number; tip: number; tax: number; total: number; items?: DeviceChargeItem[]; }; export type DeviceChargeItem = { name: string; description: string; sku?: string; price: number; quantity?: number; tax: number; total: number; }; export type DeviceChargeStatus = | 'pending' | 'success' | 'failed' | 'canceled' | 'timeout' | 'unknown'; export type UpdateDeviceChargeRequest = { externalId?: string; status?: DeviceChargeStatus; error?: string | null; cardType?: string | null; cardBrand?: string | null; transactionType?: string | null; pinVerified?: boolean | null; entryMode?: string | null; cardLast4?: string | null; authCode?: string | null; transactionNumber?: string | null; verificationResult?: string | null; statusIndicator?: string | null; applicationIdentifier?: string | null; applicationName?: string | null; applicationCryptogram?: string | null; applicationData?: string | null; applicationResponseCode?: string | null; cardVerificationMethod?: string | null; }; export type DeviceChargeResponse = { id: string; device_id: string; order_id: string | null; external_id: string | null; status: DeviceChargeStatus; items?: DeviceChargeItem[]; error: string | null; updated_at: string; created_at: string; sub_total: number; tip: number; tax: number; total: number; card_type: string | null; card_brand: string | null; card_last4: string | null; transaction_type: string | null; entry_mode: string | null; auth_code: string | null; transaction_number: string | null; pin_verified: boolean | null; verification_result: string | null; status_indicator: string | null; application_identifier: string | null; application_name: string | null; application_cryptogram: string | null; application_data: string | null; application_response_code: string | null; card_verification_method: string | null; }; export type DeviceCharge = { id: string; deviceId: string; orderId: string | null; externalId: string | null; status: DeviceChargeStatus; items?: DeviceChargeItem[]; error: string | null; updatedAt: string; createdAt: string; subTotal: number; tip: number; tax: number; total: number; cardType: string | null; cardBrand: string | null; cardLast4: string | null; transactionType: string | null; entryMode: string | null; authCode: string | null; transactionNumber: string | null; pinVerified: boolean | null; verificationResult: string | null; statusIndicator: string | null; applicationIdentifier: string | null; applicationName: string | null; applicationCryptogram: string | null; applicationData: string | null; applicationResponseCode: string | null; cardVerificationMethod: string | null; }; // v2 types export type DeviceV2Response = { id: string; name: string; timezone: string; r: { resource: R.ResourceV2Response; }; }; export type DeviceV2 = { id: string; name: string; timezone: string; r: { resource: R.ResourceV2; }; }; export type V4LibraryQueryParams = { profile_id: string; search?: string; }; export type DeviceFilterTagsQueryParams = { key: string; value: string; }; export type DeviceFilterQueryParams = { connection_status?: string; page?: number; page_size?: number; profile_ids?: Profile['id'][]; screen_dimensions?: string; screen_orientation?: string; shared_profile_ids?: Profile['id'][]; tags?: DeviceFilterTagsQueryParams[]; timezone?: string; }; export type V5DevicePlaylist = { id: string; name: string; lastActivityAt: string | null; updatedAt: string | null; ownedBy: R.V5DeviceProfile; }; type V5DeviceTagType = { id: string; key: string; value: T['value']; label: string; type: T['type']; }; export type V5TagText = V5DeviceTagType<{ value: string; type: 'text'; }>; export type V5TagDate = V5DeviceTagType<{ value: string; type: 'date'; }>; export type V5TagDay = V5DeviceTagType<{ value: Day[]; type: 'days_of_week'; }>; export type V5TagTime = V5DeviceTagType<{ value: string; type: 'time'; }>; export type V5DeviceTag = V5TagText | V5TagDate | V5TagDay | V5TagTime; export type GetV5Device = { name: string; registrationStatus: string; confirmationToken: string | null; publishedAt: string | null; }; export type V5Device = { id: string; macAddress: string | null; playlistId: string | null; name: string; description: string; model: DeviceModel; resourceId: string; lastActivityAt: string | null; updatedAt: string | null; publishedAt: string | null; screenDimensions: string; screenOrientation: ScreenOrientation; registrationStatus: string; registeredAt: string; resinUuid: string; isDisabled: boolean; isAudioOnly: boolean; timezone: string; dailyRestartTime: string | null; dailyRebootTime: string | null; activeHoursStart: string | null; activeHoursEnd: string | null; lastHeartbeatAt: string | null; isLite: boolean; publishAck: boolean; publishPlaybackSuccess: boolean; publishPlaybackError: boolean; toastRestaurantGuid: string | null; isUhd: boolean; services: string[]; ownedBy: R.V5DeviceProfile; deviceFeatures: DeviceFeatures; metrics: DeviceMetrics | null; playlist: V5DevicePlaylist | null; location: L.Location | null; tags: V5DeviceTag[]; acl: L.LocationACL[]; deviceType: string | null; screenManufacturer: string | null; screenModel: string | null; screenOsVersion: string | null; screenSerialNumber: string | null; terminal: { id: string; externalId: string; createdAt: string; updatedAt: string; connection: null; } | null; activeMonitors: ActiveMonitors | null; aiCameraStatus: ConnectedDeviceStatus | null; rxCameraStatus: ConnectedDeviceStatus | null; rxIrFrameStatus: ConnectedDeviceStatus | null; }; export type DeviceTerminalStatus = { status: 'open' | 'closed'; }; export type DeviceTerminalResponse = { id: string; device_id: string; external_id: string; created_at: string; updated_at: string; connection: ConnectionResponse; }; export type DeviceTerminal = { id: string; deviceId: string; externalId: string; createdAt: string; updatedAt: string; connection: Connection; }; export type DeleteDeviceTerminalRequest = undefined; export type DeleteDeviceTerminalResponse = string; export type Monitor = { port: string | null; resolution: string | null; message: string | null; }; export type ActiveMonitors = { monitors: Monitor[]; error: string | null; }; export type ConnectedDeviceStatus = { connected: boolean | null; error: string | null; };