@agentcairn/mcp-server 0.1.4 → 0.2.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.
package/dist/dashboard.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { createRequire } from 'node:module';
3
3
  import { extname, join, normalize, sep } from 'node:path';
4
- import { AdminError, MEMORY_KINDS, QueryRejectedError, changeAdminPassword, checkConnection, countActiveTokens, countAdmins, createApiToken, createFirstAdmin, ensureProject, getGraph, getMemory, getMemoryChain, getProjectDetail, ensureSchema, getSystemInfo, hasDefaultCredentials, isValidProjectId, listApiTokens, listProjects, loadConfig, recall, revokeApiToken, runReadOnlyCypher, schemaVersion, tidySystemNodes, verifyAdmin, } from '@agentcairn/core';
4
+ import { AdminError, InviteError, MEMORY_KINDS, QueryRejectedError, accessibleProjectIds, acceptInvite, authorize, changeAdminPassword, checkConnection, countActiveTokens, countActiveUsers, countAdmins, createApiToken, createFirstAdmin, createInvite, createProject, deleteProject, findAccessibleProject, getGraph, getMemory, getMemoryChain, getProjectDetail, ensureSchema, getSystemInfo, getUserByUsername, hasDefaultCredentials, isProjectRole, listApiTokens, listAudit, listInvites, listMembers, listProjects, listSessions, listUserOverview, loadConfig, migrateUsers, previewInvite, principalOf, projectRoles, recordAudit, removeMembership, removeUser, revokeInvite, setMembership, setUserLimits, setUserRole, setUserStatus, transferOwnership, recall, revokeApiToken, runReadOnlyCypher, schemaVersion, tidySystemNodes, verifyAdmin, } from '@agentcairn/core';
5
5
  import { RateLimiter, SESSION_COOKIE, clearedSessionCookie, parseCookies, sameOrigin, sessionCookie, setupBanner, } from './security.js';
6
6
  import { HttpError, asRecord, clientIp, readJson, send } from './util.js';
