@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.
- package/dist/app.d.ts +2 -0
- package/dist/app.js +3 -1
- package/dist/app.js.map +1 -1
- package/dist/approvals/grants.d.ts +6 -0
- package/dist/approvals/grants.js +13 -0
- package/dist/approvals/grants.js.map +1 -1
- package/dist/approvals/service.d.ts +86 -0
- package/dist/approvals/service.js +18 -1
- package/dist/approvals/service.js.map +1 -1
- package/dist/auth/mcp-auth.d.ts +12 -0
- package/dist/auth/mcp-auth.js +83 -33
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/auth/mcp-tokens.d.ts +27 -3
- package/dist/auth/mcp-tokens.js +32 -5
- package/dist/auth/mcp-tokens.js.map +1 -1
- package/dist/auth/oauth.d.ts +7 -1
- package/dist/auth/oauth.js +18 -1
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/oidc.js +3 -2
- package/dist/auth/oidc.js.map +1 -1
- package/dist/auth/roles.d.ts +53 -0
- package/dist/auth/roles.js +177 -0
- package/dist/auth/roles.js.map +1 -0
- package/dist/auth/sessions.d.ts +8 -0
- package/dist/auth/sessions.js +33 -0
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/users.d.ts +47 -2
- package/dist/auth/users.js +168 -15
- package/dist/auth/users.js.map +1 -1
- package/dist/catalog/groups.d.ts +62 -2
- package/dist/catalog/groups.js +60 -3
- package/dist/catalog/groups.js.map +1 -1
- package/dist/catalog/role-levels.d.ts +67 -0
- package/dist/catalog/role-levels.js +291 -0
- package/dist/catalog/role-levels.js.map +1 -0
- package/dist/catalog/rules.d.ts +137 -9
- package/dist/catalog/rules.js +97 -25
- package/dist/catalog/rules.js.map +1 -1
- package/dist/db/schema.d.ts +566 -0
- package/dist/db/schema.js +64 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/errors.d.ts +5 -2
- package/dist/errors.js +5 -0
- package/dist/errors.js.map +1 -1
- package/dist/gate/access.d.ts +23 -2
- package/dist/gate/access.js +31 -3
- package/dist/gate/access.js.map +1 -1
- package/dist/gate/pipeline.js +10 -1
- package/dist/gate/pipeline.js.map +1 -1
- package/dist/gate/preapproval.d.ts +2 -0
- package/dist/gate/preapproval.js +16 -3
- package/dist/gate/preapproval.js.map +1 -1
- package/dist/http/admin/auth.d.ts +4 -7
- package/dist/http/admin/auth.js +41 -47
- package/dist/http/admin/auth.js.map +1 -1
- package/dist/http/admin/instances.js +5 -64
- package/dist/http/admin/instances.js.map +1 -1
- package/dist/http/admin/me.d.ts +6 -0
- package/dist/http/admin/me.js +105 -0
- package/dist/http/admin/me.js.map +1 -0
- package/dist/http/admin/roles.d.ts +5 -0
- package/dist/http/admin/roles.js +39 -0
- package/dist/http/admin/roles.js.map +1 -0
- package/dist/http/admin/system.js +16 -41
- package/dist/http/admin/system.js.map +1 -1
- package/dist/http/admin-app.js +14 -3
- package/dist/http/admin-app.js.map +1 -1
- package/dist/http/common.d.ts +3 -2
- package/dist/http/common.js +7 -2
- package/dist/http/common.js.map +1 -1
- package/dist/http/mcp/approval-routes.js +11 -30
- package/dist/http/mcp/approval-routes.js.map +1 -1
- package/dist/http/mcp/endpoint.js +3 -3
- package/dist/http/mcp/endpoint.js.map +1 -1
- package/dist/http/mcp/oauth-routes.d.ts +2 -3
- package/dist/http/mcp/oauth-routes.js +18 -47
- package/dist/http/mcp/oauth-routes.js.map +1 -1
- package/dist/http/mcp-app.js +1 -1
- package/dist/http/mcp-app.js.map +1 -1
- package/dist/instances/manager.d.ts +36 -0
- package/dist/instances/manager.js +55 -6
- package/dist/instances/manager.js.map +1 -1
- package/dist/runtime/index.js +20 -8
- package/dist/runtime/index.js.map +1 -1
- package/dist/settings.d.ts +2 -0
- package/dist/settings.js +4 -0
- package/dist/settings.js.map +1 -1
- package/dist/testing/index.js +2 -1
- package/dist/testing/index.js.map +1 -1
- package/drizzle/0013_user_roles.sql +63 -0
- package/drizzle/0014_user_registration_source.sql +1 -0
- package/drizzle/meta/0013_snapshot.json +2833 -0
- package/drizzle/meta/0014_snapshot.json +2840 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +3 -3
package/dist/catalog/rules.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { z } from 'zod';
|
|
|
3
3
|
import type { Db } from '../db/index.js';
|
|
4
4
|
import { operations } from '../db/schema.js';
|
|
5
5
|
import { ValidationError } from '../errors.js';
|
|
6
|
+
import type { LevelView } from './role-levels.js';
|
|
6
7
|
/** Pre-approval rules (design §5.2): from the catalog, with a required reason, structured match and
|
|
7
8
|
* optional rate limit and expiry. Locked operations are refused here (409), whatever the UI offers. */
|
|
8
9
|
declare const RuleInputSchema: z.ZodObject<{
|
|
@@ -34,82 +35,209 @@ type OperationRow = typeof operations.$inferSelect;
|
|
|
34
35
|
/** Why a rule's match doesn't fit the operation's declared fields (design §8.3), or null if it does. */
|
|
35
36
|
export declare function matchMisfit(manifest: Pick<Manifest, 'matchProfiles' | 'targets'>, op: Pick<OperationRow, 'key' | 'matchProfile'>, match: RuleInput['match']): ValidationError | null;
|
|
36
37
|
export declare function listRules(db: Db, instanceId: string): {
|
|
38
|
+
owner: {
|
|
39
|
+
id: string;
|
|
40
|
+
username: string;
|
|
41
|
+
} | null;
|
|
37
42
|
operation: {
|
|
38
43
|
id: string;
|
|
39
44
|
key: string;
|
|
40
45
|
locked: boolean;
|
|
41
46
|
matchProfile: string | null;
|
|
42
47
|
};
|
|
43
|
-
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
48
|
+
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
49
|
+
* An admin rule is inert only if it is for every role that has the endpoint. */
|
|
44
50
|
inert: string | null;
|
|
51
|
+
reason: string;
|
|
45
52
|
id: string;
|
|
46
53
|
match: unknown;
|
|
47
54
|
createdAt: Date;
|
|
55
|
+
updatedAt: Date | null;
|
|
48
56
|
expiresAt: Date | null;
|
|
49
57
|
enabled: boolean;
|
|
50
58
|
instanceId: string;
|
|
51
59
|
operationId: string;
|
|
52
60
|
rateLimit: number | null;
|
|
53
61
|
windowSeconds: number | null;
|
|
54
|
-
reason: string;
|
|
55
62
|
createdBy: string | null;
|
|
56
|
-
|
|
63
|
+
ownerUserId: string | null;
|
|
57
64
|
lastTriggeredAt: Date | null;
|
|
58
65
|
strictMissAt: Date | null;
|
|
59
66
|
}[];
|
|
60
67
|
export declare function createRule(db: Db, manifest: Manifest, instanceId: string, raw: unknown, actor?: {
|
|
61
68
|
userId?: string;
|
|
69
|
+
}, opts?: {
|
|
70
|
+
owner?: string;
|
|
62
71
|
}): {
|
|
72
|
+
owner: {
|
|
73
|
+
id: string;
|
|
74
|
+
username: string;
|
|
75
|
+
} | null;
|
|
63
76
|
operation: {
|
|
64
77
|
id: string;
|
|
65
78
|
key: string;
|
|
66
79
|
locked: boolean;
|
|
67
80
|
matchProfile: string | null;
|
|
68
81
|
};
|
|
69
|
-
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
82
|
+
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
83
|
+
* An admin rule is inert only if it is for every role that has the endpoint. */
|
|
70
84
|
inert: string | null;
|
|
85
|
+
reason: string;
|
|
71
86
|
id: string;
|
|
72
87
|
match: unknown;
|
|
73
88
|
createdAt: Date;
|
|
89
|
+
updatedAt: Date | null;
|
|
74
90
|
expiresAt: Date | null;
|
|
75
91
|
enabled: boolean;
|
|
76
92
|
instanceId: string;
|
|
77
93
|
operationId: string;
|
|
78
94
|
rateLimit: number | null;
|
|
79
95
|
windowSeconds: number | null;
|
|
80
|
-
reason: string;
|
|
81
96
|
createdBy: string | null;
|
|
82
|
-
|
|
97
|
+
ownerUserId: string | null;
|
|
83
98
|
lastTriggeredAt: Date | null;
|
|
84
99
|
strictMissAt: Date | null;
|
|
85
100
|
};
|
|
86
101
|
export declare function updateRule(db: Db, manifest: Manifest, instanceId: string, ruleId: string, raw: unknown, actor?: {
|
|
87
102
|
userId?: string;
|
|
103
|
+
}, opts?: {
|
|
104
|
+
owner?: string;
|
|
88
105
|
}): {
|
|
106
|
+
owner: {
|
|
107
|
+
id: string;
|
|
108
|
+
username: string;
|
|
109
|
+
} | null;
|
|
89
110
|
operation: {
|
|
90
111
|
id: string;
|
|
91
112
|
key: string;
|
|
92
113
|
locked: boolean;
|
|
93
114
|
matchProfile: string | null;
|
|
94
115
|
};
|
|
95
|
-
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
116
|
+
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
117
|
+
* An admin rule is inert only if it is for every role that has the endpoint. */
|
|
96
118
|
inert: string | null;
|
|
119
|
+
reason: string;
|
|
97
120
|
id: string;
|
|
98
121
|
match: unknown;
|
|
99
122
|
createdAt: Date;
|
|
123
|
+
updatedAt: Date | null;
|
|
100
124
|
expiresAt: Date | null;
|
|
101
125
|
enabled: boolean;
|
|
102
126
|
instanceId: string;
|
|
103
127
|
operationId: string;
|
|
104
128
|
rateLimit: number | null;
|
|
105
129
|
windowSeconds: number | null;
|
|
106
|
-
reason: string;
|
|
107
130
|
createdBy: string | null;
|
|
108
|
-
|
|
131
|
+
ownerUserId: string | null;
|
|
109
132
|
lastTriggeredAt: Date | null;
|
|
110
133
|
strictMissAt: Date | null;
|
|
111
134
|
};
|
|
112
135
|
export declare function deleteRule(db: Db, instanceId: string, ruleId: string, actor?: {
|
|
113
136
|
userId?: string;
|
|
137
|
+
}, opts?: {
|
|
138
|
+
owner?: string;
|
|
114
139
|
}): void;
|
|
140
|
+
/** A user writing their own rules, with the operations they can reach. */
|
|
141
|
+
export interface RuleOwner {
|
|
142
|
+
userId: string;
|
|
143
|
+
operations: LevelView['operations'];
|
|
144
|
+
}
|
|
145
|
+
/** The owner's rules, plus admin rules on operations they can reach (read-only to them). */
|
|
146
|
+
export declare function listOwnRules(db: Db, instanceId: string, owner: RuleOwner): {
|
|
147
|
+
editable: boolean;
|
|
148
|
+
owner: {
|
|
149
|
+
id: string;
|
|
150
|
+
username: string;
|
|
151
|
+
} | null;
|
|
152
|
+
operation: {
|
|
153
|
+
id: string;
|
|
154
|
+
key: string;
|
|
155
|
+
locked: boolean;
|
|
156
|
+
matchProfile: string | null;
|
|
157
|
+
};
|
|
158
|
+
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
159
|
+
* An admin rule is inert only if it is for every role that has the endpoint. */
|
|
160
|
+
inert: string | null;
|
|
161
|
+
reason: string;
|
|
162
|
+
id: string;
|
|
163
|
+
match: unknown;
|
|
164
|
+
createdAt: Date;
|
|
165
|
+
updatedAt: Date | null;
|
|
166
|
+
expiresAt: Date | null;
|
|
167
|
+
enabled: boolean;
|
|
168
|
+
instanceId: string;
|
|
169
|
+
operationId: string;
|
|
170
|
+
rateLimit: number | null;
|
|
171
|
+
windowSeconds: number | null;
|
|
172
|
+
createdBy: string | null;
|
|
173
|
+
ownerUserId: string | null;
|
|
174
|
+
lastTriggeredAt: Date | null;
|
|
175
|
+
strictMissAt: Date | null;
|
|
176
|
+
}[];
|
|
177
|
+
export declare function createOwnRule(db: Db, manifest: () => Manifest, instanceId: string, raw: unknown, owner: RuleOwner): {
|
|
178
|
+
editable: boolean;
|
|
179
|
+
owner: {
|
|
180
|
+
id: string;
|
|
181
|
+
username: string;
|
|
182
|
+
} | null;
|
|
183
|
+
operation: {
|
|
184
|
+
id: string;
|
|
185
|
+
key: string;
|
|
186
|
+
locked: boolean;
|
|
187
|
+
matchProfile: string | null;
|
|
188
|
+
};
|
|
189
|
+
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
190
|
+
* An admin rule is inert only if it is for every role that has the endpoint. */
|
|
191
|
+
inert: string | null;
|
|
192
|
+
reason: string;
|
|
193
|
+
id: string;
|
|
194
|
+
match: unknown;
|
|
195
|
+
createdAt: Date;
|
|
196
|
+
updatedAt: Date | null;
|
|
197
|
+
expiresAt: Date | null;
|
|
198
|
+
enabled: boolean;
|
|
199
|
+
instanceId: string;
|
|
200
|
+
operationId: string;
|
|
201
|
+
rateLimit: number | null;
|
|
202
|
+
windowSeconds: number | null;
|
|
203
|
+
createdBy: string | null;
|
|
204
|
+
ownerUserId: string | null;
|
|
205
|
+
lastTriggeredAt: Date | null;
|
|
206
|
+
strictMissAt: Date | null;
|
|
207
|
+
};
|
|
208
|
+
export declare function updateOwnRule(db: Db, manifest: () => Manifest, instanceId: string, ruleId: string, raw: unknown, owner: RuleOwner): {
|
|
209
|
+
editable: boolean;
|
|
210
|
+
owner: {
|
|
211
|
+
id: string;
|
|
212
|
+
username: string;
|
|
213
|
+
} | null;
|
|
214
|
+
operation: {
|
|
215
|
+
id: string;
|
|
216
|
+
key: string;
|
|
217
|
+
locked: boolean;
|
|
218
|
+
matchProfile: string | null;
|
|
219
|
+
};
|
|
220
|
+
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
221
|
+
* An admin rule is inert only if it is for every role that has the endpoint. */
|
|
222
|
+
inert: string | null;
|
|
223
|
+
reason: string;
|
|
224
|
+
id: string;
|
|
225
|
+
match: unknown;
|
|
226
|
+
createdAt: Date;
|
|
227
|
+
updatedAt: Date | null;
|
|
228
|
+
expiresAt: Date | null;
|
|
229
|
+
enabled: boolean;
|
|
230
|
+
instanceId: string;
|
|
231
|
+
operationId: string;
|
|
232
|
+
rateLimit: number | null;
|
|
233
|
+
windowSeconds: number | null;
|
|
234
|
+
createdBy: string | null;
|
|
235
|
+
ownerUserId: string | null;
|
|
236
|
+
lastTriggeredAt: Date | null;
|
|
237
|
+
strictMissAt: Date | null;
|
|
238
|
+
};
|
|
239
|
+
export declare function deleteOwnRule(db: Db, instanceId: string, ruleId: string, userId: string): void;
|
|
240
|
+
/** The rule editor's pickers offer only what a rule the owner may write can name. */
|
|
241
|
+
export declare function checkOwnOptionsSource(manifest: Manifest, owner: RuleOwner, source: string): void;
|
|
242
|
+
export declare function checkOwnRegistryKind(manifest: Manifest, owner: RuleOwner, kind: string | undefined): void;
|
|
115
243
|
export {};
|
package/dist/catalog/rules.js
CHANGED
|
@@ -2,8 +2,9 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { and, asc, eq } from 'drizzle-orm';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { writeAudit } from '../audit.js';
|
|
5
|
-
import { operations, preApprovalRules } from '../db/schema.js';
|
|
5
|
+
import { operations, preApprovalRules, roleInstances, roles, users } from '../db/schema.js';
|
|
6
6
|
import { ConflictError, NotFoundError, ValidationError } from '../errors.js';
|
|
7
|
+
import { FULL_ACCESS } from '../gate/access.js';
|
|
7
8
|
import { MatchSchema } from '../gate/match.js';
|
|
8
9
|
import { resolveAccess } from './groups.js';
|
|
9
10
|
/** Pre-approval rules (design §5.2): from the catalog, with a required reason, structured match and
|
|
@@ -65,26 +66,62 @@ function checkMatchAgainstProfile(manifest, op, match) {
|
|
|
65
66
|
if (misfit)
|
|
66
67
|
throw misfit;
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
/** Whether some role that has the endpoint can reach the operation at Ask, or lower it to Ask itself. */
|
|
70
|
+
function firesForSomeRole(db, instanceId, key) {
|
|
71
|
+
return db
|
|
72
|
+
.select({ role: roles })
|
|
73
|
+
.from(roleInstances)
|
|
74
|
+
.innerJoin(roles, eq(roleInstances.roleId, roles.id))
|
|
75
|
+
.where(eq(roleInstances.instanceId, instanceId))
|
|
76
|
+
.all()
|
|
77
|
+
.some(({ role }) => {
|
|
78
|
+
const access = resolveAccess(db, instanceId, key, { ceiling: 'write', roleId: role.id });
|
|
79
|
+
return access.reachable && (access.level === 'ask' || (role.canSetOwnLevels && access.level === 'write'));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function describe(db, instanceId, rule, op, owner) {
|
|
83
|
+
// An own rule fires only where its owner's levels put the operation at Ask (design §6.4).
|
|
84
|
+
const principal = owner ? { ceiling: 'write', roleId: owner.roleId, userId: owner.id } : FULL_ACCESS;
|
|
85
|
+
const access = resolveAccess(db, instanceId, op.key, principal);
|
|
86
|
+
const inert = !rule.enabled
|
|
87
|
+
? null
|
|
88
|
+
: !access.reachable
|
|
89
|
+
? access.reason
|
|
90
|
+
: access.level === 'write'
|
|
91
|
+
? 'level_write'
|
|
92
|
+
: null;
|
|
70
93
|
return {
|
|
71
94
|
...rule,
|
|
95
|
+
owner: owner ? { id: owner.id, username: owner.username } : null,
|
|
72
96
|
operation: { id: op.id, key: op.key, locked: op.locked, matchProfile: op.matchProfile },
|
|
73
|
-
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
74
|
-
|
|
97
|
+
/** Rules only fire at level `ask`; on unreachable or `write` operations they never do (UI flags it).
|
|
98
|
+
* An admin rule is inert only if it is for every role that has the endpoint. */
|
|
99
|
+
inert: inert && !owner && firesForSomeRole(db, instanceId, op.key) ? null : inert,
|
|
75
100
|
};
|
|
76
101
|
}
|
|
77
102
|
export function listRules(db, instanceId) {
|
|
78
103
|
return db
|
|
79
|
-
.select({ rule: preApprovalRules, op: operations })
|
|
104
|
+
.select({ rule: preApprovalRules, op: operations, owner: users })
|
|
80
105
|
.from(preApprovalRules)
|
|
81
106
|
.innerJoin(operations, eq(preApprovalRules.operationId, operations.id))
|
|
107
|
+
.leftJoin(users, eq(preApprovalRules.ownerUserId, users.id))
|
|
82
108
|
.where(eq(preApprovalRules.instanceId, instanceId))
|
|
83
109
|
.orderBy(asc(operations.key), asc(preApprovalRules.createdAt))
|
|
84
110
|
.all()
|
|
85
|
-
.map(({ rule, op }) => describe(db, instanceId, rule, op));
|
|
111
|
+
.map(({ rule, op, owner }) => describe(db, instanceId, rule, op, owner ?? undefined));
|
|
112
|
+
}
|
|
113
|
+
/** A rule as the given owner may touch it: admins (no owner) any rule, a user only their own. */
|
|
114
|
+
function ownedRule(db, instanceId, ruleId, owner) {
|
|
115
|
+
const rule = db
|
|
116
|
+
.select()
|
|
117
|
+
.from(preApprovalRules)
|
|
118
|
+
.where(and(eq(preApprovalRules.id, ruleId), eq(preApprovalRules.instanceId, instanceId)))
|
|
119
|
+
.get();
|
|
120
|
+
if (!rule || (owner !== undefined && rule.ownerUserId !== owner))
|
|
121
|
+
throw new NotFoundError('rule_not_found', 'No such rule');
|
|
122
|
+
return rule;
|
|
86
123
|
}
|
|
87
|
-
export function createRule(db, manifest, instanceId, raw, actor = {}) {
|
|
124
|
+
export function createRule(db, manifest, instanceId, raw, actor = {}, opts = {}) {
|
|
88
125
|
const input = RuleInputSchema.parse(raw);
|
|
89
126
|
const op = loadOperation(db, instanceId, input.operationId);
|
|
90
127
|
if (op.locked)
|
|
@@ -104,6 +141,7 @@ export function createRule(db, manifest, instanceId, raw, actor = {}) {
|
|
|
104
141
|
reason: input.reason,
|
|
105
142
|
enabled: input.enabled,
|
|
106
143
|
createdBy: actor.userId ?? null,
|
|
144
|
+
ownerUserId: opts.owner ?? null,
|
|
107
145
|
createdAt: new Date(),
|
|
108
146
|
})
|
|
109
147
|
.run();
|
|
@@ -114,19 +152,13 @@ export function createRule(db, manifest, instanceId, raw, actor = {}) {
|
|
|
114
152
|
decision: 'rule_created',
|
|
115
153
|
actorKind: 'user',
|
|
116
154
|
actorId: actor.userId,
|
|
117
|
-
detail: { ruleId: id, ...input },
|
|
155
|
+
detail: { ruleId: id, ...input, ...(opts.owner ? { owner: opts.owner } : {}) },
|
|
118
156
|
});
|
|
119
157
|
});
|
|
120
158
|
return listRules(db, instanceId).find((r) => r.id === id);
|
|
121
159
|
}
|
|
122
|
-
export function updateRule(db, manifest, instanceId, ruleId, raw, actor = {}) {
|
|
123
|
-
const before = db
|
|
124
|
-
.select()
|
|
125
|
-
.from(preApprovalRules)
|
|
126
|
-
.where(and(eq(preApprovalRules.id, ruleId), eq(preApprovalRules.instanceId, instanceId)))
|
|
127
|
-
.get();
|
|
128
|
-
if (!before)
|
|
129
|
-
throw new NotFoundError('rule_not_found', 'No such rule');
|
|
160
|
+
export function updateRule(db, manifest, instanceId, ruleId, raw, actor = {}, opts = {}) {
|
|
161
|
+
const before = ownedRule(db, instanceId, ruleId, opts.owner);
|
|
130
162
|
const input = RuleInputSchema.parse({ ...before, ...raw });
|
|
131
163
|
const op = loadOperation(db, instanceId, input.operationId);
|
|
132
164
|
if (op.locked)
|
|
@@ -156,14 +188,8 @@ export function updateRule(db, manifest, instanceId, ruleId, raw, actor = {}) {
|
|
|
156
188
|
});
|
|
157
189
|
return listRules(db, instanceId).find((r) => r.id === ruleId);
|
|
158
190
|
}
|
|
159
|
-
export function deleteRule(db, instanceId, ruleId, actor = {}) {
|
|
160
|
-
const before = db
|
|
161
|
-
.select()
|
|
162
|
-
.from(preApprovalRules)
|
|
163
|
-
.where(and(eq(preApprovalRules.id, ruleId), eq(preApprovalRules.instanceId, instanceId)))
|
|
164
|
-
.get();
|
|
165
|
-
if (!before)
|
|
166
|
-
throw new NotFoundError('rule_not_found', 'No such rule');
|
|
191
|
+
export function deleteRule(db, instanceId, ruleId, actor = {}, opts = {}) {
|
|
192
|
+
const before = ownedRule(db, instanceId, ruleId, opts.owner);
|
|
167
193
|
db.transaction((tx) => {
|
|
168
194
|
tx.delete(preApprovalRules).where(eq(preApprovalRules.id, ruleId)).run();
|
|
169
195
|
writeAudit(tx, {
|
|
@@ -176,4 +202,50 @@ export function deleteRule(db, instanceId, ruleId, actor = {}) {
|
|
|
176
202
|
});
|
|
177
203
|
});
|
|
178
204
|
}
|
|
205
|
+
/** The owner's rules, plus admin rules on operations they can reach (read-only to them). */
|
|
206
|
+
export function listOwnRules(db, instanceId, owner) {
|
|
207
|
+
const reachable = new Set(owner.operations.map((o) => o.id));
|
|
208
|
+
return listRules(db, instanceId)
|
|
209
|
+
.filter((r) => r.ownerUserId === owner.userId || (r.ownerUserId === null && reachable.has(r.operationId)))
|
|
210
|
+
.map((r) => ({ ...r, editable: r.ownerUserId === owner.userId }));
|
|
211
|
+
}
|
|
212
|
+
function checkReachable(owner, raw) {
|
|
213
|
+
const opId = raw?.operationId;
|
|
214
|
+
if (opId === undefined)
|
|
215
|
+
return;
|
|
216
|
+
if (!owner.operations.some((o) => o.id === opId))
|
|
217
|
+
throw new ValidationError('operation_not_reachable', 'You can only write rules for operations you can call');
|
|
218
|
+
}
|
|
219
|
+
// `manifest` is read after the owner checks, so an unusable plugin doesn't hide their answer.
|
|
220
|
+
export function createOwnRule(db, manifest, instanceId, raw, owner) {
|
|
221
|
+
if (raw?.operationId === undefined)
|
|
222
|
+
throw new ValidationError('invalid_rule', 'operationId is required');
|
|
223
|
+
checkReachable(owner, raw);
|
|
224
|
+
const rule = createRule(db, manifest(), instanceId, raw, { userId: owner.userId }, { owner: owner.userId });
|
|
225
|
+
return { ...rule, editable: true };
|
|
226
|
+
}
|
|
227
|
+
export function updateOwnRule(db, manifest, instanceId, ruleId, raw, owner) {
|
|
228
|
+
checkReachable(owner, raw);
|
|
229
|
+
const rule = updateRule(db, manifest(), instanceId, ruleId, raw, { userId: owner.userId }, { owner: owner.userId });
|
|
230
|
+
return { ...rule, editable: true };
|
|
231
|
+
}
|
|
232
|
+
export function deleteOwnRule(db, instanceId, ruleId, userId) {
|
|
233
|
+
deleteRule(db, instanceId, ruleId, { userId }, { owner: userId });
|
|
234
|
+
}
|
|
235
|
+
/** The match fields of operations the owner may write rules for: reachable, plain writes. */
|
|
236
|
+
function ownRuleFields(manifest, owner) {
|
|
237
|
+
return owner.operations
|
|
238
|
+
.filter((o) => o.classification === 'write' && o.matchProfile)
|
|
239
|
+
.flatMap((o) => manifest.matchProfiles[o.matchProfile] ?? []);
|
|
240
|
+
}
|
|
241
|
+
/** The rule editor's pickers offer only what a rule the owner may write can name. */
|
|
242
|
+
export function checkOwnOptionsSource(manifest, owner, source) {
|
|
243
|
+
if (!ownRuleFields(manifest, owner).some((f) => f.optionsSource === source))
|
|
244
|
+
throw new NotFoundError('options_not_found', 'No such options source');
|
|
245
|
+
}
|
|
246
|
+
export function checkOwnRegistryKind(manifest, owner, kind) {
|
|
247
|
+
const kinds = new Set([manifest.targets?.registryKind, ...(manifest.targets?.scopes ?? []).map((s) => s.registryKind)].filter(Boolean));
|
|
248
|
+
if (!ownRuleFields(manifest, owner).some((f) => f.field === '$targets') || !kind || !kinds.has(kind))
|
|
249
|
+
throw new NotFoundError('registry_not_found', 'No such registry kind');
|
|
250
|
+
}
|
|
179
251
|
//# sourceMappingURL=rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/catalog/rules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/catalog/rules.ts"],"names":[],"mappings":"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"}
|