@synoikia/core 0.7.0 → 0.8.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.
Files changed (95) hide show
  1. package/dist/app.d.ts +2 -0
  2. package/dist/app.js +3 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/approvals/grants.d.ts +6 -0
  5. package/dist/approvals/grants.js +13 -0
  6. package/dist/approvals/grants.js.map +1 -1
  7. package/dist/approvals/service.d.ts +86 -0
  8. package/dist/approvals/service.js +18 -1
  9. package/dist/approvals/service.js.map +1 -1
  10. package/dist/auth/mcp-auth.d.ts +12 -0
  11. package/dist/auth/mcp-auth.js +83 -33
  12. package/dist/auth/mcp-auth.js.map +1 -1
  13. package/dist/auth/mcp-tokens.d.ts +27 -3
  14. package/dist/auth/mcp-tokens.js +32 -5
  15. package/dist/auth/mcp-tokens.js.map +1 -1
  16. package/dist/auth/oauth.d.ts +7 -1
  17. package/dist/auth/oauth.js +18 -1
  18. package/dist/auth/oauth.js.map +1 -1
  19. package/dist/auth/oidc.js +3 -2
  20. package/dist/auth/oidc.js.map +1 -1
  21. package/dist/auth/roles.d.ts +53 -0
  22. package/dist/auth/roles.js +177 -0
  23. package/dist/auth/roles.js.map +1 -0
  24. package/dist/auth/sessions.d.ts +8 -0
  25. package/dist/auth/sessions.js +33 -0
  26. package/dist/auth/sessions.js.map +1 -1
  27. package/dist/auth/users.d.ts +47 -2
  28. package/dist/auth/users.js +168 -15
  29. package/dist/auth/users.js.map +1 -1
  30. package/dist/catalog/groups.d.ts +62 -2
  31. package/dist/catalog/groups.js +60 -3
  32. package/dist/catalog/groups.js.map +1 -1
  33. package/dist/catalog/role-levels.d.ts +67 -0
  34. package/dist/catalog/role-levels.js +291 -0
  35. package/dist/catalog/role-levels.js.map +1 -0
  36. package/dist/catalog/rules.d.ts +137 -9
  37. package/dist/catalog/rules.js +97 -25
  38. package/dist/catalog/rules.js.map +1 -1
  39. package/dist/db/schema.d.ts +566 -0
  40. package/dist/db/schema.js +64 -0
  41. package/dist/db/schema.js.map +1 -1
  42. package/dist/errors.d.ts +5 -2
  43. package/dist/errors.js +5 -0
  44. package/dist/errors.js.map +1 -1
  45. package/dist/gate/access.d.ts +23 -2
  46. package/dist/gate/access.js +31 -3
  47. package/dist/gate/access.js.map +1 -1
  48. package/dist/gate/pipeline.js +10 -1
  49. package/dist/gate/pipeline.js.map +1 -1
  50. package/dist/gate/preapproval.d.ts +2 -0
  51. package/dist/gate/preapproval.js +16 -3
  52. package/dist/gate/preapproval.js.map +1 -1
  53. package/dist/http/admin/auth.d.ts +4 -7
  54. package/dist/http/admin/auth.js +41 -47
  55. package/dist/http/admin/auth.js.map +1 -1
  56. package/dist/http/admin/instances.js +5 -64
  57. package/dist/http/admin/instances.js.map +1 -1
  58. package/dist/http/admin/me.d.ts +6 -0
  59. package/dist/http/admin/me.js +105 -0
  60. package/dist/http/admin/me.js.map +1 -0
  61. package/dist/http/admin/roles.d.ts +5 -0
  62. package/dist/http/admin/roles.js +39 -0
  63. package/dist/http/admin/roles.js.map +1 -0
  64. package/dist/http/admin/system.js +16 -41
  65. package/dist/http/admin/system.js.map +1 -1
  66. package/dist/http/admin-app.js +14 -3
  67. package/dist/http/admin-app.js.map +1 -1
  68. package/dist/http/common.d.ts +3 -2
  69. package/dist/http/common.js +7 -2
  70. package/dist/http/common.js.map +1 -1
  71. package/dist/http/mcp/approval-routes.js +11 -30
  72. package/dist/http/mcp/approval-routes.js.map +1 -1
  73. package/dist/http/mcp/endpoint.js +3 -3
  74. package/dist/http/mcp/endpoint.js.map +1 -1
  75. package/dist/http/mcp/oauth-routes.d.ts +2 -3
  76. package/dist/http/mcp/oauth-routes.js +18 -47
  77. package/dist/http/mcp/oauth-routes.js.map +1 -1
  78. package/dist/http/mcp-app.js +1 -1
  79. package/dist/http/mcp-app.js.map +1 -1
  80. package/dist/instances/manager.d.ts +36 -0
  81. package/dist/instances/manager.js +55 -6
  82. package/dist/instances/manager.js.map +1 -1
  83. package/dist/runtime/index.js +20 -8
  84. package/dist/runtime/index.js.map +1 -1
  85. package/dist/settings.d.ts +2 -0
  86. package/dist/settings.js +4 -0
  87. package/dist/settings.js.map +1 -1
  88. package/dist/testing/index.js +2 -1
  89. package/dist/testing/index.js.map +1 -1
  90. package/drizzle/0013_user_roles.sql +63 -0
  91. package/drizzle/0014_user_registration_source.sql +1 -0
  92. package/drizzle/meta/0013_snapshot.json +2833 -0
  93. package/drizzle/meta/0014_snapshot.json +2840 -0
  94. package/drizzle/meta/_journal.json +14 -0
  95. package/package.json +3 -3
