mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-15 17:01:02 +00:00
96 lines
2.9 KiB
TypeScript
96 lines
2.9 KiB
TypeScript
import "fake-indexeddb/auto";
|
|
import { describe, it, expect } from "vitest";
|
|
import { IndexedDbSessionPersistDriver } from "../src/index.ts";
|
|
|
|
function uniqueDbName(prefix: string): string {
|
|
return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
}
|
|
|
|
describe("IndexedDbSessionPersistDriver", () => {
|
|
it("stores and pages sessions and events", async () => {
|
|
const dbName = uniqueDbName("indexeddb-driver");
|
|
const driver = new IndexedDbSessionPersistDriver({ databaseName: dbName });
|
|
|
|
await driver.updateSession({
|
|
id: "s-1",
|
|
agent: "mock",
|
|
agentSessionId: "a-1",
|
|
lastConnectionId: "c-1",
|
|
createdAt: 100,
|
|
});
|
|
|
|
await driver.updateSession({
|
|
id: "s-2",
|
|
agent: "mock",
|
|
agentSessionId: "a-2",
|
|
lastConnectionId: "c-2",
|
|
createdAt: 200,
|
|
destroyedAt: 300,
|
|
});
|
|
|
|
await driver.insertEvent({
|
|
id: "evt-1",
|
|
eventIndex: 1,
|
|
sessionId: "s-1",
|
|
createdAt: 1,
|
|
connectionId: "c-1",
|
|
sender: "client",
|
|
payload: { jsonrpc: "2.0", method: "session/prompt", params: { sessionId: "a-1" } },
|
|
});
|
|
|
|
await driver.insertEvent({
|
|
id: "evt-2",
|
|
eventIndex: 2,
|
|
sessionId: "s-1",
|
|
createdAt: 2,
|
|
connectionId: "c-1",
|
|
sender: "agent",
|
|
payload: { jsonrpc: "2.0", method: "session/update", params: { sessionId: "a-1" } },
|
|
});
|
|
|
|
const loaded = await driver.getSession("s-2");
|
|
expect(loaded?.destroyedAt).toBe(300);
|
|
|
|
const page1 = await driver.listSessions({ limit: 1 });
|
|
expect(page1.items).toHaveLength(1);
|
|
expect(page1.items[0]?.id).toBe("s-1");
|
|
expect(page1.nextCursor).toBeTruthy();
|
|
|
|
const page2 = await driver.listSessions({ cursor: page1.nextCursor, limit: 1 });
|
|
expect(page2.items).toHaveLength(1);
|
|
expect(page2.items[0]?.id).toBe("s-2");
|
|
expect(page2.nextCursor).toBeUndefined();
|
|
|
|
const eventsPage = await driver.listEvents({ sessionId: "s-1", limit: 10 });
|
|
expect(eventsPage.items).toHaveLength(2);
|
|
expect(eventsPage.items[0]?.id).toBe("evt-1");
|
|
expect(eventsPage.items[0]?.eventIndex).toBe(1);
|
|
expect(eventsPage.items[1]?.id).toBe("evt-2");
|
|
expect(eventsPage.items[1]?.eventIndex).toBe(2);
|
|
|
|
await driver.close();
|
|
});
|
|
|
|
it("persists across driver instances for same database", async () => {
|
|
const dbName = uniqueDbName("indexeddb-reopen");
|
|
|
|
{
|
|
const driver = new IndexedDbSessionPersistDriver({ databaseName: dbName });
|
|
await driver.updateSession({
|
|
id: "s-1",
|
|
agent: "mock",
|
|
agentSessionId: "a-1",
|
|
lastConnectionId: "c-1",
|
|
createdAt: 1,
|
|
});
|
|
await driver.close();
|
|
}
|
|
|
|
{
|
|
const driver = new IndexedDbSessionPersistDriver({ databaseName: dbName });
|
|
const session = await driver.getSession("s-1");
|
|
expect(session?.id).toBe("s-1");
|
|
await driver.close();
|
|
}
|
|
});
|
|
});
|