import { expectTypeOf, it } from "vitest"; import { customAgent } from "./notion-as-code/custom-agent.js"; import { database } from "./notion-as-code/database.js"; import { page } from "./notion-as-code/page.js"; import { events } from "./events.generated.js"; import { access, workflow } from "./workflow.js"; it("infers access aliases and rejects resource-specific levels", () => { const home = page({ resourceId: "home" }); const agent = customAgent({ resourceId: "agent", name: "Agent" }); const singleDatabase = database("single-database", { dataSourceResourceId: "single-source", name: "Single", schema: { Title: { resourceId: "single-title", type: "title" } }, }); const multiDatabase = database("multi-database", { name: "Multi", datasources: { Records: { resourceId: "multi-source", schema: { Title: { resourceId: "multi-title", type: "title" } }, }, }, }); workflow({ name: "Access types", description: "Checks access types", triggers: [events.notionPageCreated()], access: { home: access.view(home), singleDatabase: access.edit(singleDatabase), multiDatabase: access.fullAccess(multiDatabase), source: access.comment(singleDatabase.dataSource), agent: access.call(agent), }, handler: (_event, context) => { expectTypeOf(context.access.home.type).toEqualTypeOf<"page">(); expectTypeOf(context.access.home.id).toEqualTypeOf(); expectTypeOf(context.access.singleDatabase.type).toEqualTypeOf<"database">(); expectTypeOf(context.access.multiDatabase.type).toEqualTypeOf<"database">(); expectTypeOf(context.access.source.type).toEqualTypeOf<"dataSource">(); expectTypeOf(context.access.agent.type).toEqualTypeOf<"customAgent">(); // @ts-expect-error Access aliases are limited to declarations. void context.access.missing; // @ts-expect-error Access values are readonly. context.access.home.id = "changed"; // @ts-expect-error The access map is readonly. context.access = {}; }, }); const invalidAccessLevels = () => { workflow({ name: "Agent access types", description: "Checks custom agent access types", triggers: [events.notionPageCreated()], // @ts-expect-error Custom agents only support the call level. access: { agent: { resource: agent, level: "view" } }, handler: () => {}, }); workflow({ name: "Page access types", description: "Checks page access types", triggers: [events.notionPageCreated()], // @ts-expect-error Pages do not support the custom-agent call level. access: { home: { resource: home, level: "call" } }, handler: () => {}, }); }; void invalidAccessLevels; });