feat(context): verify product session scope

This commit is contained in:
2026-09-22 10:43:36 +08:00
parent 88b41ba04c
commit 9faed59f23
12 changed files with 358 additions and 56 deletions
+35 -1
View File
@@ -3,7 +3,10 @@ import { mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { SessionMetadataStore } from "../../src/sessions/metadataStore.js";
import {
SessionContextMismatchError,
SessionMetadataStore,
} from "../../src/sessions/metadataStore.js";
describe("SessionMetadataStore", () => {
let tempDir: string;
@@ -15,6 +18,37 @@ describe("SessionMetadataStore", () => {
await store.initialize();
});
it("does not return or ensure a session owned by another context", async () => {
await store.ensure({
actorKey: "actor-1",
projectId: "project-1",
projectKey: "project-key-1",
sessionId: "shared-id",
userId: "user-1",
});
expect(
await store.get(
{
actorKey: "actor-2",
projectId: "project-2",
projectKey: "project-key-2",
userId: "user-2",
},
"shared-id",
),
).toBeNull();
expect(
store.ensure({
actorKey: "actor-2",
projectId: "project-2",
projectKey: "project-key-2",
sessionId: "shared-id",
userId: "user-2",
}),
).rejects.toBeInstanceOf(SessionContextMismatchError);
});
afterEach(async () => {
await rm(tempDir, { force: true, recursive: true });
});