@xemahq/contracts 0.76.0 → 0.78.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.
Files changed (160) hide show
  1. package/README.md +1 -1
  2. package/dist/.source-stamp.json +2 -2
  3. package/dist/authorization-module/index.d.ts +2 -0
  4. package/dist/authorization-module/index.d.ts.map +1 -1
  5. package/dist/authorization-module/index.js +2 -0
  6. package/dist/authorization-module/index.js.map +1 -1
  7. package/dist/authorization-module/lib/authorization-composition-error.d.ts +11 -0
  8. package/dist/authorization-module/lib/authorization-composition-error.d.ts.map +1 -1
  9. package/dist/authorization-module/lib/authorization-composition-error.js +16 -1
  10. package/dist/authorization-module/lib/authorization-composition-error.js.map +1 -1
  11. package/dist/authorization-module/lib/authorization-interface-requirements.d.ts +5 -1
  12. package/dist/authorization-module/lib/authorization-interface-requirements.d.ts.map +1 -1
  13. package/dist/authorization-module/lib/authorization-interface-requirements.js +1 -0
  14. package/dist/authorization-module/lib/authorization-interface-requirements.js.map +1 -1
  15. package/dist/authorization-module/lib/authorization-module-contribution.d.ts +24 -0
  16. package/dist/authorization-module/lib/authorization-module-contribution.d.ts.map +1 -1
  17. package/dist/authorization-module/lib/authorization-module-contribution.js +1 -0
  18. package/dist/authorization-module/lib/authorization-module-contribution.js.map +1 -1
  19. package/dist/authorization-module/lib/authorization-module-envelope.d.ts +11 -0
  20. package/dist/authorization-module/lib/authorization-module-envelope.d.ts.map +1 -1
  21. package/dist/authorization-module/lib/authorization-module-envelope.js +4 -0
  22. package/dist/authorization-module/lib/authorization-module-envelope.js.map +1 -1
  23. package/dist/authorization-module/lib/delegation-origination.d.ts +26 -0
  24. package/dist/authorization-module/lib/delegation-origination.d.ts.map +1 -0
  25. package/dist/authorization-module/lib/delegation-origination.js +43 -0
  26. package/dist/authorization-module/lib/delegation-origination.js.map +1 -0
  27. package/dist/authorization-module/lib/delegation-wildcard-ceiling.d.ts +6 -0
  28. package/dist/authorization-module/lib/delegation-wildcard-ceiling.d.ts.map +1 -0
  29. package/dist/authorization-module/lib/delegation-wildcard-ceiling.js +17 -0
  30. package/dist/authorization-module/lib/delegation-wildcard-ceiling.js.map +1 -0
  31. package/dist/authorization-module/lib/platform-authorization-modules.d.ts.map +1 -1
  32. package/dist/authorization-module/lib/platform-authorization-modules.js +10 -11
  33. package/dist/authorization-module/lib/platform-authorization-modules.js.map +1 -1
  34. package/dist/authorization-module/platform/xema_core.fga +76 -45
  35. package/dist/authorization-module/platform/xema_core.fga.yaml +522 -97
  36. package/dist/authorization-module/platform/xema_sharing.fga +48 -33
  37. package/dist/authorization-module/platform/xema_sharing.fga.yaml +555 -2
  38. package/dist/authorization-module/server/authorization-interface-conformance.d.ts +1 -0
  39. package/dist/authorization-module/server/authorization-interface-conformance.d.ts.map +1 -1
  40. package/dist/authorization-module/server/authorization-interface-conformance.js +13 -1
  41. package/dist/authorization-module/server/authorization-interface-conformance.js.map +1 -1
  42. package/dist/authorization-module/server/compose-authorization-base.d.ts +2 -0
  43. package/dist/authorization-module/server/compose-authorization-base.d.ts.map +1 -1
  44. package/dist/authorization-module/server/compose-authorization-base.js +15 -2
  45. package/dist/authorization-module/server/compose-authorization-base.js.map +1 -1
  46. package/dist/authorization-module/server/delegation-origination-conformance.d.ts +15 -0
  47. package/dist/authorization-module/server/delegation-origination-conformance.d.ts.map +1 -0
  48. package/dist/authorization-module/server/delegation-origination-conformance.js +92 -0
  49. package/dist/authorization-module/server/delegation-origination-conformance.js.map +1 -0
  50. package/dist/authorization-module/server/userset-subject-types.d.ts +3 -0
  51. package/dist/authorization-module/server/userset-subject-types.d.ts.map +1 -0
  52. package/dist/authorization-module/server/userset-subject-types.js +65 -0
  53. package/dist/authorization-module/server/userset-subject-types.js.map +1 -0
  54. package/dist/authzen/index.d.ts +1 -0
  55. package/dist/authzen/index.d.ts.map +1 -1
  56. package/dist/authzen/index.js +1 -0
  57. package/dist/authzen/index.js.map +1 -1
  58. package/dist/authzen/lib/durable-delegation-model.d.ts +33 -11
  59. package/dist/authzen/lib/durable-delegation-model.d.ts.map +1 -1
  60. package/dist/authzen/lib/durable-delegation-model.js +54 -16
  61. package/dist/authzen/lib/durable-delegation-model.js.map +1 -1
  62. package/dist/authzen/lib/xema-membership.d.ts +6 -0
  63. package/dist/authzen/lib/xema-membership.d.ts.map +1 -0
  64. package/dist/authzen/lib/xema-membership.js +16 -0
  65. package/dist/authzen/lib/xema-membership.js.map +1 -0
  66. package/dist/biome-dependency/lib/peer-seam-table.d.ts +1 -0
  67. package/dist/biome-dependency/lib/peer-seam-table.d.ts.map +1 -1
  68. package/dist/biome-dependency/lib/peer-seam-table.js +2 -1
  69. package/dist/biome-dependency/lib/peer-seam-table.js.map +1 -1
  70. package/dist/deployment/lib/resolved-deployment.d.ts +29 -4
  71. package/dist/deployment/lib/resolved-deployment.d.ts.map +1 -1
  72. package/dist/deployment/lib/resolved-deployment.js +57 -17
  73. package/dist/deployment/lib/resolved-deployment.js.map +1 -1
  74. package/dist/distribution/index.d.ts +5 -1
  75. package/dist/distribution/index.d.ts.map +1 -1
  76. package/dist/distribution/index.js +6 -0
  77. package/dist/distribution/index.js.map +1 -1
  78. package/dist/distribution/lib/authorization-lock.d.ts +16 -0
  79. package/dist/distribution/lib/authorization-lock.d.ts.map +1 -0
  80. package/dist/distribution/lib/authorization-lock.js +34 -0
  81. package/dist/distribution/lib/authorization-lock.js.map +1 -0
  82. package/dist/distribution/lib/customer-edition-definition.d.ts +10 -1
  83. package/dist/distribution/lib/customer-edition-definition.d.ts.map +1 -1
  84. package/dist/distribution/lib/customer-edition-definition.js +53 -2
  85. package/dist/distribution/lib/customer-edition-definition.js.map +1 -1
  86. package/dist/distribution/lib/delivered-biome.d.ts +2 -2
  87. package/dist/distribution/lib/delivered-biome.d.ts.map +1 -1
  88. package/dist/distribution/lib/delivered-biome.js.map +1 -1
  89. package/dist/distribution/lib/distribution-lock.d.ts +2 -1
  90. package/dist/distribution/lib/distribution-lock.d.ts.map +1 -1
  91. package/dist/distribution/lib/distribution-lock.js +24 -0
  92. package/dist/distribution/lib/distribution-lock.js.map +1 -1
  93. package/dist/distribution/lib/image-producer-evidence.d.ts +86 -14
  94. package/dist/distribution/lib/image-producer-evidence.d.ts.map +1 -1
  95. package/dist/distribution/lib/image-producer-evidence.js +72 -12
  96. package/dist/distribution/lib/image-producer-evidence.js.map +1 -1
  97. package/dist/distribution/lib/kernel-contract-authority.d.ts +1 -0
  98. package/dist/distribution/lib/kernel-contract-authority.d.ts.map +1 -1
  99. package/dist/distribution/lib/kernel-contract-authority.js +6 -2
  100. package/dist/distribution/lib/kernel-contract-authority.js.map +1 -1
  101. package/dist/distribution/lib/kernel-contract-source-paths.d.ts +1 -1
  102. package/dist/distribution/lib/kernel-contract-source-paths.d.ts.map +1 -1
  103. package/dist/distribution/lib/kernel-contract-source-paths.js +9 -0
  104. package/dist/distribution/lib/kernel-contract-source-paths.js.map +1 -1
  105. package/dist/distribution/lib/nexus-endpoint-specs.d.ts +2 -2
  106. package/dist/distribution/lib/nexus-endpoint-specs.d.ts.map +1 -1
  107. package/dist/distribution/lib/nexus-endpoint-specs.js.map +1 -1
  108. package/dist/distribution/lib/resolve-unsplit-deployment.d.ts +16 -0
  109. package/dist/distribution/lib/resolve-unsplit-deployment.d.ts.map +1 -0
  110. package/dist/distribution/lib/resolve-unsplit-deployment.js +48 -0
  111. package/dist/distribution/lib/resolve-unsplit-deployment.js.map +1 -0
  112. package/dist/distribution/lib/runtime-image-source-index.d.ts +18 -1
  113. package/dist/distribution/lib/runtime-image-source-index.d.ts.map +1 -1
  114. package/dist/distribution/lib/runtime-image-source-index.js +38 -2
  115. package/dist/distribution/lib/runtime-image-source-index.js.map +1 -1
  116. package/dist/distribution/lib/verified-resolved-deployment.d.ts +12 -2
  117. package/dist/distribution/lib/verified-resolved-deployment.d.ts.map +1 -1
  118. package/dist/distribution/lib/verify-delivered-locks.d.ts +41 -0
  119. package/dist/distribution/lib/verify-delivered-locks.d.ts.map +1 -0
  120. package/dist/distribution/lib/verify-delivered-locks.js +76 -0
  121. package/dist/distribution/lib/verify-delivered-locks.js.map +1 -0
  122. package/dist/distribution/lib/verify-resolved-deployment.d.ts +27 -7
  123. package/dist/distribution/lib/verify-resolved-deployment.d.ts.map +1 -1
  124. package/dist/distribution/lib/verify-resolved-deployment.js +61 -4
  125. package/dist/distribution/lib/verify-resolved-deployment.js.map +1 -1
  126. package/dist/distribution/server/index.d.ts +8 -0
  127. package/dist/distribution/server/index.d.ts.map +1 -0
  128. package/dist/distribution/server/index.js +34 -0
  129. package/dist/distribution/server/index.js.map +1 -0
  130. package/dist/edition-protocol/edition-contract.schema.json +1 -1
  131. package/dist/edition-protocol/edition-protocol.json +1 -1
  132. package/dist/edition-protocol/lib/edition-protocol.d.ts +2 -1
  133. package/dist/edition-protocol/lib/edition-protocol.d.ts.map +1 -1
  134. package/dist/edition-protocol/lib/edition-protocol.js +4 -2
  135. package/dist/edition-protocol/lib/edition-protocol.js.map +1 -1
  136. package/dist/redis-key/index.d.ts +1 -0
  137. package/dist/redis-key/index.d.ts.map +1 -1
  138. package/dist/redis-key/index.js +1 -0
  139. package/dist/redis-key/index.js.map +1 -1
  140. package/dist/redis-key/lib/deployment-acl-policy.d.ts.map +1 -1
  141. package/dist/redis-key/lib/deployment-acl-policy.js +1 -0
  142. package/dist/redis-key/lib/deployment-acl-policy.js.map +1 -1
  143. package/dist/redis-key/lib/erasure-request.d.ts +6 -0
  144. package/dist/redis-key/lib/erasure-request.d.ts.map +1 -0
  145. package/dist/redis-key/lib/erasure-request.js +75 -0
  146. package/dist/redis-key/lib/erasure-request.js.map +1 -0
  147. package/dist/redis-key/lib/lease-acl-policy.d.ts.map +1 -1
  148. package/dist/redis-key/lib/lease-acl-policy.js +2 -0
  149. package/dist/redis-key/lib/lease-acl-policy.js.map +1 -1
  150. package/dist/resolved-deployment-fixture/lib/resolved-deployment-fixture.d.ts +4 -1
  151. package/dist/resolved-deployment-fixture/lib/resolved-deployment-fixture.d.ts.map +1 -1
  152. package/dist/resolved-deployment-fixture/lib/resolved-deployment-fixture.js +80 -1
  153. package/dist/resolved-deployment-fixture/lib/resolved-deployment-fixture.js.map +1 -1
  154. package/dist/service-registry/lib/on-behalf-descriptor.d.ts.map +1 -1
  155. package/dist/service-registry/lib/on-behalf-descriptor.js.map +1 -1
  156. package/dist/service-registry/lib/service-descriptor.d.ts +6 -0
  157. package/dist/service-registry/lib/service-descriptor.d.ts.map +1 -1
  158. package/dist/service-registry/lib/service-descriptor.js +16 -1
  159. package/dist/service-registry/lib/service-descriptor.js.map +1 -1
  160. package/package.json +5 -2
