@agent-deck/backend 1.6.4 → 1.7.0

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.
Files changed (107) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/lib/agent-deck-context.d.ts +4 -2
  3. package/dist/lib/agent-deck-context.d.ts.map +1 -1
  4. package/dist/lib/agent-deck-context.js +35 -8
  5. package/dist/lib/agent-deck-context.js.map +1 -1
  6. package/dist/lib/backend-api-error.d.ts +8 -0
  7. package/dist/lib/backend-api-error.d.ts.map +1 -0
  8. package/dist/lib/backend-api-error.js +35 -0
  9. package/dist/lib/backend-api-error.js.map +1 -0
  10. package/dist/lib/bound-deck-scope.d.ts +6 -1
  11. package/dist/lib/bound-deck-scope.d.ts.map +1 -1
  12. package/dist/lib/bound-deck-scope.js +21 -2
  13. package/dist/lib/bound-deck-scope.js.map +1 -1
  14. package/dist/lib/client-scope.d.ts.map +1 -1
  15. package/dist/lib/client-scope.js +3 -3
  16. package/dist/lib/client-scope.js.map +1 -1
  17. package/dist/lib/dashboard-auth.d.ts +7 -0
  18. package/dist/lib/dashboard-auth.d.ts.map +1 -0
  19. package/dist/lib/dashboard-auth.js +38 -0
  20. package/dist/lib/dashboard-auth.js.map +1 -0
  21. package/dist/lib/http-auth.d.ts +5 -0
  22. package/dist/lib/http-auth.d.ts.map +1 -0
  23. package/dist/lib/http-auth.js +11 -0
  24. package/dist/lib/http-auth.js.map +1 -0
  25. package/dist/lib/route-policy.d.ts +13 -0
  26. package/dist/lib/route-policy.d.ts.map +1 -0
  27. package/dist/lib/route-policy.js +50 -0
  28. package/dist/lib/route-policy.js.map +1 -0
  29. package/dist/mcp-server.d.ts +4 -4
  30. package/dist/mcp-server.d.ts.map +1 -1
  31. package/dist/mcp-server.js +81 -29
  32. package/dist/mcp-server.js.map +1 -1
  33. package/dist/mcp-session-binding.d.ts +16 -3
  34. package/dist/mcp-session-binding.d.ts.map +1 -1
  35. package/dist/mcp-session-binding.js +40 -5
  36. package/dist/mcp-session-binding.js.map +1 -1
  37. package/dist/mcp-tools/policy.d.ts +20 -0
  38. package/dist/mcp-tools/policy.d.ts.map +1 -0
  39. package/dist/mcp-tools/policy.js +61 -0
  40. package/dist/mcp-tools/policy.js.map +1 -0
  41. package/dist/mcp-tools/profile.d.ts +2 -2
  42. package/dist/mcp-tools/register.d.ts +13 -0
  43. package/dist/mcp-tools/register.d.ts.map +1 -1
  44. package/dist/mcp-tools/register.js +154 -89
  45. package/dist/mcp-tools/register.js.map +1 -1
  46. package/dist/mcp-tools/test-harness.d.ts +7 -2
  47. package/dist/mcp-tools/test-harness.d.ts.map +1 -1
  48. package/dist/mcp-tools/test-harness.js +37 -9
  49. package/dist/mcp-tools/test-harness.js.map +1 -1
  50. package/dist/models/database.d.ts +2 -0
  51. package/dist/models/database.d.ts.map +1 -1
  52. package/dist/models/database.js +3 -0
  53. package/dist/models/database.js.map +1 -1
  54. package/dist/routes/credentials.d.ts.map +1 -1
  55. package/dist/routes/credentials.js +25 -23
  56. package/dist/routes/credentials.js.map +1 -1
  57. package/dist/routes/decks.d.ts.map +1 -1
  58. package/dist/routes/decks.js +48 -30
  59. package/dist/routes/decks.js.map +1 -1
  60. package/dist/routes/playbooks.d.ts +0 -2
  61. package/dist/routes/playbooks.d.ts.map +1 -1
  62. package/dist/routes/playbooks.js +58 -117
  63. package/dist/routes/playbooks.js.map +1 -1
  64. package/dist/routes/scope.d.ts.map +1 -1
  65. package/dist/routes/scope.js +4 -1
  66. package/dist/routes/scope.js.map +1 -1
  67. package/dist/routes/services.d.ts.map +1 -1
  68. package/dist/routes/services.js +55 -13
  69. package/dist/routes/services.js.map +1 -1
  70. package/dist/routes/trusted-session.d.ts +10 -0
  71. package/dist/routes/trusted-session.d.ts.map +1 -0
  72. package/dist/routes/trusted-session.js +383 -0
  73. package/dist/routes/trusted-session.js.map +1 -0
  74. package/dist/server/index.d.ts +2 -0
  75. package/dist/server/index.d.ts.map +1 -1
  76. package/dist/server/index.js +23 -1
  77. package/dist/server/index.js.map +1 -1
  78. package/dist/test/auth-fixtures.d.ts +4 -0
  79. package/dist/test/auth-fixtures.d.ts.map +1 -0
  80. package/dist/test/auth-fixtures.js +28 -0
  81. package/dist/test/auth-fixtures.js.map +1 -0
  82. package/dist/trusted-session/admin-secret.d.ts +6 -0
  83. package/dist/trusted-session/admin-secret.d.ts.map +1 -0
  84. package/dist/trusted-session/admin-secret.js +63 -0
  85. package/dist/trusted-session/admin-secret.js.map +1 -0
  86. package/dist/trusted-session/auth.d.ts +29 -0
  87. package/dist/trusted-session/auth.d.ts.map +1 -0
  88. package/dist/trusted-session/auth.js +176 -0
  89. package/dist/trusted-session/auth.js.map +1 -0
  90. package/dist/trusted-session/policy-hook.d.ts +12 -0
  91. package/dist/trusted-session/policy-hook.d.ts.map +1 -0
  92. package/dist/trusted-session/policy-hook.js +71 -0
  93. package/dist/trusted-session/policy-hook.js.map +1 -0
  94. package/dist/trusted-session/route-policy-registry.d.ts +20 -0
  95. package/dist/trusted-session/route-policy-registry.d.ts.map +1 -0
  96. package/dist/trusted-session/route-policy-registry.js +165 -0
  97. package/dist/trusted-session/route-policy-registry.js.map +1 -0
  98. package/dist/trusted-session/store.d.ts +93 -0
  99. package/dist/trusted-session/store.d.ts.map +1 -0
  100. package/dist/trusted-session/store.js +451 -0
  101. package/dist/trusted-session/store.js.map +1 -0
  102. package/package.json +3 -3
  103. package/static-ui/assets/index-DUyowkPn.js +499 -0
  104. package/static-ui/assets/index-cJDgESGn.css +1 -0
  105. package/static-ui/index.html +2 -2
  106. package/static-ui/assets/index-BG4SetCL.css +0 -1
  107. package/static-ui/assets/index-BV17LsZJ.js +0 -485
