@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.
- package/dist/auth/wsTicket.d.ts +11 -2
- package/dist/auth/wsTicket.d.ts.map +1 -1
- package/dist/auth/wsTicket.js +4 -2
- package/dist/auth/wsTicket.js.map +1 -1
- package/dist/modules/environments/EnvironmentUserHandlerController.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentUserHandlerController.js +41 -10
- package/dist/modules/environments/EnvironmentUserHandlerController.js.map +1 -1
- package/dist/modules/events/EventsController.d.ts.map +1 -1
- package/dist/modules/events/EventsController.js +3 -1
- package/dist/modules/events/EventsController.js.map +1 -1
- package/dist/modules/publicApi/PublicApiKeyController.d.ts.map +1 -1
- package/dist/modules/publicApi/PublicApiKeyController.js +4 -1
- package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
- package/package.json +8 -8
package/dist/auth/wsTicket.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/auth/wsTicket.js
CHANGED
|
@@ -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;
|
|
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":"
|
|
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
|
|
24
|
-
|
|
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":"AAAA,OAAO,EACL,mCAAmC,EACnC,mBAAmB,EACnB,oCAAoC,EACpC,oCAAoC,GACrC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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
|
-
|
|
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.
|
|
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.
|
|
35
|
-
"@cat-factory/contracts": "0.
|
|
36
|
-
"@cat-factory/integrations": "0.86.
|
|
37
|
-
"@cat-factory/kernel": "0.139.
|
|
38
|
-
"@cat-factory/orchestration": "0.123.
|
|
39
|
-
"@cat-factory/prompt-fragments": "0.13.
|
|
40
|
-
"@cat-factory/spend": "0.12.
|
|
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",
|