import { HttpApiBuilder } from "effect/unstable/httpapi";import { Effect } from "effect";import { PolicyId, type ToolPolicy } from "@executor-js/sdk"; import { ExecutorApi } from "../api";import { ExecutorService } from "../services";import { capture } from "@executor-js/api"; const policyToResponse = (p: ToolPolicy) => ({ id: p.id, owner: p.owner, pattern: p.pattern, action: p.action, position: p.position, createdAt: p.createdAt.getTime(), updatedAt: p.updatedAt.getTime(),}); export const PoliciesHandlers = HttpApiBuilder.group(ExecutorApi, "policies", (handlers) => handlers .handle("list", () => capture( Effect.gen(function* () { const executor = yield* ExecutorService; const policies = yield* executor.policies.list(); return policies.map(policyToResponse); }), ), ) .handle("create", ({ payload }) => capture( Effect.gen(function* () { const executor = yield* ExecutorService; const created = yield* executor.policies.create({ owner: payload.owner, pattern: payload.pattern, action: payload.action, position: payload.position, }); return policyToResponse(created); }), ), ) .handle("update", ({ params: path, payload }) => capture( Effect.gen(function* () { const executor = yield* ExecutorService; const updated = yield* executor.policies.update({ id: PolicyId.make(path.policyId), owner: payload.owner, pattern: payload.pattern, action: payload.action, position: payload.position, }); return policyToResponse(updated); }), ), ) .handle("remove", ({ params: path, payload }) => capture( Effect.gen(function* () { const executor = yield* ExecutorService; yield* executor.policies.remove({ id: PolicyId.make(path.policyId), owner: payload.owner, }); return { removed: true }; }), ), ),);
import { HttpApiBuilder } from "effect/unstable/httpapi";
import { Effect } from "effect";
import { PolicyId, type ToolPolicy } from "@executor-js/sdk";
import { ExecutorApi } from "../api";
import { ExecutorService } from "../services";
import { capture } from "@executor-js/api";
const policyToResponse = (p: ToolPolicy) => ({
id: p.id,
owner: p.owner,
pattern: p.pattern,
action: p.action,
position: p.position,
createdAt: p.createdAt.getTime(),
updatedAt: p.updatedAt.getTime(),
});
export const PoliciesHandlers = HttpApiBuilder.group(ExecutorApi, "policies", (handlers) =>
handlers
.handle("list", () =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
const policies = yield* executor.policies.list();
return policies.map(policyToResponse);
}),
),
)
.handle("create", ({ payload }) =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
const created = yield* executor.policies.create({
owner: payload.owner,
pattern: payload.pattern,
action: payload.action,
position: payload.position,
});
return policyToResponse(created);
}),
),
)
.handle("update", ({ params: path, payload }) =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
const updated = yield* executor.policies.update({
id: PolicyId.make(path.policyId),
owner: payload.owner,
pattern: payload.pattern,
action: payload.action,
position: payload.position,
});
return policyToResponse(updated);
}),
),
)
.handle("remove", ({ params: path, payload }) =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
yield* executor.policies.remove({
id: PolicyId.make(path.policyId),
owner: payload.owner,
});
return { removed: true };
}),
),
),
);