feat: publish Alta Local Camera Discovery

This commit is contained in:
2026-09-01 18:02:14 +00:00
commit 33f28a3d73
30 changed files with 4939 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
const { createScanSession } = require('../src/scan-session');
const camera = {
alta_key: 'ABH7-C62U-GC3E',
hostname: 'avacam-abh7-c62u-gc3e.local',
web_ui_url: 'https://avacam-abh7-c62u-gc3e.local',
ip_address: '10.0.0.223',
port: 443,
service: '_vaioncam._tcp.local',
};
test('shares one scan, publishes defensive state, and binds camera URLs', async () => {
let scanCalls = 0;
let releaseScan;
const scan = () => {
scanCalls += 1;
return new Promise((resolve) => { releaseScan = resolve; });
};
const times = [1000, 2345];
const session = createScanSession({ scan, now: () => times.shift() });
const first = session.scanOnce();
const second = session.scanOnce();
assert.strictEqual(first, second);
assert.equal(scanCalls, 1);
assert.equal(session.allowedCameraUrl(camera.web_ui_url), null);
assert.deepEqual(session.getLatestCameras(), []);
releaseScan([camera]);
assert.deepEqual(await first, {
ok: true,
count: 1,
duration_seconds: 1.3,
cameras: [camera],
});
assert.equal(session.allowedCameraUrl(camera.web_ui_url), camera.web_ui_url);
assert.equal(session.allowedCameraUrl(`${camera.web_ui_url}/?secret=value`), null);
assert.equal(session.allowedCameraUrl('https://avacam-ahg2-z4nd-fvrn.local'), null);
const exposed = session.getLatestCameras();
exposed[0].alta_key = 'MUTATED';
assert.equal(session.getLatestCameras()[0].alta_key, camera.alta_key);
});
test('revokes prior state at rescan and permits retry after failure', async () => {
let call = 0;
let releaseSecondScan;
const scan = () => {
call += 1;
if (call === 1) return Promise.resolve([camera]);
if (call === 2) return new Promise((_resolve, reject) => { releaseSecondScan = reject; });
return Promise.resolve([camera]);
};
const session = createScanSession({ scan, now: () => 0 });
await session.scanOnce();
assert.equal(session.allowedCameraUrl(camera.web_ui_url), camera.web_ui_url);
const failed = session.scanOnce();
assert.equal(session.allowedCameraUrl(camera.web_ui_url), null);
assert.deepEqual(session.getLatestCameras(), []);
releaseSecondScan(new Error('network failed'));
await assert.rejects(failed, /network failed/);
const retried = await session.scanOnce();
assert.equal(call, 3);
assert.equal(retried.count, 1);
});