const test = require('node:test'); const assert = require('node:assert/strict'); const crypto = require('crypto'); const { registerPlayerControlSyncTask } = require('../src/web/lib/background-tasks/tasks-scheduled/player-control-sync'); test('player control sync sends minimized authorization data to remote players only', async () => { let task = null; const forwarded = []; registerPlayerControlSyncTask({ pool: { async query() { return [[{ username: 'operator', password_hash: 'hash', password_salt: 'salt' }]]; } }, common: { async fetchPlayerRegistrations() { return [ { identifier: 'local', internal_base_url: 'http://player:8081' }, { identifier: 'remote', internal_base_url: 'http://remote-player:8081' } ]; } }, backgroundTaskQueue: { registerRecurringTask(value) { task = value; } }, localPlayerInternalUrl: 'http://player:8081', forwardPlayerCommandToDevice: async function (deviceId, payload) { forwarded.push({ deviceId, payload }); } }); assert.equal(task.intervalMs, 15 * 60 * 1000); await task.run(); assert.deepEqual(forwarded, [{ deviceId: 'remote', payload: { command: 'sync-local-control', users: [{ username_hash: crypto.createHash('sha256').update('operator').digest('hex'), password_hash: 'hash', password_salt: 'salt' }] } }]); });