@adminiumjs/manifest 0.3.27 → 0.3.29

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 (83) hide show
  1. package/dist/app-grants.d.ts +134 -0
  2. package/dist/app-grants.d.ts.map +1 -0
  3. package/dist/app-grants.js +263 -0
  4. package/dist/app-grants.js.map +1 -0
  5. package/dist/automations.d.ts +2255 -58
  6. package/dist/automations.d.ts.map +1 -1
  7. package/dist/automations.js +450 -25
  8. package/dist/automations.js.map +1 -1
  9. package/dist/compose.d.ts.map +1 -1
  10. package/dist/compose.js +3 -0
  11. package/dist/compose.js.map +1 -1
  12. package/dist/documents.d.ts +1 -0
  13. package/dist/documents.d.ts.map +1 -1
  14. package/dist/documents.js +2 -0
  15. package/dist/documents.js.map +1 -1
  16. package/dist/index.d.ts +11 -5
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +10 -4
  19. package/dist/index.js.map +1 -1
  20. package/dist/ledgers.d.ts.map +1 -1
  21. package/dist/ledgers.js +2 -0
  22. package/dist/ledgers.js.map +1 -1
  23. package/dist/modules.d.ts +93 -0
  24. package/dist/modules.d.ts.map +1 -0
  25. package/dist/modules.js +489 -0
  26. package/dist/modules.js.map +1 -0
  27. package/dist/occupies.d.ts +50 -0
  28. package/dist/occupies.d.ts.map +1 -0
  29. package/dist/occupies.js +123 -0
  30. package/dist/occupies.js.map +1 -0
  31. package/dist/outbox.d.ts +223 -17
  32. package/dist/outbox.d.ts.map +1 -1
  33. package/dist/outbox.js +125 -13
  34. package/dist/outbox.js.map +1 -1
  35. package/dist/page-board.d.ts +144 -0
  36. package/dist/page-board.d.ts.map +1 -0
  37. package/dist/page-board.js +280 -0
  38. package/dist/page-board.js.map +1 -0
  39. package/dist/plan-context.d.ts.map +1 -1
  40. package/dist/plan-context.js +3 -0
  41. package/dist/plan-context.js.map +1 -1
  42. package/dist/plan-model.d.ts +7 -0
  43. package/dist/plan-model.d.ts.map +1 -1
  44. package/dist/public-access.d.ts +6 -0
  45. package/dist/public-access.d.ts.map +1 -1
  46. package/dist/public-access.js +75 -1
  47. package/dist/public-access.js.map +1 -1
  48. package/dist/rail.d.ts +50 -0
  49. package/dist/rail.d.ts.map +1 -0
  50. package/dist/rail.js +122 -0
  51. package/dist/rail.js.map +1 -0
  52. package/dist/roles.d.ts +647 -1
  53. package/dist/roles.d.ts.map +1 -1
  54. package/dist/roles.js +459 -3
  55. package/dist/roles.js.map +1 -1
  56. package/dist/sample.d.ts +62 -0
  57. package/dist/sample.d.ts.map +1 -1
  58. package/dist/sample.js +203 -4
  59. package/dist/sample.js.map +1 -1
  60. package/dist/schema.d.ts +4349 -169
  61. package/dist/schema.d.ts.map +1 -1
  62. package/dist/schema.js +540 -41
  63. package/dist/schema.js.map +1 -1
  64. package/dist/shapes.d.ts +3 -2
  65. package/dist/shapes.d.ts.map +1 -1
  66. package/dist/shapes.js +76 -7
  67. package/dist/shapes.js.map +1 -1
  68. package/dist/state-actions.d.ts +4 -0
  69. package/dist/state-actions.d.ts.map +1 -1
  70. package/dist/state-actions.js +7 -0
  71. package/dist/state-actions.js.map +1 -1
  72. package/dist/states.d.ts +20 -1
  73. package/dist/states.d.ts.map +1 -1
  74. package/dist/states.js +47 -5
  75. package/dist/states.js.map +1 -1
  76. package/dist/validate.d.ts.map +1 -1
  77. package/dist/validate.js +110 -3
  78. package/dist/validate.js.map +1 -1
  79. package/dist/words.d.ts +1 -1
  80. package/dist/words.d.ts.map +1 -1
  81. package/dist/words.js +332 -1
  82. package/dist/words.js.map +1 -1
  83. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAsC,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvH,yBAAyB;AACzB,eAAO,MAAM,eAAe;;;;;;;kBAkBxB,CAAC;AACL,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB;;;;;;;mBAAuC,CAAC;AAErE,sCAAsC;AACtC,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;CAC1D;AAQD,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,CAwE1H;AAED,kHAAkH;AAClH,eAAO,MAAM,mBAAmB,uCAAwC,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;kBAOtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;mBAA+C,CAAC;AAElF,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAAA;CAAE,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,cAAc,EAAE,CA4BpK"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"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"}
