@dexto/server 1.6.19 → 1.6.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/a2a/jsonrpc/methods.cjs +1 -1
- package/dist/a2a/jsonrpc/methods.d.ts +14 -4
- package/dist/a2a/jsonrpc/methods.d.ts.map +1 -1
- package/dist/a2a/jsonrpc/methods.js +1 -1
- package/dist/hono/index.cjs +39 -8
- package/dist/hono/index.d.ts +43 -4503
- package/dist/hono/index.d.ts.map +1 -1
- package/dist/hono/index.js +42 -9
- package/dist/hono/routes/a2a-jsonrpc.d.ts.map +1 -1
- package/dist/hono/routes/a2a-tasks.cjs +173 -34
- package/dist/hono/routes/a2a-tasks.d.ts +1 -498
- package/dist/hono/routes/a2a-tasks.d.ts.map +1 -1
- package/dist/hono/routes/a2a-tasks.js +177 -34
- package/dist/hono/routes/a2a.d.ts.map +1 -1
- package/dist/hono/routes/agents.cjs +410 -329
- package/dist/hono/routes/agents.d.ts +16048 -73
- package/dist/hono/routes/agents.d.ts.map +1 -1
- package/dist/hono/routes/agents.js +418 -330
- package/dist/hono/routes/approvals.cjs +103 -78
- package/dist/hono/routes/approvals.d.ts +2090 -112
- package/dist/hono/routes/approvals.d.ts.map +1 -1
- package/dist/hono/routes/approvals.js +108 -78
- package/dist/hono/routes/dexto-auth.cjs +40 -33
- package/dist/hono/routes/dexto-auth.d.ts +401 -2
- package/dist/hono/routes/dexto-auth.d.ts.map +1 -1
- package/dist/hono/routes/dexto-auth.js +40 -33
- package/dist/hono/routes/discovery.cjs +16 -14
- package/dist/hono/routes/discovery.d.ts +586 -1
- package/dist/hono/routes/discovery.d.ts.map +1 -1
- package/dist/hono/routes/discovery.js +16 -14
- package/dist/hono/routes/greeting.cjs +26 -22
- package/dist/hono/routes/greeting.d.ts +787 -3
- package/dist/hono/routes/greeting.d.ts.map +1 -1
- package/dist/hono/routes/greeting.js +26 -22
- package/dist/hono/routes/health.d.ts +1 -1
- package/dist/hono/routes/key.cjs +60 -52
- package/dist/hono/routes/key.d.ts +1597 -1
- package/dist/hono/routes/key.d.ts.map +1 -1
- package/dist/hono/routes/key.js +60 -52
- package/dist/hono/routes/llm.cjs +381 -348
- package/dist/hono/routes/llm.d.ts +12137 -87
- package/dist/hono/routes/llm.d.ts.map +1 -1
- package/dist/hono/routes/llm.js +385 -348
- package/dist/hono/routes/mcp.cjs +273 -212
- package/dist/hono/routes/mcp.d.ts +6605 -316
- package/dist/hono/routes/mcp.d.ts.map +1 -1
- package/dist/hono/routes/mcp.js +287 -213
- package/dist/hono/routes/memory.cjs +102 -89
- package/dist/hono/routes/memory.d.ts +5368 -4
- package/dist/hono/routes/memory.d.ts.map +1 -1
- package/dist/hono/routes/memory.js +108 -90
- package/dist/hono/routes/messages.cjs +171 -164
- package/dist/hono/routes/messages.d.ts +3899 -10
- package/dist/hono/routes/messages.d.ts.map +1 -1
- package/dist/hono/routes/messages.js +181 -165
- package/dist/hono/routes/models.cjs +106 -64
- package/dist/hono/routes/models.d.ts +2874 -1
- package/dist/hono/routes/models.d.ts.map +1 -1
- package/dist/hono/routes/models.js +108 -64
- package/dist/hono/routes/openrouter.cjs +79 -65
- package/dist/hono/routes/openrouter.d.ts +854 -1
- package/dist/hono/routes/openrouter.d.ts.map +1 -1
- package/dist/hono/routes/openrouter.js +79 -65
- package/dist/hono/routes/prompts.cjs +137 -104
- package/dist/hono/routes/prompts.d.ts +2820 -12
- package/dist/hono/routes/prompts.d.ts.map +1 -1
- package/dist/hono/routes/prompts.js +144 -105
- package/dist/hono/routes/queue.cjs +158 -132
- package/dist/hono/routes/queue.d.ts +5148 -13
- package/dist/hono/routes/queue.d.ts.map +1 -1
- package/dist/hono/routes/queue.js +168 -133
- package/dist/hono/routes/resources.cjs +65 -46
- package/dist/hono/routes/resources.d.ts +1983 -5
- package/dist/hono/routes/resources.d.ts.map +1 -1
- package/dist/hono/routes/resources.js +72 -47
- package/dist/hono/routes/schedules.cjs +233 -226
- package/dist/hono/routes/schedules.d.ts +4202 -26
- package/dist/hono/routes/schedules.d.ts.map +1 -1
- package/dist/hono/routes/schedules.js +233 -226
- package/dist/hono/routes/search.cjs +34 -30
- package/dist/hono/routes/search.d.ts +2837 -14
- package/dist/hono/routes/search.d.ts.map +1 -1
- package/dist/hono/routes/search.js +40 -31
- package/dist/hono/routes/sessions.cjs +404 -392
- package/dist/hono/routes/sessions.d.ts +16585 -30
- package/dist/hono/routes/sessions.d.ts.map +1 -1
- package/dist/hono/routes/sessions.js +408 -393
- package/dist/hono/routes/static.d.ts.map +1 -1
- package/dist/hono/routes/system-prompt.cjs +57 -61
- package/dist/hono/routes/system-prompt.d.ts +1228 -2
- package/dist/hono/routes/system-prompt.d.ts.map +1 -1
- package/dist/hono/routes/system-prompt.js +58 -62
- package/dist/hono/routes/tools.cjs +29 -34
- package/dist/hono/routes/tools.d.ts +1756 -7
- package/dist/hono/routes/tools.d.ts.map +1 -1
- package/dist/hono/routes/tools.js +33 -33
- package/dist/hono/routes/webhooks.cjs +159 -132
- package/dist/hono/routes/webhooks.d.ts +2504 -14
- package/dist/hono/routes/webhooks.d.ts.map +1 -1
- package/dist/hono/routes/webhooks.js +163 -132
- package/dist/hono/routes/workspaces.cjs +84 -79
- package/dist/hono/routes/workspaces.d.ts +2093 -2
- package/dist/hono/routes/workspaces.d.ts.map +1 -1
- package/dist/hono/routes/workspaces.js +89 -80
- package/dist/hono/schemas/responses.cjs +492 -235
- package/dist/hono/schemas/responses.d.ts +1461 -146
- package/dist/hono/schemas/responses.d.ts.map +1 -1
- package/dist/hono/schemas/responses.js +247 -9
- package/dist/hono/types.d.ts +11 -0
- package/dist/hono/types.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../../src/hono/routes/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../../src/hono/routes/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAOlF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAElE,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoGyC,CAAC;AAwClE,QAAA,MAAM,8BAA8B;;;;;;EAI4B,CAAC;AAEjE,QAAA,MAAM,qBAAqB;;;;;;EAIgB,CAAC;AAE5C,QAAA,MAAM,qBAAqB;;;;;;EAOc,CAAC;AAE1C,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsB5B,CAAC;AAEH,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCvB,CAAC;AASH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,UAAU,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GAC1C,WAAW,CAuHb;AAED,KAAK,8BAA8B,GAAG,kBAAkB,CACpD,OAAO,wBAAwB,EAC/B;IAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;CAAE,CAC5D,CAAC;AAEF,KAAK,yBAAyB,GAAG,kBAAkB,CAC/C,OAAO,mBAAmB,EAC1B;IACI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;CACjD,CACJ,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,8BAA8B,GAAG,yBAAyB,CAAC"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
|
|
2
2
|
import { DenialReason, ApprovalStatus, ApprovalError } from "@dexto/core";
|
|
3
|
+
import {
|
|
4
|
+
ApiErrorResponseSchema,
|
|
5
|
+
BadRequestErrorResponse,
|
|
6
|
+
InternalErrorResponse,
|
|
7
|
+
JsonObjectSchema
|
|
8
|
+
} from "../schemas/responses.js";
|
|
3
9
|
const ApprovalBodySchema = z.object({
|
|
4
10
|
status: z.enum([ApprovalStatus.APPROVED, ApprovalStatus.DENIED, ApprovalStatus.CANCELLED]).describe("The user decision"),
|
|
5
|
-
formData:
|
|
11
|
+
formData: JsonObjectSchema.optional().describe(
|
|
12
|
+
"Optional form data provided by the user (for elicitation)"
|
|
13
|
+
),
|
|
6
14
|
rememberChoice: z.boolean().optional().describe("Whether to remember this choice for future requests"),
|
|
7
15
|
rememberPattern: z.string().optional().describe("Optional approval pattern to remember for future requests"),
|
|
8
16
|
rememberDirectory: z.boolean().optional().describe("Whether to remember the approved directory for future requests"),
|
|
@@ -87,91 +95,111 @@ const PendingApprovalSchema = z.object({
|
|
|
87
95
|
sessionId: z.string().optional().describe("The session ID if applicable"),
|
|
88
96
|
timeout: z.number().optional().describe("Timeout in milliseconds"),
|
|
89
97
|
timestamp: z.string().describe("ISO timestamp when the request was created"),
|
|
90
|
-
metadata:
|
|
98
|
+
metadata: JsonObjectSchema.describe("Type-specific metadata for the pending approval")
|
|
91
99
|
}).describe("A pending approval request");
|
|
92
100
|
const PendingApprovalsResponseSchema = z.object({
|
|
93
101
|
ok: z.literal(true).describe("Success indicator"),
|
|
94
102
|
approvals: z.array(PendingApprovalSchema).describe("List of pending approval requests")
|
|
95
103
|
}).describe("Response containing pending approval requests");
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
104
|
+
const GetPendingApprovalsQuerySchema = z.object({
|
|
105
|
+
sessionId: z.string().describe("The session ID to fetch pending approvals for")
|
|
106
|
+
}).describe("Query parameters for fetching pending approvals");
|
|
107
|
+
const ApprovalIdParamSchema = z.object({
|
|
108
|
+
approvalId: z.string().describe("The ID of the approval request")
|
|
109
|
+
}).describe("Approval identifier params");
|
|
110
|
+
const ApprovalHeadersSchema = z.object({
|
|
111
|
+
"Idempotency-Key": z.string().optional().describe("Optional key to ensure idempotent processing")
|
|
112
|
+
}).describe("Approval request headers");
|
|
113
|
+
const getPendingApprovalsRoute = createRoute({
|
|
114
|
+
method: "get",
|
|
115
|
+
path: "/approvals",
|
|
116
|
+
summary: "Get Pending Approvals",
|
|
117
|
+
description: "Fetch all pending approval requests for a session. Use this to restore UI state after page refresh.",
|
|
118
|
+
tags: ["approvals"],
|
|
119
|
+
request: {
|
|
120
|
+
query: GetPendingApprovalsQuerySchema
|
|
121
|
+
},
|
|
122
|
+
responses: {
|
|
123
|
+
200: {
|
|
124
|
+
description: "List of pending approval requests",
|
|
125
|
+
content: {
|
|
126
|
+
"application/json": {
|
|
127
|
+
schema: PendingApprovalsResponseSchema
|
|
116
128
|
}
|
|
117
129
|
}
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
const submitApprovalRoute = createRoute({
|
|
121
|
-
method: "post",
|
|
122
|
-
path: "/approvals/{approvalId}",
|
|
123
|
-
summary: "Submit Approval Decision",
|
|
124
|
-
description: "Submit a user decision for a pending approval request",
|
|
125
|
-
tags: ["approvals"],
|
|
126
|
-
request: {
|
|
127
|
-
params: z.object({
|
|
128
|
-
approvalId: z.string().describe("The ID of the approval request")
|
|
129
|
-
}),
|
|
130
|
-
body: {
|
|
131
|
-
content: { "application/json": { schema: ApprovalBodySchema } }
|
|
132
|
-
},
|
|
133
|
-
headers: z.object({
|
|
134
|
-
"Idempotency-Key": z.string().optional().describe("Optional key to ensure idempotent processing")
|
|
135
|
-
})
|
|
136
130
|
},
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
131
|
+
400: BadRequestErrorResponse,
|
|
132
|
+
500: InternalErrorResponse
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
const submitApprovalRoute = createRoute({
|
|
136
|
+
method: "post",
|
|
137
|
+
path: "/approvals/{approvalId}",
|
|
138
|
+
summary: "Submit Approval Decision",
|
|
139
|
+
description: "Submit a user decision for a pending approval request",
|
|
140
|
+
tags: ["approvals"],
|
|
141
|
+
request: {
|
|
142
|
+
params: ApprovalIdParamSchema,
|
|
143
|
+
body: {
|
|
144
|
+
content: { "application/json": { schema: ApprovalBodySchema } }
|
|
145
|
+
},
|
|
146
|
+
headers: ApprovalHeadersSchema
|
|
147
|
+
},
|
|
148
|
+
responses: {
|
|
149
|
+
200: {
|
|
150
|
+
description: "Approval processed successfully",
|
|
151
|
+
content: {
|
|
152
|
+
"application/json": {
|
|
153
|
+
schema: ApprovalResponseSchema
|
|
144
154
|
}
|
|
145
|
-
},
|
|
146
|
-
404: {
|
|
147
|
-
description: "Approval request not found or expired"
|
|
148
|
-
},
|
|
149
|
-
400: {
|
|
150
|
-
description: "Validation error"
|
|
151
|
-
},
|
|
152
|
-
503: {
|
|
153
|
-
description: "Approval coordinator unavailable (server not initialized for approvals)"
|
|
154
155
|
}
|
|
156
|
+
},
|
|
157
|
+
404: {
|
|
158
|
+
description: "Approval request not found or expired",
|
|
159
|
+
content: { "application/json": { schema: ApiErrorResponseSchema } }
|
|
160
|
+
},
|
|
161
|
+
400: {
|
|
162
|
+
description: "Validation error",
|
|
163
|
+
content: { "application/json": { schema: ApiErrorResponseSchema } }
|
|
164
|
+
},
|
|
165
|
+
503: {
|
|
166
|
+
description: "Approval coordinator unavailable (server not initialized for approvals)",
|
|
167
|
+
content: { "application/json": { schema: ApprovalResponseSchema } }
|
|
168
|
+
},
|
|
169
|
+
500: {
|
|
170
|
+
description: "Approval processing failed",
|
|
171
|
+
content: { "application/json": { schema: ApprovalResponseSchema } }
|
|
155
172
|
}
|
|
156
|
-
}
|
|
157
|
-
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
function mountApprovalsSubrouter(app, router) {
|
|
176
|
+
app.route("/", router);
|
|
177
|
+
}
|
|
178
|
+
function createApprovalsRouter(getAgent, approvalCoordinator) {
|
|
179
|
+
const app = new OpenAPIHono();
|
|
180
|
+
const getPendingApprovalsRouter = new OpenAPIHono();
|
|
181
|
+
getPendingApprovalsRouter.openapi(getPendingApprovalsRoute, async (ctx) => {
|
|
158
182
|
const agent = await getAgent(ctx);
|
|
159
183
|
const { sessionId } = ctx.req.valid("query");
|
|
160
184
|
agent.logger.debug(`Fetching pending approvals for session ${sessionId}`);
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
metadata: {}
|
|
185
|
+
const approvals = agent.services.approvalManager.getPendingApprovalRequests().filter((approvalRequest) => approvalRequest.sessionId === sessionId).map((approvalRequest) => ({
|
|
186
|
+
approvalId: approvalRequest.approvalId,
|
|
187
|
+
type: approvalRequest.type,
|
|
188
|
+
sessionId: approvalRequest.sessionId,
|
|
189
|
+
timeout: approvalRequest.timeout,
|
|
190
|
+
timestamp: approvalRequest.timestamp.toISOString(),
|
|
191
|
+
metadata: JsonObjectSchema.parse(approvalRequest.metadata)
|
|
169
192
|
}));
|
|
170
|
-
return ctx.json(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
193
|
+
return ctx.json(
|
|
194
|
+
{
|
|
195
|
+
ok: true,
|
|
196
|
+
approvals
|
|
197
|
+
},
|
|
198
|
+
200
|
|
199
|
+
);
|
|
200
|
+
});
|
|
201
|
+
const submitApprovalRouter = new OpenAPIHono();
|
|
202
|
+
submitApprovalRouter.openapi(submitApprovalRoute, async (ctx) => {
|
|
175
203
|
const agent = await getAgent(ctx);
|
|
176
204
|
const { approvalId } = ctx.req.valid("param");
|
|
177
205
|
const {
|
|
@@ -186,7 +214,8 @@ function createApprovalsRouter(getAgent, approvalCoordinator) {
|
|
|
186
214
|
agent.logger.info(`Received approval decision for ${approvalId}: ${status}`);
|
|
187
215
|
if (!approvalCoordinator) {
|
|
188
216
|
agent.logger.error("ApprovalCoordinator not available");
|
|
189
|
-
|
|
217
|
+
const response = { ok: false, approvalId, status };
|
|
218
|
+
return ctx.json(response, 503);
|
|
190
219
|
}
|
|
191
220
|
const pendingApprovals = agent.services.approvalManager.getPendingApprovals();
|
|
192
221
|
if (!pendingApprovals.includes(approvalId)) {
|
|
@@ -224,16 +253,17 @@ function createApprovalsRouter(getAgent, approvalCoordinator) {
|
|
|
224
253
|
...Object.keys(data).length > 0 ? { data } : {}
|
|
225
254
|
};
|
|
226
255
|
approvalCoordinator.emitResponse(responsePayload);
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
approvalId,
|
|
230
|
-
status
|
|
231
|
-
});
|
|
256
|
+
const response = { ok: true, approvalId, status };
|
|
257
|
+
return ctx.json(response, 200);
|
|
232
258
|
} catch (error) {
|
|
233
259
|
agent.logger.error("Error processing approval", { approvalId, error });
|
|
234
|
-
|
|
260
|
+
const response = { ok: false, approvalId, status };
|
|
261
|
+
return ctx.json(response, 500);
|
|
235
262
|
}
|
|
236
263
|
});
|
|
264
|
+
mountApprovalsSubrouter(app, getPendingApprovalsRouter);
|
|
265
|
+
mountApprovalsSubrouter(app, submitApprovalRouter);
|
|
266
|
+
return app;
|
|
237
267
|
}
|
|
238
268
|
export {
|
|
239
269
|
createApprovalsRouter
|
|
@@ -22,48 +22,55 @@ __export(dexto_auth_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(dexto_auth_exports);
|
|
24
24
|
var import_zod_openapi = require("@hono/zod-openapi");
|
|
25
|
+
var import_responses = require("../schemas/responses.js");
|
|
25
26
|
var import_agent_management = require("@dexto/agent-management");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"Whether user can use dexto (authenticated AND has API key)"
|
|
44
|
-
)
|
|
45
|
-
})
|
|
46
|
-
}
|
|
27
|
+
const DextoAuthStatusResponseSchema = import_zod_openapi.z.object({
|
|
28
|
+
enabled: import_zod_openapi.z.boolean().describe("Whether dexto auth feature is enabled"),
|
|
29
|
+
authenticated: import_zod_openapi.z.boolean().describe("Whether user is authenticated with dexto"),
|
|
30
|
+
canUse: import_zod_openapi.z.boolean().describe("Whether user can use dexto (authenticated AND has API key)")
|
|
31
|
+
}).describe("Dexto auth status response");
|
|
32
|
+
const statusRoute = (0, import_zod_openapi.createRoute)({
|
|
33
|
+
method: "get",
|
|
34
|
+
path: "/dexto-auth/status",
|
|
35
|
+
summary: "Dexto Auth Status",
|
|
36
|
+
description: "Returns dexto authentication status. Used by Web UI to check if user can use dexto features.",
|
|
37
|
+
tags: ["auth"],
|
|
38
|
+
responses: {
|
|
39
|
+
200: {
|
|
40
|
+
description: "Dexto auth status",
|
|
41
|
+
content: {
|
|
42
|
+
"application/json": {
|
|
43
|
+
schema: DextoAuthStatusResponseSchema
|
|
47
44
|
}
|
|
48
45
|
}
|
|
49
|
-
}
|
|
50
|
-
|
|
46
|
+
},
|
|
47
|
+
500: import_responses.InternalErrorResponse
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
function createDextoAuthRouter(_getAgent) {
|
|
51
|
+
const app = new import_zod_openapi.OpenAPIHono();
|
|
51
52
|
return app.openapi(statusRoute, async (c) => {
|
|
52
53
|
const enabled = (0, import_agent_management.isDextoAuthEnabled)();
|
|
53
54
|
if (!enabled) {
|
|
54
|
-
return c.json(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
return c.json(
|
|
56
|
+
{
|
|
57
|
+
enabled: false,
|
|
58
|
+
authenticated: false,
|
|
59
|
+
canUse: false
|
|
60
|
+
},
|
|
61
|
+
200
|
|
62
|
+
);
|
|
59
63
|
}
|
|
60
64
|
const authenticated = await (0, import_agent_management.isDextoAuthenticated)();
|
|
61
65
|
const canUse = await (0, import_agent_management.canUseDextoProvider)();
|
|
62
|
-
return c.json(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
return c.json(
|
|
67
|
+
{
|
|
68
|
+
enabled,
|
|
69
|
+
authenticated,
|
|
70
|
+
canUse
|
|
71
|
+
},
|
|
72
|
+
200
|
|
73
|
+
);
|
|
67
74
|
});
|
|
68
75
|
}
|
|
69
76
|
// Annotate the CommonJS export names for ESM import in node:
|