mirror of
https://github.com/saltbo/agent-kanban.git
synced 2026-09-19 09:01:47 +08:00
7ed77d2295
* fix: harden v2 service boundaries * fix(sessions): validate observation configuration first --------- Co-authored-by: jarvis <jarvis@agents.realmroot.dev>
30 lines
1.5 KiB
TypeScript
30 lines
1.5 KiB
TypeScript
import { AmaProjectCatalogAdapter } from "@server/adapters/agency/projectCatalog";
|
|
import { AmaResourceProjectionAdapter } from "@server/adapters/agency/resourceProjections";
|
|
import { D1AmaProjectBindingAdapter } from "@server/adapters/d1/amaProjectBinding";
|
|
import { delegatedAmaToken } from "@server/adapters/realmroot/delegatedAmaToken";
|
|
import type { Env } from "@server/env";
|
|
import { ensureAmaProject } from "@server/usecases/ama/ensureAmaProject";
|
|
import type { Context } from "hono";
|
|
|
|
export async function amaProjectionDependencies(c: Context<{ Bindings: Env }>, scopes: readonly string[]) {
|
|
const authorization = await amaAuthorization(c, scopes);
|
|
return {
|
|
projectId: authorization.projectId,
|
|
adapter: new AmaResourceProjectionAdapter(c.env, authorization.token, c.get("traceparent")),
|
|
};
|
|
}
|
|
|
|
export async function amaAuthorization(c: Context<{ Bindings: Env }>, scopes: readonly string[]) {
|
|
const principal = c.get("principal");
|
|
const binding = new D1AmaProjectBindingAdapter(c.env.DB);
|
|
const storedProjectId = await binding.findProjectId(principal.tenantId);
|
|
const token = await delegatedAmaToken(c.env, {
|
|
sourceAccessToken: principal.sourceAccessToken,
|
|
webSessionId: c.get("session")?.id,
|
|
scopes: storedProjectId ? scopes : [...scopes, "projects:read", "projects:write"],
|
|
});
|
|
const projectId =
|
|
storedProjectId ?? (await ensureAmaProject(binding, new AmaProjectCatalogAdapter(c.env, token, c.get("traceparent")), principal.tenantId));
|
|
return { projectId, token };
|
|
}
|