@@ -3,7 +3,8 @@ import { and, asc, eq, inArray } from 'drizzle-orm';
3
3
  import { writeAudit } from '../audit.js';
4
4
  import { operationGroupAliases, operationGroups, operations, pluginInstances } from '../db/schema.js';
5
5
  import { ConflictError, NotFoundError, ValidationError } from '../errors.js';
6
- import { ACCESS_LEVELS, FULL_ACCESS, allowedLevels, effectiveAccess, isAccessLevel, minLevel } from '../gate/access.js';
6
+ import { ACCESS_LEVELS, FULL_ACCESS, allowedLevels, effectiveAccess, isAccessLevel, levelInForce, minLevel, } from '../gate/access.js';
7
+ import { loadCaps } from './role-levels.js';
7
8
  function assertLevel(level) {
8
9
  if (!isAccessLevel(level)) {
9
10
  throw new ValidationError('invalid_level', `Level must be one of ${ACCESS_LEVELS.join(', ')}`);
@@ -15,6 +16,13 @@ export const accessInput = (op) => ({
15
16
  levelOverride: op.levelOverride,
16
17
  writeAcknowledged: op.writeAcknowledged,
17
18
  });
19
+ /** What the upstream API says the operation does, when it says. */
20
+ export const describeOf = (op) => {
21
+ const docs = op.docs;
22
+ if (typeof docs?.summary === 'string')
23
+ return docs.summary;
24
+ return typeof docs?.description === 'string' ? docs.description : null;
25
+ };
18
26
  const isPlainWrite = (op) => !op.stale && !op.locked && op.classification === 'write';
19
27
  /** The plain writes in a group that run without asking at `write` (raising to `write` acknowledges them). */
20
28
  const runsAtGroupWrite = isPlainWrite;
@@ -81,6 +89,46 @@ export function listGroups(db, instanceId) {
81
89
  };
82
90
  });
83
91
  }
92
+ /** An endpoint's operations with their group, level in force and reachability. */
93
+ export function listOperations(db, instanceId, filter = {}) {
94
+ const groups = new Map(db
95
+ .select()
96
+ .from(operationGroups)
97
+ .where(eq(operationGroups.instanceId, instanceId))
98
+ .all()
99
+ .map((g) => [g.id, g]));
100
+ const conditions = [eq(operations.instanceId, instanceId)];
101
+ if (filter.stale !== '1')
102
+ conditions.push(eq(operations.stale, false));
103
+ const text = filter.q?.toLowerCase();
104
+ return db
105
+ .select()
106
+ .from(operations)
107
+ .where(and(...conditions))
108
+ .orderBy(asc(operations.key))
109
+ .all()
110
+ .map((op) => {
111
+ const group = groups.get(op.groupId);
112
+ const access = effectiveAccess(accessInput(op), group);
113
+ return {
114
+ ...op,
115
+ group: group?.key ?? null,
116
+ level: levelInForce(accessInput(op), group),
117
+ allowedLevels: allowedLevels(op),
118
+ description: describeOf(op),
119
+ reachable: access.reachable,
120
+ mode: access.reachable ? access.mode : null,
121
+ pendingReview: access.reachable && access.pendingReview === true,
122
+ reason: access.reachable ? null : access.reason,
123
+ };
124
+ })
125
+ .filter((op) => (!filter.group || op.group === filter.group) && (!filter.reason || op.reason === filter.reason))
126
+ .filter((op) => (filter.needsReview === '1' ? op.needsReview || op.pendingReview : true))
127
+ .filter((op) => !text ||
128
+ op.key.toLowerCase().includes(text) ||
129
+ (op.displayName ?? '').toLowerCase().includes(text) ||
130
+ (op.description ?? '').toLowerCase().includes(text));
131
+ }
84
132
  /** Access decision for one operation key; unknown or stale operations are unreachable. */
