validate weekly brief manifests

This commit is contained in:
2026-09-06 17:38:04 +03:00
parent 55785fe3d1
commit b9a71a83dc
+11 -1
View File
@@ -4,6 +4,15 @@ import path from 'node:path';
import { randomUUID, createHash } from 'node:crypto';
const hash = value => createHash('sha256').update(value).digest('hex');
function parseManifest(raw) {
try {
const messages = JSON.parse(raw);
if (!Array.isArray(messages) || messages.some(message => !message || typeof message !== 'object' || Array.isArray(message))) throw new Error('manifest biçimi');
return messages;
} catch {
throw new Error('Haftalık özet manifesti bozuk; gönderim işlemi durduruldu.');
}
}
export function briefWeekKey(now = new Date()) {
const date = new Date(now.getTime() + 3 * 3600000);
date.setUTCDate(date.getUTCDate() - (date.getUTCDay()+6)%7);
@@ -85,7 +94,8 @@ export function createBriefOutbox(directory) {
LEFT JOIN brief_reviews r ON r.batch=m.batch AND r.position=m.position
WHERE m.state!='accepted' OR r.action IS NOT NULL
ORDER BY b.week DESC,b.email,m.position`).all().map(row=>{
const message=JSON.parse(row.manifest)[row.position];
const message=parseManifest(row.manifest)[row.position];
if (!message) throw new Error('Haftalık özet manifestinde mesaj bulunamadı.');
return {id:`${row.batch}:${row.position}`,to:message.to || row.email,
subject:`Haftalık özet · ${row.week} · ${message.channel === 'telegram' ? 'Telegram' : 'E-posta'} · Mesaj ${row.position+1}`,
state:row.action==='confirmed_sent'?'sent_manual':row.state,error:row.error,providerId:row.receipt,