mirror of
https://github.com/stackblitz-labs/bolt.diy
synced 2025-06-26 18:26:38 +00:00
- Move stores/utils/types to their relative directories (i.e chat stores in chat directory) - Move utility files to shared/utils - Move component files to shared/components - Move type definitions to shared/types - Move stores to shared/stores - Update import paths across the project
141 lines
3.7 KiB
TypeScript
141 lines
3.7 KiB
TypeScript
/**
|
|
* Functions for managing chat data in IndexedDB
|
|
*/
|
|
|
|
import type { Message } from 'ai';
|
|
import type { IChatMetadata } from './db'; // Import IChatMetadata
|
|
|
|
export interface ChatMessage {
|
|
id: string;
|
|
role: 'user' | 'assistant' | 'system';
|
|
content: string;
|
|
timestamp: number;
|
|
}
|
|
|
|
export interface Chat {
|
|
id: string;
|
|
description?: string;
|
|
messages: Message[];
|
|
timestamp: string;
|
|
urlId?: string;
|
|
metadata?: IChatMetadata;
|
|
}
|
|
|
|
/**
|
|
* Get all chats from the database
|
|
* @param db The IndexedDB database instance
|
|
* @returns A promise that resolves to an array of chats
|
|
*/
|
|
export async function getAllChats(db: IDBDatabase): Promise<Chat[]> {
|
|
console.log(`getAllChats: Using database '${db.name}', version ${db.version}`);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
const transaction = db.transaction(['chats'], 'readonly');
|
|
const store = transaction.objectStore('chats');
|
|
const request = store.getAll();
|
|
|
|
request.onsuccess = () => {
|
|
const result = request.result || [];
|
|
console.log(`getAllChats: Found ${result.length} chats in database '${db.name}'`);
|
|
resolve(result);
|
|
};
|
|
|
|
request.onerror = () => {
|
|
console.error(`getAllChats: Error querying database '${db.name}':`, request.error);
|
|
reject(request.error);
|
|
};
|
|
} catch (err) {
|
|
console.error(`getAllChats: Error creating transaction on database '${db.name}':`, err);
|
|
reject(err);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get a chat by ID
|
|
* @param db The IndexedDB database instance
|
|
* @param id The ID of the chat to get
|
|
* @returns A promise that resolves to the chat or null if not found
|
|
*/
|
|
export async function getChatById(db: IDBDatabase, id: string): Promise<Chat | null> {
|
|
return new Promise((resolve, reject) => {
|
|
const transaction = db.transaction(['chats'], 'readonly');
|
|
const store = transaction.objectStore('chats');
|
|
const request = store.get(id);
|
|
|
|
request.onsuccess = () => {
|
|
resolve(request.result || null);
|
|
};
|
|
|
|
request.onerror = () => {
|
|
reject(request.error);
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Save a chat to the database
|
|
* @param db The IndexedDB database instance
|
|
* @param chat The chat to save
|
|
* @returns A promise that resolves when the chat is saved
|
|
*/
|
|
export async function saveChat(db: IDBDatabase, chat: Chat): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
const transaction = db.transaction(['chats'], 'readwrite');
|
|
const store = transaction.objectStore('chats');
|
|
const request = store.put(chat);
|
|
|
|
request.onsuccess = () => {
|
|
resolve();
|
|
};
|
|
|
|
request.onerror = () => {
|
|
reject(request.error);
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Delete a chat by ID
|
|
* @param db The IndexedDB database instance
|
|
* @param id The ID of the chat to delete
|
|
* @returns A promise that resolves when the chat is deleted
|
|
*/
|
|
export async function deleteChat(db: IDBDatabase, id: string): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
const transaction = db.transaction(['chats'], 'readwrite');
|
|
const store = transaction.objectStore('chats');
|
|
const request = store.delete(id);
|
|
|
|
request.onsuccess = () => {
|
|
resolve();
|
|
};
|
|
|
|
request.onerror = () => {
|
|
reject(request.error);
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Delete all chats
|
|
* @param db The IndexedDB database instance
|
|
* @returns A promise that resolves when all chats are deleted
|
|
*/
|
|
export async function deleteAllChats(db: IDBDatabase): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
const transaction = db.transaction(['chats'], 'readwrite');
|
|
const store = transaction.objectStore('chats');
|
|
const request = store.clear();
|
|
|
|
request.onsuccess = () => {
|
|
resolve();
|
|
};
|
|
|
|
request.onerror = () => {
|
|
reject(request.error);
|
|
};
|
|
});
|
|
}
|