@@ -9,6 +9,8 @@ const icon_resolver_1 = require("../services/icon-resolver");
9
9
  const shared_1 = require("@agent-deck/shared");
10
10
  const client_scope_1 = require("../lib/client-scope");
11
11
  const bound_deck_scope_1 = require("../lib/bound-deck-scope");
12
+ const route_policy_1 = require("../lib/route-policy");
13
+ const agent_deck_context_1 = require("../lib/agent-deck-context");
12
14
  let lastBackgroundHealthProbeAt = 0;
13
15
  const BACKGROUND_HEALTH_PROBE_COOLDOWN_MS = 30_000;
14
16
  function mimeFromIconBuffer(buffer) {
@@ -27,6 +29,7 @@ async function registerServiceRoutes(fastify) {
27
29
  // Create service
28
30
  fastify.post('/', async (request, reply) => {
29
31
  try {
32
+ (0, route_policy_1.requireDashboard)(request);
30
33
  const service = await fastify.serviceManager.createService(request.body);
31
34
  const response = {
32
35
  success: true,
@@ -36,6 +39,9 @@ async function registerServiceRoutes(fastify) {
36
39
  return reply.status(201).send(response);
37
40
  }
38
41
  catch (error) {
42
+ if (error instanceof route_policy_1.RoutePolicyError) {
43
+ return (0, route_policy_1.sendRoutePolicyError)(reply, error);
44
+ }
39
45
  const response = {
40
46
  success: false,
41
47
  error: error instanceof Error ? error.message : 'Unknown error',
@@ -46,8 +52,17 @@ async function registerServiceRoutes(fastify) {
46
52
  // Get all services
47
53
  fastify.get('/', async (request, reply) => {
48
54
  try {
49
- const services = await fastify.serviceManager.getAllServices();
50
55
  const dashboard = (0, client_scope_1.isDashboardClient)(request);
56
+ if (!dashboard) {
57
+ const deckId = await (0, agent_deck_context_1.resolveAgentDeckId)(request, fastify.db);
58
+ const deck = await fastify.db.getDeck(deckId);
59
+ const services = deck?.services ?? [];
60
+ return reply.send({
61
+ success: true,
62
+ data: services.map(client_scope_1.sanitizeServiceForAgent),
63
+ });
64
+ }
65
+ const services = await fastify.serviceManager.getAllServices();
51
66
  if (dashboard) {
52
67
  const now = Date.now();
53
68
  if (now - lastBackgroundHealthProbeAt >= BACKGROUND_HEALTH_PROBE_COOLDOWN_MS) {
@@ -130,6 +145,9 @@ async function registerServiceRoutes(fastify) {
130
145
  // Get service by ID
131
146
  fastify.get('/:id', async (request, reply) => {
132
147
  try {
148
+ if (!(0, client_scope_1.isDashboardClient)(request)) {
149
+ await (0, bound_deck_scope_1.requireServiceOnBoundDeck)(request, fastify.db, request.params.id);
150
+ }
133
151
  const service = await fastify.serviceManager.getService(request.params.id);
134
152
  if (!service) {
135
153
  const response = {
@@ -146,16 +164,25 @@ async function registerServiceRoutes(fastify) {
146
164
  return reply.send(response);
147
165
  }
148
166
  catch (error) {
167
+ const scoped = (0, bound_deck_scope_1.boundDeckScopeResponse)(error);
168
+ if (scoped.error_code) {
169
+ return reply.status(scoped.status).send({
170
+ success: false,
171
+ error: scoped.message,
172
+ error_code: scoped.error_code,
173
+ });
174
+ }
149
175
  const response = {
150
176
  success: false,
151
177
  error: error instanceof Error ? error.message : 'Unknown error',
152
178
  };
153
- return reply.status(500).send(response);
179
+ return reply.status(scoped.status).send(response);
154
180
  }
155
181
  });
156
182
  // Update service
157
183
  fastify.put('/:id', async (request, reply) => {
158
184
  try {
185
+ (0, route_policy_1.requireDashboard)(request);
159
186
  const service = await fastify.serviceManager.updateService(request.params.id, request.body);
160
187
  if (!service) {
161
188
  const response = {
@@ -172,6 +199,9 @@ async function registerServiceRoutes(fastify) {
172
199
  return reply.send(response);
173
200
  }
174
201
  catch (error) {
202
+ if (error instanceof route_policy_1.RoutePolicyError) {
203
+ return (0, route_policy_1.sendRoutePolicyError)(reply, error);
204
+ }
175
205
  const response = {
176
206
  success: false,
177
207
  error: error instanceof Error ? error.message : 'Unknown error',
@@ -182,6 +212,7 @@ async function registerServiceRoutes(fastify) {
182
212
  // Delete service
183
213
  fastify.delete('/:id', async (request, reply) => {
184
214
  try {
215
+ (0, route_policy_1.requireDashboard)(request);
185
216
  const deleted = await fastify.serviceManager.deleteService(request.params.id);
186
217
  if (!deleted) {
187
218
  const response = {
@@ -215,6 +246,9 @@ async function registerServiceRoutes(fastify) {
215
246
  // Discover service tools
216
247
  fastify.get('/:id/tools', async (request, reply) => {
217
248
  try {
249
+ if (!(0, client_scope_1.isDashboardClient)(request)) {
250
+ await (0, bound_deck_scope_1.requireServiceOnBoundDeck)(request, fastify.db, request.params.id);
251
+ }
218
252
  const forAgent = !(0, client_scope_1.isDashboardClient)(request);
219
253
  const tools = await fastify.serviceManager.discoverServiceTools(request.params.id, {
220
254
  forAgent,
@@ -232,16 +266,17 @@ async function registerServiceRoutes(fastify) {
232
266
  return reply.send(response);
233
267
  }
234
268
  catch (error) {
235
- const response = {
269
+ const scoped = (0, bound_deck_scope_1.boundDeckScopeResponse)(error);
270
+ return reply.status(scoped.status).send({
236
271
  success: false,
237
- error: error instanceof Error ? error.message : 'Unknown error',
238
- };
239
- return reply.status(500).send(response);
272
+ error: scoped.message,
273
+ error_code: scoped.error_code,
274
+ });
240
275
  }
241
276
  });
242
277
  fastify.put('/:id/tool-settings', async (request, reply) => {
243
278
  try {
244
- await (0, bound_deck_scope_1.requireServiceOnBoundDeck)(request, fastify.db, request.params.id);
279
+ (0, client_scope_1.requireDashboardClient)(request);
245
280
  const input = shared_1.UpdateServiceToolSettingsSchema.parse(request.body);
246
281
  const service = await fastify.serviceManager.updateToolSettings(request.params.id, input);
247
282
  if (!service) {
@@ -252,11 +287,16 @@ async function registerServiceRoutes(fastify) {
252
287
  }
253
288
  return reply.send({
254
289
  success: true,
255
- // updateToolSettings merges vault secret headers — strip them for agents.
256
- data: (0, client_scope_1.isDashboardClient)(request) ? service : (0, client_scope_1.sanitizeServiceForAgent)(service),
290
+ data: service,
257
291
  });
258
292
  }
259
293
  catch (error) {
294
+ if (error instanceof client_scope_1.DashboardOnlyError) {
295
+ return reply.status(403).send({
296
+ success: false,
297
+ error: error.message,
298
+ });
299
+ }
260
300
  const scoped = (0, bound_deck_scope_1.boundDeckScopeResponse)(error);
261
301
  return reply.status(scoped.status).send({
262
302
  success: false,
@@ -267,6 +307,7 @@ async function registerServiceRoutes(fastify) {
267
307
  // Call service tool
268
308
  fastify.post('/:id/call', async (request, reply) => {
269
309
  try {
310
+ await (0, bound_deck_scope_1.requireServiceOnBoundDeck)(request, fastify.db, request.params.id);
270
311
  const result = await fastify.serviceManager.callServiceTool({
271
312
  serviceId: request.params.id,
272
313
  toolName: request.body.toolName,
@@ -282,11 +323,12 @@ async function registerServiceRoutes(fastify) {
282
323
  return reply.send(response);
283
324
  }
284
325
  catch (error) {
285
- const response = {
326
+ const scoped = (0, bound_deck_scope_1.boundDeckScopeResponse)(error);
327
+ return reply.status(scoped.status).send({
286
328
  success: false,
287
- error: error instanceof Error ? error.message : 'Unknown error',
288
- };
289
- return reply.status(500).send(response);
329
+ error: scoped.message,
330
+ error_code: scoped.error_code,
331
+ });
290
332
  }
291
333
  });
292
334
  // Check service health
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/routes/services.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/routes/services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import type { TrustedSessionStore } from '../trusted-session/store';
3
+ export declare function registerTrustedSessionRoutes(fastify: FastifyInstance): Promise<void>;
4
+ export declare function registerDashboardAuthRoutes(fastify: FastifyInstance): Promise<void>;
5
+ declare module 'fastify' {
6
+ interface FastifyInstance {
7
+ trustedSessionStore: TrustedSessionStore;
8
+ }
9
+ }
10
+ //# sourceMappingURL=trusted-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trusted-session.d.ts","sourceRoot":"","sources":["../../src/routes/trusted-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAkB/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAsDpE,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,eAAe,iBA6W1E;AAED,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,eAAe,iBAmCzE;AAED,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,mBAAmB,EAAE,mBAAmB,CAAC;KAC1C;CACF"}
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerTrustedSessionRoutes = registerTrustedSessionRoutes;
4
+ exports.registerDashboardAuthRoutes = registerDashboardAuthRoutes;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const shared_1 = require("@agent-deck/shared");
7
+ const http_auth_1 = require("../lib/http-auth");
8
+ const auth_1 = require("../trusted-session/auth");
9
+ const dashboard_auth_1 = require("../lib/dashboard-auth");
10
+ const store_1 = require("../trusted-session/store");
11
+ const admin_secret_1 = require("../trusted-session/admin-secret");
12
+ /** Caller must own the runtime session (session header matches body id). */
13
+ function requireRuntimeSessionOwnership(request, runtimeSessionId) {
14
+ const header = request.headers[shared_1.AGENT_DECK_SESSION_HEADER];
15
+ const sessionHeader = typeof header === 'string' ? header.trim() : '';
16
+ if (!sessionHeader || sessionHeader !== runtimeSessionId.trim()) {
17
+ throw new auth_1.TrustedAuthError('GRANT_REQUIRED', 'Runtime session ownership required');
18
+ }
19
+ }
20
+ function assertWorkspaceScope(store, workspaceKeyId, workspaceRoot) {
21
+ const key = store.getWorkspaceKeyById(workspaceKeyId);
22
+ if (!key) {
23
+ throw new auth_1.TrustedAuthError('GRANT_REQUIRED', 'No valid workspace grant');
24
+ }
25
+ const digest = (0, shared_1.digestCanonicalWorkspacePath)((0, shared_1.canonicalizeWorkspacePath)(workspaceRoot));
26
+ if (key.path_digest !== digest) {
27
+ throw new auth_1.TrustedAuthError('WORKSPACE_SCOPE_MISMATCH', 'Request targets a different workspace; elevation cannot override it');
28
+ }
29
+ }
30
+ function resolveRuntimeSessionFromHeader(request, store) {
31
+ const sessionHeader = request.headers[shared_1.AGENT_DECK_SESSION_HEADER];
32
+ const sessionId = typeof sessionHeader === 'string' ? sessionHeader.trim() : '';
33
+ if (!sessionId) {
34
+ throw new auth_1.TrustedAuthError('GRANT_REQUIRED', 'No valid workspace grant');
35
+ }
36
+ const row = store.getRuntimeSessionRow(sessionId);
37
+ if (!row || row.revoked_at) {
38
+ throw new auth_1.TrustedAuthError('SESSION_REVOKED', 'Grant rotation or explicit revocation ended the session');
39
+ }
40
+ if (Date.parse(row.expires_at) <= Date.now()) {
41
+ throw new auth_1.TrustedAuthError('SESSION_INVALID', 'Runtime session absent or expired');
42
+ }
43
+ const session = store.touchRuntimeSession(sessionId);
44
+ if (!session) {
45
+ throw new auth_1.TrustedAuthError('SESSION_INVALID', 'Runtime session absent or expired');
46
+ }
47
+ return session;
48
+ }
49
+ async function registerTrustedSessionRoutes(fastify) {
50
+ const store = fastify.trustedSessionStore;
51
+ fastify.post('/workspace-grants/issue', async (request, reply) => {
52
+ try {
53
+ await (0, auth_1.requireTrustedWriterBearer)(request);
54
+ const { workspaceRoot, deckId } = request.body;
55
+ if (!workspaceRoot?.trim() || !deckId?.trim()) {
56
+ return reply.status(400).send({ success: false, error: 'workspaceRoot and deckId required' });
57
+ }
58
+ const deck = await fastify.db.getDeck(deckId);
59
+ if (!deck) {
60
+ return reply.status(404).send({ success: false, error: 'Deck not found' });
61
+ }
62
+ const canonical = (0, shared_1.canonicalizeWorkspacePath)(workspaceRoot);
63
+ const digest = (0, shared_1.digestCanonicalWorkspacePath)(canonical);
64
+ const workspaceKey = store.getOrCreateWorkspaceKey(digest);
65
+ const secret = (0, store_1.generateGrantSecret)();
66
+ const pending = store.createPendingGrant(workspaceKey.id, deckId, secret);
67
+ return reply.send({
68
+ success: true,
69
+ data: {
70
+ workspaceKey: workspaceKey.id,
71
+ grantId: pending.id,
72
+ deckId,
73
+ deckName: deck.name,
74
+ secret,
75
+ status: 'pending',
76
+ },
77
+ });
78
+ }
79
+ catch (error) {
80
+ if (error instanceof auth_1.TrustedAuthError) {
81
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
82
+ }
83
+ throw error;
84
+ }
85
+ });
86
+ fastify.post('/workspace-grants/:grantId/revoke-pending', async (request, reply) => {
87
+ try {
88
+ await (0, auth_1.requireTrustedWriterBearer)(request);
89
+ store.revokePendingGrant(request.params.grantId);
90
+ return reply.send({ success: true });
91
+ }
92
+ catch (error) {
93
+ if (error instanceof auth_1.TrustedAuthError) {
94
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
95
+ }
96
+ throw error;
97
+ }
98
+ });
99
+ fastify.post('/workspace-grants/:grantId/activate', async (request, reply) => {
100
+ try {
101
+ await (0, auth_1.requireTrustedWriterBearer)(request);
102
+ const { grantId } = request.params;
103
+ const activated = store.activateGrant(grantId);
104
+ if (!activated) {
105
+ return reply.status(409).send({
106
+ success: false,
107
+ error: 'Grant not pending or not found',
108
+ });
109
+ }
110
+ const deck = await fastify.db.getDeck(activated.deck_id);
111
+ return reply.send({
112
+ success: true,
113
+ data: {
114
+ grantId: activated.id,
115
+ deckId: activated.deck_id,
116
+ deckName: deck?.name,
117
+ status: activated.status,
118
+ },
119
+ });
120
+ }
121
+ catch (error) {
122
+ if (error instanceof auth_1.TrustedAuthError) {
123
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
124
+ }
125
+ throw error;
126
+ }
127
+ });
128
+ fastify.get('/runtime-session', async (request, reply) => {
129
+ try {
130
+ const sessionHeader = request.headers[shared_1.AGENT_DECK_SESSION_HEADER];
131
+ const sessionId = typeof sessionHeader === 'string' ? sessionHeader.trim() : '';
132
+ if (!sessionId) {
133
+ throw new auth_1.TrustedAuthError('GRANT_REQUIRED', 'No valid workspace grant');
134
+ }
135
+ const row = store.getRuntimeSessionRow(sessionId);
136
+ if (!row || row.revoked_at) {
137
+ throw new auth_1.TrustedAuthError('SESSION_REVOKED', 'Grant rotation or explicit revocation ended the session');
138
+ }
139
+ if (Date.parse(row.expires_at) <= Date.now()) {
140
+ throw new auth_1.TrustedAuthError('SESSION_INVALID', 'Runtime session absent or expired');
141
+ }
142
+ const session = store.touchRuntimeSession(sessionId);
143
+ if (!session) {
144
+ throw new auth_1.TrustedAuthError('SESSION_INVALID', 'Runtime session absent or expired');
145
+ }
146
+ const deck = await fastify.db.getDeck(session.deckId);
147
+ return reply.send({
148
+ success: true,
149
+ data: {
150
+ sessionId: session.sessionId,
151
+ deckId: session.deckId,
152
+ deckName: deck?.name,
153
+ mode: session.mode,
154
+ expiresAt: session.expiresAt,
155
+ adminExpiresAt: session.adminExpiresAt,
156
+ },
157
+ });
158
+ }
159
+ catch (error) {
160
+ if (error instanceof auth_1.TrustedAuthError) {
161
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
162
+ }
163
+ throw error;
164
+ }
165
+ });
166
+ fastify.post('/bind-workspace', async (request, reply) => {
167
+ try {
168
+ const { workspaceRoot, deckId } = request.body;
169
+ if (!workspaceRoot?.trim() || !deckId?.trim()) {
170
+ return reply.status(400).send({ success: false, error: 'workspaceRoot and deckId required' });
171
+ }
172
+ const session = resolveRuntimeSessionFromHeader(request, store);
173
+ assertWorkspaceScope(store, session.workspaceKey, workspaceRoot);
174
+ const deck = await fastify.db.getDeck(deckId);
175
+ if (!deck) {
176
+ return reply.status(404).send({ success: false, error: 'Deck not found' });
177
+ }
178
+ if (session.deckId === deckId) {
179
+ return reply.send({
180
+ success: true,
181
+ data: {
182
+ deckId: session.deckId,
183
+ deckName: deck.name,
184
+ mode: session.mode,
185
+ grantRotated: false,
186
+ peersRevoked: 0,
187
+ },
188
+ });
189
+ }
190
+ if (session.mode !== 'agent-admin') {
191
+ throw new auth_1.TrustedAuthError('ADMIN_REQUIRED', 'Deck-admin elevation is required');
192
+ }
193
+ const workspaceCount = store.countWorkspacesForDeck(session.deckId);
194
+ const rotated = store.rotateGrantForElevatedSession(session.sessionId, deckId);
195
+ if (!rotated) {
196
+ throw new auth_1.TrustedAuthError('SESSION_INVALID', 'Runtime session absent or expired');
197
+ }
198
+ const newDeck = await fastify.db.getDeck(rotated.session.deckId);
199
+ return reply.send({
200
+ success: true,
201
+ data: {
202
+ deckId: rotated.session.deckId,
203
+ deckName: newDeck?.name ?? deck.name,
204
+ mode: rotated.session.mode,
205
+ grantRotated: true,
206
+ peersRevoked: rotated.peersRevoked,
207
+ previousDeckWorkspaceCount: workspaceCount,
208
+ grantRefreshNote: 'Run `agent-deck use <deck>` in this workspace to refresh the local grant file before the next MCP reconnect.',
209
+ },
210
+ });
211
+ }
212
+ catch (error) {
213
+ if (error instanceof auth_1.TrustedAuthError) {
214
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
215
+ }
216
+ throw error;
217
+ }
218
+ });
219
+ fastify.get('/admin/challenges', async (_request, reply) => {
220
+ const pending = store.listPendingAdminChallenges();
221
+ const data = await Promise.all(pending.map(async (row) => {
222
+ const deck = await fastify.db.getDeck(row.deckId);
223
+ const approvalPath = `/admin/approve?challenge=${encodeURIComponent(row.challengeId)}&session=${encodeURIComponent(row.runtimeSessionId)}`;
224
+ return {
225
+ challengeId: row.challengeId,
226
+ runtimeSessionId: row.runtimeSessionId,
227
+ deckId: row.deckId,
228
+ deckName: deck?.name,
229
+ expiresAt: row.expiresAt,
230
+ approvalPath,
231
+ };
232
+ }));
233
+ return reply.send({ success: true, data });
234
+ });
235
+ fastify.post('/admin/request-elevation', async (request, reply) => {
236
+ try {
237
+ const { runtimeSessionId } = request.body;
238
+ if (!runtimeSessionId?.trim()) {
239
+ return reply.status(400).send({ success: false, error: 'runtimeSessionId required' });
240
+ }
241
+ requireRuntimeSessionOwnership(request, runtimeSessionId);
242
+ const row = store.getRuntimeSessionRow(runtimeSessionId);
243
+ if (!row || row.revoked_at) {
244
+ throw new auth_1.TrustedAuthError('SESSION_INVALID', 'Runtime session absent or expired');
245
+ }
246
+ const challenge = store.createAdminChallenge(runtimeSessionId);
247
+ const approvalUrl = `/admin/approve?challenge=${encodeURIComponent(challenge.id)}&session=${encodeURIComponent(runtimeSessionId)}`;
248
+ return reply.send({
249
+ success: true,
250
+ data: {
251
+ challengeId: challenge.id,
252
+ expiresAt: challenge.expires_at,
253
+ approvalUrl,
254
+ },
255
+ });
256
+ }
257
+ catch (error) {
258
+ if (error instanceof auth_1.TrustedAuthError) {
259
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
260
+ }
261
+ throw error;
262
+ }
263
+ });
264
+ fastify.post('/admin/approve', async (request, reply) => {
265
+ try {
266
+ const bearer = (0, http_auth_1.parseBearerToken)(request);
267
+ const expected = await (0, admin_secret_1.readAdminSecretFromEnvOrFile)();
268
+ if (!bearer || !expected || !(0, admin_secret_1.verifyAdminSecret)(bearer, expected)) {
269
+ const token = (0, dashboard_auth_1.parseDashboardCookie)(request);
270
+ if (!token || !(0, dashboard_auth_1.validateDashboardSessionToken)(token)) {
271
+ throw new auth_1.TrustedAuthError('DASHBOARD_REQUIRED', 'Dashboard authentication required');
272
+ }
273
+ }
274
+ const { challengeId, runtimeSessionId } = request.body;
275
+ const consumed = store.consumeAdminChallenge(challengeId, runtimeSessionId);
276
+ if (!consumed) {
277
+ throw new auth_1.TrustedAuthError('ADMIN_CHALLENGE_EXPIRED', 'Approval challenge expired or was already consumed');
278
+ }
279
+ const elevated = store.elevateSessionToAdmin(runtimeSessionId);
280
+ if (!elevated) {
281
+ throw new auth_1.TrustedAuthError('SESSION_INVALID', 'Runtime session absent or expired');
282
+ }
283
+ return reply.send({ success: true, data: { session: elevated } });
284
+ }
285
+ catch (error) {
286
+ if (error instanceof auth_1.TrustedAuthError) {
287
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
288
+ }
289
+ throw error;
290
+ }
291
+ });
292
+ fastify.post('/admin/exit', async (request, reply) => {
293
+ try {
294
+ const { runtimeSessionId } = request.body;
295
+ if (!runtimeSessionId?.trim()) {
296
+ return reply.status(400).send({ success: false, error: 'runtimeSessionId required' });
297
+ }
298
+ requireRuntimeSessionOwnership(request, runtimeSessionId);
299
+ const downgraded = store.downgradeSessionToNormal(runtimeSessionId);
300
+ if (!downgraded) {
301
+ return reply.status(404).send({ success: false, error: 'Session not found' });
302
+ }
303
+ return reply.send({ success: true, data: { session: downgraded } });
304
+ }
305
+ catch (error) {
306
+ if (error instanceof auth_1.TrustedAuthError) {
307
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
308
+ }
309
+ throw error;
310
+ }
311
+ });
312
+ fastify.post('/mcp/connect', async (request, reply) => {
313
+ try {
314
+ const { grantSecret, mcpSessionId } = request.body;
315
+ if (!grantSecret?.trim()) {
316
+ throw new auth_1.TrustedAuthError('GRANT_REQUIRED', 'No valid workspace grant');
317
+ }
318
+ const grant = store.findActiveGrantBySecret(grantSecret);
319
+ if (!grant) {
320
+ throw new auth_1.TrustedAuthError('GRANT_REQUIRED', 'No valid workspace grant');
321
+ }
322
+ let session;
323
+ if (mcpSessionId?.trim()) {
324
+ session = store.findActiveRuntimeSessionForMcp(mcpSessionId.trim(), grant.id);
325
+ }
326
+ if (!session) {
327
+ session = store.createRuntimeSession({
328
+ workspaceKeyId: grant.workspace_key_id,
329
+ workspaceGrantId: grant.id,
330
+ deckId: grant.deck_id,
331
+ mcpSessionId: mcpSessionId?.trim(),
332
+ });
333
+ }
334
+ const deck = await fastify.db.getDeck(session.deckId);
335
+ return reply.send({
336
+ success: true,
337
+ data: {
338
+ sessionId: session.sessionId,
339
+ workspaceKey: session.workspaceKey,
340
+ deckId: session.deckId,
341
+ deckName: deck?.name,
342
+ mode: session.mode,
343
+ expiresAt: session.expiresAt,
344
+ },
345
+ });
346
+ }
347
+ catch (error) {
348
+ if (error instanceof auth_1.TrustedAuthError) {
349
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
350
+ }
351
+ throw error;
352
+ }
353
+ });
354
+ }
355
+ async function registerDashboardAuthRoutes(fastify) {
356
+ const store = fastify.trustedSessionStore;
357
+ fastify.post('/bootstrap/nonce', async (request, reply) => {
358
+ try {
359
+ await (0, auth_1.requireTrustedWriterBearer)(request);
360
+ const nonce = (0, node_crypto_1.randomBytes)(24).toString('base64url');
361
+ const expiresAt = new Date(Date.now() + shared_1.DASHBOARD_NONCE_TTL_MS).toISOString();
362
+ store.createDashboardNonce(nonce, expiresAt);
363
+ return reply.send({ success: true, data: { nonce, expiresInMs: shared_1.DASHBOARD_NONCE_TTL_MS } });
364
+ }
365
+ catch (error) {
366
+ if (error instanceof auth_1.TrustedAuthError) {
367
+ return (0, auth_1.sendTrustedAuthError)(reply, error);
368
+ }
369
+ throw error;
370
+ }
371
+ });
372
+ fastify.post('/bootstrap/session', async (request, reply) => {
373
+ const { nonce } = request.body;
374
+ if (!store.consumeDashboardNonce(nonce)) {
375
+ return reply.status(410).send({ success: false, error: 'Bootstrap nonce expired or invalid' });
376
+ }
377
+ const token = (0, auth_1.createDashboardSessionToken)();
378
+ // Secure omitted intentionally — dashboard is localhost-http in v1.
379
+ reply.header('Set-Cookie', `${shared_1.AGENT_DECK_DASHBOARD_COOKIE}=${encodeURIComponent(token)}; HttpOnly; SameSite=Strict; Path=/`);
380
+ return reply.send({ success: true, data: { authenticated: true } });
381
+ });
382
+ }
383
+ //# sourceMappingURL=trusted-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trusted-session.js","sourceRoot":"","sources":["../../src/routes/trusted-session.ts"],"names":[],"mappings":"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"}