85
133
  export function resolveAccess(db, instanceId, key, principal = FULL_ACCESS) {
86
134
  const op = db
@@ -91,7 +139,7 @@ export function resolveAccess(db, instanceId, key, principal = FULL_ACCESS) {
91
139
  if (!op || op.stale)
92
140
  return { reachable: false, reason: 'unknown_operation' };
93
141
  const group = db.select().from(operationGroups).where(eq(operationGroups.id, op.groupId)).get();
94
- return effectiveAccess(accessInput(op), group, principal);
142
+ return effectiveAccess(accessInput(op), group, principal, loadCaps(db, instanceId, principal)?.(op));
95
143
  }
96
144
  // ── group level ──────────────────────────────────────────────────────────────────────────────────
97
145
  /** Sets a group's level and resets its operations to follow it; raising to `write` acknowledges the
@@ -165,6 +213,14 @@ export function applyBulkLevel(db, instanceId, level, opts = {}) {
165
213
  return groups.map((g) => ({ key: g.key, label: g.label, from: g.level }));
166
214
  });
167
215
  }
216
+ /** Renames, then sets the level of, one group; each change is its own audited write. */
217
+ export function updateGroup(db, instanceId, key, patch, opts = {}) {
218
+ if (patch.label !== undefined)
219
+ renameGroup(db, instanceId, key, patch.label, opts);
220
+ if (patch.level !== undefined)
221
+ setGroupLevel(db, instanceId, key, patch.level, opts);
222
+ return listGroups(db, instanceId).find((g) => g.key === key) ?? null;
223
+ }
168
224
  // ── regrouping ───────────────────────────────────────────────────────────────────────────────────
169
225
  export function renameGroup(db, instanceId, key, label, opts = {}) {
170
226
  const trimmed = label.trim();
@@ -260,7 +316,7 @@ export function mergeGroups(db, instanceId, input, opts = {}) {
260
316
  return listGroups(db, instanceId).find((g) => g.key === into);
261
317
  }
262
318
  /** Per-operation level and acknowledgement. The level must fit the operation's kind; locked refuses
263
- * `write` (409). Setting a write to `write` acknowledges it. */
319
+ * `write` (409). Setting a write to `write` acknowledges it. Returns the operation as stored. */
264
320
  export function updateOperation(db, instanceId, opId, patch, opts = {}) {
265
321
  const now = opts.now ?? new Date();
266
322
  const actor = opts.actor ?? {};
@@ -318,5 +374,6 @@ export function updateOperation(db, instanceId, opId, patch, opts = {}) {
318
374
  },
319
375
  }, now);
320
376
  });
377
+ return db.select().from(operations).where(eq(operations.id, opId)).get();
321
378
  }
322
379
  //# sourceMappingURL=groups.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/catalog/groups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/catalog/groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { Db, DbLike } from '../db/index.js';