@@ -3,13 +3,25 @@
3
3
  name: xema_sharing
4
4
  model_file: ./fga.mod
5
5
  tuples:
6
+ # Owners are membership instances (`membership#holder`), never users.
6
7
  - user: user:alice
8
+ relation: holder
9
+ object: membership:org1|malice
10
+ - user: membership:org1|malice#holder
7
11
  relation: owner
8
12
  object: xema_document:org1|d1
13
+ # Human shares bind to a MEMBERSHIP instance (`membership#holder`), never to
14
+ # the user: bob and eve hold the memberships the shares are written to.
9
15
  - user: user:bob
16
+ relation: holder
17
+ object: membership:org1|mbob
18
+ - user: user:eve
19
+ relation: holder
20
+ object: membership:org1|meve
21
+ - user: membership:org1|mbob#holder
10
22
  relation: viewer
11
23
  object: xema_document:org1|d1
12
- - user: user:eve
24
+ - user: membership:org1|meve#holder
13
25
  relation: editor
14
26
  object: xema_document:org1|d1
15
27
  condition:
@@ -22,10 +34,13 @@ tuples:
22
34
  - user: org:org1#member
23
35
  relation: org_viewer
24
36
  object: xema_document:org1|d2
25
- - user: user:alice
37
+ - user: membership:org1|malice#holder
26
38
  relation: owner
