Files
alice-backend/test/admin.test.mjs
T

46 lines
2.1 KiB
JavaScript

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.clearHistory();
assert.deepEqual(openStore(directory).getHistory(), []);
});