2
+ import { operations } from '../db/schema.js';
3
+ import type { AccessCaps, AccessLevel, AccessPrincipal } from '../gate/access.js';
4
+ import type { Actor } from './groups.js';
5
+ type OperationRow = typeof operations.$inferSelect;
6
+ export type LevelTarget = {
7
+ group: string;
8
+ } | {
9
+ operationId: string;
10
+ };
11
+ export declare function roleInstanceIds(db: DbLike, roleId: string): string[];
12
+ export declare function roleHasInstance(db: DbLike, roleId: string, instanceId: string): boolean;
13
+ /** The caps a principal's role and own levels put on one endpoint's operations; undefined for admins. */
14
+ export declare function loadCaps(db: DbLike, instanceId: string, principal: AccessPrincipal): ((op: Pick<OperationRow, 'id' | 'groupId'>) => AccessCaps) | undefined;
15
+ export interface LevelView {
16
+ groups: {
17
+ key: string;
18
+ label: string;
19
+ /** The endpoint's level for the group (the Admin role's). */
20
+ endpointLevel: AccessLevel;
21
+ roleLevel: AccessLevel | null;
22
+ ownLevel: AccessLevel | null;
23
+ }[];
24
+ operations: {
25
+ id: string;
26
+ key: string;
27
+ displayName: string | null;
28
+ description: string | null;
29
+ group: string | null;
30
+ classification: 'read' | 'write' | 'locked';
31
+ matchProfile: string | null;
32
+ allowedLevels: AccessLevel[];
33
+ endpointLevel: AccessLevel;
34
+ /** The role's entry for this operation; null follows the role's group level. */
35
+ roleLevel: AccessLevel | null;
36
+ /** What the role allows here at most: the endpoint's level capped by the role's. */
37
+ roleMax: AccessLevel;
38
+ ownLevel: AccessLevel | null;
39
+ level: AccessLevel;
40
+ reachable: boolean;
41
+ mode: 'run' | 'approve' | 'auto' | null;
42
+ reason: string | null;
43
+ }[];
44
+ }
45
+ /** The levels one role (and, with `userId`, one user) has on an endpoint. `reachableOnly` leaves out
46
+ * what the user can't call: a non-admin sees only that. */
47
+ export declare function levelView(db: DbLike, instanceId: string, who: {
48
+ roleId: string;
49
+ userId?: string;
50
+ }, opts?: {
51
+ reachableOnly?: boolean;
52
+ }): LevelView;
53
+ /** Sets (or, with null, clears) a role's maximum for a group or an operation. A group level resets the
54
+ * role's entries for that group's operations, as the endpoint's group level does. */
55
+ export declare function setRoleLevel(db: Db, roleId: string, instanceId: string, target: LevelTarget, level: string | null, opts?: {
56
+ actor?: Actor;
57
+ now?: Date;
58
+ }): void;
59
+ /** Sets every group of the endpoint to one maximum for the role and clears its operation entries. */
60
+ export declare function setRoleBulkLevel(db: Db, roleId: string, instanceId: string, level: string, opts?: {
61
+ actor?: Actor;
62
+ now?: Date;
63
+ }): void;
64
+ /** A user's own level (design §6.4): only with the role's switch, on the role's endpoints, and never
65
+ * above the role's maximum. */
66
+ export declare function setOwnLevel(db: Db, userId: string, instanceId: string, target: LevelTarget, level: string | null, now?: Date): void;
67
+ export {};
@@ -0,0 +1,291 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { and, asc, eq, inArray } from 'drizzle-orm';
3
+ import { writeAudit } from '../audit.js';
4
+ import { operationGroups, operations, roleInstances, roleLevels, roles, userLevels, users } from '../db/schema.js';
5
+ import { ConflictError, NotFoundError, ValidationError } from '../errors.js';
6
+ import { ACCESS_LEVELS, ADMIN_ROLE_ID, allowedLevels, capLevel, effectiveAccess, isAccessLevel, levelInForce, normalizeLevel, tighterLevel, } from '../gate/access.js';
7
+ import { accessInput, describeOf } from './groups.js';
8
+ const toLayers = (rows) => ({
9
+ byGroup: new Map(rows.filter((r) => r.groupId).map((r) => [r.groupId, r.level])),
10
+ byOp: new Map(rows.filter((r) => r.operationId).map((r) => [r.operationId, r.level])),
11
+ });
12
+ const layerFor = (layers, op) => ({
13
+ group: layers.byGroup.get(op.groupId) ?? null,
14
+ op: layers.byOp.get(op.id) ?? null,
15
+ });
16
+ export function roleInstanceIds(db, roleId) {
17
+ return db
18
+ .select({ id: roleInstances.instanceId })
19
+ .from(roleInstances)
20
+ .where(eq(roleInstances.roleId, roleId))
21
+ .all()
22
+ .map((r) => r.id);
23
+ }
24
+ export function roleHasInstance(db, roleId, instanceId) {
25
+ if (roleId === ADMIN_ROLE_ID)
26
+ return true;
27
+ return !!db
28
+ .select({ id: roleInstances.instanceId })
29
+ .from(roleInstances)
30
+ .where(and(eq(roleInstances.roleId, roleId), eq(roleInstances.instanceId, instanceId)))
31
+ .get();
32
+ }
33
+ /** The caps a principal's role and own levels put on one endpoint's operations; undefined for admins. */
34
+ export function loadCaps(db, instanceId, principal) {
35
+ if (principal.roleId === ADMIN_ROLE_ID)
36
+ return undefined;
37
+ const role = db.select().from(roles).where(eq(roles.id, principal.roleId)).get();
38
+ if (!role || !roleHasInstance(db, role.id, instanceId))
39
+ return () => ({ role: null });
40
+ const roleRows = toLayers(db
41
+ .select()
42
+ .from(roleLevels)
43
+ .where(and(eq(roleLevels.roleId, role.id), eq(roleLevels.instanceId, instanceId)))
44
+ .all());
45
+ const ownRows = role.canSetOwnLevels && principal.userId
46
+ ? toLayers(db
47
+ .select()
48
+ .from(userLevels)
49
+ .where(and(eq(userLevels.userId, principal.userId), eq(userLevels.instanceId, instanceId)))
50
+ .all())
51
+ : undefined;
52
+ return (op) => ({ role: layerFor(roleRows, op), own: ownRows && layerFor(ownRows, op) });
53
+ }
54
+ /** The levels one role (and, with `userId`, one user) has on an endpoint. `reachableOnly` leaves out
55
+ * what the user can't call: a non-admin sees only that. */
56
+ export function levelView(db, instanceId, who, opts = {}) {
57
+ const groups = db
58
+ .select()
59
+ .from(operationGroups)
60
+ .where(and(eq(operationGroups.instanceId, instanceId), eq(operationGroups.stale, false)))
61
+ .orderBy(asc(operationGroups.key))
62
+ .all();
63
+ const groupById = new Map(groups.map((g) => [g.id, g]));
64
+ const ops = db
65
+ .select()
66
+ .from(operations)
67
+ .where(and(eq(operations.instanceId, instanceId), eq(operations.stale, false)))
68
+ .orderBy(asc(operations.key))
69
+ .all();
70
+ const principal = { ceiling: 'write', roleId: who.roleId, userId: who.userId };
71
+ const caps = loadCaps(db, instanceId, principal);
72
+ const opRows = ops.map((op) => {
73
+ const group = groupById.get(op.groupId);
74
+ const input = accessInput(op);
75
+ const endpointLevel = levelInForce(input, group);
76
+ const cap = caps?.(op);
77
+ const roleMax = cap?.role ? capLevel(input, endpointLevel, cap.role) : cap ? 'none' : endpointLevel;
78
+ const access = effectiveAccess(input, group, principal, cap);
79
+ return {
80
+ id: op.id,
81
+ key: op.key,
82
+ displayName: op.displayName,
83
+ description: describeOf(op),
84
+ group: group?.key ?? null,
85
+ classification: op.locked ? 'locked' : op.classification,
86
+ matchProfile: op.matchProfile,
87
+ allowedLevels: allowedLevels(op),
88
+ endpointLevel,
89
+ roleLevel: cap?.role?.op ?? null,
90
+ roleMax,
91
+ ownLevel: cap?.own?.op ?? null,
92
+ level: access.reachable ? access.level : 'none',
93
+ reachable: access.reachable,
94
+ mode: access.reachable ? access.mode : null,
95
+ reason: access.reachable ? null : access.reason,
96
+ };
97
+ });
98
+ const visible = opts.reachableOnly ? opRows.filter((o) => o.reachable) : opRows;
99
+ const shownGroups = new Set(visible.map((o) => o.group));
100
+ const groupLayer = (g, pick) => {
101
+ const cap = caps?.({ id: '', groupId: g.id });
102
+ return (pick === 'role' ? cap?.role?.group : cap?.own?.group) ?? null;
103
+ };
104
+ return {
105
+ groups: groups
106
+ .filter((g) => !opts.reachableOnly || shownGroups.has(g.key))
107
+ .map((g) => ({
108
+ key: g.key,
109
+ label: g.label,
110
+ endpointLevel: g.level,
111
+ roleLevel: groupLayer(g, 'role'),
112
+ ownLevel: groupLayer(g, 'own'),
113
+ })),
114
+ operations: visible,
115
+ };
116
+ }
117
+ // ── changes ──────────────────────────────────────────────────────────────────────────────────────
118
+ function assertLevel(level) {
119
+ if (!isAccessLevel(level)) {
120
+ throw new ValidationError('invalid_level', `Level must be one of ${ACCESS_LEVELS.join(', ')}`);
121
+ }
122
+ }
123
+ function resolveTarget(db, instanceId, target) {
124
+ if ('group' in target) {
125
+ const group = db
126
+ .select()
127
+ .from(operationGroups)
128
+ .where(and(eq(operationGroups.instanceId, instanceId), eq(operationGroups.key, target.group)))
129
+ .get();
130
+ if (!group)
131
+ throw new NotFoundError('group_not_found', `No group "${target.group}" on this endpoint`);
132
+ return { group };
133
+ }
134
+ const op = db
135
+ .select()
136
+ .from(operations)
137
+ .where(and(eq(operations.instanceId, instanceId), eq(operations.id, target.operationId)))
138
+ .get();
139
+ if (!op)
140
+ throw new NotFoundError('operation_not_found', 'No such operation on this endpoint');
141
+ return { op };
142
+ }
143
+ function checkOpLevel(op, level) {
144
+ if (!allowedLevels(op).includes(level)) {
145
+ throw new ValidationError('level_not_allowed', `${op.key} can be ${allowedLevels(op).join(', ')}`);
146
+ }
147
+ }
148
+ /** Sets (or, with null, clears) a role's maximum for a group or an operation. A group level resets the
149
+ * role's entries for that group's operations, as the endpoint's group level does. */
150
+ export function setRoleLevel(db, roleId, instanceId, target, level, opts = {}) {
151
+ if (roleId === ADMIN_ROLE_ID)
152
+ throw new ConflictError('built_in_role', "The Admin role uses the endpoint's own levels");
153
+ if (!db.select().from(roles).where(eq(roles.id, roleId)).get())
154
+ throw new NotFoundError('role_not_found', 'No such role');
155
+ if (!roleHasInstance(db, roleId, instanceId))
156
+ throw new ConflictError('not_in_role', 'Add the endpoint to the role first');
157
+ if (level !== null)
158
+ assertLevel(level);
159
+ const now = opts.now ?? new Date();
160
+ db.transaction((tx) => {
161
+ const { group, op } = resolveTarget(tx, instanceId, target);
162
+ if (op && level !== null)
163
+ checkOpLevel(op, level);
164
+ const scope = and(eq(roleLevels.roleId, roleId), eq(roleLevels.instanceId, instanceId));
165
+ if (group) {
166
+ const opIds = tx
167
+ .select({ id: operations.id })
168
+ .from(operations)
169
+ .where(eq(operations.groupId, group.id))
170
+ .all()
171
+ .map((o) => o.id);
172
+ if (opIds.length)
173
+ tx.delete(roleLevels)
174
+ .where(and(scope, inArray(roleLevels.operationId, opIds)))
175
+ .run();
176
+ tx.delete(roleLevels)
177
+ .where(and(scope, eq(roleLevels.groupId, group.id)))
178
+ .run();
179
+ }
180
+ else {
181
+ tx.delete(roleLevels)
182
+ .where(and(scope, eq(roleLevels.operationId, op.id)))
183
+ .run();
184
+ }
185
+ if (level !== null) {
186
+ tx.insert(roleLevels)
187
+ .values({
188
+ id: randomUUID(),
189
+ roleId,
190
+ instanceId,
191
+ groupId: group?.id ?? null,
192
+ operationId: op?.id ?? null,
193
+ level,
194
+ changedAt: now,
195
+ changedBy: opts.actor?.userId ?? null,
196
+ })
197
+ .run();
198
+ }
199
+ writeAudit(tx, {
200
+ kind: 'config',
201
+ instanceId,
202
+ decision: 'role_level_changed',
203
+ actorKind: 'user',
204
+ actorId: opts.actor?.userId,
205
+ detail: { roleId, group: group?.key, operation: op?.key, level },
206
+ }, now);
207
+ });
208
+ }
209
+ /** Sets every group of the endpoint to one maximum for the role and clears its operation entries. */
210
+ export function setRoleBulkLevel(db, roleId, instanceId, level, opts = {}) {
211
+ assertLevel(level);
212
+ const groups = db.select().from(operationGroups).where(eq(operationGroups.instanceId, instanceId)).all();
213
+ for (const g of groups)
214
+ setRoleLevel(db, roleId, instanceId, { group: g.key }, level, opts);
215
+ }
216
+ /** A user's own level (design §6.4): only with the role's switch, on the role's endpoints, and never
217
+ * above the role's maximum. */
218
+ export function setOwnLevel(db, userId, instanceId, target, level, now = new Date()) {
219
+ const user = db.select().from(users).where(eq(users.id, userId)).get();
220
+ if (!user)
221
+ throw new NotFoundError('user_not_found', 'No such user');
222
+ const role = db.select().from(roles).where(eq(roles.id, user.roleId)).get();
223
+ if (!role?.canSetOwnLevels || role.id === ADMIN_ROLE_ID)
224
+ throw new ConflictError('own_levels_off', 'Your role does not let you set your own levels');
225
+ if (!roleHasInstance(db, role.id, instanceId))
226
+ throw new NotFoundError('instance_not_found', 'No such endpoint');
227
+ if (level !== null)
228
+ assertLevel(level);
229
+ db.transaction((tx) => {
230
+ const { group, op } = resolveTarget(tx, instanceId, target);
231
+ const caps = loadCaps(tx, instanceId, { ceiling: 'write', roleId: role.id });
232
+ if (level !== null) {
233
+ if (op) {
234
+ checkOpLevel(op, level);
235
+ const endpoint = levelInForce(accessInput(op), tx.select().from(operationGroups).where(eq(operationGroups.id, op.groupId)).get());
236
+ const max = capLevel(accessInput(op), endpoint, caps(op).role ?? {});
237
+ const own = normalizeLevel(op, level);
238
+ if (tighterLevel(own, max) !== own)
239
+ throw new ValidationError('above_role_max', `Your role allows at most ${max} for ${op.key}`);
240
+ }
241
+ else {
242
+ const max = caps({ id: '', groupId: group.id }).role?.group ?? 'none';
243
+ if (ACCESS_LEVELS.indexOf(level) > ACCESS_LEVELS.indexOf(max))
244
+ throw new ValidationError('above_role_max', `Your role allows at most ${max} for ${group.key}`);
245
+ }
246
+ }
247
+ const scope = and(eq(userLevels.userId, userId), eq(userLevels.instanceId, instanceId));
248
+ if (group) {
249
+ const opIds = tx
250
+ .select({ id: operations.id })
251
+ .from(operations)
252
+ .where(eq(operations.groupId, group.id))
253
+ .all()
254
+ .map((o) => o.id);
255
+ if (opIds.length)
256
+ tx.delete(userLevels)
257
+ .where(and(scope, inArray(userLevels.operationId, opIds)))
258
+ .run();
259
+ tx.delete(userLevels)
260
+ .where(and(scope, eq(userLevels.groupId, group.id)))
261
+ .run();
262
+ }
263
+ else {
264
+ tx.delete(userLevels)
265
+ .where(and(scope, eq(userLevels.operationId, op.id)))
266
+ .run();
267
+ }
268
+ if (level !== null) {
269
+ tx.insert(userLevels)
270
+ .values({
271
+ id: randomUUID(),
272
+ userId,
273
+ instanceId,
274
+ groupId: group?.id ?? null,
275
+ operationId: op?.id ?? null,
276
+ level,
277
+ changedAt: now,
278
+ })
279
+ .run();
280
+ }
281
+ writeAudit(tx, {
282
+ kind: 'config',
283
+ instanceId,
284
+ decision: 'own_level_changed',
285
+ actorKind: 'user',
286
+ actorId: userId,
287
+ detail: { group: group?.key, operation: op?.key, level },
288
+ }, now);
289
+ });
290
+ }
291
+ //# sourceMappingURL=role-levels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-levels.js","sourceRoot":"","sources":["../../src/catalog/role-levels.ts"],"names":[],"mappings":"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"}