@homebridge-plugins/homebridge-sharkiq 1.6.2-beta.0 → 1.6.2-beta.1

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/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ All notable changes to this project will be documented in this file. This projec
7
7
  ### Changed
8
8
 
9
9
  - fix: explain that a failed code exchange usually means the login code was already used or has expired, instead of reporting a bare http error (#84)
10
+ - chore: keep test files out of the published package
11
+ - chore(github): run the build and tests in ci, on node 22, 24 and 26
12
+ - chore: use the same lint setup across every plugin
13
+ - chore: add a changelog:sync script to populate the pending section from the commits
14
+ - chore: count a repeated commit subject once when syncing the changelog
15
+ - chore(github): check the changelog against the commits in ci
10
16
 
11
17
  ## v1.6.1 (2026-07-28)
12
18
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@homebridge-plugins/homebridge-sharkiq",
3
3
  "displayName": "SharkIQ Plugin",
4
4
  "type": "module",
5
- "version": "1.6.2-beta.0",
5
+ "version": "1.6.2-beta.1",
6
6
  "description": "A Homebridge plugin to connect your Shark Vacuum to homebridge.",
7
7
  "author": {
8
8
  "name": "Bubba8291",
@@ -32,7 +32,7 @@
32
32
  "main": "dist/index.js",
33
33
  "engines": {
34
34
  "homebridge": "^1.11.4 || ^2.0.0",
35
- "node": "^22.12.0 || ^24.0.0"
35
+ "node": "^22.12.0 || ^24.0.0 || ^26.0.0"
36
36
  },
37
37
  "scripts": {
38
38
  "lint": "eslint . --max-warnings=0",
@@ -45,7 +45,8 @@
45
45
  "test:watch": "vitest watch",
46
46
  "test-coverage": "npm run test -- --coverage",
47
47
  "docs": "typedoc",
48
- "docs:lint": "typedoc --emit none --treatWarningsAsErrors"
48
+ "docs:lint": "typedoc --emit none --treatWarningsAsErrors",
49
+ "changelog:sync": "node .github/scripts/sync-changelog.mjs"
49
50
  },
50
51
  "publishConfig": {
51
52
  "access": "public"
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=login.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.test.d.ts","sourceRoot":"","sources":["../src/login.test.ts"],"names":[],"mappings":""}
@@ -1,26 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { describeTokenExchangeFailure } from './login.js';
3
- /**
4
- * The bare `Unable to get token data. HTTP 403` sent people hunting for an
5
- * account problem in #84 and #85, when the real cause is a login code that has
6
- * already been used or has expired.
7
- */
8
- describe('describeTokenExchangeFailure', () => {
9
- it('explains what a 403 actually means and what to do next', () => {
10
- const message = describeTokenExchangeFailure(403);
11
- expect(message).toContain('HTTP 403');
12
- expect(message).toContain('already been used or has expired');
13
- expect(message).toContain('Generate a fresh login URL');
14
- expect(message).toContain('SharkClean app');
15
- });
16
- it('treats a 401 the same way, since it has the same cause', () => {
17
- expect(describeTokenExchangeFailure(401)).toContain('already been used or has expired');
18
- });
19
- it('leaves other statuses as a plain report', () => {
20
- // A 500 is SharkNinja's problem, not the user's - do not send them off
21
- // regenerating login URLs that were never the issue.
22
- expect(describeTokenExchangeFailure(500)).toBe('Unable to get token data. HTTP 500');
23
- expect(describeTokenExchangeFailure(404)).toBe('Unable to get token data. HTTP 404');
24
- });
25
- });
26
- //# sourceMappingURL=login.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.test.js","sourceRoot":"","sources":["../src/login.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAA;AAEzD;;;;GAIG;AACH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,OAAO,GAAG,4BAA4B,CAAC,GAAG,CAAC,CAAA;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAA;QAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,uEAAuE;QACvE,qDAAqD;QACrD,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QACpF,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ayla_api.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ayla_api.test.d.ts","sourceRoot":"","sources":["../../src/sharkiq-js/ayla_api.test.ts"],"names":[],"mappings":""}
@@ -1,61 +0,0 @@
1
- import { afterEach, describe, expect, it, vi } from 'vitest';
2
- import { AylaApi } from './ayla_api.js';
3
- const log = { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn(), success: vi.fn() };
4
- // A SharkNinja account holds every appliance of the brand, so the device list
5
- // can carry a Ninja grill next to a Shark vacuum (#85)
6
- const WOODFIRE = { dsn: 'AC000W033162165', key: 1, oem_model: 'woodfire', product_name: 'Woodfire ' };
7
- const VACUUM = { dsn: 'AC000W012345678', key: 2, oem_model: 'shark_iq', product_name: 'Shark IQ Robot' };
8
- function apiWithDevices(devices, propertiesByDsn) {
9
- const api = new AylaApi('/tmp/sharkiq-test-auth.json', 'app-id', 'app-secret', log, false);
10
- vi.spyOn(api, 'list_devices').mockResolvedValue(devices);
11
- // Stand in for the per-device property fetch each vacuum does on startup
12
- vi.spyOn(api, 'makeRequest').mockImplementation((async (..._args) => {
13
- const url = String(_args[1] ?? '');
14
- return {
15
- ok: true,
16
- status: 200,
17
- response: JSON.stringify(propertiesByDsn[Object.keys(propertiesByDsn).find(dsn => url.includes(dsn)) ?? ''] ?? []),
18
- };
19
- }));
20
- vi.spyOn(api, 'auth_header').mockResolvedValue({ Authorization: 'auth' });
21
- return api;
22
- }
23
- function props(names) {
24
- return names.map(name => ({ property: { name, value: 1, key: 1, base_type: 'integer' } }));
25
- }
26
- describe('aylaApi.get_devices', () => {
27
- afterEach(() => {
28
- vi.restoreAllMocks();
29
- vi.clearAllMocks();
30
- });
31
- it('keeps devices that report Operating_Mode', async () => {
32
- const api = apiWithDevices([VACUUM], {
33
- [VACUUM.dsn]: props(['Operating_Mode', 'Docked_Status', 'Battery_Capacity']),
34
- });
35
- const devices = await api.get_devices();
36
- expect(devices).toHaveLength(1);
37
- expect(devices[0].serial_number).toBe(VACUUM.dsn);
38
- });
39
- it('drops a non-vacuum appliance such as a Ninja Woodfire grill (#85)', async () => {
40
- const api = apiWithDevices([WOODFIRE], {
41
- [WOODFIRE.dsn]: props(['Cook_Mode', 'Probe_Temperature']),
42
- });
43
- const devices = await api.get_devices();
44
- expect(devices).toHaveLength(0);
45
- expect(log.info).toHaveBeenCalledWith(expect.stringContaining('is not a vacuum'));
46
- });
47
- it('keeps the vacuum and drops the grill when an account holds both', async () => {
48
- const api = apiWithDevices([WOODFIRE, VACUUM], {
49
- [WOODFIRE.dsn]: props(['Cook_Mode']),
50
- [VACUUM.dsn]: props(['Operating_Mode']),
51
- });
52
- const devices = await api.get_devices();
53
- expect(devices.map(device => device.serial_number)).toEqual([VACUUM.dsn]);
54
- });
55
- it('does not filter when the caller skips the property update', async () => {
56
- const api = apiWithDevices([WOODFIRE, VACUUM], {});
57
- const devices = await api.get_devices(false);
58
- expect(devices).toHaveLength(2);
59
- });
60
- });
61
- //# sourceMappingURL=ayla_api.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ayla_api.test.js","sourceRoot":"","sources":["../../src/sharkiq-js/ayla_api.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=skegox_api.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skegox_api.test.d.ts","sourceRoot":"","sources":["../../src/sharkiq-js/skegox_api.test.ts"],"names":[],"mappings":""}
@@ -1,132 +0,0 @@
1
- import { Buffer } from 'node:buffer';
2
- import { mkdtempSync, readFileSync, writeFileSync } from 'node:fs';
3
- import { tmpdir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
6
- import { SkegoxApi } from './skegox_api.js';
7
- const log = { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() };
8
- function fakeJwt(sub) {
9
- const payload = Buffer.from(JSON.stringify({ sub })).toString('base64url');
10
- return `header.${payload}.signature`;
11
- }
12
- function writeAuth0File(dir, msUntilExpiry = 3600 * 1000) {
13
- const file = join(dir, '.sharkiq_auth0.json');
14
- writeFileSync(file, JSON.stringify({
15
- id_token: fakeJwt('auth0|user123'),
16
- refresh_token: 'refresh-1',
17
- expiration: new Date(Date.now() + msUntilExpiry),
18
- }));
19
- return file;
20
- }
21
- // A fetch stub that answers the discovery, command and token-refresh routes
22
- function stubFetch(overrides = {}) {
23
- let patchCount = 0;
24
- const mock = vi.fn(async (url, options = {}) => {
25
- const ok = (data) => ({ ok: true, status: 200, json: async () => data, text: async () => '' });
26
- if (url.includes('/oauth/token')) {
27
- return ok({ id_token: fakeJwt('auth0|user123'), refresh_token: 'refresh-2', expires_in: 3600 });
28
- }
29
- if (url.includes('/householdsEndUser')) {
30
- return ok({ households: ['HH1'] });
31
- }
32
- if (url.includes('/users/user123')) {
33
- return ok({ items: [{ deviceId: 'SND1' }] });
34
- }
35
- if (url.includes('/devices/SND1') && options.method === 'GET') {
36
- return ok({
37
- registry: { Battery_Serial_Num: 'DSN123-SND1' },
38
- telemetry: { Battery_Capacity: 88 },
39
- shadow: { properties: { reported: { Operating_Mode: { value: 2 }, DockedStatus: 0 } } },
40
- connectivityStatus: { connected: true },
41
- });
42
- }
43
- if (options.method === 'PATCH') {
44
- patchCount += 1;
45
- if (overrides.failFirstPatch && patchCount === 1) {
46
- return { ok: false, status: 401, json: async () => ({}), text: async () => 'expired' };
47
- }
48
- return ok({});
49
- }
50
- return { ok: false, status: 404, json: async () => ({}), text: async () => 'not found' };
51
- });
52
- vi.stubGlobal('fetch', mock);
53
- return mock;
54
- }
55
- describe('skegoxApi', () => {
56
- let dir;
57
- beforeEach(() => {
58
- dir = mkdtempSync(join(tmpdir(), 'skegox-test-'));
59
- });
60
- afterEach(() => {
61
- vi.unstubAllGlobals();
62
- vi.clearAllMocks();
63
- });
64
- it('discovers the household and maps vacuums by their Ayla DSN', async () => {
65
- stubFetch();
66
- const api = new SkegoxApi(log, writeAuth0File(dir));
67
- await expect(api.init()).resolves.toBe(1);
68
- expect(api.available('DSN123')).toBe(true);
69
- expect(api.available(' dsn123 ')).toBe(true);
70
- expect(api.available('OTHER')).toBe(false);
71
- });
72
- it('sends commands as a desired-state shadow patch', async () => {
73
- const fetchMock = stubFetch();
74
- const api = new SkegoxApi(log, writeAuth0File(dir));
75
- await api.init();
76
- await api.setProperty('dsn123', 'Operating_Mode', 2);
77
- const patch = fetchMock.mock.calls.find(([, options]) => options?.method === 'PATCH');
78
- expect(patch).toBeDefined();
79
- expect(patch[0]).toContain('/devicesEndUserController/HH1/devices/SND1');
80
- expect(JSON.parse(patch[1].body)).toEqual({
81
- shadow: { properties: { desired: { Operating_Mode: 2 } } },
82
- });
83
- });
84
- it('refreshes an expired token first and stores the rotated refresh token', async () => {
85
- const fetchMock = stubFetch();
86
- const file = writeAuth0File(dir, -1000);
87
- const api = new SkegoxApi(log, file);
88
- await api.init();
89
- expect(fetchMock.mock.calls[0][0]).toContain('/oauth/token');
90
- const saved = JSON.parse(readFileSync(file, 'utf8'));
91
- expect(saved.refresh_token).toBe('refresh-2');
92
- });
93
- it('retries a command once with a fresh token after a 401', async () => {
94
- const fetchMock = stubFetch({ failFirstPatch: true });
95
- const api = new SkegoxApi(log, writeAuth0File(dir));
96
- await api.init();
97
- await api.setProperty('DSN123', 'Operating_Mode', 2);
98
- const patches = fetchMock.mock.calls.filter(([, options]) => options?.method === 'PATCH');
99
- expect(patches).toHaveLength(2);
100
- const refreshes = fetchMock.mock.calls.filter(([url]) => url.includes('/oauth/token'));
101
- expect(refreshes).toHaveLength(1);
102
- });
103
- it('rejects init when no token set is stored', async () => {
104
- stubFetch();
105
- const api = new SkegoxApi(log, join(dir, 'missing.json'));
106
- await expect(api.init()).rejects.toThrow();
107
- });
108
- it('rejects a command for an unmapped vacuum', async () => {
109
- stubFetch();
110
- const api = new SkegoxApi(log, writeAuth0File(dir));
111
- await api.init();
112
- await expect(api.setProperty('UNKNOWN', 'Operating_Mode', 2)).rejects.toThrow('not mapped');
113
- });
114
- it('reads live state keyed by clean property names', async () => {
115
- stubFetch();
116
- const api = new SkegoxApi(log, writeAuth0File(dir));
117
- await api.init();
118
- const values = await api.getPropertyValues('DSN123');
119
- expect(values.Battery_Capacity).toBe(88);
120
- expect(values.Operating_Mode).toBe(2);
121
- expect(values.DockedStatus).toBe(0);
122
- });
123
- it('describes the shadow state for a mapped vacuum', async () => {
124
- stubFetch();
125
- const api = new SkegoxApi(log, writeAuth0File(dir));
126
- await api.init();
127
- const state = await api.describeState('DSN123');
128
- expect(state).toContain('desired Operating_Mode=');
129
- expect(state).toContain('connected=');
130
- });
131
- });
132
- //# sourceMappingURL=skegox_api.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skegox_api.test.js","sourceRoot":"","sources":["../../src/sharkiq-js/skegox_api.test.ts"],"names":[],"mappings":"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"}