27
39
  object: xema_document:org1|d2
28
40
  - user: user:olga
41
+ relation: holder
42
+ object: membership:org1|molga
43
+ - user: membership:org1|molga#holder
29
44
  relation: owner
30
45
  object: xema_output-route:org1|r1
31
46
  - user: team:ops#member
@@ -46,6 +61,8 @@ tuples:
46
61
  - user: user:stranger
47
62
  relation: admin
48
63
  object: org:org2
64
+ # Every check on d1 supplies `current_time`: d1 carries an expiring share, and
65
+ # the PDP supplies `current_time` on every decision.
49
66
  tests:
50
67
  - name: an org admin administers the org's portals through parent, and only that org's
51
68
  check:
@@ -69,12 +86,16 @@ tests:
69
86
  check:
70
87
  - user: user:alice
71
88
  object: xema_document:org1|d1
89
+ context:
90
+ current_time: "2029-01-01T00:00:00Z"
72
91
  assertions:
73
92
  can_manage: true
74
93
  can_edit: true
75
94
  can_view: true
76
95
  - user: user:bob
77
96
  object: xema_document:org1|d1
97
+ context:
98
+ current_time: "2029-01-01T00:00:00Z"
78
99
  assertions:
79
100
  can_manage: false
80
101
  can_edit: false
@@ -83,6 +104,8 @@ tests:
83
104
  check:
84
105
  - user: user:bob
85
106
  object: xema_document:org1|d1
107
+ context:
108
+ current_time: "2029-01-01T00:00:00Z"
86
109
  assertions:
87
110
  xema_read: true
88
111
  - user: user:dave
@@ -91,6 +114,8 @@ tests:
91
114
  xema_read: true
92
115
  - user: user:dave
93
116
  object: xema_document:org1|d1
117
+ context:
118
+ current_time: "2029-01-01T00:00:00Z"
94
119
  assertions:
95
120
  xema_read: false
96
121
  - name: output routes share through the same ladder, team shares included
@@ -138,5 +163,533 @@ tests:
138
163
  can_edit: false
139
164
  - user: user:dave
140
165
  object: xema_document:org1|d1
166
+ context:
167
+ current_time: "2029-01-01T00:00:00Z"
168
+ assertions:
169
+ can_view: false
170
+ - name: document 1 an active membership with a share is allowed
171
+ tuples:
172
+ - user: user:ann
173
+ relation: holder
174
+ object: membership:org1|mann1
175
+ - user: membership:org1|mann1#holder
176
+ relation: viewer
177
+ object: xema_document:org1|m1
178
+ check:
179
+ - user: user:ann
180
+ object: xema_document:org1|m1
181
+ assertions:
182
+ can_view: true
183
+ - name: document 2 leave deletes the holder tuple — the share yields no access
184
+ tuples:
185
+ - user: membership:org1|mann1#holder
186
+ relation: viewer
187
+ object: xema_document:org1|m2
188
+ check:
189
+ - user: user:ann
190
+ object: xema_document:org1|m2
191
+ assertions:
192
+ can_view: false
193
+ - name: document 3 rejoin is a new membership — the share on the old one stays refused
194
+ tuples:
195
+ - user: user:ann
196
+ relation: holder
197
+ object: membership:org1|mann2
198
+ - user: membership:org1|mann1#holder
199
+ relation: viewer
200
+ object: xema_document:org1|m3
201
+ check:
202
+ - user: user:ann
203
+ object: xema_document:org1|m3
204
+ assertions:
205
+ can_view: false
206
+ - name: document 4 a new share to the new membership is allowed
207
+ tuples:
208
+ - user: user:ann
209
+ relation: holder
210
+ object: membership:org1|mann2
211
+ - user: membership:org1|mann1#holder
212
+ relation: viewer
213
+ object: xema_document:org1|m4
214
+ - user: membership:org1|mann2#holder
215
+ relation: viewer
216
+ object: xema_document:org1|m4
217
+ check:
218
+ - user: user:ann
219
+ object: xema_document:org1|m4
220
+ assertions:
221
+ can_view: true
222
+ - name: document 5 a demotion keeps the holder tuple — the share survives (no org admin tuple needed)
223
+ tuples:
224
+ - user: user:ann
225
+ relation: holder
226
+ object: membership:org1|mann1
227
+ - user: membership:org1|mann1#holder
228
+ relation: viewer
229
+ object: xema_document:org1|m5
230
+ check:
231
+ - user: user:ann
232
+ object: xema_document:org1|m5
233
+ assertions:
234
+ can_view: true
235
+ - name: document 6 a revoked share is refused
236
+ tuples:
237
+ - user: user:ann
238
+ relation: holder
239
+ object: membership:org1|mann1
240
+ check:
241
+ - user: user:ann
242
+ object: xema_document:org1|m6
243
+ assertions:
244
+ can_view: false
245
+ - name: document (expiring share) 1 an active membership with a share is allowed
246
+ tuples:
247
+ - user: user:ann
248
+ relation: holder
249
+ object: membership:org1|xann1
250
+ - user: membership:org1|xann1#holder
251
+ relation: viewer
252
+ object: xema_document:org1|x1
253
+ condition:
254
+ name: xema_share_not_expired
255
+ context:
256
+ expires_at: "2030-01-01T00:00:00Z"
257
+ check:
258
+ - user: user:ann
259
+ object: xema_document:org1|x1
260
+ context:
261
+ current_time: "2029-12-31T23:59:59Z"
262
+ assertions:
263
+ can_view: true
264
+ - name: document (expiring share) 2 leave deletes the holder tuple — the share yields no access
265
+ tuples:
266
+ - user: membership:org1|xann1#holder
267
+ relation: viewer
268
+ object: xema_document:org1|x2
269
+ condition:
270
+ name: xema_share_not_expired
271
+ context:
272
+ expires_at: "2030-01-01T00:00:00Z"
273
+ check:
274
+ - user: user:ann
275
+ object: xema_document:org1|x2
276
+ context:
277
+ current_time: "2029-12-31T23:59:59Z"
278
+ assertions:
279
+ can_view: false
280
+ - name: document (expiring share) 3 rejoin is a new membership — the share on the old one stays refused
281
+ tuples:
282
+ - user: user:ann
283
+ relation: holder
284
+ object: membership:org1|xann2
285
+ - user: membership:org1|xann1#holder
286
+ relation: viewer
287
+ object: xema_document:org1|x3
288
+ condition:
289
+ name: xema_share_not_expired
290
+ context:
291
+ expires_at: "2030-01-01T00:00:00Z"
292
+ check:
293
+ - user: user:ann
294
+ object: xema_document:org1|x3
295
+ context:
296
+ current_time: "2029-12-31T23:59:59Z"
141
297
  assertions:
142
298
  can_view: false
299
+ - name: document (expiring share) 4 a new share to the new membership is allowed
300
+ tuples:
301
+ - user: user:ann
302
+ relation: holder
303
+ object: membership:org1|xann2
304
+ - user: membership:org1|xann1#holder
305
+ relation: viewer
306
+ object: xema_document:org1|x4
307
+ condition:
308
+ name: xema_share_not_expired
309
+ context:
310
+ expires_at: "2030-01-01T00:00:00Z"
311
+ - user: membership:org1|xann2#holder
312
+ relation: viewer
313
+ object: xema_document:org1|x4
314
+ condition:
315
+ name: xema_share_not_expired
316
+ context:
317
+ expires_at: "2030-01-01T00:00:00Z"
318
+ check:
319
+ - user: user:ann
320
+ object: xema_document:org1|x4
321
+ context:
322
+ current_time: "2029-12-31T23:59:59Z"
323
+ assertions:
324
+ can_view: true
325
+ - name: document (expiring share) 5 a demotion keeps the holder tuple — the share survives (no org admin tuple needed)
326
+ tuples:
327
+ - user: user:ann
328
+ relation: holder
329
+ object: membership:org1|xann1
330
+ - user: membership:org1|xann1#holder
331
+ relation: viewer
332
+ object: xema_document:org1|x5
333
+ condition:
334
+ name: xema_share_not_expired
335
+ context:
336
+ expires_at: "2030-01-01T00:00:00Z"
337
+ check:
338
+ - user: user:ann
339
+ object: xema_document:org1|x5
340
+ context:
341
+ current_time: "2029-12-31T23:59:59Z"
342
+ assertions:
343
+ can_view: true
344
+ - name: document (expiring share) 6 a revoked share is refused
345
+ tuples:
346
+ - user: user:ann
347
+ relation: holder
348
+ object: membership:org1|xann1
349
+ check:
350
+ - user: user:ann
351
+ object: xema_document:org1|x6
352
+ context:
353
+ current_time: "2029-12-31T23:59:59Z"
354
+ assertions:
355
+ can_view: false
356
+ - name: document (owner) 1 an active membership owner is allowed
357
+ tuples:
358
+ - user: user:ann
359
+ relation: holder
360
+ object: membership:org1|mown1
361
+ - user: membership:org1|mown1#holder
362
+ relation: owner
363
+ object: xema_document:org1|o1
364
+ check:
365
+ - user: user:ann
366
+ object: xema_document:org1|o1
367
+ assertions:
368
+ can_manage: true
369
+ can_view: true
370
+ - name: document (owner) 2 leave deletes the holder tuple — the owner tuple is inert
371
+ tuples:
372
+ - user: membership:org1|mown1#holder
373
+ relation: owner
374
+ object: xema_document:org1|o1
375
+ check:
376
+ - user: user:ann
377
+ object: xema_document:org1|o1
378
+ assertions:
379
+ can_manage: false
380
+ can_view: false
381
+ - name: document (owner) 3 rejoin is a new membership — the owner on the old one stays refused
382
+ tuples:
383
+ - user: user:ann
384
+ relation: holder
385
+ object: membership:org1|mown2
386
+ - user: membership:org1|mown1#holder
387
+ relation: owner
388
+ object: xema_document:org1|o1
389
+ check:
390
+ - user: user:ann
391
+ object: xema_document:org1|o1
392
+ assertions:
393
+ can_manage: false
394
+ can_view: false
395
+ - name: document (owner) 4 a demotion keeps the holder tuple — the owner survives (no org admin tuple needed)
396
+ tuples:
397
+ - user: user:ann
398
+ relation: holder
399
+ object: membership:org1|mown1
400
+ - user: membership:org1|mown1#holder
401
+ relation: owner
402
+ object: xema_document:org1|o1
403
+ check:
404
+ - user: user:ann
405
+ object: xema_document:org1|o1
406
+ assertions:
407
+ can_manage: true
408
+ can_view: true
409
+ - name: connector-migration (owner) 1 an active membership owner is allowed
410
+ tuples:
411
+ - user: user:ann
412
+ relation: holder
413
+ object: membership:org1|mown1
414
+ - user: membership:org1|mown1#holder
415
+ relation: owner
416
+ object: xema_connector-migration:org1|o2
417
+ check:
418
+ - user: user:ann
419
+ object: xema_connector-migration:org1|o2
420
+ assertions:
421
+ can_manage: true
422
+ can_view: true
423
+ - name: connector-migration (owner) 2 leave deletes the holder tuple — the owner tuple is inert
424
+ tuples:
425
+ - user: membership:org1|mown1#holder
426
+ relation: owner
427
+ object: xema_connector-migration:org1|o2
428
+ check:
429
+ - user: user:ann
430
+ object: xema_connector-migration:org1|o2
431
+ assertions:
432
+ can_manage: false
433
+ can_view: false
434
+ - name: connector-migration (owner) 3 rejoin is a new membership — the owner on the old one stays refused
435
+ tuples:
436
+ - user: user:ann
437
+ relation: holder
438
+ object: membership:org1|mown2
439
+ - user: membership:org1|mown1#holder
440
+ relation: owner
441
+ object: xema_connector-migration:org1|o2
442
+ check:
443
+ - user: user:ann
444
+ object: xema_connector-migration:org1|o2
445
+ assertions:
446
+ can_manage: false
447
+ can_view: false
448
+ - name: connector-migration (owner) 4 a demotion keeps the holder tuple — the owner survives (no org admin tuple needed)
449
+ tuples:
450
+ - user: user:ann
451
+ relation: holder
452
+ object: membership:org1|mown1
453
+ - user: membership:org1|mown1#holder
454
+ relation: owner
455
+ object: xema_connector-migration:org1|o2
456
+ check:
457
+ - user: user:ann
458
+ object: xema_connector-migration:org1|o2
459
+ assertions:
460
+ can_manage: true
461
+ can_view: true
462
+ - name: biome-lifecycle-approval (owner) 1 an active membership owner is allowed
463
+ tuples:
464
+ - user: user:ann
465
+ relation: holder
466
+ object: membership:org1|mown1
467
+ - user: membership:org1|mown1#holder
468
+ relation: owner
469
+ object: xema_biome-lifecycle-approval:org1|o3
470
+ check:
471
+ - user: user:ann
472
+ object: xema_biome-lifecycle-approval:org1|o3
473
+ assertions:
474
+ can_manage: true
475
+ can_view: true
476
+ - name: biome-lifecycle-approval (owner) 2 leave deletes the holder tuple — the owner tuple is inert
477
+ tuples:
478
+ - user: membership:org1|mown1#holder
479
+ relation: owner
480
+ object: xema_biome-lifecycle-approval:org1|o3
481
+ check:
482
+ - user: user:ann
483
+ object: xema_biome-lifecycle-approval:org1|o3
484
+ assertions:
485
+ can_manage: false
486
+ can_view: false
487
+ - name: biome-lifecycle-approval (owner) 3 rejoin is a new membership — the owner on the old one stays refused
488
+ tuples:
489
+ - user: user:ann
490
+ relation: holder
491
+ object: membership:org1|mown2
492
+ - user: membership:org1|mown1#holder
493
+ relation: owner
494
+ object: xema_biome-lifecycle-approval:org1|o3
495
+ check:
496
+ - user: user:ann
497
+ object: xema_biome-lifecycle-approval:org1|o3
498
+ assertions:
499
+ can_manage: false
500
+ can_view: false
501
+ - name: biome-lifecycle-approval (owner) 4 a demotion keeps the holder tuple — the owner survives (no org admin tuple needed)
502
+ tuples:
503
+ - user: user:ann
504
+ relation: holder
505
+ object: membership:org1|mown1
506
+ - user: membership:org1|mown1#holder
507
+ relation: owner
508
+ object: xema_biome-lifecycle-approval:org1|o3
509
+ check:
510
+ - user: user:ann
511
+ object: xema_biome-lifecycle-approval:org1|o3
512
+ assertions:
513
+ can_manage: true
514
+ can_view: true
515
+ - name: capability-grant (owner) 1 an active membership owner is allowed
516
+ tuples:
517
+ - user: user:ann
518
+ relation: holder
519
+ object: membership:org1|mown1
520
+ - user: membership:org1|mown1#holder
521
+ relation: owner
522
+ object: xema_capability-grant:org1|o4
523
+ check:
524
+ - user: user:ann
525
+ object: xema_capability-grant:org1|o4
526
+ assertions:
527
+ can_manage: true
528
+ can_view: true
529
+ - name: capability-grant (owner) 2 leave deletes the holder tuple — the owner tuple is inert
530
+ tuples:
531
+ - user: membership:org1|mown1#holder
532
+ relation: owner
533
+ object: xema_capability-grant:org1|o4
534
+ check:
535
+ - user: user:ann
536
+ object: xema_capability-grant:org1|o4
537
+ assertions:
538
+ can_manage: false
539
+ can_view: false
540
+ - name: capability-grant (owner) 3 rejoin is a new membership — the owner on the old one stays refused
541
+ tuples:
542
+ - user: user:ann
543
+ relation: holder
544
+ object: membership:org1|mown2
545
+ - user: membership:org1|mown1#holder
546
+ relation: owner
547
+ object: xema_capability-grant:org1|o4
548
+ check:
549
+ - user: user:ann
550
+ object: xema_capability-grant:org1|o4
551
+ assertions:
552
+ can_manage: false
553
+ can_view: false
554
+ - name: capability-grant (owner) 4 a demotion keeps the holder tuple — the owner survives (no org admin tuple needed)
555
+ tuples:
556
+ - user: user:ann
557
+ relation: holder
558
+ object: membership:org1|mown1
559
+ - user: membership:org1|mown1#holder
560
+ relation: owner
561
+ object: xema_capability-grant:org1|o4
562
+ check:
563
+ - user: user:ann
564
+ object: xema_capability-grant:org1|o4
565
+ assertions:
566
+ can_manage: true
567
+ can_view: true
568
+ - name: output-route (owner) 1 an active membership owner is allowed
569
+ tuples:
570
+ - user: user:ann
571
+ relation: holder
572
+ object: membership:org1|mown1
573
+ - user: membership:org1|mown1#holder
574
+ relation: owner
575
+ object: xema_output-route:org1|o5
576
+ check:
577
+ - user: user:ann
578
+ object: xema_output-route:org1|o5
579
+ assertions:
580
+ can_manage: true
581
+ can_view: true
582
+ - name: output-route (owner) 2 leave deletes the holder tuple — the owner tuple is inert
583
+ tuples:
584
+ - user: membership:org1|mown1#holder
585
+ relation: owner
586
+ object: xema_output-route:org1|o5
587
+ check:
588
+ - user: user:ann
589
+ object: xema_output-route:org1|o5
590
+ assertions:
591
+ can_manage: false
592
+ can_view: false
593
+ - name: output-route (owner) 3 rejoin is a new membership — the owner on the old one stays refused
594
+ tuples:
595
+ - user: user:ann
596
+ relation: holder
597
+ object: membership:org1|mown2
598
+ - user: membership:org1|mown1#holder
599
+ relation: owner
600
+ object: xema_output-route:org1|o5
601
+ check:
602
+ - user: user:ann
603
+ object: xema_output-route:org1|o5
604
+ assertions:
605
+ can_manage: false
606
+ can_view: false
607
+ - name: output-route (owner) 4 a demotion keeps the holder tuple — the owner survives (no org admin tuple needed)
608
+ tuples:
609
+ - user: user:ann
610
+ relation: holder
611
+ object: membership:org1|mown1
612
+ - user: membership:org1|mown1#holder
613
+ relation: owner
614
+ object: xema_output-route:org1|o5
615
+ check:
616
+ - user: user:ann
617
+ object: xema_output-route:org1|o5
618
+ assertions:
619
+ can_manage: true
620
+ can_view: true
621
+ - name: mailbox (owner) 1 an active membership owner is allowed
622
+ tuples:
623
+ - user: user:ann
624
+ relation: holder
625
+ object: membership:org1|mown1
626
+ - user: membership:org1|mown1#holder
627
+ relation: owner
628
+ object: xema_mailbox:org1|o6
629
+ check:
630
+ - user: user:ann
631
+ object: xema_mailbox:org1|o6
632
+ assertions:
633
+ can_manage: true
634
+ can_view: true
635
+ - name: mailbox (owner) 2 leave deletes the holder tuple — the owner tuple is inert
636
+ tuples:
637
+ - user: membership:org1|mown1#holder
638
+ relation: owner
639
+ object: xema_mailbox:org1|o6
640
+ check:
641
+ - user: user:ann
642
+ object: xema_mailbox:org1|o6
643
+ assertions:
644
+ can_manage: false
645
+ can_view: false
646
+ - name: mailbox (owner) 3 rejoin is a new membership — the owner on the old one stays refused
647
+ tuples:
648
+ - user: user:ann
649
+ relation: holder
650
+ object: membership:org1|mown2
651
+ - user: membership:org1|mown1#holder
652
+ relation: owner
653
+ object: xema_mailbox:org1|o6
654
+ check:
655
+ - user: user:ann
656
+ object: xema_mailbox:org1|o6
657
+ assertions:
658
+ can_manage: false
659
+ can_view: false
660
+ - name: mailbox (owner) 4 a demotion keeps the holder tuple — the owner survives (no org admin tuple needed)
661
+ tuples:
662
+ - user: user:ann
663
+ relation: holder
664
+ object: membership:org1|mown1
665
+ - user: membership:org1|mown1#holder
666
+ relation: owner
667
+ object: xema_mailbox:org1|o6
668
+ check:
669
+ - user: user:ann
670
+ object: xema_mailbox:org1|o6
671
+ assertions:
672
+ can_manage: true
673
+ can_view: true
674
+ - name: mailbox (personal) a personal mailbox keeps a user owner
675
+ tuples:
676
+ - user: user:ann
677
+ relation: owner
678
+ object: xema_mailbox:org1|op
679
+ check:
680
+ - user: user:ann
681
+ object: xema_mailbox:org1|op
682
+ assertions:
683
+ can_manage: true
684
+ can_view: true
685
+ - name: mailbox (personal) another user is not the owner
686
+ tuples:
687
+ - user: user:ann
688
+ relation: owner
689
+ object: xema_mailbox:org1|op
690
+ check:
691
+ - user: user:bob
692
+ object: xema_mailbox:org1|op
693
+ assertions:
694
+ can_manage: false
695
+ can_view: false
@@ -10,5 +10,6 @@ export declare function interfaceConformanceViolations(input: {
10
10
  readonly iface: XemaAuthorizationInterface;
11
11
  readonly definition: FgaTypeDefinition | undefined;
12
12
  readonly writableRelations: readonly string[];
13
+ readonly types: ReadonlyMap<string, FgaTypeDefinition>;
13
14
  }): readonly InterfaceConformanceViolation[];
14
15
  //# sourceMappingURL=authorization-interface-conformance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorization-interface-conformance.d.ts","sourceRoot":"","sources":["../../../src/authorization-module/server/authorization-interface-conformance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,IAAI,IAAI,EAAE,MAAM,wCAAwC,CAAC;AAKvG,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EACT,IAAI,CAAC,uBAAuB,GAC5B,IAAI,CAAC,yBAAyB,GAC9B,IAAI,CAAC,4BAA4B,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAmBD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C,GAAG,SAAS,6BAA6B,EAAE,CAmD3C"}
1
+ {"version":3,"file":"authorization-interface-conformance.d.ts","sourceRoot":"","sources":["../../../src/authorization-module/server/authorization-interface-conformance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,IAAI,IAAI,EAAE,MAAM,wCAAwC,CAAC;AAKvG,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EACT,IAAI,CAAC,uBAAuB,GAC5B,IAAI,CAAC,yBAAyB,GAC9B,IAAI,CAAC,4BAA4B,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAqBD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAE9C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACxD,GAAG,SAAS,6BAA6B,EAAE,CA8D3C"}
@@ -5,8 +5,9 @@ const authorization_composition_error_1 = require("../lib/authorization-composit
5
5
  const authorization_interface_requirements_1 = require("../lib/authorization-interface-requirements");
6
6
  const platform_authorization_modules_1 = require("../lib/platform-authorization-modules");
7
7
  const authorization_model_json_1 = require("./authorization-model-json");
8
+ const userset_subject_types_1 = require("./userset-subject-types");
8
9
  function interfaceConformanceViolations(input) {
9
- const { type, iface, definition, writableRelations } = input;
10
+ const { type, iface, definition, writableRelations, types } = input;
10
11
  const requirements = platform_authorization_modules_1.XEMA_AUTHORIZATION_INTERFACE_RELATIONS[iface];
11
12
  const violations = [];
12
13
  const missing = Object.keys(requirements).filter((relation) => definition?.relations?.[relation] === undefined);
@@ -53,6 +54,17 @@ function interfaceConformanceViolations(input) {
53
54
  }
54
55
  break;
55
56
  }
57
+ case authorization_interface_requirements_1.XemaInterfaceRelationKind.Checkable: {
58
+ const reachable = (0, userset_subject_types_1.resolvableSubjectTypes)(types, type, relation);
59
+ const unreachable = requirement.subjects.filter((subject) => !reachable.has(subject));
60
+ if (direct.length > 0 || unreachable.length > 0) {
61
+ violations.push({
62
+ code: authorization_composition_error_1.AuthorizationCompositionViolationCode.InterfaceRelationMistyped,
63
+ message: `${where} must be computed (no direct subject) and checkable for [${sorted(requirement.subjects).join(', ')}]; it resolves to [${sorted([...reachable]).join(', ')}]${direct.length > 0 ? ' with a direct subject' : ''}.`,
64
+ });
65
+ }
66
+ break;
67
+ }
56
68
  }
57
69
  }