package/dist/roles.js CHANGED
@@ -37,9 +37,106 @@
37
37
  *
38
38
  * `writableValues` holds what a column is moved TO; this, what it is moved
39
39
  * FROM. It is judged on the stored row, whatever columns the update changes.
40
+ *
41
+ * `rows` says which ROWS the role's read, update or delete reaches, when it
42
+ * does not reach every row. A rep reads the deals they own and a manager the
43
+ * deals of the teams they lead:
44
+ *
45
+ * ```json
46
+ * "rows": { "read": { "reach": "own" }, "update": { "reach": "own" } }
47
+ * ```
48
+ *
49
+ * A row is somebody's by what its table says of it (`belongs`, below): a
50
+ * column that holds a staff member, a table that lists people against the
51
+ * row, or the row it hangs off. `unowned` adds the rows that are nobody's
52
+ * yet, and `while` keeps only the rows whose column holds one of some values
53
+ * now. Roles add up here too: someone whose other role reads the table with
54
+ * no `rows` reads every row.
55
+ *
56
+ * An action may also name SEVERAL reaches, any one of which is enough: an
57
+ * account manager reads every won deal, and an open one only while he is
58
+ * listed on it —
59
+ *
60
+ * ```json
61
+ * "rows": { "read": [{ "reach": "all", "while": { "column": "state", "in": ["won"] } }, { "reach": "own" }] }
62
+ * ```
63
+ *
64
+ * Each reach is its own whole test (its `while` and its `by` hold for it
65
+ * alone), as two roles' reaches are.
40
66
  */
41
67
  import { z } from 'zod';
42
68
  import { refSchema, scalarSchema, valueFits } from './refs.js';
69
+ /** How far one action reaches: the person's own rows, their teams', or every row (only `while` some value). */
70
+ export const ROW_REACHES = ['own', 'team', 'all'];
71
+ export const rowReachSchema = z
72
+ .object({
73
+ reach: z.enum(ROW_REACHES),
74
+ /** Also the rows nobody belongs to yet (an inbox everyone picks from). */
75
+ unowned: z.literal(true).optional(),
76
+ /** Only rows whose column holds, now, one of these values. */
77
+ while: z.object({ column: refSchema, in: z.array(scalarSchema).min(1).max(32) }).strict().optional(),
78
+ /**
79
+ * And only the rows this staff column of the table names the person in (with `team`, somebody they lead). For a
80
+ * table reached through a parent: "the notes of the deals they reach" to read, "the notes they wrote" to change.
81
+ */
82
+ by: refSchema.optional(),
83
+ })
84
+ .strict()
85
+ .refine((reach) => reach.reach !== 'all' || reach.by === undefined, { message: '`by` narrows the person\'s own rows or their team\'s: with every row, say `while`' })
86
+ .refine((reach) => reach.reach !== 'all' || reach.while !== undefined, { message: 'a reach of every row is no limit: leave the action out, or say `while`' })
87
+ .refine((reach) => reach.reach !== 'all' || reach.unowned === undefined, { message: 'every row includes the rows nobody owns' });
88
+ /** The actions a row limit narrows. A create makes a new row: it is held by the links and people it names. */
89
+ export const ROW_LIMIT_ACTIONS = ['read', 'update', 'delete'];
90
+ /** The most reaches one action names. */
91
+ export const ROW_REACHES_MAX = 4;
92
+ /** One action's reach, or several of which any one is enough (every won deal, or an open one the person is listed on). */
93
+ export const rowReachesSchema = z.union([rowReachSchema, z.array(rowReachSchema).min(1).max(ROW_REACHES_MAX)]);
94
+ /** An action's reaches as a list, whether the manifest wrote one or several. */
95
+ export function reachList(reaches) {
96
+ return reaches === undefined ? [] : Array.isArray(reaches) ? reaches : [reaches];
97
+ }
98
+ /** Which rows a role's read, update and delete reach, each on its own. */
99
+ export const rowsLimitSchema = z
100
+ .object({ read: rowReachesSchema.optional(), update: rowReachesSchema.optional(), delete: rowReachesSchema.optional() })
101
+ .strict()
102
+ .refine((rows) => rows.read !== undefined || rows.update !== undefined || rows.delete !== undefined, { message: 'name the action whose rows are limited: read, update or delete' });
103
+ /** Who a person who is limited to some rows may put in a staff column: themselves, someone they reach, or anyone. */
104
+ export const STAFF_SET_RULES = ['self', 'team', 'anyone'];
105
+ /** What a listing row must hold to count: one of some values in a column, or a column empty (or not). */
106
+ export const listingWhileSchema = z.union([
107
+ z.object({ column: refSchema, in: z.array(scalarSchema).min(1).max(32) }).strict(),
108
+ z.object({ column: refSchema, isNull: z.boolean() }).strict(),
109
+ ]);
110
+ /**
111
+ * One way a person belongs to a row of the table:
112
+ *
113
+ * - `column`: the staff member this column holds; with `person`, the column
114
+ * is a link and `person` the staff column of the row it points at (a
115
+ * ticket's agent, whose own row holds the staff member);
116
+ * - `through`: a table that lists people against the row — its `link` holds
117
+ * this row's key (or this row's `on` column), its `user` the staff member
118
+ * (or, with `person`, a link to the row that holds one), `from` / `to`
119
+ * the days the listing counts on, both `date` columns (cover for a colleague on leave),
120
+ * and `while` a column of the listing it counts only while it holds one of
121
+ * some values, or while it is empty or not (`isNull`): a member row whose
122
+ * `ended_at` is set lists nobody;
123
+ * - `via`: whoever belongs to the row this link points at (a quote's deal).
124
+ */
125
+ export const belongsWaySchema = z.union([
126
+ z.object({ column: refSchema, person: refSchema.optional(), set: z.enum(STAFF_SET_RULES).optional() }).strict(),
127
+ z
128
+ .object({
129
+ through: z
130
+ .object({ table: refSchema, link: refSchema, on: refSchema.optional(), user: refSchema, person: refSchema.optional(), from: refSchema.optional(), to: refSchema.optional(), while: listingWhileSchema.optional() })
131
+ .strict(),
132
+ })
133
+ .strict(),
134
+ z.object({ via: refSchema }).strict(),
135
+ ]);
136
+ /** The ways people belong to a table's rows: any one is enough. */
137
+ export const belongsSchema = z.array(belongsWaySchema).min(1).max(6);
138
+ /** How many links a `via` may follow before it reaches a table people belong to directly. */
139
+ export const BELONGS_VIA_MAX_STEPS = 2;
43
140
  /** One table's limit. */