7
7
  const MIME = {
@@ -40,6 +40,8 @@ export function createDashboard(deps) {
40
40
  const loginByIp = new RateLimiter(10, 10 * 60_000);
41
41
  const loginByUser = new RateLimiter(5, 10 * 60_000);
42
42
  const setupGuesses = new RateLimiter(5, 10 * 60_000);
43
+ const inviteLookups = new RateLimiter(40, 10 * 60_000);
44
+ const inviteAccepts = new RateLimiter(12, 10 * 60_000);
43
45
  let adminCache;
44
46
  const adminCount = async () => {
45
47
  if (adminCache && adminCache.until > Date.now())
@@ -57,6 +59,27 @@ export function createDashboard(deps) {
57
59
  function sessionOf(req) {
58
60
  return sessions.get(parseCookies(req)[SESSION_COOKIE]);
59
61
  }
62
+ /** Who a signed-in dashboard session acts as. Looked up (briefly cached) so a disabled account loses access quickly. */
63
+ const principals = new Map();
64
+ async function principalFor(username) {
65
+ const cached = principals.get(username);
66
+ if (cached && cached.until > Date.now()) {
67
+ if (cached.principal)
68
+ return cached.principal;
69
+ }
70
+ else {
71
+ const user = await getUserByUsername(brain, username);
72
+ const principal = user && user.status === 'active' ? principalOf(user, (await countActiveUsers(brain)) <= 1) : null;
73
+ principals.set(username, { principal, until: Date.now() + 3000 });
74
+ if (principal)
75
+ return principal;
76
+ }
77
+ throw new HttpError(401, 'login_required', 'Sign in first.');
78
+ }
79
+ const requireAdmin = (principal) => {
80
+ if (principal.role !== 'admin')
81
+ throw new HttpError(403, 'forbidden', 'Only an admin can do that.');
82
+ };
60
83
  async function serveStatic(res, path) {
61
84
  const vendored = vendor[path];
62
85
  let file;
@@ -96,11 +119,15 @@ export function createDashboard(deps) {
96
119
  if (route === 'state' && method === 'GET') {
97
120
  await ensureSetupGate();
98
121
  const session = sessionOf(req);
122
+ const me = session ? await principalFor(session.username).catch(() => null) : null;
99
123
  return send(res, 200, {
100
124
  version: deps.version,
101
125
  setupRequired: (await adminCount()) === 0,
102
- authenticated: Boolean(session),
103
- username: session?.username ?? null,
126
+ authenticated: Boolean(session && me),
127
+ username: me ? session.username : null,
128
+ userId: me?.userId ?? null,
129
+ role: me?.role ?? null,
130
+ solo: me?.solo ?? true,
104
131
  });
105
132
  }
106
133
  if (route === 'setup' && method === 'POST') {
@@ -115,11 +142,15 @@ export function createDashboard(deps) {
115
142
  throw new HttpError(403, 'bad_code', 'That setup code is not right.');
116
143
  try {
117
144
  const admin = await createFirstAdmin(brain, String(body.username ?? ''), String(body.password ?? ''));
145
+ // projects made before there were accounts now belong to the first admin
146
+ await migrateUsers(brain);
147
+ auth.invalidate();
118
148
  setup.close();
119
149
  adminCache = undefined;
120
150
  setupGuesses.reset(ip);
121
151
  const s = sessions.create(admin.username);
122
152
  deps.log(`dashboard: admin "${admin.username}" created`);
153
+ void recordAudit(brain, { actor: admin.username, action: 'setup.completed' });
123
154
  // the first-setup lock has done its job; remove it once any racing attempts are finished with it
124
155
  setTimeout(() => void tidySystemNodes(brain).catch(() => undefined), 3000).unref();
125
156
  return send(res, 200, { username: admin.username }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
@@ -138,12 +169,56 @@ export function createDashboard(deps) {
138
169
  throw new HttpError(429, 'rate_limited', `Too many attempts. Try again in ${Math.max(loginByIp.retryAfterSeconds(ip), loginByUser.retryAfterSeconds(username))}s.`);
139
170
  }
140
171
  const admin = await verifyAdmin(brain, username, String(body.password ?? ''));
141
- if (!admin)
172
+ if (!admin) {
173
+ void recordAudit(brain, { actor: null, action: 'login.failed', target: username.slice(0, 64) });
142
174
  throw new HttpError(401, 'bad_credentials', 'Wrong username or password.');
175
+ }
143
176
  loginByUser.reset(username);
177
+ void recordAudit(brain, { actor: admin.username, action: 'login' });
144
178
  const s = sessions.create(admin.username);
145
179
  return send(res, 200, { username: admin.username }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
146
180
  }
181
+ // ---- invitations: the link is the credential, so these are public and rate limited --------
182
+ const inviteMatch = /^invite\/([^/]+)(\/accept)?$/.exec(route);
183
+ if (inviteMatch) {
184
+ const token = decodeURIComponent(inviteMatch[1]);
185
+ if (method === 'GET' && !inviteMatch[2]) {
186
+ if (!inviteLookups.attempt(ip))
187
+ throw new HttpError(429, 'rate_limited', 'Too many attempts. Try again in a few minutes.');
188
+ const info = await previewInvite(brain, token);
189
+ if (!info)
190
+ throw new HttpError(404, 'invite_gone', 'This invitation is not valid: it was used, withdrawn or has expired.');
191
+ return send(res, 200, {
192
+ kind: info.kind,
193
+ role: info.role,
194
+ username: info.username,
195
+ forUsername: info.forUsername,
196
+ grants: info.grants.map(g => ({ projectName: g.projectName, role: g.role })),
197
+ invitedBy: info.createdBy,
198
+ expiresAt: info.expiresAt,
199
+ });
200
+ }
201
+ if (method === 'POST' && inviteMatch[2]) {
202
+ if (!inviteAccepts.attempt(ip))
203
+ throw new HttpError(429, 'rate_limited', 'Too many attempts. Try again in a few minutes.');
204
+ const body = asRecord(await readJson(req, deps.maxBodyBytes));
205
+ try {
206
+ const user = await acceptInvite(brain, token, { username: typeof body.username === 'string' ? body.username : undefined, password: String(body.password ?? '') });
207
+ sessions.destroyUser(user.username);
208
+ auth.invalidate();
209
+ principals.delete(user.username);
210
+ void recordAudit(brain, { actor: user.username, action: 'invite.accepted', target: user.username });
211
+ const s = sessions.create(user.username);
212
+ return send(res, 200, { username: user.username }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
213
+ }
214
+ catch (error) {
215
+ if (error instanceof InviteError) {
216
+ throw new HttpError(error.code === 'gone' ? 410 : error.code === 'taken' ? 409 : 400, error.code === 'gone' ? 'invite_gone' : error.code === 'taken' ? 'username_taken' : 'invalid', error.message);
217
+ }
218
+ throw error;
219
+ }
220
+ }
221
+ }
147
222
  if (route === 'logout' && method === 'POST') {
148
223
  sessions.destroy(parseCookies(req)[SESSION_COOKIE]);
149
224
  return send(res, 200, { ok: true }, { 'set-cookie': clearedSessionCookie(deps.secureCookies) });
@@ -152,6 +227,8 @@ export function createDashboard(deps) {
152
227
  const session = sessionOf(req);
153
228
  if (!session)
154
229
  throw new HttpError(401, 'login_required', 'Sign in first.');
230
+ const principal = await principalFor(session.username);
231
+ const isAdmin = principal.role === 'admin';
155
232
  if (route === 'password' && method === 'POST') {
156
233
  const body = asRecord(await readJson(req, deps.maxBodyBytes));
157
234
  if (!loginByUser.attempt(`pw:${session.username}`))
@@ -166,6 +243,7 @@ export function createDashboard(deps) {
166
243
  throw new HttpError(400, 'invalid', error.message);
167
244
  throw error;
168
245
  }
246
+ void recordAudit(brain, { actor: session.username, action: 'password.changed' });
169
247
  sessions.clear();
170
248
  const s = sessions.create(session.username);
171
249
  return send(res, 200, { ok: true }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
@@ -174,20 +252,21 @@ export function createDashboard(deps) {
174
252
  const started = Date.now();
175
253
  const info = await checkConnection(brain);
176
254
  const pingMs = Date.now() - started;
177
- const projects = await listProjects(brain);
255
+ const projects = await listProjects(brain, { projectIds: await accessibleProjectIds(brain, principal) });
178
256
  return send(res, 200, {
179
- stats: events.stats(),
257
+ stats: isAdmin ? events.stats() : null,
180
258
  db: {
181
259
  projects: projects.length,
182
260
  memories: projects.reduce((a, p) => a + p.active, 0),
183
261
  superseded: projects.reduce((a, p) => a + p.superseded, 0),
184
- tokens: await countActiveTokens(brain),
262
+ tokens: isAdmin ? await countActiveTokens(brain) : (await listApiTokens(brain, { createdBy: principal.username })).filter(t => !t.revokedAt).length,
185
263
  },
186
- neo4j: { agent: info.agent, address: info.address, pingMs },
264
+ neo4j: isAdmin ? { agent: info.agent, address: info.address, pingMs } : null,
187
265
  server: { version: deps.version },
188
266
  });
189
267
  }
190
268
  if (route === 'events' && method === 'GET') {
269
+ requireAdmin(principal);
191
270
  const ok = q.get('ok');
192
271
  return send(res, 200, {
193
272
  events: events.recent({
@@ -203,33 +282,230 @@ export function createDashboard(deps) {
203
282
  }
204
283
  const eventMatch = /^events\/(\d+)$/.exec(route);
205
284
  if (eventMatch && method === 'GET') {
285
+ requireAdmin(principal);
206
286
  const event = events.get(Number(eventMatch[1]));
207
287
  if (!event)
208
288
  throw new HttpError(404, 'not_found', 'That event has aged out of the buffer.');
209
289
  return send(res, 200, event);
210
290
  }
211
- if (route === 'stream' && method === 'GET')
291
+ if (route === 'stream' && method === 'GET') {
292
+ requireAdmin(principal);
212
293
  return stream(req, res);
213
- if (route === 'projects' && method === 'GET')
214
- return send(res, 200, { projects: await listProjects(brain) });
294
+ }
295
+ if (route === 'projects' && method === 'GET') {
296
+ const roles = await projectRoles(brain, principal);
297
+ const list = await listProjects(brain, { projectIds: await accessibleProjectIds(brain, principal) });
298
+ return send(res, 200, { projects: list.map(p => ({ ...p, role: roles.get(p.id) ?? (principal.solo ? 'owner' : null) })) });
299
+ }
215
300
  if (route === 'projects' && method === 'POST') {
216
- const id = String(asRecord(await readJson(req, deps.maxBodyBytes)).id ?? '').trim();
217
- if (!isValidProjectId(id))
218
- throw new HttpError(400, 'invalid', 'Project id: letters, digits, ".", "_" or "-", up to 64 characters.');
301
+ const body = asRecord(await readJson(req, deps.maxBodyBytes));
302
+ const name = String(body.name ?? body.id ?? '').trim();
219
303
  await ensureSchema(brain);
220
- return send(res, 200, { id, ...(await ensureProject(brain, id)) });
304
+ // a name you already own is the same project, not a second one
305
+ const existing = await findAccessibleProject(brain, principal, name).catch(() => null);
306
+ const owned = existing && (await authorize(brain, principal, 'project.delete', existing.id).then(() => true, () => false));
307
+ if (existing && owned)
308
+ return send(res, 200, { id: existing.id, name: existing.name, created: false });
309
+ const made = await createProject(brain, principal.userId, name);
310
+ void recordAudit(brain, { actor: principal.username, action: 'project.created', target: made.name });
311
+ return send(res, 200, { id: made.id, name: made.name, created: true });
221
312
  }
222
313
  const projectMatch = /^projects\/([^/]+)$/.exec(route);
223
314
  if (projectMatch && method === 'GET') {
315
+ await authorize(brain, principal, 'memory.read', decodeURIComponent(projectMatch[1]));
224
316
  const detail = await getProjectDetail(brain, decodeURIComponent(projectMatch[1]));
225
317
  if (!detail)
226
318
  throw new HttpError(404, 'not_found', 'No such project.');
227
- return send(res, 200, detail);
319
+ const role = (await projectRoles(brain, principal)).get(detail.id) ?? (principal.solo ? 'owner' : null);
320
+ return send(res, 200, { ...detail, role });
321
+ }
322
+ if (projectMatch && method === 'DELETE') {
323
+ const id = decodeURIComponent(projectMatch[1]);
324
+ await authorize(brain, principal, 'project.delete', id);
325
+ const label = (await getProjectDetail(brain, id))?.name ?? id;
326
+ const gone = await deleteProject(brain, id);
327
+ if (!gone)
328
+ throw new HttpError(404, 'not_found', 'No such project.');
329
+ void recordAudit(brain, { actor: principal.username, action: 'project.deleted', target: label, detail: `${gone.memories} memories` });
330
+ return send(res, 200, { id, ...gone });
331
+ }
332
+ const membersMatch = /^projects\/([^/]+)\/members(?:\/([^/]+))?$/.exec(route);
333
+ if (membersMatch) {
334
+ const id = decodeURIComponent(membersMatch[1]);
335
+ const userId = membersMatch[2] ? decodeURIComponent(membersMatch[2]) : undefined;
336
+ const projectName = async () => (await getProjectDetail(brain, id))?.name ?? id;
337
+ const usernameOf = async (uid) => (await listMembers(brain, id)).find(m => m.userId === uid)?.username ?? uid;
338
+ if (method === 'GET' && !userId) {
339
+ await authorize(brain, principal, 'memory.read', id);
340
+ return send(res, 200, { members: await listMembers(brain, id) });
341
+ }
342
+ if (method === 'POST' && !userId) {
343
+ await authorize(brain, principal, 'member.manage', id);
344
+ const body = asRecord(await readJson(req, deps.maxBodyBytes));
345
+ const role = body.role;
346
+ if (!isProjectRole(role) || role === 'owner')
347
+ throw new HttpError(400, 'invalid', 'Role must be viewer, editor or maintainer.');
348
+ const target = await getUserByUsername(brain, String(body.username ?? ''));
349
+ if (!target || target.status !== 'active')
350
+ throw new HttpError(404, 'no_such_user', 'No such user. Ask an admin to invite them first.');
351
+ await setMembership(brain, id, target.id, role);
352
+ void recordAudit(brain, { actor: principal.username, action: 'member.added', target: await projectName(), detail: `${target.username} as ${role}` });
353
+ return send(res, 200, { members: await listMembers(brain, id) });
354
+ }
355
+ if (method === 'PUT' && userId) {
356
+ await authorize(brain, principal, 'member.manage', id);
357
+ const role = asRecord(await readJson(req, deps.maxBodyBytes)).role;
358
+ if (!isProjectRole(role) || role === 'owner')
359
+ throw new HttpError(400, 'invalid', 'Role must be viewer, editor or maintainer.');
360
+ await setMembership(brain, id, userId, role);
361
+ void recordAudit(brain, { actor: principal.username, action: 'member.changed', target: await projectName(), detail: `${await usernameOf(userId)} is now ${role}` });
362
+ return send(res, 200, { members: await listMembers(brain, id) });
363
+ }
364
+ if (method === 'DELETE' && userId) {
365
+ // you may always leave a project; removing someone else needs member.manage
366
+ const leaving = userId === principal.userId;
367
+ if (!leaving)
368
+ await authorize(brain, principal, 'member.manage', id);
369
+ else
370
+ await authorize(brain, principal, 'memory.read', id);
371
+ const who = await usernameOf(userId);
372
+ if (!(await removeMembership(brain, id, userId)))
373
+ throw new HttpError(404, 'not_found', 'That user is not a member.');
374
+ void recordAudit(brain, { actor: principal.username, action: leaving ? 'member.left' : 'member.removed', target: await projectName(), detail: leaving ? undefined : who });
375
+ return send(res, 200, { members: await listMembers(brain, id) });
376
+ }
377
+ }
378
+ const transferMatch = /^projects\/([^/]+)\/transfer$/.exec(route);
379
+ if (transferMatch && method === 'POST') {
380
+ const id = decodeURIComponent(transferMatch[1]);
381
+ await authorize(brain, principal, 'project.delete', id); // only the owner hands a project over
382
+ const target = await getUserByUsername(brain, String(asRecord(await readJson(req, deps.maxBodyBytes)).username ?? ''));
383
+ if (!target || target.status !== 'active')
384
+ throw new HttpError(404, 'no_such_user', 'No such user.');
385
+ if (target.id === principal.userId)
386
+ throw new HttpError(400, 'invalid', 'You already own this project.');
387
+ await transferOwnership(brain, id, target.id);
388
+ void recordAudit(brain, { actor: principal.username, action: 'project.transferred', target: (await getProjectDetail(brain, id))?.name ?? id, detail: `to ${target.username}` });
389
+ return send(res, 200, { members: await listMembers(brain, id) });
390
+ }
391
+ const sessionsMatch = /^projects\/([^/]+)\/sessions$/.exec(route);
392
+ if (sessionsMatch && method === 'GET') {
393
+ const id = decodeURIComponent(sessionsMatch[1]);
394
+ await authorize(brain, principal, 'memory.read', id);
395
+ return send(res, 200, { sessions: await listSessions(brain, id, { limit: q.get('limit') ? Number(q.get('limit')) : 20 }) });
396
+ }
397
+ if (route === 'users/lookup' && method === 'GET') {
398
+ const found = await getUserByUsername(brain, q.get('username') ?? '');
399
+ if (!found || found.status !== 'active')
400
+ throw new HttpError(404, 'no_such_user', 'No such user.');
401
+ return send(res, 200, { id: found.id, username: found.username });
402
+ }
403
+ if (route === 'users' && method === 'GET') {
404
+ requireAdmin(principal);
405
+ return send(res, 200, { users: await listUserOverview(brain), invites: await listInvites(brain) });
406
+ }
407
+ const userMatch = /^users\/([^/]+)$/.exec(route);
408
+ if (userMatch && (method === 'PATCH' || method === 'DELETE')) {
409
+ requireAdmin(principal);
410
+ const id = decodeURIComponent(userMatch[1]);
411
+ const target = (await listUserOverview(brain)).find(u => u.id === id);
412
+ if (!target)
413
+ throw new HttpError(404, 'not_found', 'No such user.');
414
+ // what they may do is looked up again at once; their sign-ins end only when they are disabled or removed
415
+ const refresh = (endSessions) => {
416
+ if (endSessions)
417
+ sessions.destroyUser(target.username);
418
+ principals.delete(target.username);
419
+ auth.invalidate();
420
+ };
421
+ try {
422
+ if (method === 'DELETE') {
423
+ if (id === principal.userId)
424
+ throw new HttpError(400, 'invalid', 'You cannot remove your own account.');
425
+ await removeUser(brain, id);
426
+ refresh(true);
427
+ void recordAudit(brain, { actor: principal.username, action: 'user.removed', target: target.username });
428
+ return send(res, 200, { ok: true });
429
+ }
430
+ const body = asRecord(await readJson(req, deps.maxBodyBytes));
431
+ if (body.role !== undefined) {
432
+ if (body.role !== 'admin' && body.role !== 'member')
433
+ throw new HttpError(400, 'invalid', 'Role must be admin or member.');
434
+ if (body.role !== target.role) {
435
+ await setUserRole(brain, id, body.role);
436
+ void recordAudit(brain, { actor: principal.username, action: 'user.role', target: target.username, detail: String(body.role) });
437
+ }
438
+ }
439
+ if (body.status !== undefined) {
440
+ if (body.status !== 'active' && body.status !== 'disabled')
441
+ throw new HttpError(400, 'invalid', 'Status must be active or disabled.');
442
+ if (body.status === 'disabled' && id === principal.userId)
443
+ throw new HttpError(400, 'invalid', 'You cannot disable your own account.');
444
+ if (body.status !== target.status) {
445
+ await setUserStatus(brain, id, body.status);
446
+ if (body.status === 'disabled')
447
+ refresh(true);
448
+ void recordAudit(brain, { actor: principal.username, action: body.status === 'disabled' ? 'user.disabled' : 'user.enabled', target: target.username });
449
+ }
450
+ }
451
+ if (body.maxProjects !== undefined) {
452
+ await setUserLimits(brain, id, { maxProjects: body.maxProjects === null || body.maxProjects === '' ? null : Number(body.maxProjects) });
453
+ void recordAudit(brain, { actor: principal.username, action: 'user.limit', target: target.username, detail: String(body.maxProjects ?? 'none') });
454
+ }
455
+ refresh(false);
456
+ return send(res, 200, { user: (await listUserOverview(brain)).find(u => u.id === id) });
457
+ }
458
+ catch (error) {
459
+ if (error instanceof AdminError)
460
+ throw new HttpError(400, 'invalid', error.message);
461
+ throw error;
462
+ }
463
+ }
464
+ if (route === 'invites' && method === 'POST') {
465
+ requireAdmin(principal);
466
+ const body = asRecord(await readJson(req, deps.maxBodyBytes));
467
+ try {
468
+ const made = await createInvite(brain, principal, {
469
+ kind: body.kind === 'reset' ? 'reset' : 'join',
470
+ role: body.role === 'admin' ? 'admin' : 'member',
471
+ username: typeof body.username === 'string' ? body.username : undefined,
472
+ forUserId: typeof body.forUserId === 'string' ? body.forUserId : undefined,
473
+ grants: Array.isArray(body.grants) ? body.grants : undefined,
474
+ maxProjects: body.maxProjects === undefined || body.maxProjects === null || body.maxProjects === '' ? null : Number(body.maxProjects),
475
+ ttlDays: typeof body.ttlDays === 'number' ? body.ttlDays : undefined,
476
+ });
477
+ void recordAudit(brain, { actor: principal.username, action: 'invite.created', target: made.info.forUsername ?? made.info.username ?? made.info.role, detail: made.info.kind === 'reset' ? 'password reset' : `${made.info.role}, ${made.info.grants.length} project(s)` });
478
+ return send(res, 200, made);
479
+ }
480
+ catch (error) {
481
+ if (error instanceof InviteError)
482
+ throw new HttpError(error.code === 'taken' ? 409 : 400, error.code === 'taken' ? 'username_taken' : 'invalid', error.message);
483
+ throw error;
484
+ }
485
+ }
486
+ const inviteIdMatch = /^invites\/([0-9a-f-]+)$/.exec(route);
487
+ if (inviteIdMatch && method === 'DELETE') {
488
+ requireAdmin(principal);
489
+ if (!(await revokeInvite(brain, inviteIdMatch[1])))
490
+ throw new HttpError(404, 'not_found', 'No such pending invitation.');
491
+ void recordAudit(brain, { actor: principal.username, action: 'invite.revoked' });
492
+ return send(res, 200, { ok: true });
493
+ }
494
+ if (route === 'audit' && method === 'GET') {
495
+ requireAdmin(principal);
496
+ return send(res, 200, {
497
+ events: await listAudit(brain, {
498
+ limit: q.get('limit') ? Number(q.get('limit')) : 100,
499
+ before: q.get('before') ?? undefined,
500
+ action: q.get('action') ?? undefined,
501
+ }),
502
+ });
228
503
  }
229
504
  if (route === 'memories' && method === 'GET') {
230
505
  const project = q.get('project');
231
506
  if (!project)
232
507
  throw new HttpError(400, 'invalid', 'project is required.');
508
+ await authorize(brain, principal, 'memory.read', project);
233
509
  const kind = q.get('kind');
234
510
  if (kind && !MEMORY_KINDS.includes(kind))
235
511
  throw new HttpError(400, 'invalid', 'Unknown kind.');
@@ -239,6 +515,7 @@ export function createDashboard(deps) {
239
515
  kind: kind ?? undefined,
240
516
  area: q.get('area') ?? undefined,
241
517
  limit: q.get('limit') ? Number(q.get('limit')) : 50,
518
+ sort: q.get('sort') === 'recent' || q.get('sort') === 'oldest' ? q.get('sort') : undefined,
242
519
  includeSuperseded: status !== 'active',
243
520
  });
244
521
  return send(res, 200, { memories: status === 'superseded' ? found.filter(m => m.status === 'superseded') : found });
@@ -248,16 +525,22 @@ export function createDashboard(deps) {
248
525
  const project = q.get('project');
249
526
  if (!project)
250
527
  throw new HttpError(400, 'invalid', 'project is required.');
528
+ await authorize(brain, principal, 'memory.read', project);
251
529
  const memory = await getMemory(brain, project, decodeURIComponent(memoryMatch[1]));
252
530
  if (!memory)
253
531
  throw new HttpError(404, 'not_found', 'No such memory.');
254
532
  return send(res, 200, { memory, chain: await getMemoryChain(brain, project, memory.id) });
255
533
  }
256
534
  if (route === 'graph' && method === 'GET') {
257
- return send(res, 200, await getGraph(brain, { projectId: q.get('project') ?? undefined, limit: q.get('limit') ? Number(q.get('limit')) : undefined }));
535
+ const only = q.get('project') ?? undefined;
536
+ if (only)
537
+ await authorize(brain, principal, 'memory.read', only);
538
+ return send(res, 200, await getGraph(brain, { projectId: only, projectIds: await accessibleProjectIds(brain, principal), limit: q.get('limit') ? Number(q.get('limit')) : undefined }));
258
539
  }
259
540
  if (route === 'cypher' && method === 'POST') {
541
+ requireAdmin(principal);
260
542
  const body = asRecord(await readJson(req, deps.maxBodyBytes));
543
+ void recordAudit(brain, { actor: principal.username, action: 'console.query', detail: String(body.query ?? '').replace(/\s+/g, ' ').slice(0, 200) });
261
544
  try {
262
545
  return send(res, 200, await runReadOnlyCypher(brain, String(body.query ?? '')));
263
546
  }
@@ -270,13 +553,19 @@ export function createDashboard(deps) {
270
553
  throw error;
271
554
  }
272
555
  }
273
- if (route === 'tokens' && method === 'GET')
274
- return send(res, 200, { tokens: await listApiTokens(brain) });
556
+ if (route === 'tokens' && method === 'GET') {
557
+ return send(res, 200, { tokens: await listApiTokens(brain, isAdmin ? {} : { createdBy: principal.username }) });
558
+ }
275
559
  if (route === 'tokens' && method === 'POST') {
276
560
  const body = asRecord(await readJson(req, deps.maxBodyBytes));
277
561
  try {
278
- const created = await createApiToken(brain, String(body.name ?? ''), session.username);
562
+ const projects = Array.isArray(body.projects) ? body.projects.filter((p) => typeof p === 'string') : [];
563
+ // a token can only be limited to projects its owner can reach
564
+ for (const p of projects)
565
+ await authorize(brain, principal, 'memory.read', p);
566
+ const created = await createApiToken(brain, String(body.name ?? ''), session.username, { readOnly: body.readOnly === true, projects });
279
567
  auth.invalidate();
568
+ void recordAudit(brain, { actor: principal.username, action: 'token.created', target: created.info.name, detail: [created.info.readOnly ? 'read-only' : '', projects.length ? `${projects.length} project(s)` : ''].filter(Boolean).join(', ') || undefined });
280
569
  return send(res, 200, created);
281
570
  }
282
571
  catch (error) {
@@ -287,12 +576,14 @@ export function createDashboard(deps) {
287
576
  }
288
577
  const tokenMatch = /^tokens\/([0-9a-f]+)$/.exec(route);
289
578
  if (tokenMatch && method === 'DELETE') {
290
- if (!(await revokeApiToken(brain, tokenMatch[1])))
579
+ if (!(await revokeApiToken(brain, tokenMatch[1], isAdmin ? {} : { createdBy: principal.username })))
291
580
  throw new HttpError(404, 'not_found', 'No such active token.');
292
581
  auth.invalidate();
582
+ void recordAudit(brain, { actor: principal.username, action: 'token.revoked', target: tokenMatch[1].slice(0, 8) });
293
583
  return send(res, 200, { ok: true });
294
584
  }
295
585
  if (route === 'system' && method === 'GET') {
586
+ requireAdmin(principal);
296
587
  const config = loadConfig();
297
588
  const started = Date.now();
298
589
  const info = await checkConnection(brain);
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}