feat(server): add permission request endpoints (#33774)
This commit is contained in:
parent
bcff162c60
commit
7f40aeab21
5 changed files with 287 additions and 2 deletions
|
|
@ -4,7 +4,7 @@ import { PermissionSaved } from "@opencode-ai/core/permission/saved"
|
|||
import { Effect } from "effect"
|
||||
import { HttpApiBuilder, HttpApiSchema } from "effect/unstable/httpapi"
|
||||
import { Api } from "../api"
|
||||
import { PermissionNotFoundError } from "@opencode-ai/protocol/errors"
|
||||
import { PermissionNotFoundError, SessionNotFoundError } from "@opencode-ai/protocol/errors"
|
||||
import { response } from "../location"
|
||||
|
||||
function missingRequest(id: PermissionV2.ID) {
|
||||
|
|
@ -20,6 +20,35 @@ export const PermissionHandler = HttpApiBuilder.group(Api, "server.permission",
|
|||
return yield* response((yield* PermissionV2.Service).list())
|
||||
}),
|
||||
)
|
||||
.handle(
|
||||
"session.permission.create",
|
||||
Effect.fn(function* (ctx) {
|
||||
const permission = yield* PermissionV2.Service
|
||||
return {
|
||||
data: yield* permission
|
||||
.ask({
|
||||
id: ctx.payload.id,
|
||||
sessionID: ctx.params.sessionID,
|
||||
action: ctx.payload.action,
|
||||
resources: ctx.payload.resources,
|
||||
save: ctx.payload.save,
|
||||
metadata: ctx.payload.metadata,
|
||||
source: ctx.payload.source,
|
||||
agent: ctx.payload.agent,
|
||||
})
|
||||
.pipe(
|
||||
Effect.catchTag(
|
||||
"Session.NotFoundError",
|
||||
(error) =>
|
||||
new SessionNotFoundError({
|
||||
sessionID: error.sessionID,
|
||||
message: `Session not found: ${error.sessionID}`,
|
||||
}),
|
||||
),
|
||||
),
|
||||
}
|
||||
}),
|
||||
)
|
||||
.handle(
|
||||
"session.permission.list",
|
||||
Effect.fn(function* (ctx) {
|
||||
|
|
@ -27,6 +56,14 @@ export const PermissionHandler = HttpApiBuilder.group(Api, "server.permission",
|
|||
return { data: yield* permission.forSession(ctx.params.sessionID) }
|
||||
}),
|
||||
)
|
||||
.handle(
|
||||
"session.permission.get",
|
||||
Effect.fn(function* (ctx) {
|
||||
const request = yield* (yield* PermissionV2.Service).get(ctx.params.requestID)
|
||||
if (!request || request.sessionID !== ctx.params.sessionID) return yield* missingRequest(ctx.params.requestID)
|
||||
return { data: request }
|
||||
}),
|
||||
)
|
||||
.handle(
|
||||
"session.permission.reply",
|
||||
Effect.fn(function* (ctx) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue