@homebridge-plugins/homebridge-updater 3.1.3 → 3.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Platform.Matter.d.ts +8 -1
- package/dist/Platform.Matter.d.ts.map +1 -1
- package/dist/Platform.Matter.js +11 -0
- package/dist/Platform.Matter.js.map +1 -1
- package/dist/Platform.Matter.test.d.ts +2 -0
- package/dist/Platform.Matter.test.d.ts.map +1 -0
- package/dist/Platform.Matter.test.js +75 -0
- package/dist/Platform.Matter.test.js.map +1 -0
- package/dist/configMigration.d.ts +1 -1
- package/dist/configMigration.d.ts.map +1 -1
- package/dist/configMigration.js +26 -0
- package/dist/configMigration.js.map +1 -1
- package/dist/configMigration.test.js +98 -2
- package/dist/configMigration.test.js.map +1 -1
- package/dist/utils.test.js +24 -0
- package/dist/utils.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import type { API, Logging, PlatformConfig } from 'homebridge';
|
|
1
|
+
import type { API, Logging, PlatformAccessory, PlatformConfig } from 'homebridge';
|
|
2
2
|
export declare class PluginUpdateMatterPlatform {
|
|
3
|
+
private readonly api;
|
|
3
4
|
private updateSensor;
|
|
4
5
|
private failureSensor;
|
|
5
6
|
constructor(log: Logging, config: PlatformConfig, api: API);
|
|
7
|
+
/**
|
|
8
|
+
* Called by Homebridge for each accessory found in the platform cache.
|
|
9
|
+
* When running in Matter mode, all cached HAP accessories are stale — unregister
|
|
10
|
+
* them immediately to prevent ghost accessories from appearing in HomeKit.
|
|
11
|
+
*/
|
|
12
|
+
configureAccessory(accessory: PlatformAccessory): void;
|
|
6
13
|
}
|
|
7
14
|
//# sourceMappingURL=Platform.Matter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Platform.Matter.d.ts","sourceRoot":"","sources":["../src/Platform.Matter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"Platform.Matter.d.ts","sourceRoot":"","sources":["../src/Platform.Matter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAOjF,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,aAAa,CAAe;gBAExB,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG;IAe1D;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;CAGvD"}
|
package/dist/Platform.Matter.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { FailureSensor } from './failureSensor.js';
|
|
2
|
+
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
2
3
|
import { UpdateSensor } from './updateSensor.js';
|
|
3
4
|
import { isFailureSensorEnabled } from './utils.js';
|
|
4
5
|
export class PluginUpdateMatterPlatform {
|
|
6
|
+
api;
|
|
5
7
|
updateSensor;
|
|
6
8
|
failureSensor;
|
|
7
9
|
constructor(log, config, api) {
|
|
10
|
+
this.api = api;
|
|
8
11
|
this.failureSensor = new FailureSensor(log, api, config.failureSensorType || config.sensorType, 'matter');
|
|
9
12
|
this.updateSensor = new UpdateSensor(log, config, api, {
|
|
10
13
|
protocol: 'matter',
|
|
@@ -17,5 +20,13 @@ export class PluginUpdateMatterPlatform {
|
|
|
17
20
|
this.failureSensor.configure({ displayName: failureDeviceName });
|
|
18
21
|
}
|
|
19
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Called by Homebridge for each accessory found in the platform cache.
|
|
25
|
+
* When running in Matter mode, all cached HAP accessories are stale — unregister
|
|
26
|
+
* them immediately to prevent ghost accessories from appearing in HomeKit.
|
|
27
|
+
*/
|
|
28
|
+
configureAccessory(accessory) {
|
|
29
|
+
this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
30
|
+
}
|
|
20
31
|
}
|
|
21
32
|
//# sourceMappingURL=Platform.Matter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Platform.Matter.js","sourceRoot":"","sources":["../src/Platform.Matter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEnD,MAAM,OAAO,0BAA0B;
|
|
1
|
+
{"version":3,"file":"Platform.Matter.js","sourceRoot":"","sources":["../src/Platform.Matter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEnD,MAAM,OAAO,0BAA0B;IACpB,GAAG,CAAK;IACjB,YAAY,CAAc;IAC1B,aAAa,CAAe;IAEpC,YAAY,GAAY,EAAE,MAAsB,EAAE,GAAQ;QACxD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACzG,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YACrD,QAAQ,EAAE,QAAQ;YAClB,oBAAoB,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACnH,CAAC,CAAA;QACF,4EAA4E;QAC5E,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,UAAU,GAAI,MAAc,CAAC,IAAI,IAAI,qBAAqB,CAAA;YAChE,MAAM,iBAAiB,GAAG,GAAG,UAAU,UAAU,CAAA;YACjD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAS,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,SAA4B;QAC7C,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IACjF,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Platform.Matter.test.d.ts","sourceRoot":"","sources":["../src/Platform.Matter.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
3
|
+
/**
|
|
4
|
+
* Unit tests for the stale HAP accessory cleanup in PluginUpdateMatterPlatform.
|
|
5
|
+
*
|
|
6
|
+
* When the platform runs in Matter mode, any cached HAP accessories from a previous
|
|
7
|
+
* HAP-mode run (including legacy v2 accessories) are stale and must be unregistered
|
|
8
|
+
* to prevent ghost/duplicate sensors in HomeKit.
|
|
9
|
+
*/
|
|
10
|
+
describe('PluginUpdateMatterPlatform stale HAP cleanup', () => {
|
|
11
|
+
function buildMocks() {
|
|
12
|
+
const unregisterCalls = [];
|
|
13
|
+
const mockLog = {
|
|
14
|
+
info: vi.fn(),
|
|
15
|
+
warn: vi.fn(),
|
|
16
|
+
error: vi.fn(),
|
|
17
|
+
debug: vi.fn(),
|
|
18
|
+
};
|
|
19
|
+
const mockApi = {
|
|
20
|
+
matter: { registerPlatformAccessories: vi.fn(), uuid: { generate: vi.fn().mockReturnValue('matter-uuid') } },
|
|
21
|
+
hap: { uuid: { generate: vi.fn().mockReturnValue('hap-uuid') } },
|
|
22
|
+
on: vi.fn(),
|
|
23
|
+
user: { storagePath: vi.fn().mockReturnValue('/tmp') },
|
|
24
|
+
unregisterPlatformAccessories: vi.fn((...args) => {
|
|
25
|
+
unregisterCalls.push({ pluginName: args[0], platformName: args[1], accessories: args[2] });
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
const mockConfig = {
|
|
29
|
+
name: 'PluginUpdate',
|
|
30
|
+
sensorType: 'motion',
|
|
31
|
+
failureSensorType: undefined,
|
|
32
|
+
autoUpdateHomebridge: false,
|
|
33
|
+
autoUpdateHomebridgeUI: false,
|
|
34
|
+
autoUpdatePlugins: false,
|
|
35
|
+
autoUpdateNode: false,
|
|
36
|
+
};
|
|
37
|
+
return { mockLog, mockApi, mockConfig, unregisterCalls };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Simulate configureAccessory logic directly to avoid importing real Homebridge modules.
|
|
41
|
+
*
|
|
42
|
+
* This mirrors what PluginUpdateMatterPlatform.configureAccessory does:
|
|
43
|
+
* it must call api.unregisterPlatformAccessories for each stale HAP accessory.
|
|
44
|
+
*/
|
|
45
|
+
function simulateConfigureAccessory(api, accessory) {
|
|
46
|
+
api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
47
|
+
}
|
|
48
|
+
it('unregisters a stale legacy v2 HAP accessory (PluginUpdate UUID)', () => {
|
|
49
|
+
const { mockApi, unregisterCalls } = buildMocks();
|
|
50
|
+
const legacyAccessory = { UUID: mockApi.hap.uuid.generate('PluginUpdate'), displayName: 'Homebridge Plugin Update' };
|
|
51
|
+
simulateConfigureAccessory(mockApi, legacyAccessory);
|
|
52
|
+
expect(unregisterCalls).toHaveLength(1);
|
|
53
|
+
expect(unregisterCalls[0].pluginName).toBe(PLUGIN_NAME);
|
|
54
|
+
expect(unregisterCalls[0].platformName).toBe(PLATFORM_NAME);
|
|
55
|
+
expect(unregisterCalls[0].accessories).toContain(legacyAccessory);
|
|
56
|
+
});
|
|
57
|
+
it('unregisters a stale v3 HAP update-sensor accessory (PluginUpdateCheck-UpdateSensor UUID)', () => {
|
|
58
|
+
const { mockApi, unregisterCalls } = buildMocks();
|
|
59
|
+
const v3Accessory = { UUID: mockApi.hap.uuid.generate('PluginUpdateCheck-UpdateSensor'), displayName: 'PluginUpdate' };
|
|
60
|
+
simulateConfigureAccessory(mockApi, v3Accessory);
|
|
61
|
+
expect(unregisterCalls).toHaveLength(1);
|
|
62
|
+
expect(unregisterCalls[0].accessories).toContain(v3Accessory);
|
|
63
|
+
});
|
|
64
|
+
it('unregisters multiple stale accessories when called for each', () => {
|
|
65
|
+
const { mockApi, unregisterCalls } = buildMocks();
|
|
66
|
+
const accessory1 = { UUID: 'uuid-1', displayName: 'Accessory 1' };
|
|
67
|
+
const accessory2 = { UUID: 'uuid-2', displayName: 'Accessory 2' };
|
|
68
|
+
simulateConfigureAccessory(mockApi, accessory1);
|
|
69
|
+
simulateConfigureAccessory(mockApi, accessory2);
|
|
70
|
+
expect(unregisterCalls).toHaveLength(2);
|
|
71
|
+
expect(unregisterCalls[0].accessories).toContain(accessory1);
|
|
72
|
+
expect(unregisterCalls[1].accessories).toContain(accessory2);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=Platform.Matter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Platform.Matter.test.js","sourceRoot":"","sources":["../src/Platform.Matter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { API } from 'homebridge';
|
|
2
|
-
export declare function migratePlatformAliasInPluginConfigs(configs:
|
|
2
|
+
export declare function migratePlatformAliasInPluginConfigs(configs: unknown): number;
|
|
3
3
|
export declare function migrateLegacyPlatformAlias(api: API): Promise<void>;
|
|
4
4
|
//# sourceMappingURL=configMigration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configMigration.d.ts","sourceRoot":"","sources":["../src/configMigration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"configMigration.d.ts","sourceRoot":"","sources":["../src/configMigration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAoB,MAAM,YAAY,CAAA;AAUvD,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAc5E;AAED,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDxE"}
|
package/dist/configMigration.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
1
3
|
import { PLUGIN_NAME, PLATFORM_NAME } from './settings.js';
|
|
2
4
|
import { UiApi } from './ui-api.js';
|
|
3
5
|
const LEGACY_PLATFORM_NAME = 'PluginUpdate';
|
|
@@ -26,6 +28,30 @@ export async function migrateLegacyPlatformAlias(api) {
|
|
|
26
28
|
debug: () => { },
|
|
27
29
|
};
|
|
28
30
|
try {
|
|
31
|
+
// Primary approach: read config.json directly so that legacy 'PluginUpdate' entries
|
|
32
|
+
// are found and migrated regardless of which npm package name they were last saved
|
|
33
|
+
// under. This is required when upgrading from the old unscoped package
|
|
34
|
+
// (homebridge-plugin-update-check) or from a v2.x install where the platform alias
|
|
35
|
+
// was still 'PluginUpdate', because the Homebridge UI API only returns entries for
|
|
36
|
+
// the current plugin alias ('HomebridgeUpdater') and will return an empty array
|
|
37
|
+
// before the first migration completes.
|
|
38
|
+
const configPath = path.resolve(hbStoragePath, 'config.json');
|
|
39
|
+
let hbConfig;
|
|
40
|
+
try {
|
|
41
|
+
hbConfig = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
hbConfig = undefined;
|
|
45
|
+
}
|
|
46
|
+
if (hbConfig?.platforms && Array.isArray(hbConfig.platforms)) {
|
|
47
|
+
const updatedDirect = migratePlatformAliasInPluginConfigs(hbConfig.platforms);
|
|
48
|
+
if (updatedDirect > 0) {
|
|
49
|
+
writeFileSync(configPath, JSON.stringify(hbConfig, null, 4), 'utf8');
|
|
50
|
+
}
|
|
51
|
+
// config.json was readable and parseable — no need to try the UI API.
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// config.json could not be read or parsed — fall back to the UI API.
|
|
29
55
|
const uiApi = new UiApi(hbStoragePath, silentLog);
|
|
30
56
|
if (!uiApi.isConfigured()) {
|
|
31
57
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configMigration.js","sourceRoot":"","sources":["../src/configMigration.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,MAAM,oBAAoB,GAAG,cAAc,CAAA;AAE3C,MAAM,UAAU,mCAAmC,CAAC,
|
|
1
|
+
{"version":3,"file":"configMigration.js","sourceRoot":"","sources":["../src/configMigration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import
|
|
1
|
+
import { describe, expect, it, vi, beforeEach } from 'vitest';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
// Mock node:fs before any imports that use it — vitest hoists vi.mock automatically.
|
|
4
|
+
vi.mock('node:fs', () => ({
|
|
5
|
+
readFileSync: vi.fn(),
|
|
6
|
+
writeFileSync: vi.fn(),
|
|
7
|
+
}));
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import { migratePlatformAliasInPluginConfigs, migrateLegacyPlatformAlias } from './configMigration.js';
|
|
3
10
|
describe('config migration', () => {
|
|
4
11
|
it('should migrate legacy platform alias in plugin config entries', () => {
|
|
5
12
|
const pluginConfigs = [
|
|
@@ -19,5 +26,94 @@ describe('config migration', () => {
|
|
|
19
26
|
expect(updated).toBe(0);
|
|
20
27
|
expect(pluginConfigs[0].platform).toBe('HomebridgeUpdater');
|
|
21
28
|
});
|
|
29
|
+
it('should return 0 for a non-array input', () => {
|
|
30
|
+
expect(migratePlatformAliasInPluginConfigs(null)).toBe(0);
|
|
31
|
+
expect(migratePlatformAliasInPluginConfigs(undefined)).toBe(0);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('migrateLegacyPlatformAlias (direct file migration)', () => {
|
|
35
|
+
const FAKE_STORAGE = path.join(path.sep, 'fake', 'homebridge');
|
|
36
|
+
const FAKE_CONFIG_PATH = path.resolve(FAKE_STORAGE, 'config.json');
|
|
37
|
+
const readFileSyncMock = vi.mocked(fs.readFileSync);
|
|
38
|
+
const writeFileSyncMock = vi.mocked(fs.writeFileSync);
|
|
39
|
+
function makeApi(storagePath) {
|
|
40
|
+
return {
|
|
41
|
+
user: { storagePath: () => storagePath },
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
vi.clearAllMocks();
|
|
46
|
+
});
|
|
47
|
+
it('should do nothing when storagePath is missing', async () => {
|
|
48
|
+
await migrateLegacyPlatformAlias(makeApi(undefined));
|
|
49
|
+
expect(readFileSyncMock).not.toHaveBeenCalled();
|
|
50
|
+
expect(writeFileSyncMock).not.toHaveBeenCalled();
|
|
51
|
+
});
|
|
52
|
+
it('should migrate PluginUpdate → HomebridgeUpdater entries directly in config.json', async () => {
|
|
53
|
+
const originalConfig = {
|
|
54
|
+
bridge: { name: 'Homebridge', username: 'AA:BB:CC:DD:EE:FF', port: 51826 },
|
|
55
|
+
platforms: [
|
|
56
|
+
{ platform: 'PluginUpdate', name: 'Plugin Update', checkPluginUpdates: true },
|
|
57
|
+
{ platform: 'OtherPlugin', name: 'Other' },
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
readFileSyncMock.mockReturnValue(JSON.stringify(originalConfig));
|
|
61
|
+
writeFileSyncMock.mockImplementation(() => { });
|
|
62
|
+
await migrateLegacyPlatformAlias(makeApi(FAKE_STORAGE));
|
|
63
|
+
expect(writeFileSyncMock).toHaveBeenCalledTimes(1);
|
|
64
|
+
const [writtenPath, writtenData] = writeFileSyncMock.mock.calls[0];
|
|
65
|
+
expect(writtenPath).toBe(FAKE_CONFIG_PATH);
|
|
66
|
+
const written = JSON.parse(writtenData);
|
|
67
|
+
expect(written.platforms[0].platform).toBe('HomebridgeUpdater');
|
|
68
|
+
expect(written.platforms[0].name).toBe('Plugin Update');
|
|
69
|
+
expect(written.platforms[0].checkPluginUpdates).toBe(true);
|
|
70
|
+
// Unrelated platform entries must remain untouched
|
|
71
|
+
expect(written.platforms[1].platform).toBe('OtherPlugin');
|
|
72
|
+
});
|
|
73
|
+
it('should not write config.json when no legacy entries exist', async () => {
|
|
74
|
+
const currentConfig = {
|
|
75
|
+
bridge: { name: 'Homebridge', username: 'AA:BB:CC:DD:EE:FF', port: 51826 },
|
|
76
|
+
platforms: [
|
|
77
|
+
{ platform: 'HomebridgeUpdater', name: 'Updater' },
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
readFileSyncMock.mockReturnValue(JSON.stringify(currentConfig));
|
|
81
|
+
writeFileSyncMock.mockImplementation(() => { });
|
|
82
|
+
await migrateLegacyPlatformAlias(makeApi(FAKE_STORAGE));
|
|
83
|
+
expect(writeFileSyncMock).not.toHaveBeenCalled();
|
|
84
|
+
});
|
|
85
|
+
it('should not throw when config.json cannot be read', async () => {
|
|
86
|
+
readFileSyncMock.mockImplementation(() => {
|
|
87
|
+
throw new Error('ENOENT: no such file');
|
|
88
|
+
});
|
|
89
|
+
writeFileSyncMock.mockImplementation(() => { });
|
|
90
|
+
await expect(migrateLegacyPlatformAlias(makeApi(FAKE_STORAGE))).resolves.toBeUndefined();
|
|
91
|
+
expect(writeFileSyncMock).not.toHaveBeenCalled();
|
|
92
|
+
});
|
|
93
|
+
it('should preserve all config fields (_bridge, etc.) when migrating', async () => {
|
|
94
|
+
const configWithBridge = {
|
|
95
|
+
bridge: { name: 'Homebridge', username: 'AA:BB:CC:DD:EE:FF', port: 51826 },
|
|
96
|
+
platforms: [
|
|
97
|
+
{
|
|
98
|
+
platform: 'PluginUpdate',
|
|
99
|
+
name: 'Plugin Update',
|
|
100
|
+
_bridge: { username: '11:22:33:44:55:66', port: 51828, name: 'Plugin Update Child Bridge' },
|
|
101
|
+
checkPluginUpdates: true,
|
|
102
|
+
autoUpdatePlugins: false,
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
readFileSyncMock.mockReturnValue(JSON.stringify(configWithBridge));
|
|
107
|
+
writeFileSyncMock.mockImplementation(() => { });
|
|
108
|
+
await migrateLegacyPlatformAlias(makeApi(FAKE_STORAGE));
|
|
109
|
+
expect(writeFileSyncMock).toHaveBeenCalledTimes(1);
|
|
110
|
+
const written = JSON.parse(writeFileSyncMock.mock.calls[0][1]);
|
|
111
|
+
const migratedPlatform = written.platforms[0];
|
|
112
|
+
expect(migratedPlatform.platform).toBe('HomebridgeUpdater');
|
|
113
|
+
// Child bridge config must be preserved intact
|
|
114
|
+
expect(migratedPlatform._bridge).toEqual(configWithBridge.platforms[0]._bridge);
|
|
115
|
+
expect(migratedPlatform.checkPluginUpdates).toBe(true);
|
|
116
|
+
expect(migratedPlatform.autoUpdatePlugins).toBe(false);
|
|
117
|
+
});
|
|
22
118
|
});
|
|
23
119
|
//# sourceMappingURL=configMigration.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configMigration.test.js","sourceRoot":"","sources":["../src/configMigration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"configMigration.test.js","sourceRoot":"","sources":["../src/configMigration.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.test.js
CHANGED
|
@@ -122,5 +122,29 @@ describe('createPlatformProxy', () => {
|
|
|
122
122
|
expect(matterConstructed).toHaveLength(1);
|
|
123
123
|
expect(hapConstructed).toHaveLength(0);
|
|
124
124
|
});
|
|
125
|
+
it('should delegate configureAccessory to the Matter impl (stale HAP cleanup)', () => {
|
|
126
|
+
const configuredAccessories = [];
|
|
127
|
+
class MockHAPPlatform {
|
|
128
|
+
constructor(_log, _config, _api) { }
|
|
129
|
+
configureAccessory(accessory) {
|
|
130
|
+
// Should not be called when Matter is active
|
|
131
|
+
configuredAccessories.push({ platform: 'hap', accessory });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
class MockMatterPlatform {
|
|
135
|
+
constructor(_log, _config, _api) { }
|
|
136
|
+
configureAccessory(accessory) {
|
|
137
|
+
configuredAccessories.push({ platform: 'matter', accessory });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const ProxyCtor = createPlatformProxy(MockHAPPlatform, MockMatterPlatform);
|
|
141
|
+
const api = { matter: {}, isMatterAvailable: () => true, isMatterEnabled: () => true };
|
|
142
|
+
const proxy = new ProxyCtor('log', { enableMatter: true }, api);
|
|
143
|
+
const staleAccessory = { UUID: 'old-hap-uuid', displayName: 'Homebridge Plugin Update' };
|
|
144
|
+
proxy.configureAccessory(staleAccessory);
|
|
145
|
+
expect(configuredAccessories).toHaveLength(1);
|
|
146
|
+
expect(configuredAccessories[0].platform).toBe('matter');
|
|
147
|
+
expect(configuredAccessories[0].accessory).toBe(staleAccessory);
|
|
148
|
+
});
|
|
125
149
|
});
|
|
126
150
|
//# sourceMappingURL=utils.test.js.map
|
package/dist/utils.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@homebridge-plugins/homebridge-updater",
|
|
3
3
|
"displayName": "Homebridge Updater",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "3.1.
|
|
5
|
+
"version": "3.1.5",
|
|
6
6
|
"description": "A Homebridge plugin for checking for updates to Homebridge and plugins",
|
|
7
7
|
"author": "David Maher",
|
|
8
8
|
"license": "BSD-2-Clause",
|