From c2504ff9470a0d52617396d95ed504663df79413 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sun, 25 Sep 2022 15:51:38 -0700 Subject: [PATCH] homekit: fix security system nullref bug causing bridge to not start --- plugins/homekit/src/camera-mixin.ts | 2 +- plugins/homekit/src/hap-utils.ts | 14 ++++++-------- plugins/homekit/src/homekit-mixin.ts | 3 +-- plugins/homekit/src/main.ts | 2 +- plugins/homekit/src/types/security.ts | 10 ++++++---- plugins/homekit/src/video-clips-provider.ts | 2 +- plugins/homekit/tsconfig.json | 2 +- 7 files changed, 17 insertions(+), 18 deletions(-) diff --git a/plugins/homekit/src/camera-mixin.ts b/plugins/homekit/src/camera-mixin.ts index 86c40c316..0dfe40b21 100644 --- a/plugins/homekit/src/camera-mixin.ts +++ b/plugins/homekit/src/camera-mixin.ts @@ -1,4 +1,4 @@ -import { StorageSettings } from "@scrypted/common/src/settings"; +import { StorageSettings } from "@scrypted/sdk/storage-settings"; import { SettingsMixinDeviceOptions } from "@scrypted/common/src/settings-mixin"; import sdk, { ObjectDetector, Readme, ScryptedDeviceType, ScryptedInterface, Setting, SettingValue, VideoCamera } from "@scrypted/sdk"; import { HomekitMixin } from "./homekit-mixin"; diff --git a/plugins/homekit/src/hap-utils.ts b/plugins/homekit/src/hap-utils.ts index fa336df58..0e99ff56c 100644 --- a/plugins/homekit/src/hap-utils.ts +++ b/plugins/homekit/src/hap-utils.ts @@ -1,14 +1,12 @@ -import { MixinDeviceBase, ScryptedDeviceBase, ScryptedDeviceType } from '@scrypted/sdk'; -import { randomBytes } from 'crypto'; -import { Categories, EventedHTTPServer, HAPStorage } from './hap'; -import './types'; -import os from 'os'; -import { StorageSettingsDict } from '@scrypted/common/src/settings'; -import crypto from 'crypto'; import { closeQuiet, createBindZero } from '@scrypted/common/src/listen-cluster'; +import sdk, { ScryptedDeviceType } from '@scrypted/sdk'; +import { StorageSettingsDict } from "@scrypted/sdk/storage-settings"; +import crypto, { randomBytes } from 'crypto'; import { once } from 'events'; +import os from 'os'; +import { Categories, EventedHTTPServer, HAPStorage } from './hap'; import { randomPinCode } from './pincode'; -import sdk from '@scrypted/sdk'; +import './types'; class HAPLocalStorage { initSync() { diff --git a/plugins/homekit/src/homekit-mixin.ts b/plugins/homekit/src/homekit-mixin.ts index c59e99808..7bda937e3 100644 --- a/plugins/homekit/src/homekit-mixin.ts +++ b/plugins/homekit/src/homekit-mixin.ts @@ -1,7 +1,6 @@ -import { StorageSettings } from "@scrypted/common/src/settings"; import { SettingsMixinDeviceBase, SettingsMixinDeviceOptions } from "@scrypted/common/src/settings-mixin"; import sdk, { ScryptedInterface, SettingValue } from "@scrypted/sdk"; -import crypto from 'crypto'; +import { StorageSettings } from "@scrypted/sdk/storage-settings"; import { createHAPUsernameStorageSettingsDict } from "./hap-utils"; const { log } = sdk; diff --git a/plugins/homekit/src/main.ts b/plugins/homekit/src/main.ts index 2c2587562..4caf9dded 100644 --- a/plugins/homekit/src/main.ts +++ b/plugins/homekit/src/main.ts @@ -1,4 +1,4 @@ -import { StorageSettings } from '@scrypted/common/src/settings'; +import { StorageSettings } from "@scrypted/sdk/storage-settings"; import { SettingsMixinDeviceOptions } from '@scrypted/common/src/settings-mixin'; import sdk, { DeviceProvider, MixinProvider, Online, ScryptedDeviceBase, ScryptedDeviceType, ScryptedInterface, ScryptedInterfaceProperty, Setting, Settings } from '@scrypted/sdk'; import crypto from 'crypto'; diff --git a/plugins/homekit/src/types/security.ts b/plugins/homekit/src/types/security.ts index 4ca9e57dc..d012fdeee 100644 --- a/plugins/homekit/src/types/security.ts +++ b/plugins/homekit/src/types/security.ts @@ -19,6 +19,8 @@ addSupportedType({ // Set available modes based on plugin function systemStates(supportedModes: Array): number[] { let modes = [Characteristic.SecuritySystemTargetState.DISARM] + if (!supportedModes) + return modes; if (supportedModes.includes(SecuritySystemMode.HomeArmed)) modes.push(Characteristic.SecuritySystemTargetState.STAY_ARM); if (supportedModes.includes(SecuritySystemMode.AwayArmed)) modes.push(Characteristic.SecuritySystemTargetState.AWAY_ARM); @@ -27,7 +29,7 @@ addSupportedType({ return modes; } service.getCharacteristic(Characteristic.SecuritySystemTargetState) - .setProps({validValues: systemStates(device.securitySystemState.supportedModes)}); + .setProps({validValues: systemStates(device.securitySystemState?.supportedModes)}); function toCurrentState(mode: SecuritySystemMode, triggered: boolean) { if (!!triggered) @@ -70,10 +72,10 @@ addSupportedType({ } bindCharacteristic(device, ScryptedInterface.SecuritySystem, service, Characteristic.SecuritySystemCurrentState, - () => toCurrentState(device.securitySystemState.mode, device.securitySystemState.triggered)); + () => toCurrentState(device.securitySystemState?.mode, device.securitySystemState?.triggered)); bindCharacteristic(device, ScryptedInterface.SecuritySystem, service, Characteristic.SecuritySystemTargetState, - () => toTargetState(device.securitySystemState.mode)); + () => toTargetState(device.securitySystemState?.mode)); service.getCharacteristic(Characteristic.SecuritySystemTargetState) .on(CharacteristicEventTypes.SET, (value: CharacteristicValue, callback: CharacteristicSetCallback) => { @@ -86,7 +88,7 @@ addSupportedType({ }) bindCharacteristic(device, ScryptedInterface.SecuritySystem, service, Characteristic.SecuritySystemAlarmType, - () => !!device.securitySystemState.triggered); + () => !!device.securitySystemState?.triggered); return accessory; }, diff --git a/plugins/homekit/src/video-clips-provider.ts b/plugins/homekit/src/video-clips-provider.ts index 821651aca..239a907f8 100644 --- a/plugins/homekit/src/video-clips-provider.ts +++ b/plugins/homekit/src/video-clips-provider.ts @@ -1,4 +1,4 @@ -import { StorageSettings } from "@scrypted/common/src/settings"; +import { StorageSettings } from "@scrypted/sdk/storage-settings"; import sdk, { MediaObject, MixinProvider, Readme, ScryptedDeviceBase, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, Setting, Settings, SettingValue, VideoClip, VideoClipOptions, VideoClips } from "@scrypted/sdk"; import checkDiskSpace from 'check-disk-space'; import { canCameraMixin } from "./camera-mixin"; diff --git a/plugins/homekit/tsconfig.json b/plugins/homekit/tsconfig.json index 22d317309..0dca70a7c 100644 --- a/plugins/homekit/tsconfig.json +++ b/plugins/homekit/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "resolveJsonModule": true, - "moduleResolution": "node", + "moduleResolution": "Node16", "target": "esnext", "esModuleInterop": true, },