@substrat-run/contract-tests 0.159.0 → 0.160.0
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/attachment-bytes-suite.d.ts +9 -0
- package/dist/attachment-bytes-suite.d.ts.map +1 -0
- package/dist/attachment-bytes-suite.js +97 -0
- package/dist/attachment-bytes-suite.js.map +1 -0
- package/dist/connector-fixture.d.ts +2 -2
- package/dist/connector-fixture.d.ts.map +1 -1
- package/dist/directory-audit-suite.d.ts +17 -0
- package/dist/directory-audit-suite.d.ts.map +1 -0
- package/dist/directory-audit-suite.js +345 -0
- package/dist/directory-audit-suite.js.map +1 -0
- package/dist/directory-restore-suite.d.ts.map +1 -1
- package/dist/directory-restore-suite.js +99 -0
- package/dist/directory-restore-suite.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/many-migrations-suite.d.ts +9 -0
- package/dist/many-migrations-suite.d.ts.map +1 -0
- package/dist/many-migrations-suite.js +76 -0
- package/dist/many-migrations-suite.js.map +1 -0
- package/dist/many-migrations.d.ts +16 -0
- package/dist/many-migrations.d.ts.map +1 -0
- package/dist/many-migrations.js +50 -0
- package/dist/many-migrations.js.map +1 -0
- package/dist/membership-executor-suite.d.ts.map +1 -1
- package/dist/membership-executor-suite.js +8 -5
- package/dist/membership-executor-suite.js.map +1 -1
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +10 -0
- package/dist/modules.js.map +1 -1
- package/dist/reserved-role-suite.d.ts +6 -0
- package/dist/reserved-role-suite.d.ts.map +1 -1
- package/dist/reserved-role-suite.js +176 -8
- package/dist/reserved-role-suite.js.map +1 -1
- package/dist/role-state-suite.d.ts +17 -0
- package/dist/role-state-suite.d.ts.map +1 -0
- package/dist/role-state-suite.js +80 -0
- package/dist/role-state-suite.js.map +1 -0
- package/dist/schedule-platform-requests-suite.d.ts +7 -1
- package/dist/schedule-platform-requests-suite.d.ts.map +1 -1
- package/dist/schedule-platform-requests-suite.js +349 -2
- package/dist/schedule-platform-requests-suite.js.map +1 -1
- package/dist/schedule-purge-request-module.d.ts +88 -0
- package/dist/schedule-purge-request-module.d.ts.map +1 -0
- package/dist/schedule-purge-request-module.js +114 -0
- package/dist/schedule-purge-request-module.js.map +1 -0
- package/dist/schedule-purge-two-module.d.ts +141 -0
- package/dist/schedule-purge-two-module.d.ts.map +1 -0
- package/dist/schedule-purge-two-module.js +153 -0
- package/dist/schedule-purge-two-module.js.map +1 -0
- package/dist/scope-host-suite.d.ts.map +1 -1
- package/dist/scope-host-suite.js +1177 -7
- package/dist/scope-host-suite.js.map +1 -1
- package/dist/size-reads-suite.d.ts +20 -0
- package/dist/size-reads-suite.d.ts.map +1 -0
- package/dist/size-reads-suite.js +77 -0
- package/dist/size-reads-suite.js.map +1 -0
- package/dist/stored-vertical-copy-suite.d.ts +15 -0
- package/dist/stored-vertical-copy-suite.d.ts.map +1 -0
- package/dist/stored-vertical-copy-suite.js +68 -0
- package/dist/stored-vertical-copy-suite.js.map +1 -0
- package/dist/unreadable-scope-row-suite.d.ts +16 -0
- package/dist/unreadable-scope-row-suite.d.ts.map +1 -0
- package/dist/unreadable-scope-row-suite.js +152 -0
- package/dist/unreadable-scope-row-suite.js.map +1 -0
- package/package.json +3 -3
|
@@ -20,6 +20,12 @@ import { RSV_RUN, RSV_USE, reservedRoleMod, unmarkedReservedRoleMod } from './re
|
|
|
20
20
|
* - So is a connection grant (`grantToConnection`), at either node: a connection acts for the
|
|
21
21
|
* external provider holding its token. Nothing is recorded for a later provision to deliver.
|
|
22
22
|
* - Each refusal writes nothing: the principal holds nothing afterwards.
|
|
23
|
+
* - A role DEFINITION is judged too (#2447): `defineRole` refuses a person's role carrying a
|
|
24
|
+
* reserved key and a system-held role carrying a person's key, so a role cannot be widened after
|
|
25
|
+
* it was assigned; a seat holding a key reserved after it was seated keeps working, through a
|
|
26
|
+
* refused redefinition and a fan-out. A host that registers no reserving module learns the
|
|
27
|
+
* reservation from the tenant's system-held roles, admits a key it knows nothing about
|
|
28
|
+
* (fail-open), and its person's doors refuse a role stored `holder: 'system'`.
|
|
23
29
|
*
|
|
24
30
|
* And the host option `permissions`: a host given its declared surface refuses to register a
|
|
25
31
|
* module the surface leaves out, and holds the reservations the surface declares whatever is
|
|
@@ -33,11 +39,16 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
|
|
|
33
39
|
const s1 = scopeId.parse(ulid());
|
|
34
40
|
const staff = platformActorId.parse(ulid());
|
|
35
41
|
const alice = principalId.parse(ulid()); // holds rsv:use tenant-wide, and rsv:run through a reserved-only role
|
|
42
|
+
const legacy = principalId.parse(ulid()); // seated in `mixed` before rsv:run was reserved here (#2447)
|
|
43
|
+
/** A key no module here declares: a host admits it (fail-open), so it fills out a role's list. */
|
|
44
|
+
const RSV_EXTRA = 'rsv:extra';
|
|
36
45
|
const person = () => principalId.parse(ulid());
|
|
37
46
|
const entity = () => ({ entityType: 'rsvdoc', entityId: ulid() });
|
|
38
47
|
const RSV = moduleId.parse('@test/reserved-role');
|
|
39
48
|
/** How a person's door refuses: worded for `canAssign`'s removal bound as well as for an assignment. */
|
|
40
49
|
const NO_BOUND = "no person's bound covers it, to give the role or to take it back";
|
|
50
|
+
/** A person's door on `roleKey`: for the reserved key it holds, or (#2447) for its stored `holder: 'system'`. */
|
|
51
|
+
const personRefusal = (roleKey) => new RegExp(`role '${roleKey}' (holds rsv:run, reserved to a system principal|is declared holder: 'system', a role for a system principal): ${NO_BOUND}`);
|
|
41
52
|
const holds = async (who, permission, on) => {
|
|
42
53
|
const stub = await host.getScope(who, t1, s1);
|
|
43
54
|
return (await stub.invoke('perm/probe', { permission, entity: on })).allowed;
|
|
@@ -45,17 +56,22 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
|
|
|
45
56
|
beforeAll(async () => {
|
|
46
57
|
fixture = await makeFixture();
|
|
47
58
|
host = fixture.host;
|
|
48
|
-
host.registerModule(reservedRoleMod);
|
|
49
59
|
host.registerModule(permMod); // its `perm/probe` reports what a principal holds
|
|
50
60
|
await host.admin.createTenant(staff, { id: t1, slug: 'reserved-role-tenant', name: 'Reserved' });
|
|
61
|
+
// #2447: a role definition is judged when it is written, so the roles below that a person may
|
|
62
|
+
// not hold exist the one way they still can: defined before the module reserving rsv:run was
|
|
63
|
+
// registered here (a key an engine reserves in a later version). `legacy` is seated then too.
|
|
64
|
+
await host.admin.defineRole(staff, t1, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' });
|
|
65
|
+
await host.admin.defineRole(staff, t1, { key: 'person-runner', permissions: [RSV_RUN], source: 'vertical' });
|
|
66
|
+
await host.admin.defineRole(staff, t1, { key: 'wide', permissions: [RSV_USE, RSV_RUN, RSV_EXTRA], source: 'vertical' });
|
|
67
|
+
await host.admin.assignRole(staff, { principalId: legacy, roleKey: 'mixed', node: { tenantId: t1, scopeId: null } });
|
|
68
|
+
host.registerModule(reservedRoleMod);
|
|
51
69
|
await host.admin.grantEntitlement(staff, t1, 'perm');
|
|
52
70
|
await host.admin.grantEntitlement(staff, t1, 'rsv');
|
|
53
71
|
await host.provisionScope(staff, { tenantId: t1, scopeId: s1, vertical: 'rsv-vertical' });
|
|
54
72
|
await host.admin.activateScope(staff, t1, s1);
|
|
55
73
|
await host.admin.defineRole(staff, t1, { key: 'member', permissions: [RSV_USE], source: 'vertical' });
|
|
56
|
-
await host.admin.defineRole(staff, t1, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' });
|
|
57
74
|
await host.admin.defineRole(staff, t1, { key: 'runner', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
|
|
58
|
-
await host.admin.defineRole(staff, t1, { key: 'person-runner', permissions: [RSV_RUN], source: 'vertical' });
|
|
59
75
|
await host.admin.grant(staff, { principalId: alice, permission: RSV_USE, node: { tenantId: t1, scopeId: null }, grantedBy: alice });
|
|
60
76
|
// The platform door admits a role made only of reserved keys, so alice can hold rsv:run.
|
|
61
77
|
await host.admin.assignRole(staff, { principalId: alice, roleKey: 'runner', node: { tenantId: t1, scopeId: null } });
|
|
@@ -103,7 +119,7 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
|
|
|
103
119
|
describe('a person’s doors', () => {
|
|
104
120
|
it.each(['runner', 'mixed'])('assignScopeRoleBounded refuses %s to a caller who holds it, and writes nothing', async (roleKey) => {
|
|
105
121
|
const who = person();
|
|
106
|
-
await expectRefusal(host.assignScopeRoleBounded(t1, s1, alice, who, roleKey), 'forbidden',
|
|
122
|
+
await expectRefusal(host.assignScopeRoleBounded(t1, s1, alice, who, roleKey), 'forbidden', personRefusal(roleKey));
|
|
107
123
|
expect(await host.listScopeRoleHolders(t1, s1, who)).toEqual([]);
|
|
108
124
|
expect(await holds(who, RSV_RUN)).toBe(false);
|
|
109
125
|
});
|
|
@@ -115,7 +131,7 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
|
|
|
115
131
|
it.each(['runner', 'mixed'])('changeScopeRoleBounded refuses moving someone into %s, and leaves the role they held', async (roleKey) => {
|
|
116
132
|
const who = person();
|
|
117
133
|
await host.assignScopeRoleBounded(t1, s1, alice, who, 'member');
|
|
118
|
-
await expectRefusal(host.changeScopeRoleBounded(t1, s1, alice, who, 'member', roleKey), 'forbidden',
|
|
134
|
+
await expectRefusal(host.changeScopeRoleBounded(t1, s1, alice, who, 'member', roleKey), 'forbidden', personRefusal(roleKey));
|
|
119
135
|
expect(await host.listScopeRoleHolders(t1, s1, who)).toEqual([{ principal: who, roleKey: 'member' }]);
|
|
120
136
|
});
|
|
121
137
|
it('canAssign answers as the door does: a reserved role is refused, a person’s role is covered', async () => {
|
|
@@ -125,7 +141,7 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
|
|
|
125
141
|
it('…and so does ctx.canAssign, inside an operation, for a caller who holds every key of the role', async () => {
|
|
126
142
|
const as = await host.getScope(alice, t1, s1);
|
|
127
143
|
await expectRefusal(as.invoke('perm/can-assign', { roleKey: 'mixed' }), 'forbidden', new RegExp(`role 'mixed' holds rsv:run.*${NO_BOUND}`));
|
|
128
|
-
await expectRefusal(as.invoke('perm/can-assign', { roleKey: 'runner' }), 'forbidden',
|
|
144
|
+
await expectRefusal(as.invoke('perm/can-assign', { roleKey: 'runner' }), 'forbidden', personRefusal('runner'));
|
|
129
145
|
expect(await as.invoke('perm/can-assign', { roleKey: 'member' })).toEqual({ covered: true, missing: [] });
|
|
130
146
|
});
|
|
131
147
|
it('a membership add of a reserved role applies nothing, and says why; its twin applies', async () => {
|
|
@@ -223,6 +239,158 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
|
|
|
223
239
|
expect(await holds(who, RSV_USE, on)).toBe(true);
|
|
224
240
|
});
|
|
225
241
|
});
|
|
242
|
+
describe('role definitions (#2447)', () => {
|
|
243
|
+
const stored = async (key) => (await host.admin.listRoles(staff, { tenantId: t1 })).find((r) => r.key === key)?.permissions;
|
|
244
|
+
it('refuses defining a person’s role carrying a reserved key, and writes nothing; its twin is defined', async () => {
|
|
245
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'crew', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'crew' is a person's role and would hold rsv:run \(a module this host registers/);
|
|
246
|
+
expect(await stored('crew')).toBeUndefined();
|
|
247
|
+
await host.admin.defineRole(staff, t1, { key: 'crew', permissions: [RSV_USE], source: 'vertical' });
|
|
248
|
+
expect(await stored('crew')).toEqual([RSV_USE]);
|
|
249
|
+
});
|
|
250
|
+
it('refuses widening a role after it was assigned: the seat keeps exactly what it held', async () => {
|
|
251
|
+
const who = person();
|
|
252
|
+
await host.admin.defineRole(staff, t1, { key: 'grows', permissions: [RSV_USE], source: 'vertical' });
|
|
253
|
+
await host.admin.assignRole(staff, { principalId: who, roleKey: 'grows', node: { tenantId: t1, scopeId: s1 } });
|
|
254
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'grows', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'grows' is a person's role and would hold rsv:run/);
|
|
255
|
+
expect(await stored('grows')).toEqual([RSV_USE]);
|
|
256
|
+
expect(await holds(who, RSV_USE)).toBe(true);
|
|
257
|
+
expect(await holds(who, RSV_RUN)).toBe(false);
|
|
258
|
+
});
|
|
259
|
+
it('revokes nothing: a seat holding a key reserved after it was seated keeps working, through a refused redefinition and a fan-out', async () => {
|
|
260
|
+
expect(await holds(legacy, RSV_RUN)).toBe(true);
|
|
261
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'mixed' is a person's role and would hold rsv:run/);
|
|
262
|
+
// A tenant-level assignment fans the stored roles out to the scopes; the stored definition
|
|
263
|
+
// is projected as it is, never re-judged, so the seat is not narrowed or dropped by it.
|
|
264
|
+
await host.admin.assignRole(staff, { principalId: person(), roleKey: 'member', node: { tenantId: t1, scopeId: null } });
|
|
265
|
+
expect(await stored('mixed')).toEqual([RSV_USE, RSV_RUN]);
|
|
266
|
+
expect(await holds(legacy, RSV_RUN)).toBe(true);
|
|
267
|
+
expect(await holds(legacy, RSV_USE)).toBe(true);
|
|
268
|
+
});
|
|
269
|
+
it('a narrowing is never refused for the key it takes out, only for a reserved key it still holds', async () => {
|
|
270
|
+
// `wide` [rsv:use, rsv:run, rsv:extra] predates the reservation (the first hook).
|
|
271
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'wide', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'wide' is a person's role and would hold rsv:run/);
|
|
272
|
+
expect(await stored('wide')).toEqual([RSV_USE, RSV_RUN, RSV_EXTRA]);
|
|
273
|
+
await host.admin.defineRole(staff, t1, { key: 'wide', permissions: [RSV_USE], source: 'vertical' });
|
|
274
|
+
expect(await stored('wide')).toEqual([RSV_USE]);
|
|
275
|
+
});
|
|
276
|
+
it('refuses a system-held role holding a key a registered module declares for a person; its twin is defined', async () => {
|
|
277
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'wide-runner', permissions: [RSV_RUN, RSV_USE], source: 'vertical', holder: 'system' }), 'forbidden', /role 'wide-runner' is declared holder: 'system' but holds rsv:use \(declared for a person by a module this host registers\)/);
|
|
278
|
+
expect(await stored('wide-runner')).toBeUndefined();
|
|
279
|
+
await host.admin.defineRole(staff, t1, { key: 'wide-runner', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
|
|
280
|
+
expect(await stored('wide-runner')).toEqual([RSV_RUN]);
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
describe('a holder change, judged against the stored role and its seats (#2447 round 1)', () => {
|
|
284
|
+
const stored = async (key) => (await host.admin.listRoles(staff, { tenantId: t1 })).find((r) => r.key === key);
|
|
285
|
+
it('refuses making a seated person’s role holder: system, and writes nothing: its seat keeps what it held', async () => {
|
|
286
|
+
const bob = person();
|
|
287
|
+
await host.admin.defineRole(staff, t1, { key: 'staffer', permissions: [RSV_USE], source: 'vertical' });
|
|
288
|
+
await host.admin.assignRole(staff, { principalId: bob, roleKey: 'staffer', node: { tenantId: t1, scopeId: s1 } });
|
|
289
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'staffer', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'staffer' is held by a principal \(stored as a person's role\), so it cannot be declared holder: 'system'/);
|
|
290
|
+
expect(await stored('staffer')).toMatchObject({ permissions: [RSV_USE], holder: 'person' });
|
|
291
|
+
expect(await holds(bob, RSV_RUN)).toBe(false);
|
|
292
|
+
expect(await holds(bob, RSV_USE)).toBe(true);
|
|
293
|
+
});
|
|
294
|
+
it('…and refuses it for a tenant-level seat too', async () => {
|
|
295
|
+
await host.admin.defineRole(staff, t1, { key: 'staffer-t', permissions: [RSV_USE], source: 'vertical' });
|
|
296
|
+
await host.admin.assignRole(staff, { principalId: person(), roleKey: 'staffer-t', node: { tenantId: t1, scopeId: null } });
|
|
297
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'staffer-t', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /held by a principal/);
|
|
298
|
+
});
|
|
299
|
+
it('refuses a system-held definition of a key someone holds with NO definition stored (round 2)', async () => {
|
|
300
|
+
// A seat made before any definition of its key: the platform's door seats an undefined role.
|
|
301
|
+
const bob = person();
|
|
302
|
+
await host.admin.assignRole(staff, { principalId: bob, roleKey: 'ghost', node: { tenantId: t1, scopeId: s1 } });
|
|
303
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'ghost', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'ghost' is held by a principal \(with no definition stored\)/);
|
|
304
|
+
expect(await stored('ghost')).toBeUndefined();
|
|
305
|
+
expect(await holds(bob, RSV_RUN)).toBe(false);
|
|
306
|
+
// Its twin: a person's definition of that key is judged as a first one, and defined.
|
|
307
|
+
await host.admin.defineRole(staff, t1, { key: 'ghost', permissions: [RSV_USE], source: 'vertical' });
|
|
308
|
+
});
|
|
309
|
+
it('counts the seats of an archived scope, which unarchive brings back (round 2)', async () => {
|
|
310
|
+
const shelf = scopeId.parse(ulid());
|
|
311
|
+
const bob = person();
|
|
312
|
+
await host.provisionScope(staff, { tenantId: t1, scopeId: shelf, vertical: 'rsv-vertical' });
|
|
313
|
+
await host.admin.activateScope(staff, t1, shelf);
|
|
314
|
+
await host.admin.defineRole(staff, t1, { key: 'shelved', permissions: [RSV_USE], source: 'vertical' });
|
|
315
|
+
await host.admin.assignRole(staff, { principalId: bob, roleKey: 'shelved', node: { tenantId: t1, scopeId: shelf } });
|
|
316
|
+
await host.admin.archiveScope(staff, t1, shelf);
|
|
317
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'shelved', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'shelved' is held by a principal/);
|
|
318
|
+
await host.admin.unarchiveScope(staff, t1, shelf);
|
|
319
|
+
expect(await host.listScopeRoleHolders(t1, shelf, bob)).toEqual([{ principal: bob, roleKey: 'shelved' }]);
|
|
320
|
+
expect(await stored('shelved')).toMatchObject({ permissions: [RSV_USE], holder: 'person' });
|
|
321
|
+
});
|
|
322
|
+
it('counts a seat in a scope archived straight from provisioning; unarchive brings it back unchanged (round 4)', async () => {
|
|
323
|
+
const early = scopeId.parse(ulid());
|
|
324
|
+
const bob = person();
|
|
325
|
+
await host.provisionScope(staff, { tenantId: t1, scopeId: early, vertical: 'rsv-vertical' }); // never activated
|
|
326
|
+
await host.admin.defineRole(staff, t1, { key: 'esc', permissions: [RSV_USE], source: 'vertical' });
|
|
327
|
+
await host.admin.assignRole(staff, { principalId: bob, roleKey: 'esc', node: { tenantId: t1, scopeId: early } });
|
|
328
|
+
await host.admin.archiveScope(staff, t1, early);
|
|
329
|
+
await expectRefusal(host.admin.defineRole(staff, t1, { key: 'esc', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'esc' is held by a principal/);
|
|
330
|
+
await host.admin.unarchiveScope(staff, t1, early);
|
|
331
|
+
expect(await host.listScopeRoleHolders(t1, early, bob)).toEqual([{ principal: bob, roleKey: 'esc' }]);
|
|
332
|
+
expect(await stored('esc')).toMatchObject({ permissions: [RSV_USE], holder: 'person' });
|
|
333
|
+
const probe = await host.getScope(bob, t1, early);
|
|
334
|
+
expect((await probe.invoke('perm/probe', { permission: RSV_RUN })).allowed).toBe(false);
|
|
335
|
+
});
|
|
336
|
+
it('twin: the same change to a role nobody holds is judged as a first definition, and admitted', async () => {
|
|
337
|
+
await host.admin.defineRole(staff, t1, { key: 'idle', permissions: [RSV_USE], source: 'vertical' });
|
|
338
|
+
await host.admin.defineRole(staff, t1, { key: 'idle', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
|
|
339
|
+
expect(await stored('idle')).toMatchObject({ permissions: [RSV_RUN], holder: 'system' });
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
describe('a host that registers no module reserving the key (#2447)', () => {
|
|
343
|
+
let bare;
|
|
344
|
+
const t = tenantId.parse(ulid());
|
|
345
|
+
const other = tenantId.parse(ulid());
|
|
346
|
+
const roster = async (tenant) => (await bare.host.admin.listRoles(staff, { tenantId: tenant })).map((r) => r.key).sort();
|
|
347
|
+
beforeAll(async () => {
|
|
348
|
+
bare = await makeFixture();
|
|
349
|
+
bare.host.registerModule(permMod); // declares nothing of rsv
|
|
350
|
+
for (const [id, slug] of [[t, 'rsv-bare'], [other, 'rsv-bare-other']]) {
|
|
351
|
+
await bare.host.admin.createTenant(staff, { id, slug: `${slug}-${id.slice(-8).toLowerCase()}`, name: 'Bare' });
|
|
352
|
+
}
|
|
353
|
+
await bare.host.admin.defineRole(staff, t, { key: 'host-runner', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
|
|
354
|
+
await bare.host.admin.defineRole(staff, t, { key: 'member', permissions: [RSV_USE], source: 'vertical' });
|
|
355
|
+
});
|
|
356
|
+
afterAll(async () => {
|
|
357
|
+
await bare?.cleanup();
|
|
358
|
+
});
|
|
359
|
+
it('learns the reservation from the tenant’s system-held roles: a person’s role carrying one of their keys is refused', async () => {
|
|
360
|
+
await expectRefusal(bare.host.admin.defineRole(staff, t, { key: 'crew', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'crew' is a person's role and would hold rsv:run \(held by the system-held role 'host-runner'\)/);
|
|
361
|
+
expect(await roster(t)).toEqual(['host-runner', 'member']);
|
|
362
|
+
});
|
|
363
|
+
it('fails open on a key it knows nothing about: with no system-held role holding it, the same role is defined', async () => {
|
|
364
|
+
await bare.host.admin.defineRole(staff, other, { key: 'crew', permissions: [RSV_USE, RSV_RUN], source: 'vertical' });
|
|
365
|
+
expect(await roster(other)).toEqual(['crew']);
|
|
366
|
+
});
|
|
367
|
+
it('judges a system-held role redefined as a person’s with its stored keys reserved (#2447 round 1); its twin is defined', async () => {
|
|
368
|
+
// A key only this role holds, so its own stored definition is the only evidence there is.
|
|
369
|
+
const SOLO = 'rsv:solo';
|
|
370
|
+
await bare.host.admin.defineRole(staff, t, { key: 'solo-runner', permissions: [SOLO], source: 'vertical', holder: 'system' });
|
|
371
|
+
await expectRefusal(bare.host.admin.defineRole(staff, t, { key: 'solo-runner', permissions: [SOLO], source: 'vertical' }), 'forbidden', /role 'solo-runner' is a person's role and would hold rsv:solo \(held by its stored system-held definition\)/);
|
|
372
|
+
expect((await bare.host.admin.listRoles(staff, { tenantId: t })).find((r) => r.key === 'solo-runner')?.holder).toBe('system');
|
|
373
|
+
await bare.host.admin.defineRole(staff, t, { key: 'solo-runner', permissions: [RSV_USE], source: 'vertical' });
|
|
374
|
+
expect((await bare.host.admin.listRoles(staff, { tenantId: t })).find((r) => r.key === 'solo-runner')?.holder).toBe('person');
|
|
375
|
+
});
|
|
376
|
+
it('a person’s door refuses the system-held role from its stored holder alone; its twin applies', async () => {
|
|
377
|
+
const boss = person();
|
|
378
|
+
await bare.host.admin.assignRole(staff, { principalId: boss, roleKey: 'member', node: { tenantId: t, scopeId: null } });
|
|
379
|
+
const add = (roleKey) => bare.host.admin.applyMembership(staff, {
|
|
380
|
+
op: 'add',
|
|
381
|
+
tenantId: t,
|
|
382
|
+
principal: person(),
|
|
383
|
+
roleKey,
|
|
384
|
+
boundedBy: boss,
|
|
385
|
+
unlessRemovedSince: instant.parse(new Date(Date.now() - 60_000).toISOString()),
|
|
386
|
+
});
|
|
387
|
+
expect(await add('host-runner')).toEqual({
|
|
388
|
+
applied: false,
|
|
389
|
+
reserved: expect.stringMatching(new RegExp(`role 'host-runner' is declared holder: 'system', a role for a system principal: ${NO_BOUND}`)),
|
|
390
|
+
});
|
|
391
|
+
expect(await add('member')).toEqual({ applied: true });
|
|
392
|
+
});
|
|
393
|
+
});
|
|
226
394
|
describe('the declared permission surface (`permissions`)', () => {
|
|
227
395
|
it('refuses to register a module the surface leaves out, naming it', async () => {
|
|
228
396
|
const other = await makeFixture({ permissions: { modules: [{ manifest: { id: '@test/elsewhere' } }] } });
|
|
@@ -248,8 +416,8 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
|
|
|
248
416
|
try {
|
|
249
417
|
declared.host.registerModule(unmarkedReservedRoleMod);
|
|
250
418
|
await declared.host.admin.createTenant(staff, { id: t, slug: `rsv-union-${t.slice(-10).toLowerCase()}`, name: 'Union' });
|
|
251
|
-
|
|
252
|
-
await expectRefusal(declared.host.admin.
|
|
419
|
+
// #2447: the role definition is where the held reservation now refuses first.
|
|
420
|
+
await expectRefusal(declared.host.admin.defineRole(staff, t, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'mixed' is a person's role and would hold rsv:run/);
|
|
253
421
|
}
|
|
254
422
|
finally {
|
|
255
423
|
await declared.cleanup();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reserved-role-suite.js","sourceRoot":"","sources":["../src/reserved-role-suite.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reserved-role-suite.js","sourceRoot":"","sources":["../src/reserved-role-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type RoleDefinition, type ScopeId, type TenantId } from '@substrat-run/contracts';
|
|
2
|
+
import { type RoleState } from '@substrat-run/kernel';
|
|
3
|
+
import type { ScopeHostFixture } from './scope-host-suite.js';
|
|
4
|
+
/**
|
|
5
|
+
* #2446: `roleStateLocal`, the state a promote judges the incoming version's role set against
|
|
6
|
+
* before it moves a scope, reads the same on both adapters: the roles the host stores for the
|
|
7
|
+
* tenant (with their holders), and the role keys anyone holds a live scope-level seat in at that
|
|
8
|
+
* scope (`SCOPE_SEATED_ROLES_SQL`). A tenant-level seat is not a scope's; a revoked seat is not a
|
|
9
|
+
* seat. It names no principal. And the promote's question over it (`releaseRoleSetRefusal`) refuses
|
|
10
|
+
* a seated person's role made `holder: 'system'` and admits its unseated twin.
|
|
11
|
+
*/
|
|
12
|
+
export declare function roleStateContractSuite(adapterName: string, makeFixture: () => Promise<ScopeHostFixture & {
|
|
13
|
+
roleState(tenantId: TenantId, scopeId: ScopeId): Promise<RoleState>;
|
|
14
|
+
/** Where a host keeps a scope-level copy of the tenant's roles (a CP-less deployment), project them there as its reconcile does. */
|
|
15
|
+
projectRoles?(tenantId: TenantId, scopeId: ScopeId, roles: RoleDefinition[]): Promise<void>;
|
|
16
|
+
}>): void;
|
|
17
|
+
//# sourceMappingURL=role-state-suite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-state-suite.d.ts","sourceRoot":"","sources":["../src/role-state-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAAuE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAChK,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CACxB,gBAAgB,GAAG;IACjB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpE,oIAAoI;IACpI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7F,CACF,GACA,IAAI,CAwEN"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
2
|
+
import { platformActorId, principalId, scopeId, tenantId } from '@substrat-run/contracts';
|
|
3
|
+
import { releaseRoleSetRefusal, ulid } from '@substrat-run/kernel';
|
|
4
|
+
/**
|
|
5
|
+
* #2446: `roleStateLocal`, the state a promote judges the incoming version's role set against
|
|
6
|
+
* before it moves a scope, reads the same on both adapters: the roles the host stores for the
|
|
7
|
+
* tenant (with their holders), and the role keys anyone holds a live scope-level seat in at that
|
|
8
|
+
* scope (`SCOPE_SEATED_ROLES_SQL`). A tenant-level seat is not a scope's; a revoked seat is not a
|
|
9
|
+
* seat. It names no principal. And the promote's question over it (`releaseRoleSetRefusal`) refuses
|
|
10
|
+
* a seated person's role made `holder: 'system'` and admits its unseated twin.
|
|
11
|
+
*/
|
|
12
|
+
export function roleStateContractSuite(adapterName, makeFixture) {
|
|
13
|
+
describe(`a scope's role state, as a promote reads it (#2446): ${adapterName}`, () => {
|
|
14
|
+
let fixture;
|
|
15
|
+
const staff = platformActorId.parse(ulid());
|
|
16
|
+
const t = tenantId.parse(ulid());
|
|
17
|
+
const s = scopeId.parse(ulid());
|
|
18
|
+
const other = scopeId.parse(ulid());
|
|
19
|
+
const alice = principalId.parse(ulid());
|
|
20
|
+
const bob = principalId.parse(ulid());
|
|
21
|
+
const carol = principalId.parse(ulid());
|
|
22
|
+
const USE = 'rst:use';
|
|
23
|
+
const RUN = 'rst:run';
|
|
24
|
+
const flip = {
|
|
25
|
+
permissions: [{ key: USE }, { key: RUN, holder: 'system' }],
|
|
26
|
+
roles: [{ key: 'member', permissions: [RUN], holder: 'system' }],
|
|
27
|
+
};
|
|
28
|
+
beforeAll(async () => {
|
|
29
|
+
fixture = await makeFixture();
|
|
30
|
+
const { host } = fixture;
|
|
31
|
+
await host.admin.createTenant(staff, { id: t, slug: `role-state-${t.slice(-8).toLowerCase()}`, name: 'Role state' });
|
|
32
|
+
for (const id of [s, other]) {
|
|
33
|
+
await host.provisionScope(staff, { tenantId: t, scopeId: id, vertical: 'role-state' });
|
|
34
|
+
await host.admin.activateScope(staff, t, id);
|
|
35
|
+
}
|
|
36
|
+
const roles = [
|
|
37
|
+
{ key: 'member', permissions: [USE], source: 'vertical' },
|
|
38
|
+
{ key: 'runner', permissions: [RUN], source: 'vertical', holder: 'system' },
|
|
39
|
+
{ key: 'tenant-wide', permissions: [USE], source: 'vertical' },
|
|
40
|
+
{ key: 'elsewhere', permissions: [USE], source: 'vertical' },
|
|
41
|
+
];
|
|
42
|
+
for (const role of roles)
|
|
43
|
+
await host.admin.defineRole(staff, t, role);
|
|
44
|
+
for (const id of [s, other])
|
|
45
|
+
await fixture.projectRoles?.(t, id, roles);
|
|
46
|
+
await host.admin.assignRole(staff, { principalId: alice, roleKey: 'member', node: { tenantId: t, scopeId: s } });
|
|
47
|
+
await host.admin.assignRole(staff, { principalId: bob, roleKey: 'tenant-wide', node: { tenantId: t, scopeId: null } });
|
|
48
|
+
await host.admin.assignRole(staff, { principalId: carol, roleKey: 'elsewhere', node: { tenantId: t, scopeId: other } });
|
|
49
|
+
});
|
|
50
|
+
afterAll(async () => fixture?.cleanup());
|
|
51
|
+
it('reads the tenant’s stored roles with their holders, and the scope-level seats there', async () => {
|
|
52
|
+
const state = await fixture.roleState(t, s);
|
|
53
|
+
const byKey = Object.fromEntries(state.roles.map((r) => [r.key, r]));
|
|
54
|
+
expect(byKey['member']).toMatchObject({ key: 'member', permissions: [USE] });
|
|
55
|
+
expect(byKey['member']?.holder ?? 'person').toBe('person');
|
|
56
|
+
expect(byKey['runner']).toEqual({ key: 'runner', permissions: [RUN], holder: 'system' });
|
|
57
|
+
// A tenant-level seat (bob's) is not this scope's.
|
|
58
|
+
expect(state.seated).toEqual(['member']);
|
|
59
|
+
// A seat in another scope of the tenant is that scope's, not this one's.
|
|
60
|
+
expect((await fixture.roleState(t, other)).seated).toEqual(['elsewhere']);
|
|
61
|
+
});
|
|
62
|
+
it('names role keys only, never a principal', async () => {
|
|
63
|
+
const wire = JSON.stringify(await fixture.roleState(t, s));
|
|
64
|
+
expect(wire).not.toContain(alice);
|
|
65
|
+
expect(wire).not.toContain(bob);
|
|
66
|
+
expect(JSON.stringify(await fixture.roleState(t, other))).not.toContain(carol);
|
|
67
|
+
});
|
|
68
|
+
it('the promote’s question over it refuses a seated person’s role made holder: system; twin: another scope passes', async () => {
|
|
69
|
+
expect(releaseRoleSetRefusal(flip, await fixture.roleState(t, s))).toMatch(/^role 'member' is held by a principal \(stored as a person's role\), so it cannot be declared holder: 'system'/);
|
|
70
|
+
expect(releaseRoleSetRefusal(flip, await fixture.roleState(t, other))).toBeNull();
|
|
71
|
+
});
|
|
72
|
+
it('a revoked seat is no seat, and the same release then passes', async () => {
|
|
73
|
+
await fixture.host.admin.unassignRole(staff, { principalId: alice, roleKey: 'member', node: { tenantId: t, scopeId: s } });
|
|
74
|
+
const state = await fixture.roleState(t, s);
|
|
75
|
+
expect(state.seated).toEqual([]);
|
|
76
|
+
expect(releaseRoleSetRefusal(flip, state)).toBeNull();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=role-state-suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-state-suite.js","sourceRoot":"","sources":["../src/role-state-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ScopeHostFixture } from './scope-host-suite.js';
|
|
2
|
+
import type { RawScopeSql } from './entity-state-suite.js';
|
|
2
3
|
/**
|
|
3
4
|
* Contract suite for #2431: a scheduled pass REPORTS the platform requests its fires enqueued, so
|
|
4
5
|
* the sweep that ran it can drain the scope in the same pass instead of leaving them a sweep
|
|
@@ -8,5 +9,10 @@ import type { ScopeHostFixture } from './scope-host-suite.js';
|
|
|
8
9
|
* `runDueSchedules` is called directly, never a sweep, so registering this module changes no
|
|
9
10
|
* other suite's fired/skipped counts, and the shared directory is safe.
|
|
10
11
|
*/
|
|
11
|
-
export declare function schedulePlatformRequestsContractSuite(adapterName: string, makeFixture: () => Promise<ScopeHostFixture
|
|
12
|
+
export declare function schedulePlatformRequestsContractSuite(adapterName: string, makeFixture: () => Promise<ScopeHostFixture>,
|
|
13
|
+
/**
|
|
14
|
+
* Runs SQL against a scope's own storage — to age a binned row past its purge horizon. Optional so
|
|
15
|
+
* the export stays additive: without it the purge-horizon cases are skipped, the rest run.
|
|
16
|
+
*/
|
|
17
|
+
raw?: RawScopeSql): void;
|
|
12
18
|
//# sourceMappingURL=schedule-platform-requests-suite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-platform-requests-suite.d.ts","sourceRoot":"","sources":["../src/schedule-platform-requests-suite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule-platform-requests-suite.d.ts","sourceRoot":"","sources":["../src/schedule-platform-requests-suite.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAwB3D;;;;;;;;GAQG;AACH,wBAAgB,qCAAqC,CACnD,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC;AAC5C;;;GAGG;AACH,GAAG,CAAC,EAAE,WAAW,GAChB,IAAI,CA4ZN"}
|