58
70
  return violations;
@@ -1 +1 @@
1
- {"version":3,"file":"authorization-interface-conformance.js","sourceRoot":"","sources":["../../../src/authorization-module/server/authorization-interface-conformance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authorization-interface-conformance.js","sourceRoot":"","sources":["../../../src/authorization-module/server/authorization-interface-conformance.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type BiomeOrigin } from '../../biome';
1
2
  import { type AssignableSurfaceChange, type AuthorizationForwardMigrationHook } from './authorization-compatibility';
2
3
  import { type FgaAuthorizationModel } from './authorization-model-json';
3
4
  import { type PlatformAuthorizationModuleFiles } from './platform-module-files';
@@ -32,6 +33,7 @@ export interface AuthorizationCompositionGovernance {
32
33
  export declare const DEFAULT_AUTHORIZATION_COMPOSITION_GOVERNANCE: AuthorizationCompositionGovernance;
33
34
  export interface ComposeAuthorizationBaseInput {
34
35
  readonly modules: readonly AuthorizationModuleInput[];
36
+ readonly biomeOrigins: ReadonlyMap<string, BiomeOrigin>;
35
37
  readonly currentPlatformGeneration?: number;
36
38
  readonly adopted?: AdoptedAuthorizationBase;
37
39
  readonly governance?: AuthorizationCompositionGovernance;