@apart-tech/intelligence-core 1.11.3 → 1.11.5

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 (88) hide show
  1. package/dist/auth/ability.d.ts +148 -0
  2. package/dist/auth/ability.d.ts.map +1 -0
  3. package/dist/auth/ability.js +285 -0
  4. package/dist/auth/ability.js.map +1 -0
  5. package/dist/auth/ability.test.d.ts +2 -0
  6. package/dist/auth/ability.test.d.ts.map +1 -0
  7. package/dist/auth/ability.test.js +680 -0
  8. package/dist/auth/ability.test.js.map +1 -0
  9. package/dist/auth/delegation-jwt.d.ts +167 -0
  10. package/dist/auth/delegation-jwt.d.ts.map +1 -0
  11. package/dist/auth/delegation-jwt.js +237 -0
  12. package/dist/auth/delegation-jwt.js.map +1 -0
  13. package/dist/auth/delegation-jwt.test.d.ts +2 -0
  14. package/dist/auth/delegation-jwt.test.d.ts.map +1 -0
  15. package/dist/auth/delegation-jwt.test.js +283 -0
  16. package/dist/auth/delegation-jwt.test.js.map +1 -0
  17. package/dist/auth/principal.d.ts +94 -0
  18. package/dist/auth/principal.d.ts.map +1 -0
  19. package/dist/auth/principal.js +33 -0
  20. package/dist/auth/principal.js.map +1 -0
  21. package/dist/config/config.test.d.ts +2 -0
  22. package/dist/config/config.test.d.ts.map +1 -0
  23. package/dist/config/config.test.js +57 -0
  24. package/dist/config/config.test.js.map +1 -0
  25. package/dist/config/index.d.ts.map +1 -1
  26. package/dist/config/index.js +17 -0
  27. package/dist/config/index.js.map +1 -1
  28. package/dist/index.d.ts +13 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +6 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/lib/__tests__/jwt.test.d.ts +2 -0
  33. package/dist/lib/__tests__/jwt.test.d.ts.map +1 -0
  34. package/dist/lib/__tests__/jwt.test.js +97 -0
  35. package/dist/lib/__tests__/jwt.test.js.map +1 -0
  36. package/dist/lib/jwt.d.ts +20 -0
  37. package/dist/lib/jwt.d.ts.map +1 -1
  38. package/dist/lib/jwt.js +56 -3
  39. package/dist/lib/jwt.js.map +1 -1
  40. package/dist/services/__tests__/delegation-cleanup-service.test.d.ts +2 -0
  41. package/dist/services/__tests__/delegation-cleanup-service.test.d.ts.map +1 -0
  42. package/dist/services/__tests__/delegation-cleanup-service.test.js +211 -0
  43. package/dist/services/__tests__/delegation-cleanup-service.test.js.map +1 -0
  44. package/dist/services/agent-run-service.d.ts +44 -7
  45. package/dist/services/agent-run-service.d.ts.map +1 -1
  46. package/dist/services/agent-run-service.js +14 -0
  47. package/dist/services/agent-run-service.js.map +1 -1
  48. package/dist/services/agent-schedule-service.d.ts +21 -0
  49. package/dist/services/agent-schedule-service.d.ts.map +1 -1
  50. package/dist/services/agent-schedule-service.js +12 -0
  51. package/dist/services/agent-schedule-service.js.map +1 -1
  52. package/dist/services/audit-event-service.d.ts +76 -0
  53. package/dist/services/audit-event-service.d.ts.map +1 -0
  54. package/dist/services/audit-event-service.js +48 -0
  55. package/dist/services/audit-event-service.js.map +1 -0
  56. package/dist/services/cleaning-service.d.ts.map +1 -1
  57. package/dist/services/cleaning-service.js +5 -1
  58. package/dist/services/cleaning-service.js.map +1 -1
  59. package/dist/services/delegation-cleanup-service.d.ts +133 -0
  60. package/dist/services/delegation-cleanup-service.d.ts.map +1 -0
  61. package/dist/services/delegation-cleanup-service.js +111 -0
  62. package/dist/services/delegation-cleanup-service.js.map +1 -0
  63. package/dist/services/edge-service.d.ts.map +1 -1
  64. package/dist/services/edge-service.js +3 -0
  65. package/dist/services/edge-service.js.map +1 -1
  66. package/dist/services/org-agent-type-service.d.ts +15 -0
  67. package/dist/services/org-agent-type-service.d.ts.map +1 -1
  68. package/dist/services/org-agent-type-service.js +2 -0
  69. package/dist/services/org-agent-type-service.js.map +1 -1
  70. package/dist/services/usage-service.d.ts +48 -0
  71. package/dist/services/usage-service.d.ts.map +1 -0
  72. package/dist/services/usage-service.js +116 -0
  73. package/dist/services/usage-service.js.map +1 -0
  74. package/dist/services/user-service.d.ts.map +1 -1
  75. package/dist/services/user-service.js +24 -6
  76. package/dist/services/user-service.js.map +1 -1
  77. package/dist/services/user-service.test.d.ts +2 -0
  78. package/dist/services/user-service.test.d.ts.map +1 -0
  79. package/dist/services/user-service.test.js +86 -0
  80. package/dist/services/user-service.test.js.map +1 -0
  81. package/dist/types/index.d.ts +13 -0
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/package.json +3 -2
  84. package/prisma/schema.prisma +158 -82
  85. package/dist/db/schema.d.ts +0 -507
  86. package/dist/db/schema.d.ts.map +0 -1
  87. package/dist/db/schema.js +0 -77
  88. package/dist/db/schema.js.map +0 -1
