import test from 'node:test'; import assert from 'node:assert/strict'; import { createHmac } from 'node:crypto'; import { mkdtempSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { verifyTelegram } from '../server/admin.mjs'; import { openStore, validateSettings } from '../server/store.mjs'; test('Telegram signatures expire and authorize only the configured owner', () => { const now = 1794312000000; const token = '1234:local-test-secret'; const owner = '42'; const params = new URLSearchParams({ user: '{"id":42}', signature: 'third-party-signature', auth_date: String(now / 1000), }); const secret = createHmac('sha256', 'WebAppData').update(token).digest(); const check = 'auth_date=' + now / 1000 + '\nsignature=third-party-signature\nuser={"id":42}'; params.set('hash', createHmac('sha256', secret).update(check).digest('hex')); assert.equal(verifyTelegram(params.toString(), token, owner, now), true); assert.equal(verifyTelegram(params.toString(), token, '43', now), false); assert.equal(verifyTelegram(params.toString(), token, owner, now + 3601000), false); params.set('user', '{"id":43}'); assert.equal(verifyTelegram(params.toString(), token, '43', now), false); }); test('settings and bounded history survive a restart', t => { const directory = mkdtempSync(join(tmpdir(), 'alice-store-')); t.after(() => rmSync(directory, { recursive: true })); const store = openStore(directory); assert.equal(store.getSettings().sttModel, 'scribe_v3_live'); const changed = validateSettings({ ...store.getSettings(), sttModel: 'scribe_v2_realtime', systemPrompt: ' Тест ' }); store.updateSettings(changed); for (let i = 0; i < 55; i++) store.recordTurn(String(i), 'Ответ'); const reopened = openStore(directory); assert.equal(reopened.getSettings().systemPrompt, 'Тест'); assert.equal(reopened.getSettings().sttModel, 'scribe_v2_realtime'); assert.equal(reopened.getHistory().length, 50); assert.equal(reopened.getHistory()[0].user, '5'); reopened.recordDevice({ active: true, item: { uri: 'spotify:track:test', name: 'Track' }, status: 'paused' }); reopened.recordDevice({ connected: false }); assert.equal(openStore(directory).getDevice().lastPlayback.item.name, 'Track'); reopened.clearHistory(); assert.deepEqual(openStore(directory).getHistory(), []); });