46 lines
2.1 KiB
JavaScript
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(), []);
|
|
});
|