@@ -0,0 +1,45 @@
|
||||
// SPDX-License-Identifier: LicenseRef-ConusAI-Template-1.0
|
||||
import { buildRegistry, Container, createCaller } from "@conusai-kit/core"
|
||||
import { DATA_SOURCE, type DataSource, SYSTEM_DATA, type SystemDataSource } from "@conusai-kit/data"
|
||||
import { createTenancyHooks, TENANCY, tenancyModule, users } from "@conusai-kit/tenancy"
|
||||
import type { AgentScope } from "../core/ports.js"
|
||||
import { AGENT_MODULE_BASE } from "../module.shared.js"
|
||||
|
||||
export const workerRegistry = buildRegistry([tenancyModule, AGENT_MODULE_BASE])
|
||||
|
||||
/** Real app membership/permission resolution, including a retained memo to expose stale use. */
|
||||
export async function workerFixture(data: DataSource & SystemDataSource) {
|
||||
const container = new Container()
|
||||
container.value(DATA_SOURCE, data)
|
||||
container.value(SYSTEM_DATA, data)
|
||||
const tenancy = createTenancyHooks({ data, registry: workerRegistry })
|
||||
container.value(TENANCY, tenancy)
|
||||
const user = await data.global(users).insert({
|
||||
issuer: "https://id.example.test",
|
||||
subject: crypto.randomUUID(),
|
||||
email: "worker@example.test",
|
||||
displayName: "Worker fixture",
|
||||
locale: "en",
|
||||
})
|
||||
const actor = { userId: user.id }
|
||||
const caller = createCaller({ registry: workerRegistry, container, tenancy }, { actor })
|
||||
const org = `worker-${crypto.randomUUID()}`
|
||||
const { orgId } = (await caller.callByName("tenancy.org.create", { slug: org, name: "Worker" })) as { orgId: string }
|
||||
const { workspaceId } = (await caller.callByName("tenancy.workspace.create", {
|
||||
org,
|
||||
slug: "work",
|
||||
name: "Work",
|
||||
visibility: "org",
|
||||
})) as { workspaceId: string }
|
||||
const { projectId } = (await caller.callByName("tenancy.project.create", {
|
||||
org,
|
||||
workspace: "work",
|
||||
slug: "project",
|
||||
name: "Project",
|
||||
moduleKey: "agent",
|
||||
})) as { projectId: string }
|
||||
const scope: AgentScope = { level: "project", actor, orgId, workspaceId, projectId }
|
||||
// Warm the request memo: worker admission must read past this after a revocation.
|
||||
await tenancy.authorize(scope, "agent.run.start", { name: "agent.run.start", kind: "effect" })
|
||||
return { container, scope, tenancy }
|
||||
}
|
||||
Reference in New Issue
Block a user