@cat-factory/server 0.136.0 → 0.137.1

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.
@@ -5,13 +5,22 @@ export declare const WS_TICKET_TTL_MS: number;
5
5
  export interface WsTicket {
6
6
  aud: typeof TOKEN_AUDIENCE.wsTicket;
7
7
  workspaceId: string;
8
+ /**
9
+ * The signed-in user the ticket was minted for — AUDIT ONLY. Verification stays
10
+ * membership-blind (a ticket authorises one workspace handshake, not a role), so this
11
+ * claim is never consulted by {@link authorizeWsUpgrade}; it exists so a mint can be
12
+ * attributed to a user in logs/traces. Absent (`undefined`) when auth is disabled or the
13
+ * minting request had no session.
14
+ */
15
+ userId?: string;
8
16
  exp: number;
9
17
  }
10
18
  /**
11
19
  * Mint a workspace-scoped WS ticket. Returns `''` when auth is disabled (dev) — the
12
- * handshake is then open and no ticket is needed.
20
+ * handshake is then open and no ticket is needed. `userId` (the minting session's user, if
21
+ * any) is stamped for AUDIT only — it is never read on verify (which stays membership-blind).
13
22
  */
14
- export declare function mintWsTicket(auth: AuthConfig, workspaceId: string): Promise<string>;
23
+ export declare function mintWsTicket(auth: AuthConfig, workspaceId: string, userId?: string): Promise<string>;
15
24
  /**
16
25
  * The verdict of authorising a WS upgrade, modelled so each facade maps it to its own
17
26
  * transport's rejection (an HTTP status on the Worker's `Response`, a raw status line
@@ -1 +1 @@
1
- {"version":3,"file":"wsTicket.d.ts","sourceRoot":"","sources":["../../src/auth/wsTicket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAa,cAAc,EAAE,MAAM,cAAc,CAAA;AAcxD,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAEzC,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,OAAO,cAAc,CAAC,QAAQ,CAAA;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQzF;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAcxB"}
1
+ {"version":3,"file":"wsTicket.d.ts","sourceRoot":"","sources":["../../src/auth/wsTicket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAa,cAAc,EAAE,MAAM,cAAc,CAAA;AAcxD,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAEzC,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,OAAO,cAAc,CAAC,QAAQ,CAAA;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAcxB"}
@@ -14,14 +14,16 @@ import { signerFor, TOKEN_AUDIENCE } from './signing.js';
14
14
  export const WS_TICKET_TTL_MS = 60 * 1000;
15
15
  /**
16
16
  * Mint a workspace-scoped WS ticket. Returns `''` when auth is disabled (dev) — the
17
- * handshake is then open and no ticket is needed.
17
+ * handshake is then open and no ticket is needed. `userId` (the minting session's user, if
18
+ * any) is stamped for AUDIT only — it is never read on verify (which stays membership-blind).
18
19
  */
