72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
// @ts-nocheck
|
|
|
|
|
|
import { CONFIG } from './config.js';
|
|
|
|
const BASE = CONFIG.ZHONGTAI_BASE;
|
|
const DEFAULT_ID = 'default';
|
|
const SAVE_DEBOUNCE_MS = 800;
|
|
|
|
let _saveTimer = null;
|
|
let _lastMessages = null;
|
|
|
|
export async function load(id = DEFAULT_ID) {
|
|
try {
|
|
const r = await fetch(`${BASE}/conversations?id=${encodeURIComponent(id)}`);
|
|
if (!r.ok) return [];
|
|
const data = await r.json();
|
|
return Array.isArray(data.messages) ? data.messages : [];
|
|
} catch (e) {
|
|
console.warn('[conversation] load 失败,回退空:', e.message);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
export function save(messages, id = DEFAULT_ID) {
|
|
_lastMessages = messages;
|
|
if (_saveTimer) clearTimeout(_saveTimer);
|
|
_saveTimer = setTimeout(() => {
|
|
_saveTimer = null;
|
|
_doSave(_lastMessages, id);
|
|
}, SAVE_DEBOUNCE_MS);
|
|
}
|
|
|
|
async function _doSave(messages, id) {
|
|
try {
|
|
const r = await fetch(`${BASE}/conversations?id=${encodeURIComponent(id)}`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ messages }),
|
|
});
|
|
return r.ok;
|
|
} catch (e) {
|
|
console.warn('[conversation] save 失败:', e.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export async function clear(id = DEFAULT_ID) {
|
|
if (_saveTimer) {
|
|
clearTimeout(_saveTimer);
|
|
_saveTimer = null;
|
|
}
|
|
try {
|
|
const r = await fetch(`${BASE}/conversations?id=${encodeURIComponent(id)}`, {
|
|
method: 'DELETE',
|
|
});
|
|
if (r.ok) return true;
|
|
} catch (e) {}
|
|
return _doSave([], id);
|
|
}
|
|
|
|
export async function list() {
|
|
try {
|
|
const r = await fetch(`${BASE}/conversations/list`);
|
|
if (!r.ok) return [];
|
|
const data = await r.json();
|
|
return data.conversations || [];
|
|
} catch (e) {
|
|
return [];
|
|
}
|
|
}
|