@@ -0,0 +1,283 @@
1
+ import { SignJWT } from "jose";
2
+ import { describe, expect, it } from "vitest";
3
+ import { DELEGATION_ALGORITHM, DELEGATION_ISSUER, DELEGATION_KEY_MIN_BYTES, DELEGATION_TTL_SECONDS, DelegationKeyLoadError, DelegationTokenError, loadDelegationKeyFromEnv, mintDelegationToken, peekIssuer, verifyDelegationToken, } from "./delegation-jwt.js";
4
+ // A fixed 32-byte key, re-used across round-trip tests. Using a fixed
5
+ // value rather than random() keeps vitest failures reproducible when
6
+ // the CI environment disagrees with local.
7
+ const KEY_A = new Uint8Array(32).fill(0x11);
8
+ const KEY_B = new Uint8Array(32).fill(0x22);
9
+ const SPAWN_ARGS = {
10
+ agentRunId: "run-abc-123",
11
+ userId: "user-xyz-789",
12
+ organizationId: "org-def-456",
13
+ };
14
+ // ── Constants are source-visible ───────────────────────────────────────────
15
+ describe("delegation-jwt constants", () => {
16
+ it("publishes the algorithm, TTL, issuer, and key size as module constants", () => {
17
+ // M6-style guardrail: the security bounds live in our source, not
18
+ // in a library default that a jose version bump could silently
19
+ // change. The values themselves are asserted so an accidental edit
20
+ // to the constants shows up as a failing test rather than a silent
21
+ // behavior change.
22
+ expect(DELEGATION_ALGORITHM).toBe("HS256");
23
+ expect(DELEGATION_TTL_SECONDS).toBe(15 * 60);
24
+ expect(DELEGATION_ISSUER).toBe("apart-intelligence");
25
+ expect(DELEGATION_KEY_MIN_BYTES).toBe(32);
26
+ });
27
+ });
28
+ // ── mint → verify round-trip ──────────────────────────────────────────────
29
+ describe("mintDelegationToken + verifyDelegationToken — round trip", () => {
30
+ it("mints a token and verifies back to the original claims", async () => {
31
+ const now = 1_800_000_000; // fixed — no wall-clock dependence
32
+ const token = await mintDelegationToken({ ...SPAWN_ARGS, nowSeconds: now }, KEY_A);
33
+ const payload = await verifyDelegationToken(token, KEY_A);
34
+ expect(payload.sub).toBe(SPAWN_ARGS.agentRunId);
35
+ expect(payload.behalfOf).toBe(SPAWN_ARGS.userId);
36
+ expect(payload.organizationId).toBe(SPAWN_ARGS.organizationId);
37
+ expect(payload.iat).toBe(now);
38
+ expect(payload.exp).toBe(now + DELEGATION_TTL_SECONDS);
39
+ });
40
+ it("respects a custom TTL", async () => {
41
+ const now = 1_800_000_000;
42
+ const token = await mintDelegationToken({ ...SPAWN_ARGS, nowSeconds: now, ttlSeconds: 42 }, KEY_A);
43
+ const payload = await verifyDelegationToken(token, KEY_A);
44
+ expect(payload.exp - payload.iat).toBe(42);
45
+ });
46
+ });
47
+ // ── Signature verification ────────────────────────────────────────────────
48
+ describe("verifyDelegationToken — signature checks", () => {
49
+ it("rejects a token signed with a different key as bad_signature", async () => {
50
+ const token = await mintDelegationToken(SPAWN_ARGS, KEY_A);
51
+ await expect(verifyDelegationToken(token, KEY_B)).rejects.toMatchObject({
52
+ name: "DelegationTokenError",
53
+ reason: "bad_signature",
54
+ });
55
+ });
56
+ it("rejects a tampered payload as bad_signature", async () => {
57
+ const token = await mintDelegationToken(SPAWN_ARGS, KEY_A);
58
+ // Flip a byte in the payload segment. The header and signature
59
+ // stay valid shape-wise, but the HMAC will not match.
60
+ const parts = token.split(".");
61
+ const payloadBytes = Buffer.from(parts[1], "base64url");
62
+ payloadBytes[0] = payloadBytes[0] ^ 0xff;
63
+ const tampered = [
64
+ parts[0],
65
+ payloadBytes.toString("base64url"),
66
+ parts[2],
67
+ ].join(".");
68
+ await expect(verifyDelegationToken(tampered, KEY_A)).rejects.toMatchObject({
69
+ reason: "bad_signature",
70
+ });
71
+ });
72
+ });
73
+ // ── Expiry ────────────────────────────────────────────────────────────────
74
+ describe("verifyDelegationToken — expiry", () => {
75
+ it("rejects a token whose exp is in the past as expired", async () => {
76
+ // Mint with nowSeconds set 1 hour in the past and TTL of 1 second;
77
+ // the token is stale by the time we verify.
78
+ const now = Math.floor(Date.now() / 1000) - 3600;
79
+ const token = await mintDelegationToken({ ...SPAWN_ARGS, nowSeconds: now, ttlSeconds: 1 }, KEY_A);
80
+ await expect(verifyDelegationToken(token, KEY_A)).rejects.toMatchObject({
81
+ name: "DelegationTokenError",
82
+ reason: "expired",
83
+ });
84
+ });
85
+ });
86
+ // ── Issuer routing ────────────────────────────────────────────────────────
87
+ describe("verifyDelegationToken — issuer", () => {
88
+ it("rejects a token whose iss is not apart-intelligence as wrong_issuer", async () => {
89
+ // Mint a token with a different issuer by constructing it
90
+ // directly with SignJWT — bypasses mintDelegationToken's hard-
91
+ // coded issuer so we can exercise the verify-side check.
92
+ const token = await new SignJWT({
93
+ behalfOf: SPAWN_ARGS.userId,
94
+ organizationId: SPAWN_ARGS.organizationId,
95
+ })
96
+ .setProtectedHeader({ alg: "HS256", typ: "JWT" })
97
+ .setIssuer("https://apart-next-dev.eu.auth0.com/")
98
+ .setSubject(SPAWN_ARGS.agentRunId)
99
+ .setIssuedAt()
100
+ .setExpirationTime("15m")
101
+ .sign(KEY_A);
102
+ await expect(verifyDelegationToken(token, KEY_A)).rejects.toMatchObject({
103
+ name: "DelegationTokenError",
104
+ reason: "wrong_issuer",
105
+ });
106
+ });
107
+ it("rejects a token with no iss at all as wrong_issuer", async () => {
108
+ const token = await new SignJWT({
109
+ behalfOf: SPAWN_ARGS.userId,
110
+ organizationId: SPAWN_ARGS.organizationId,
111
+ })
112
+ .setProtectedHeader({ alg: "HS256", typ: "JWT" })
113
+ .setSubject(SPAWN_ARGS.agentRunId)
114
+ .setIssuedAt()
115
+ .setExpirationTime("15m")
116
+ .sign(KEY_A);
117
+ await expect(verifyDelegationToken(token, KEY_A)).rejects.toMatchObject({
118
+ reason: "wrong_issuer",
119
+ });
120
+ });
121
+ });
122
+ // ── Malformed input ───────────────────────────────────────────────────────
123
+ describe("verifyDelegationToken — malformed input", () => {
124
+ it("rejects a non-JWT string as malformed", async () => {
125
+ await expect(verifyDelegationToken("this is not a jwt", KEY_A)).rejects.toMatchObject({
126
+ name: "DelegationTokenError",
127
+ reason: "malformed",
128
+ });
129
+ });
130
+ it("rejects a two-segment string as malformed", async () => {
131
+ await expect(verifyDelegationToken("a.b", KEY_A)).rejects.toMatchObject({
132
+ reason: "malformed",
133
+ });
134
+ });
135
+ it("rejects an empty string as malformed", async () => {
136
+ await expect(verifyDelegationToken("", KEY_A)).rejects.toMatchObject({
137
+ reason: "malformed",
138
+ });
139
+ });
140
+ });
141
+ // ── Missing claims ────────────────────────────────────────────────────────
142
+ describe("verifyDelegationToken — missing required claims", () => {
143
+ async function mintWithClaims(claims) {
144
+ return await new SignJWT(claims)
145
+ .setProtectedHeader({ alg: "HS256", typ: "JWT" })
146
+ .setIssuer(DELEGATION_ISSUER)
147
+ .setSubject("run-abc-123")
148
+ .setIssuedAt()
149
+ .setExpirationTime("15m")
150
+ .sign(KEY_A);
151
+ }
152
+ it("rejects when behalfOf is missing as missing_claim", async () => {
153
+ const token = await mintWithClaims({
154
+ organizationId: SPAWN_ARGS.organizationId,
155
+ });
156
+ await expect(verifyDelegationToken(token, KEY_A)).rejects.toMatchObject({
157
+ reason: "missing_claim",
158
+ detail: expect.stringContaining("behalfOf"),
159
+ });
160
+ });
161
+ it("rejects when organizationId is missing as missing_claim", async () => {
162
+ const token = await mintWithClaims({ behalfOf: SPAWN_ARGS.userId });
163
+ await expect(verifyDelegationToken(token, KEY_A)).rejects.toMatchObject({
164
+ reason: "missing_claim",
165
+ detail: expect.stringContaining("organizationId"),
166
+ });
167
+ });
168
+ it("rejects when sub is empty string as missing_claim", async () => {
169
+ // SignJWT requires setSubject() to be called with a non-empty
170
+ // string, but we can forge one by setting sub as a top-level
171
+ // claim and explicitly NOT calling setSubject. jose records the
172
+ // claim verbatim.
173
+ const token = await new SignJWT({
174
+ sub: "",
175
+ behalfOf: SPAWN_ARGS.userId,
176
+ organizationId: SPAWN_ARGS.organizationId,
177
+ })
178
+ .setProtectedHeader({ alg: "HS256", typ: "JWT" })
179
+ .setIssuer(DELEGATION_ISSUER)
180
+ .setIssuedAt()
181
+ .setExpirationTime("15m")
182
+ .sign(KEY_A);
183
+ await expect(verifyDelegationToken(token, KEY_A)).rejects.toMatchObject({
184
+ reason: "missing_claim",
185
+ detail: expect.stringContaining("sub"),
186
+ });
187
+ });
188
+ });
189
+ // ── peekIssuer ────────────────────────────────────────────────────────────
190
+ describe("peekIssuer", () => {
191
+ it("returns the issuer of a well-formed delegation token", async () => {
192
+ const token = await mintDelegationToken(SPAWN_ARGS, KEY_A);
193
+ expect(peekIssuer(token)).toBe(DELEGATION_ISSUER);
194
+ });
195
+ it("returns the issuer of a shape-compatible Auth0 token", async () => {
196
+ // Auth0 tokens are RS256 but peekIssuer doesn't care — it just
197
+ // parses the payload segment.
198
+ const token = await new SignJWT({})
199
+ .setProtectedHeader({ alg: "HS256", typ: "JWT" })
200
+ .setIssuer("https://apart-next-dev.eu.auth0.com/")
201
+ .setSubject("auth0|u-1")
202
+ .setIssuedAt()
203
+ .setExpirationTime("15m")
204
+ .sign(KEY_A);
205
+ expect(peekIssuer(token)).toBe("https://apart-next-dev.eu.auth0.com/");
206
+ });
207
+ it("returns null for a token with no iss claim", async () => {
208
+ const token = await new SignJWT({ foo: "bar" })
209
+ .setProtectedHeader({ alg: "HS256", typ: "JWT" })
210
+ .setSubject("x")
211
+ .setIssuedAt()
212
+ .setExpirationTime("15m")
213
+ .sign(KEY_A);
214
+ expect(peekIssuer(token)).toBeNull();
215
+ });
216
+ it("returns null for a non-JWT string", () => {
217
+ expect(peekIssuer("not-a-jwt")).toBeNull();
218
+ expect(peekIssuer("a.b")).toBeNull();
219
+ expect(peekIssuer("")).toBeNull();
220
+ });
221
+ it("returns null for a JWT whose payload segment is not valid JSON", () => {
222
+ // Three segments but middle one is garbage.
223
+ const garbage = Buffer.from("not json").toString("base64url");
224
+ const token = `aGVhZGVy.${garbage}.c2ln`;
225
+ expect(peekIssuer(token)).toBeNull();
226
+ });
227
+ });
228
+ // ── loadDelegationKeyFromEnv ──────────────────────────────────────────────
229
+ describe("loadDelegationKeyFromEnv", () => {
230
+ // Use explicit env records rather than mutating process.env so tests
231
+ // are hermetic. The production default (process.env) is covered by
232
+ // the one integration-style test below.
233
+ const validB64 = Buffer.from(new Uint8Array(32).fill(0x99)).toString("base64");
234
+ const shortB64 = Buffer.from(new Uint8Array(16).fill(0x99)).toString("base64");
235
+ it("decodes a valid 32-byte base64 key", () => {
236
+ const key = loadDelegationKeyFromEnv({
237
+ INTELLIGENCE_DELEGATION_JWT_KEY: validB64,
238
+ });
239
+ expect(key).toBeInstanceOf(Uint8Array);
240
+ expect(key.length).toBe(32);
241
+ expect(key[0]).toBe(0x99);
242
+ });
243
+ it("throws missing when the env var is absent", () => {
244
+ expect(() => loadDelegationKeyFromEnv({})).toThrow(DelegationKeyLoadError);
245
+ expect(() => loadDelegationKeyFromEnv({})).toThrow(/missing/);
246
+ });
247
+ it("throws missing when the env var is empty string", () => {
248
+ expect(() => loadDelegationKeyFromEnv({ INTELLIGENCE_DELEGATION_JWT_KEY: "" })).toThrow(/missing/);
249
+ });
250
+ it("throws too_short when the decoded key is under 32 bytes", () => {
251
+ expect(() => loadDelegationKeyFromEnv({ INTELLIGENCE_DELEGATION_JWT_KEY: shortB64 })).toThrow(DelegationKeyLoadError);
252
+ expect(() => loadDelegationKeyFromEnv({ INTELLIGENCE_DELEGATION_JWT_KEY: shortB64 })).toThrow(/too_short/);
253
+ });
254
+ it("treats gibberish that base64-decodes to < 32 bytes as too_short", () => {
255
+ // Buffer.from(..., "base64") silently drops invalid characters
256
+ // instead of throwing. A three-character string decodes to
257
+ // roughly 2 bytes — well under the minimum.
258
+ expect(() => loadDelegationKeyFromEnv({
259
+ INTELLIGENCE_DELEGATION_JWT_KEY: "abc",
260
+ })).toThrow(/too_short/);
261
+ });
262
+ it("mint+verify round-trips with a key loaded from env", async () => {
263
+ const key = loadDelegationKeyFromEnv({
264
+ INTELLIGENCE_DELEGATION_JWT_KEY: validB64,
265
+ });
266
+ const token = await mintDelegationToken(SPAWN_ARGS, key);
267
+ const payload = await verifyDelegationToken(token, key);
268
+ expect(payload.sub).toBe(SPAWN_ARGS.agentRunId);
269
+ });
270
+ });
271
+ // ── Classification of DelegationTokenError ───────────────────────────────
272
+ describe("DelegationTokenError shape", () => {
273
+ it("is an Error subclass with reason and detail fields", () => {
274
+ const err = new DelegationTokenError("expired", "exp was 123");
275
+ expect(err).toBeInstanceOf(Error);
276
+ expect(err.name).toBe("DelegationTokenError");
277
+ expect(err.reason).toBe("expired");
278
+ expect(err.detail).toBe("exp was 123");
279
+ expect(err.message).toContain("expired");
280
+ expect(err.message).toContain("exp was 123");
281
+ });
282
+ });
283
+ //# sourceMappingURL=delegation-jwt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-jwt.test.js","sourceRoot":"","sources":["../../src/auth/delegation-jwt.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * The authenticated subject of every request. One of three concrete shapes,
3
+ * resolved by the API's auth middleware from whichever credential the request
4
+ * presents (session token, Auth0 JWT, or API key).
5
+ *
6
+ * Used by `buildAbility(principal)` in `./ability.ts` to produce a CASL
7
+ * `AppAbility` which is then consulted via `principal.can(action, subject)`
8
+ * everywhere in the API service layer.
9
+ *
10
+ * This type is the stable contract between the auth middleware, the
11
+ * authorization layer, and the downstream handlers. Extending it — adding a
12
+ * new shape, adding a field — is a cross-cutting change; do not do it
13
+ * casually.
14
+ *
15
+ * Naming note: the principal shapes are named `UserPrincipal`, `OrgAgentPrincipal`,
16
+ * and `DelegatedAgentPrincipal` rather than `User`/`OrgAgent`/`DelegatedAgent`
17
+ * to avoid colliding with the Prisma-generated `User` model (the DB row) which
18
+ * is already exported from `@apart-tech/intelligence-core`. The discriminator
19
+ * strings (`"user"`, `"org_agent"`, `"delegated_agent"`) stay terse.
20
+ */
21
+ /** Role on `Membership` for a given organization. */
22
+ export type Role = "owner" | "admin" | "member" | "none";
23
+ /**
24
+ * A human user authenticated via Auth0. `organizationId` is null when the
25
+ * user has no memberships yet (pre-invite-acceptance) or has multiple
26
+ * memberships and has not selected one — those states are legal for a
27
+ * narrow set of routes (`/api/auth/me`, `/api/auth/claim`,
28
+ * `/api/invites/accept`).
29
+ */
30
+ export interface UserPrincipal {
31
+ type: "user";
32
+ id: string;
33
+ email: string;
34
+ organizationId: string | null;
35
+ role: Role;
36
+ }
37
+ /**
38
+ * An org-scoped non-human agent. Today constructed either from a real row
39
+ * in the (future Phase 1c) `OrgAgentType` table via `auth0ClientId`, or
40
+ * synthetically from a legacy API key (`legacyApiKey = true`) whose ability
41
+ * matches current full-org-access behavior. Phase 1c tightens the latter by
42
+ * binding keys to real rows with `intrinsicPolicy` and `toolCatalogue`.
43
+ */
44
+ export interface OrgAgentPrincipal {
45
+ type: "org_agent";
46
+ /**
47
+ * Row id in `OrgAgentType` once bound, or a synthetic id of the form
48
+ * `legacy-api-key:<apiKeyId>` while `legacyApiKey` is true.
49
+ */
50
+ id: string;
51
+ organizationId: string;
52
+ name: string;
53
+ /**
54
+ * True when this principal was constructed from a pre-Phase-1c API key
55
+ * binding. `buildAbility` grants a "full org access" ability for these.
56
+ * Phase 1c replaces this shortcut with a real agent binding.
57
+ */
58
+ legacyApiKey?: boolean;
59
+ }
60
+ /**
61
+ * An agent acting on behalf of a user within the scope of a specific
62
+ * `AgentRun`. Under Option B' (see `docs/superpowers/specs/2026-04-14-staging-cicd-environments.md`),
63
+ * the API resolves this principal by decoding an in-process delegation token,
64
+ * looking up the `AgentRun`, and rehydrating a CASL ability from
65
+ * `AgentRun.capturedAbility` — a snapshot of `intersect(user.ability, agent.intrinsicPolicy)`
66
+ * computed at spawn time.
67
+ *
68
+ * Phase 1b defines the type and the rehydration path. Phase 1d wires the
69
+ * actual delegation token format and the spawn-time intersection. Phase 1c
70
+ * adds the `AgentRun.captured_ability` column that persists the snapshot.
71
+ */
72
+ export interface DelegatedAgentPrincipal {
73
+ type: "delegated_agent";
74
+ /** Row id of the `AgentRun` carrying this delegation. */
75
+ agentRunId: string;
76
+ /** The user the agent is acting for. */
77
+ behalfOfUserId: string;
78
+ organizationId: string;
79
+ /**
80
+ * CASL `RawRule[]` serialized from the spawn-time intersection. Typed as
81
+ * `unknown` here to avoid pulling CASL types into the Principal module;
82
+ * `buildAbility(delegatedAgent)` in `./ability.ts` narrows it.
83
+ */
84
+ capturedAbility: unknown;
85
+ }
86
+ /** Discriminated union of every principal shape the API knows how to build. */
87
+ export type Principal = UserPrincipal | OrgAgentPrincipal | DelegatedAgentPrincipal;
88
+ /** Narrow a `Principal` to `UserPrincipal`. */
89
+ export declare function isUserPrincipal(p: Principal): p is UserPrincipal;
90
+ /** Narrow a `Principal` to `OrgAgentPrincipal`. */
91
+ export declare function isOrgAgentPrincipal(p: Principal): p is OrgAgentPrincipal;
92
+ /** Narrow a `Principal` to `DelegatedAgentPrincipal`. */
93
+ export declare function isDelegatedAgentPrincipal(p: Principal): p is DelegatedAgentPrincipal;
94
+ //# sourceMappingURL=principal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principal.d.ts","sourceRoot":"","sources":["../../src/auth/principal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qDAAqD;AACrD,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,+EAA+E;AAC/E,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;AAEpF,+CAA+C;AAC/C,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,IAAI,aAAa,CAEhE;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,IAAI,iBAAiB,CAExE;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,IAAI,uBAAuB,CAEpF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The authenticated subject of every request. One of three concrete shapes,
3
+ * resolved by the API's auth middleware from whichever credential the request
4
+ * presents (session token, Auth0 JWT, or API key).
5
+ *
6
+ * Used by `buildAbility(principal)` in `./ability.ts` to produce a CASL
7
+ * `AppAbility` which is then consulted via `principal.can(action, subject)`
8
+ * everywhere in the API service layer.
9
+ *
10
+ * This type is the stable contract between the auth middleware, the
11
+ * authorization layer, and the downstream handlers. Extending it — adding a
12
+ * new shape, adding a field — is a cross-cutting change; do not do it
13
+ * casually.
14
+ *
15
+ * Naming note: the principal shapes are named `UserPrincipal`, `OrgAgentPrincipal`,
16
+ * and `DelegatedAgentPrincipal` rather than `User`/`OrgAgent`/`DelegatedAgent`
17
+ * to avoid colliding with the Prisma-generated `User` model (the DB row) which
18
+ * is already exported from `@apart-tech/intelligence-core`. The discriminator
19
+ * strings (`"user"`, `"org_agent"`, `"delegated_agent"`) stay terse.
20
+ */
21
+ /** Narrow a `Principal` to `UserPrincipal`. */
22
+ export function isUserPrincipal(p) {
23
+ return p.type === "user";
24
+ }
25
+ /** Narrow a `Principal` to `OrgAgentPrincipal`. */
26
+ export function isOrgAgentPrincipal(p) {
27
+ return p.type === "org_agent";
28
+ }
29
+ /** Narrow a `Principal` to `DelegatedAgentPrincipal`. */
30
+ export function isDelegatedAgentPrincipal(p) {
31
+ return p.type === "delegated_agent";
32
+ }
33
+ //# sourceMappingURL=principal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principal.js","sourceRoot":"","sources":["../../src/auth/principal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA0EH,+CAA+C;AAC/C,MAAM,UAAU,eAAe,CAAC,CAAY;IAC1C,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAC3B,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,mBAAmB,CAAC,CAAY;IAC9C,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;AAChC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,yBAAyB,CAAC,CAAY;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACtC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/config/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { loadConfig } from "./index.js";
3
+ // The config module reads `process.env` directly. Each test restores the
4
+ // relevant vars to whatever they were before the test started so tests
5
+ // remain order-independent.
6
+ const ENV_KEYS = ["ENVIRONMENT"];
7
+ describe("loadConfig — environment (Phase 2)", () => {
8
+ const originalEnv = {};
9
+ beforeEach(() => {
10
+ for (const key of ENV_KEYS) {
11
+ originalEnv[key] = process.env[key];
12
+ delete process.env[key];
13
+ }
14
+ });
15
+ afterEach(() => {
16
+ for (const key of ENV_KEYS) {
17
+ if (originalEnv[key] === undefined) {
18
+ delete process.env[key];
19
+ }
20
+ else {
21
+ process.env[key] = originalEnv[key];
22
+ }
23
+ }
24
+ vi.restoreAllMocks();
25
+ });
26
+ it("defaults environment to 'local' when ENVIRONMENT is unset", () => {
27
+ const config = loadConfig();
28
+ expect(config.environment).toBe("local");
29
+ });
30
+ it("defaults environment to 'local' when ENVIRONMENT is the empty string", () => {
31
+ process.env.ENVIRONMENT = "";
32
+ const config = loadConfig();
33
+ expect(config.environment).toBe("local");
34
+ });
35
+ it.each(["local", "dev", "staging", "prod"])("respects ENVIRONMENT=%s", (value) => {
36
+ process.env.ENVIRONMENT = value;
37
+ const config = loadConfig();
38
+ expect(config.environment).toBe(value);
39
+ });
40
+ it("falls back to 'local' with a warn on an invalid ENVIRONMENT value", () => {
41
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
42
+ process.env.ENVIRONMENT = "production"; // common mistake — not in the union
43
+ const config = loadConfig();
44
+ expect(config.environment).toBe("local");
45
+ expect(warnSpy).toHaveBeenCalledTimes(1);
46
+ expect(warnSpy.mock.calls[0]?.[0]).toContain('ENVIRONMENT="production"');
47
+ });
48
+ it("does not warn on the valid values", () => {
49
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
50
+ for (const value of ["local", "dev", "staging", "prod"]) {
51
+ process.env.ENVIRONMENT = value;
52
+ loadConfig();
53
+ }
54
+ expect(warnSpy).not.toHaveBeenCalled();
55
+ });
56
+ });
57
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/config/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,yEAAyE;AACzE,uEAAuE;AACvE,4BAA4B;AAC5B,MAAM,QAAQ,GAAG,CAAC,aAAa,CAAU,CAAC;AAE1C,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,MAAM,WAAW,GAAuC,EAAE,CAAC;IAE3D,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC,CACnD,yBAAyB,EACzB,CAAC,KAAK,EAAE,EAAE;QACR,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC,CACF,CAAC;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,oCAAoC;QAC5E,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAU,EAAE,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;YAChC,UAAU,EAAE,CAAC;QACf,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0DrD,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAyEpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AA6ElE,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CA0EpD"}
@@ -1,7 +1,23 @@
1
1
  import { readFileSync, existsSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { parse as parseYaml } from "yaml";
4
+ const VALID_ENVIRONMENTS = [
5
+ "local",
6
+ "dev",
7
+ "staging",
8
+ "prod",
9
+ ];
10
+ function parseEnvironment(raw) {
11
+ if (raw === undefined || raw === "")
12
+ return "local";
13
+ if (VALID_ENVIRONMENTS.includes(raw)) {
14
+ return raw;
15
+ }
16
+ console.warn(`[apart-intelligence/config] ENVIRONMENT="${raw}" is not one of ${VALID_ENVIRONMENTS.join(", ")} — falling back to "local"`);
17
+ return "local";
18
+ }
4
19
  const DEFAULT_CONFIG = {
20
+ environment: "local",
5
21
  database: {
6
22
  url: "postgresql://localhost:5432/apart",
7
23
  },
@@ -71,6 +87,7 @@ export function loadConfig(cwd) {
71
87
  }
72
88
  }
73
89
  // Apply env overrides (always, even when YAML config exists)
90
+ config.environment = parseEnvironment(process.env.ENVIRONMENT);
74
91
  if (process.env.APART_DATABASE_URL) {
75
92
  config.database = { ...config.database, url: process.env.APART_DATABASE_URL };
76
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,12 @@ export { encryptAesGcm, decryptAesGcm, deriveKey, deriveKeyV2 } from "./lib/cryp
7
7
  export { getAgentKeySecret, getPiiKeySecret, getEmbeddingKeySecret } from "./lib/encryption-keys.js";
8
8
  export { verifyAuth0Jwt } from "./lib/jwt.js";
9
9
  export type { Auth0Config, Auth0JwtPayload } from "./lib/jwt.js";
10
+ export type { Role, UserPrincipal, OrgAgentPrincipal, DelegatedAgentPrincipal, Principal, } from "./auth/principal.js";
11
+ export { isUserPrincipal, isOrgAgentPrincipal, isDelegatedAgentPrincipal, } from "./auth/principal.js";
12
+ export type { AppAction, AppSubject, AppAbility, AppRawRule } from "./auth/ability.js";
13
+ export { buildAbility, intersect, UnsupportedIntersectionError, } from "./auth/ability.js";
14
+ export type { DelegationTokenPayload, MintDelegationTokenArgs, DelegationTokenErrorReason, DelegationKeyLoadErrorReason, } from "./auth/delegation-jwt.js";
15
+ export { DELEGATION_ALGORITHM, DELEGATION_ISSUER, DELEGATION_KEY_MIN_BYTES, DELEGATION_TTL_SECONDS, DelegationKeyLoadError, DelegationTokenError, loadDelegationKeyFromEnv, mintDelegationToken, peekIssuer, verifyDelegationToken, } from "./auth/delegation-jwt.js";
10
16
  export * from "./types/index.js";
11
17
  export { loadConfig } from "./config/index.js";
12
18
  export { NodeService } from "./services/node-service.js";
@@ -32,7 +38,11 @@ export type { OrgAgentTypeRecord, CreateOrgAgentTypeInput, UpdateOrgAgentTypeInp
32
38
  export { OrgMcpServerService } from "./services/org-mcp-server-service.js";
33
39
  export type { OrgMcpServerRecord, McpServerConfig, CreateOrgMcpServerInput, UpdateOrgMcpServerInput } from "./services/org-mcp-server-service.js";
34
40
  export { AgentRunService } from "./services/agent-run-service.js";
35
- export type { AgentRun } from "./services/agent-run-service.js";
41
+ export type { AgentRun, AgentRunCreateInput } from "./services/agent-run-service.js";
42
+ export { AuditEventService } from "./services/audit-event-service.js";
43
+ export type { AuditAction, AuditResult, RecordAuditEventInput, } from "./services/audit-event-service.js";
44
+ export { cancelOrphanedAgentRuns } from "./services/delegation-cleanup-service.js";
45
+ export type { DelegationCleanupDb, CancelOrphanedAgentRunsResult, } from "./services/delegation-cleanup-service.js";
36
46
  export { AgentScheduleService } from "./services/agent-schedule-service.js";
37
47
  export type { AgentScheduleRecord, CreateAgentScheduleInput, UpdateAgentScheduleInput } from "./services/agent-schedule-service.js";
38
48
  export { CLI_REFERENCE } from "./services/agent-cli-reference.js";
@@ -43,6 +53,8 @@ export { MembershipService } from "./services/membership-service.js";
43
53
  export type { MembershipWithUser } from "./services/membership-service.js";
44
54
  export { InviteService } from "./services/invite-service.js";
45
55
  export type { Invite } from "./services/invite-service.js";
56
+ export { UsageService } from "./services/usage-service.js";
57
+ export type { UsageSnapshot, PlanLimits } from "./services/usage-service.js";
46
58
  export { createEmbeddingProvider, validateEmbeddingKey, OpenAIEmbeddingProvider, VoyageEmbeddingProvider, OllamaEmbeddingProvider } from "./providers/index.js";
47
59
  export type { CreateEmbeddingProviderOptions } from "./providers/index.js";
48
60
  export { BatchingEmbeddingProvider } from "./providers/batching.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}