19
- export async function mintWsTicket(auth, workspaceId) {
20
+ export async function mintWsTicket(auth, workspaceId, userId) {
20
21
  if (!auth.enabled)
21
22
  return '';
22
23
  const ticket = {
23
24
  aud: TOKEN_AUDIENCE.wsTicket,
24
25
  workspaceId,
26
+ ...(userId ? { userId } : {}),
25
27
  exp: Date.now() + WS_TICKET_TTL_MS,
26
28
  };
27
29
  return signerFor(auth.sessionSecret).sign(ticket);
@@ -1 +1 @@
1
- {"version":3,"file":"wsTicket.js","sourceRoot":"","sources":["../../src/auth/wsTicket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAExD,sFAAsF;AACtF,qFAAqF;AACrF,uFAAuF;AACvF,wFAAwF;AACxF,6EAA6E;AAC7E,EAAE;AACF,wFAAwF;AACxF,yFAAyF;AACzF,qFAAqF;AACrF,qFAAqF;AACrF,mEAAmE;AAEnE,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAA;AAQzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAgB,EAAE,WAAmB;IACtE,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAa;QACvB,GAAG,EAAE,cAAc,CAAC,QAAQ;QAC5B,WAAW;QACX,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB;KACnC,CAAA;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACnD,CAAC;AASD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAgB,EAChB,MAA0B,EAC1B,WAAmB;IAEnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAW,MAAM,EAAE;YAC5E,GAAG,EAAE,cAAc,CAAC,QAAQ;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YACtD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;QAC5D,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAA;IAC7F,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC"}
1
+ {"version":3,"file":"wsTicket.js","sourceRoot":"","sources":["../../src/auth/wsTicket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAExD,sFAAsF;AACtF,qFAAqF;AACrF,uFAAuF;AACvF,wFAAwF;AACxF,6EAA6E;AAC7E,EAAE;AACF,wFAAwF;AACxF,yFAAyF;AACzF,qFAAqF;AACrF,qFAAqF;AACrF,mEAAmE;AAEnE,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAA;AAgBzC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAgB,EAChB,WAAmB,EACnB,MAAe;IAEf,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAa;QACvB,GAAG,EAAE,cAAc,CAAC,QAAQ;QAC5B,WAAW;QACX,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB;KACnC,CAAA;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACnD,CAAC;AASD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAgB,EAChB,MAA0B,EAC1B,WAAmB;IAEnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAW,MAAM,EAAE;YAC5E,GAAG,EAAE,cAAc,CAAC,QAAQ;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YACtD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;QAC5D,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAA;IAC7F,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentUserHandlerController.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentUserHandlerController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAsB/C,wBAAgB,gCAAgC,IAAI,IAAI,CAAC,MAAM,CAAC,CAwC/D"}
1
+ {"version":3,"file":"EnvironmentUserHandlerController.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentUserHandlerController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAkD/C,wBAAgB,gCAAgC,IAAI,IAAI,CAAC,MAAM,CAAC,CAgD/D"}
@@ -1,7 +1,9 @@
1
1
  import { listEnvironmentUserHandlersContract, provisionTypeSchema, removeEnvironmentUserHandlerContract, upsertEnvironmentUserHandlerContract, } from '@cat-factory/contracts';
2
+ import { ForbiddenError, NotFoundError } from '@cat-factory/kernel';
2
3
  import { buildHonoRoute } from '@toad-contracts/hono';
3
4
  import * as v from 'valibot';
4
5
  import { Hono } from 'hono';
6
+ import { loadWorkspaceAccess } from '../../http/workspaceAccess.js';
5
7
  // Per-USER infra handler overrides (local mode). A developer points a provision type at
6
8
  // their OWN engine (a personal Docker / k3s), and that override wins for the runs they
7
9
  // initiate. Mounted at the root (no `/workspaces` prefix) and scoped to the signed-in user,
@@ -11,26 +13,54 @@ import { Hono } from 'hono';
11
13
  // runtime branch here. See docs/initiatives/per-service-provision-types.md.
12
14
  const signInRequired = (c) => c.json({ error: { code: 'unauthorized', message: 'Sign in to manage environment handler overrides' } }, 401);
13
15
  const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Per-user environment handlers are not configured' } }, 503);
16
+ /**
17
+ * Workspace-RBAC (workspace-rbac initiative, slice 7). These routes are mounted at `/`, OUTSIDE
18
+ * the `/workspaces/:ws/*` gate, so they resolve access themselves through the SAME shared
19
+ * `loadWorkspaceAccess` the gate uses, then require `runs.execute` — a per-user infra override
20
+ * steers the runs the caller initiates, so it belongs to the run-execution surface. A caller with
21
+ * no access at all gets a 404 (existence is hidden exactly as the gate hides a board, via the same
22
+ * `NotFoundError` the `requireMember`-style guards use); a caller who SEES the board but lacks the
23
+ * capability gets a 403 (insufficiency, not existence). Throws on denial/insufficiency — the
24
+ * handler proceeds only when the caller is authorised.
25
+ */
26
+ async function requireRunsExecute(c, workspaceId, userId) {
27
+ const access = await loadWorkspaceAccess(c.get('container'), workspaceId, userId);
28
+ if (!access || !access.allowed) {
29
+ // Missing OR denied → 404, never leaking whether the board exists.
30
+ throw new NotFoundError('Workspace', workspaceId);
31
+ }
32
+ if (!access.permissions.has('runs.execute')) {
33
+ throw new ForbiddenError('This action requires the runs.execute permission', {
34
+ permission: 'runs.execute',
35
+ });
36
+ }
37
+ }
14
38
  export function environmentUserHandlerController() {
15
39
  const app = new Hono();
40
+ // Authorization runs BEFORE the service-availability (503) check on purpose: a caller who
41
+ // cannot see the board must get the same 404 whether or not this (local-only) feature is
42
+ // wired, so an unwired facade never reveals a board's existence to a non-member.
16
43
  buildHonoRoute(app, listEnvironmentUserHandlersContract, async (c) => {
17
- const svc = c.get('container').environments?.userHandlerService;
18
- if (!svc)
19
- return unavailable(c);
20
44
  const user = c.get('user');
21
45
  if (!user)
22
46
  return signInRequired(c);
23
- const handlers = await svc.list(user.id, c.req.valid('param').workspaceId);
24
- return c.json({ handlers }, 200);
25
- });
26
- buildHonoRoute(app, upsertEnvironmentUserHandlerContract, async (c) => {
47
+ const workspaceId = c.req.valid('param').workspaceId;
48
+ await requireRunsExecute(c, workspaceId, user.id);
27
49
  const svc = c.get('container').environments?.userHandlerService;
28
50
  if (!svc)
29
51
  return unavailable(c);
52
+ const handlers = await svc.list(user.id, workspaceId);
53
+ return c.json({ handlers }, 200);
54
+ });
55
+ buildHonoRoute(app, upsertEnvironmentUserHandlerContract, async (c) => {
30
56
  const user = c.get('user');
31
57
  if (!user)
32
58
  return signInRequired(c);
33
59
  const { workspaceId, provisionType: rawType } = c.req.valid('param');
60
+ await requireRunsExecute(c, workspaceId, user.id);
61
+ const svc = c.get('container').environments?.userHandlerService;
62
+ if (!svc)
63
+ return unavailable(c);
34
64
  // The provision type comes from the path; the body's value is overridden by it.
35
65
  const provisionType = v.parse(provisionTypeSchema, rawType);
36
66
  const view = await svc.upsert(user.id, workspaceId, {
@@ -40,13 +70,14 @@ export function environmentUserHandlerController() {
40
70
  return c.json(view, 201);
41
71
  });
42
72
  buildHonoRoute(app, removeEnvironmentUserHandlerContract, async (c) => {
43
- const svc = c.get('container').environments?.userHandlerService;
44
- if (!svc)
45
- return unavailable(c);
46
73
  const user = c.get('user');
47
74
  if (!user)
48
75
  return signInRequired(c);
49
76
  const { workspaceId, provisionType: rawType } = c.req.valid('param');
77
+ await requireRunsExecute(c, workspaceId, user.id);
78
+ const svc = c.get('container').environments?.userHandlerService;
79
+ if (!svc)
80
+ return unavailable(c);
50
81
  const provisionType = v.parse(provisionTypeSchema, rawType);
51
82
  const manifestId = c.req.valid('query').manifestId ?? null;
52
83
  await svc.remove(user.id, workspaceId, provisionType, manifestId);
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentUserHandlerController.js","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentUserHandlerController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EnvironmentUserHandlerController.js","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentUserHandlerController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventsController.d.ts","sourceRoot":"","sources":["../../../src/modules/events/EventsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CAgC/C"}
1
+ {"version":3,"file":"EventsController.d.ts","sourceRoot":"","sources":["../../../src/modules/events/EventsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CAkC/C"}
@@ -31,7 +31,9 @@ export function eventsController() {
31
31
  app.post('/workspaces/:workspaceId/events/ticket', async (c) => {
32
32
  const cfg = c.get('container').config.auth;
33
33
  const workspaceId = param(c, 'workspaceId');
34
- const ticket = await mintWsTicket(cfg, workspaceId);
34
+ // Stamp the minting user onto the ticket for AUDIT only — verification stays
35
+ // membership-blind (see `authorizeWsUpgrade`). Absent in dev-open (no session).
36
+ const ticket = await mintWsTicket(cfg, workspaceId, c.get('user')?.id);
35
37
  // Auth disabled (dev) yields an empty ticket: the handshake is open, none needed.
36
38
  return c.json(ticket ? { ticket, expiresInMs: WS_TICKET_TTL_MS } : { ticket: '' });
37
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EventsController.js","sourceRoot":"","sources":["../../../src/modules/events/EventsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE3F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,iFAAiF;IACjF,kFAAkF;IAClF,6CAA6C;IAC7C,GAAG,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QACnD,kFAAkF;QAClF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;YAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;QACpD,CAAC;QAED,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAA;QAC9E,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEtD,0EAA0E;QAC1E,uEAAuE;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3F,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;QACrE,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"EventsController.js","sourceRoot":"","sources":["../../../src/modules/events/EventsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE3F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,iFAAiF;IACjF,kFAAkF;IAClF,6CAA6C;IAC7C,GAAG,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,6EAA6E;QAC7E,gFAAgF;QAChF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QACtE,kFAAkF;QAClF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;YAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;QACpD,CAAC;QAED,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAA;QAC9E,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEtD,0EAA0E;QAC1E,uEAAuE;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3F,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;QACrE,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PublicApiKeyController.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AA2B/C,kFAAkF;AAClF,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,CAoCrD"}
1
+ {"version":3,"file":"PublicApiKeyController.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AA4B/C,kFAAkF;AAClF,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,CA0CrD"}
@@ -17,6 +17,7 @@ function publicApiKeyToWire(record) {
17
17
  workspaceId: record.workspaceId,
18
18
  label: record.label,
19
19
  scope: record.scope,
20
+ createdByUserId: record.createdByUserId,
20
21
  createdAt: record.createdAt,
21
22
  lastUsedAt: record.lastUsedAt,
22
23
  revokedAt: record.revokedAt,
@@ -47,7 +48,9 @@ export function publicApiKeyController() {
47
48
  return c.json({ error: { code: 'not_found', message: 'Workspace not found' } }, 404);
48
49
  }
49
50
  const { label, scope } = c.req.valid('json');
50
- const { record, secret } = await publicApiKeys.issue({ accountId, workspaceId }, label, scope);
51
+ // Attribute the mint to the acting user (audit + UI); `null` in dev-open (no session).
52
+ const createdByUserId = c.get('user')?.id ?? null;
53
+ const { record, secret } = await publicApiKeys.issue({ accountId, workspaceId, createdByUserId }, label, scope);
51
54
  return c.json({ key: publicApiKeyToWire(record), secret }, 201);
52
55
  });
53
56
  buildHonoRoute(app, revokePublicApiKeyContract, async (c) => {
@@ -1 +1 @@
1
- {"version":3,"file":"PublicApiKeyController.js","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PublicApiKeyController.js","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyController.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/server",
3
- "version": "0.136.0",
3
+ "version": "0.137.1",
4
4
  "description": "Runtime-neutral HTTP layer for the Agent Architecture Board: the Hono controllers, middleware (auth/authz/CORS/error), request helpers and the gateway seams shared by every deployment facade (Cloudflare Worker, Node service).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,13 +31,13 @@
31
31
  "p-map": "^7.0.5",
32
32
  "pino": "^10.3.1",
33
33
  "valibot": "^1.4.2",
34
- "@cat-factory/agents": "0.62.8",
35
- "@cat-factory/contracts": "0.147.0",
36
- "@cat-factory/integrations": "0.86.0",
37
- "@cat-factory/kernel": "0.139.0",
38
- "@cat-factory/orchestration": "0.123.0",
39
- "@cat-factory/prompt-fragments": "0.13.36",
40
- "@cat-factory/spend": "0.12.49"
34
+ "@cat-factory/agents": "0.62.10",
35
+ "@cat-factory/contracts": "0.148.0",
36
+ "@cat-factory/integrations": "0.86.2",
37
+ "@cat-factory/kernel": "0.139.2",
38
+ "@cat-factory/orchestration": "0.123.2",
39
+ "@cat-factory/prompt-fragments": "0.13.38",
40
+ "@cat-factory/spend": "0.12.51"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^26.1.1",