44
141
  export const roleLimitSchema = z
45
142
  .object({
@@ -55,10 +152,12 @@ export const roleLimitSchema = z
55
152
  creatable: z.array(refSchema).min(1).optional(),
56
153
  /** For some of those columns, the only values a new row may be given. */
57
154
  creatableValues: z.record(refSchema, z.array(scalarSchema).min(1).max(32)).optional(),
155
+ /** The only rows its read, update or delete reaches. */
156
+ rows: rowsLimitSchema.optional(),
58
157
  })
59
158
  .strict()
60
- .refine((limit) => limit.writable !== undefined || limit.readable !== undefined || limit.creatable !== undefined, {
61
- message: 'a limit names what the role may write (writable), read (readable) or create with (creatable)',
159
+ .refine((limit) => limit.writable !== undefined || limit.readable !== undefined || limit.creatable !== undefined || limit.rows !== undefined, {
160
+ message: 'a limit names what the role may write (writable), read (readable) or create with (creatable), or which rows it reaches (rows)',
62
161
  });
63
162
  /** Per table ref, the limit on the role's update there. */
64
163
  export const roleLimitsSchema = z.record(refSchema, roleLimitSchema);
@@ -68,7 +167,7 @@ function grantsOf(role, roles) {
68
167
  return new Set([...(from?.permissions ?? []), ...(role.permissions ?? [])]);
69
168
  }
70
169
  /** Every `limits` problem across the app's roles. */
71
- export function roleLimitIssues(roles, index) {
170
+ export function roleLimitIssues(roles, index, rowTables) {
72
171
  const out = [];
73
172
  roles.forEach((role, r) => {
74
173
  const grants = grantsOf(role, roles);
@@ -149,10 +248,222 @@ export function roleLimitIssues(roles, index) {
149
248
  out.push({ path: at('creatableValues', column), message: `${JSON.stringify(value)} is not a value of "${ref}.${column}"` });
150
249
  }
151
250
  }
251
+ for (const action of ROW_LIMIT_ACTIONS) {
252
+ const written = limit.rows?.[action];
253
+ if (written === undefined)
254
+ continue;
255
+ if (!grants.has(`table:@${ref}:${action}`))
256
+ out.push({ path: at('rows', action), message: `the role does not grant table:@${ref}:${action}, so there is nothing to limit` });
257
+ const several = Array.isArray(written);
258
+ const seen = new Set();
259
+ reachList(written).forEach((reach, n) => {
260
+ // Where one reach of several is written: its place in the list.
261
+ const where = (...rest) => at('rows', action, ...(several ? [n] : []), ...rest);
262
+ const key = JSON.stringify(reach);
263
+ if (seen.has(key))
264
+ out.push({ path: where(), message: 'this reach is written twice' });
265
+ seen.add(key);
266
+ if (reach.reach !== 'all' && rowTables?.belongs(ref) !== true) {
267
+ out.push({ path: where('reach'), message: `"${ref}" does not say how people belong to its rows: give the table "belongs"` });
268
+ }
269
+ if (reach.unowned === true && rowTables?.belongs(ref) !== true) {
270
+ out.push({ path: where('unowned'), message: `"${ref}" does not say how people belong to its rows, so none is unowned` });
271
+ }
272
+ if (reach.while !== undefined) {
273
+ const found = index.column(ref, reach.while.column);
274
+ if (found === undefined)
275
+ out.push({ path: where('while', 'column'), message: `"${ref}" has no column "${reach.while.column}"` });
276
+ else
277
+ for (const value of reach.while.in) {
278
+ if (!valueFits(found, value))
279
+ out.push({ path: where('while', 'in'), message: `${JSON.stringify(value)} is not a value of "${ref}.${reach.while.column}"` });
280
+ }
281
+ }
282
+ if (reach.by !== undefined) {
283
+ const found = index.column(ref, reach.by);
284
+ if (found === undefined)
285
+ out.push({ path: where('by'), message: `"${ref}" has no column "${reach.by}"` });
286
+ else if (found.rules?.staff !== true)
287
+ out.push({ path: where('by'), message: `"${ref}.${reach.by}" does not hold a staff member (rules.staff): \`by\` names the column that says who a row is by` });
288
+ }
289
+ });
290
+ }
291
+ }
292
+ // A private table: every action the role holds there reaches the person's own rows, and no others.
293
+ for (const ref of rowTables?.privateTables() ?? []) {
294
+ const limit = role.cloneFrom === undefined ? role.limits?.[ref] : (role.limits?.[ref] ?? roles.find((other) => other.key === role.cloneFrom)?.limits?.[ref]);
295
+ for (const action of ROW_LIMIT_ACTIONS) {
296
+ if (!grants.has(`table:@${ref}:${action}`))
297
+ continue;
298
+ const written = limit?.rows?.[action];
299
+ const reach = Array.isArray(written) ? (written.length === 1 ? written[0] : undefined) : written;
300
+ if (reach === undefined || reach.reach !== 'own' || reach.unowned !== undefined || reach.while !== undefined || reach.by !== undefined) {
301
+ out.push({ path: ['roles', r, 'limits', ref, 'rows', action], message: `"${ref}" is private: the role's ${action} reaches the person's own rows only ({ "reach": "own" })` });
302
+ }
303
+ }
304
+ for (const action of ['export', 'import']) {
305
+ if (grants.has(`table:@${ref}:${action}`))
306
+ out.push({ path: ['roles', r, 'permissions'], message: `"${ref}" is private: it is not ${action}ed (table:@${ref}:${action})` });
307
+ }
152
308
  }
153
309
  });
154
310
  return out;
155
311
  }
312
+ export function rowTablesOf(tables) {
313
+ const byRef = new Map(tables.map((table) => [table.ref, table]));
314
+ return {
315
+ belongs: (ref) => byRef.get(ref)?.belongs !== undefined,
316
+ privateTables: () => tables.filter((table) => table.private === true).map((table) => table.ref),
317
+ };
318
+ }
319
+ /**
320
+ * Every problem of the tables' `belongs` and `private`: a column that is not
321
+ * there or not of the kind the way needs, a `via` that never reaches a table
322
+ * people belong to directly, and a private table that is reached any way but
323
+ * by its own staff columns.
324
+ */
325
+ export function belongsIssues(tables, index, isStaff) {
326
+ const out = [];
327
+ const byRef = new Map(tables.map((table) => [table.ref, table]));
328
+ // A listing counts by the day: a time of day would make "today" a question of whose clock.
329
+ const DATES = ['date'];
330
+ /** The staff column `column` of `table`, or — with `person` — the link `column` and the staff column of the row it points at. */
331
+ const person = (table, column, personRef, at, key) => {
332
+ const found = index.column(table, column);
333
+ if (found === undefined) {
334
+ out.push({ path: [...at, key], message: `"${table}" has no column "${column}"` });
335
+ return;
336
+ }
337
+ if (personRef === undefined) {
338
+ if (!isStaff(table, column))
339
+ out.push({ path: [...at, key], message: `"${table}.${column}" does not hold a staff member: mark it (rules.staff), or say which column of the row it links to does (person)` });
340
+ return;
341
+ }
342
+ if (found.type !== 'fk' || found.references === undefined) {
343
+ out.push({ path: [...at, key], message: `"${table}.${column}" is not a link, so there is no row to read "${personRef}" from` });
344
+ return;
345
+ }
346
+ if (index.column(found.references, personRef) === undefined)
347
+ out.push({ path: [...at, 'person'], message: `"${found.references}" has no column "${personRef}"` });
348
+ else if (!isStaff(found.references, personRef))
349
+ out.push({ path: [...at, 'person'], message: `"${found.references}.${personRef}" does not hold a staff member (rules.staff)` });
350
+ };
351
+ /** The table a `via` of `table` points at, when it is a link. */
352
+ const parentOf = (table, via) => {
353
+ const found = index.column(table, via);
354
+ return found?.type === 'fk' ? found.references : undefined;
355
+ };
356
+ tables.forEach((table, t) => {
357
+ const here = ['requiredSchema', 'tables', t];
358
+ if (table.private === true && table.belongs === undefined)
359
+ out.push({ path: [...here, 'private'], message: 'a private table says whose its rows are: give it "belongs"' });
360
+ (table.belongs ?? []).forEach((way, w) => {
361
+ const at = [...here, 'belongs', w];
362
+ if ('column' in way) {
363
+ person(table.ref, way.column, way.person, at, 'column');
364
+ if (table.private === true && way.person !== undefined)
365
+ out.push({ path: [...at, 'person'], message: 'a private table is reached by its own staff columns only' });
366
+ return;
367
+ }
368
+ if (table.private === true) {
369
+ out.push({ path: at, message: 'a private table is reached by its own staff columns only' });
370
+ return;
371
+ }
372
+ if ('through' in way) {
373
+ const through = way.through;
374
+ const list = byRef.get(through.table);
375
+ if (list === undefined) {
376
+ out.push({ path: [...at, 'through', 'table'], message: `"${through.table}" is not a table of this manifest` });
377
+ return;
378
+ }
379
+ if (through.table === table.ref)
380
+ out.push({ path: [...at, 'through', 'table'], message: 'a table does not list the people of its own rows: use a column' });
381
+ const link = index.column(through.table, through.link);
382
+ if (link === undefined)
383
+ out.push({ path: [...at, 'through', 'link'], message: `"${through.table}" has no column "${through.link}"` });
384
+ const on = through.on === undefined ? index.pk(table.ref) : index.column(table.ref, through.on);
385
+ if (on === undefined)
386
+ out.push({ path: [...at, 'through', through.on === undefined ? 'link' : 'on'], message: through.on === undefined ? `"${table.ref}" declares no key for "${through.table}.${through.link}" to hold: name the column it matches (on)` : `"${table.ref}" has no column "${through.on}"` });
387
+ // The two columns are compared as they are stored: a link to this table when it holds its key, else the same kind of column.
388
+ if (link !== undefined && on !== undefined && through.on === undefined && !(link.type === 'fk' && link.references === table.ref)) {
389
+ out.push({ path: [...at, 'through', 'link'], message: `"${through.table}.${through.link}" is not a link to "${table.ref}": name the column of "${table.ref}" it matches (on)` });
390
+ }
391
+ person(through.table, through.user, through.person, [...at, 'through'], 'user');
392
+ for (const key of ['from', 'to']) {
393
+ const ref = through[key];
394
+ if (ref === undefined)
395
+ continue;
396
+ const found = index.column(through.table, ref);
397
+ if (found === undefined)
398
+ out.push({ path: [...at, 'through', key], message: `"${through.table}" has no column "${ref}"` });
399
+ else if (!DATES.includes(found.type))
400
+ out.push({ path: [...at, 'through', key], message: `"${through.table}.${ref}" is not a date` });
401
+ }
402
+ // Counts only while a column of the listing holds some values, or is empty (or not).
403
+ const when = through.while;
404
+ if (when !== undefined) {
405
+ const found = index.column(through.table, when.column);
406
+ if (found === undefined)
407
+ out.push({ path: [...at, 'through', 'while', 'column'], message: `"${through.table}" has no column "${when.column}"` });
408
+ else if ('in' in when) {
409
+ for (const value of when.in) {
410
+ if (!valueFits(found, value))
411
+ out.push({ path: [...at, 'through', 'while', 'in'], message: `${JSON.stringify(value)} is not a value of "${through.table}.${when.column}"` });
412
+ }
413
+ }
414
+ else if (found.nullable !== true) {
415
+ // A column that is never empty: the listing would count always, or never.
416
+ out.push({ path: [...at, 'through', 'while', 'isNull'], message: `"${through.table}.${when.column}" is never empty, so the listing would count ${when.isNull ? 'never' : 'always'}: make it nullable, or name the values it counts for (in)` });
417
+ }
418
+ if (when.column === through.user || when.column === through.link)
419
+ out.push({ path: [...at, 'through', 'while', 'column'], message: 'the listing counts while one of its other columns holds a value: not the person, nor the link' });
420
+ }
421
+ return;
422
+ }
423
+ const parent = parentOf(table.ref, way.via);
424
+ if (index.column(table.ref, way.via) === undefined) {
425
+ out.push({ path: [...at, 'via'], message: `"${table.ref}" has no column "${way.via}"` });
426
+ return;
427
+ }
428
+ if (parent === undefined || byRef.get(parent) === undefined) {
429
+ out.push({ path: [...at, 'via'], message: `"${table.ref}.${way.via}" is not a link to a table of this manifest` });
430
+ return;
431
+ }
432
+ // Followed until a table people belong to directly, within the steps a read can afford.
433
+ const reaches = (ref, steps, seen) => {
434
+ const ways = byRef.get(ref)?.belongs;
435
+ if (ways === undefined)
436
+ return 'none';
437
+ if (seen.has(ref))
438
+ return 'loop';
439
+ let worst = 'ok';
440
+ for (const other of ways) {
441
+ if (!('via' in other))
442
+ continue;
443
+ if (steps >= BELONGS_VIA_MAX_STEPS)
444
+ return 'far';
445
+ const next = parentOf(ref, other.via);
446
+ if (next === undefined)
447
+ continue;
448
+ const answer = reaches(next, steps + 1, new Set([...seen, ref]));
449
+ if (answer !== 'ok')
450
+ worst = answer;
451
+ }
452
+ return worst;
453
+ };
454
+ const answer = reaches(parent, 1, new Set([table.ref]));
455
+ if (answer === 'none')
456
+ out.push({ path: [...at, 'via'], message: `"${parent}" does not say how people belong to its rows: give it "belongs"` });
457
+ else if (answer === 'loop')
458
+ out.push({ path: [...at, 'via'], message: `"${table.ref}" is reached through "${parent}", which is reached through "${table.ref}"` });
459
+ else if (answer === 'far')
460
+ out.push({ path: [...at, 'via'], message: `a row is reached through at most ${String(BELONGS_VIA_MAX_STEPS)} links` });
461
+ if (byRef.get(parent)?.private === true)
462
+ out.push({ path: [...at, 'via'], message: `"${parent}" is private: no other table's rows are reached through it` });
463
+ });
464
+ });
465
+ return out;
466
+ }
156
467
  /** What a role may do on a table of an add-on: read it, add rows, change rows. Never delete, export or import. */
157
468
  export const ROLE_ADD_ON_ACTIONS = ['read', 'create', 'update'];
158
469
  /**
@@ -193,6 +504,19 @@ export function roleAddOnTableIssues(roles, named) {
193
504
  if (limit[key] !== undefined && !grant.actions.includes(action))
194
505
  out.push({ path: at('limit', key), message: `the grant has no "${action}", so there is nothing for "${key}" to limit` });
195
506
  }
507
+ for (const action of ROW_LIMIT_ACTIONS) {
508
+ const written = limit.rows?.[action];
509
+ if (written === undefined)
510
+ continue;
511
+ // An add-on's grant is read, create and update: its rows are never deleted through one.
512
+ if (!grant.actions.includes(action))
513
+ out.push({ path: at('limit', 'rows', action), message: `the grant has no "${action}", so there is nothing for its rows to limit` });
514
+ // An add-on's table does not say whose its rows are yet: its rows are limited by a value only.
515
+ reachList(written).forEach((reach, n) => {
516
+ if (reach.reach !== 'all' || reach.unowned !== undefined)
517
+ out.push({ path: at('limit', 'rows', action, ...(Array.isArray(written) ? [n] : []), 'reach'), message: 'an add-on\'s table does not say how people belong to its rows: limit it by a value ({ "reach": "all", "while": … })' });
518
+ });
519
+ }
196
520
  for (const [values, columns] of [['writableValues', 'writable'], ['creatableValues', 'creatable']]) {
197
521
  for (const column of Object.keys(limit[values] ?? {})) {
198
522
  if (!(limit[columns] ?? []).includes(column))
@@ -206,4 +530,136 @@ export function roleAddOnTableIssues(roles, named) {
206
530
  });
207
531
  return out;
208
532
  }
533
+ /**
534
+ * The ways a manifest's own tables could carry a private table's rows out
535
+ * from under it, or lean on it and stop working: each is refused where it is
536
+ * written. A private table's rows are read on the screen by the people they
537
+ * belong to; nothing is kept from them elsewhere, nothing else is reached
538
+ * through them, and nothing Adminium does by itself runs on them.
539
+ */
540
+ export function privateShapeIssues(tables) {
541
+ const held = new Set(tables.filter((table) => table.private === true).map((table) => table.ref));
542
+ if (held.size === 0)
543
+ return [];
544
+ const out = [];
545
+ const said = (ref, what) => `"${ref}" is private: only the people its rows belong to read it, so ${what}`;
546
+ tables.forEach((table, t) => {
547
+ const at = (...rest) => ['requiredSchema', 'tables', t, ...rest];
548
+ const pointsAt = (column) => table.columns.find((candidate) => candidate.ref === column)?.references;
549
+ if (table.private === true) {
550
+ // What Adminium does by itself, for everybody: a ledger's postings, a price rule, a move when a moment passes.
551
+ if (table.postings !== undefined)
552
+ out.push({ path: at('postings'), message: said(table.ref, 'no ledger takes its rows') });
553
+ if (table.adjust !== undefined)
554
+ out.push({ path: at('adjust'), message: said(table.ref, 'no price rule reads its rows') });
555
+ if (table.states?.timed !== undefined)
556
+ out.push({ path: at('states', 'timed'), message: said(table.ref, 'nothing moves its rows by itself') });
557
+ return;
558
+ }
559
+ table.columns.forEach((column, c) => {
560
+ const rules = column.rules;
561
+ if (rules?.rollup !== undefined && held.has(rules.rollup.from))
562
+ out.push({ path: at('columns', c, 'rules', 'rollup', 'from'), message: said(rules.rollup.from, 'no total of its rows is kept on another table') });
563
+ const copied = rules?.copy === undefined ? undefined : pointsAt(rules.copy.via);
564
+ if (copied !== undefined && held.has(copied))
565
+ out.push({ path: at('columns', c, 'rules', 'copy', 'via'), message: said(copied, 'nothing is copied out of it') });
566
+ const looked = rules?.lookup?.table;
567
+ if (typeof looked === 'string' && held.has(looked))
568
+ out.push({ path: at('columns', c, 'rules', 'lookup', 'table'), message: said(looked, 'nothing is looked up in it') });
569
+ });
570
+ (table.states?.effects ?? []).forEach((effect, e) => {
571
+ const target = effect.via === undefined ? undefined : pointsAt(effect.via);
572
+ if (target !== undefined && held.has(target))
573
+ out.push({ path: at('states', 'effects', e, 'via'), message: said(target, "another table's move does not move its rows") });
574
+ });
575
+ (table.belongs ?? []).forEach((way, w) => {
576
+ if (typeof way !== 'object' || way === null)
577
+ return;
578
+ const through = way.through;
579
+ if (through?.table !== undefined && held.has(through.table))
580
+ out.push({ path: at('belongs', w, 'through', 'table'), message: said(through.table, "no other table's rows are reached through it") });
581
+ const column = way;
582
+ const person = column.column !== undefined && column.person !== undefined ? pointsAt(column.column) : undefined;
583
+ if (person !== undefined && held.has(person))
584
+ out.push({ path: at('belongs', w, 'column'), message: said(person, "no other table's rows are reached through it") });
585
+ });
586
+ });
587
+ return out;
588
+ }
589
+ /**
590
+ * A STORED TOTAL IS EVERY ROW'S. A `rollup` column is written whole — a count
591
+ * or a sum over every child row, whoever reads it. Beside a list of those
592
+ * child rows that its reader sees only part of, it says "14" over six rows,
593
+ * and hands a rep the size of everybody else's book. So a role that reaches
594
+ * only some rows of a table is not also shown a stored total of that table:
595
+ * the app works the figure out when it is read (a measure, which counts the
596
+ * reader's rows), or keeps the column from that role (`readable`).
597
+ *
598
+ * Not refused: a total over rows that are reached exactly as their parent is
599
+ * (the child's `belongs` is `via` the very link the total counts by) —
600
+ * whoever reads the parent reaches every one of them.
601
+ */
602
+ export function storedTotalIssues(tables, roles) {
603
+ const out = [];
604
+ const byRef = new Map(tables.map((table) => [table.ref, table]));
605
+ tables.forEach((table, t) => {
606
+ table.columns.forEach((column, c) => {
607
+ const rollup = column.rules?.rollup;
608
+ if (rollup === undefined)
609
+ return;
610
+ const child = byRef.get(rollup.from);
611
+ // Reached through this parent, by this link: whoever reads the parent's row reaches all of them.
612
+ if ((child?.belongs ?? []).some((way) => typeof way === 'object' && way !== null && way.via === rollup.via))
613
+ return;
614
+ for (const role of roles) {
615
+ if (role.limits?.[rollup.from]?.rows?.read === undefined)
616
+ continue;
617
+ const grants = new Set(role.permissions ?? []);
618
+ const readsParent = grants.has(`table:@${table.ref}:read`) || grants.has('table:@*:read');
619
+ const shown = role.limits?.[table.ref]?.readable;
620
+ if (!readsParent || (shown !== undefined && !shown.includes(column.ref)))
621
+ continue;
622
+ out.push({
623
+ path: ['requiredSchema', 'tables', t, 'columns', c, 'rules', 'rollup'],
624
+ message: `"${table.ref}.${column.ref}" is a stored total of "${rollup.from}", of which "${role.key}" reaches only some rows: a stored total is every row's. Work it out when it is read (a measure), or keep the column from that role (limits.${table.ref}.readable)`,
625
+ });
626
+ return;
627
+ }
628
+ });
629
+ });
630
+ return out;
631
+ }
632
+ /** The blocks of a manifest that read rows for somebody other than the person signed in: a visitor, a rule, a mail, a printed page. */
633
+ const BLOCKS_THAT_READ_FOR_OTHERS = ['publicAccess', 'documents', 'outbox', 'emailTemplates', 'automations'];
634
+ /**
635
+ * Every place one of those blocks names a private table. A private table's
636
+ * rows are read by the people they belong to and by nothing that acts for
637
+ * anyone else, so a rule, a public entry, a document or a mail that names
638
+ * one is refused where it is written. Reads the plain document: a block it
639
+ * does not know the shape of is walked all the same.
640
+ */
641
+ export function privateTableIssues(document, privateTables) {
642
+ if (privateTables.length === 0)
643
+ return [];
644
+ const held = new Set(privateTables);
645
+ const out = [];
646
+ const walk = (value, path) => {
647
+ if (Array.isArray(value)) {
648
+ value.forEach((entry, i) => walk(entry, [...path, i]));
649
+ return;
650
+ }
651
+ if (typeof value !== 'object' || value === null)
652
+ return;
653
+ for (const [key, inner] of Object.entries(value)) {
654
+ if (key === 'table' && typeof inner === 'string' && held.has(inner)) {
655
+ out.push({ path: [...path, key], message: `"${inner}" is private: only the people its rows belong to read it, so no ${String(path[0])} entry names it` });
656
+ }
657
+ else
658
+ walk(inner, [...path, key]);
659
+ }
660
+ };
661
+ for (const block of BLOCKS_THAT_READ_FOR_OTHERS)
662
+ walk(document[block], [block]);
663
+ return out;
664
+ }
209
665
  //# sourceMappingURL=roles.js.map
package/dist/roles.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"roles.js","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAA0D,MAAM,WAAW,CAAC;AAEvH,yBAAyB;AACzB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,CAAC;IACN,8CAA8C;IAC9C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,6DAA6D;IAC7D,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpF,gGAAgG;IAChG,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClF,kFAAkF;IAClF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACvD,yFAAyF;IACzF,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/C,yEAAyE;IACzE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;CACtF,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE;IAChH,OAAO,EAAE,8FAA8F;CACxG,CAAC,CAAC;AAGL,2DAA2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAUrE,kFAAkF;AAClF,SAAS,QAAQ,CAAC,IAAe,EAAE,KAA2B;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5G,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,eAAe,CAAwB,KAA2B,EAAE,KAAoB;IACtG,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7D,MAAM,EAAE,GAAG,CAAC,GAAG,IAAyB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAClF,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,8BAA8B,EAAE,CAAC,CAAC;gBACzE,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,kCAAkC,GAAG,uCAAuC,EAAE,CAAC,CAAC;YAClH,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACvE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,6EAA6E,EAAE,CAAC,CAAC;YACnI,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACrE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,iGAAiG,EAAE,CAAC,CAAC;YACrJ,CAAC;YACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrF,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC,CAAC;YACnG,CAAC;YACD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,oBAAoB,MAAM,GAAG,EAAE,CAAC,CAAC;oBAC9F,SAAS;gBACX,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;gBACzJ,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC/C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC1C,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,oBAAoB,MAAM,GAAG,EAAE,CAAC,CAAC;YACjI,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,kCAAkC,GAAG,qCAAqC,EAAE,CAAC,CAAC;gBAC/J,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,oBAAoB,MAAM,GAAG,EAAE,CAAC,CAAC;yBAC7H,IAAI,KAAK,CAAC,QAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,MAAM,mBAAmB,EAAE,CAAC,CAAC;gBAChI,CAAC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,MAAM,mBAAmB,EAAE,CAAC,CAAC;gBACpH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACxC,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;gBAC3J,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;gBACzE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,kCAAkC,GAAG,uCAAuC,EAAE,CAAC,CAAC;YAC7H,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBACzE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,kFAAkF,EAAE,CAAC,CAAC;YACzI,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,oBAAoB,MAAM,GAAG,EAAE,CAAC,CAAC;YAClI,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACjD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,MAAM,oBAAoB,EAAE,CAAC,CAAC;gBACvH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACxC,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;gBAC5J,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kHAAkH;AAClH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,wBAAwB,EAAE,eAAe,CAAC;IAClE,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE;CAClC,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAElF,+FAA+F;AAC/F,MAAM,UAAU,oBAAoB,CAAC,KAAiF,EAAE,KAA0B;IAChJ,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAyB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAChF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,KAAK,iFAAiF,EAAE,CAAC,CAAC;YACxK,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,iBAAiB,KAAK,CAAC,KAAK,SAAS,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;YACpI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;YACjI,2EAA2E;YAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAChC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAU,EAAE,CAAC;gBACtM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,qBAAqB,MAAM,+BAA+B,GAAG,YAAY,EAAE,CAAC,CAAC;YAC5L,CAAC;YACD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAU,EAAE,CAAC;gBAC5G,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACtD,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,MAAM,wEAAwE,OAAO,OAAO,EAAE,CAAC,CAAC;gBAC3M,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACrE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,iGAAiG,EAAE,CAAC,CAAC;YAC9J,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"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"}