@astrale-domains/shell 0.1.6 → 0.1.7

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 (301) hide show
  1. package/README.md +73 -173
  2. package/dist/domain.d.ts +477 -31
  3. package/dist/domain.js +87 -78
  4. package/dist/functions/application/index.js +2 -1
  5. package/dist/functions/application/legacy/index.js +1 -0
  6. package/dist/functions/application/legacy/list-entrypoints.js +8 -0
  7. package/dist/functions/authority/capabilities.js +1 -0
  8. package/dist/functions/authority/composition.js +47 -0
  9. package/dist/functions/authority/index.js +2 -0
  10. package/dist/functions/authority/roles.js +98 -0
  11. package/dist/functions/directory/disconnect-directory.js +35 -0
  12. package/dist/functions/directory/index.js +1 -0
  13. package/dist/functions/group/change-group-membership.js +43 -9
  14. package/dist/functions/group/create-group.js +23 -0
  15. package/dist/functions/group/delete-group.js +33 -0
  16. package/dist/functions/group/deprovision-group.js +27 -0
  17. package/dist/functions/group/group-errors.js +43 -0
  18. package/dist/functions/group/group-membership-errors.js +2 -0
  19. package/dist/functions/group/group.js +51 -0
  20. package/dist/functions/group/index.js +8 -2
  21. package/dist/functions/group/legacy/index.js +1 -0
  22. package/dist/functions/group/legacy/membership.js +60 -0
  23. package/dist/functions/group/membership-laws.js +40 -0
  24. package/dist/functions/group/provision-group.js +33 -0
  25. package/dist/functions/group/update-group.js +55 -0
  26. package/dist/functions/invitation/index.js +2 -0
  27. package/dist/functions/invitation/invitation-errors.js +13 -0
  28. package/dist/functions/invitation/invitation-methods.js +41 -0
  29. package/dist/functions/invitation/send-invitation.js +81 -0
  30. package/dist/functions/user/account.js +35 -0
  31. package/dist/functions/user/create-user.js +45 -0
  32. package/dist/functions/user/deactivate-user.js +19 -0
  33. package/dist/functions/user/delete-user.js +34 -0
  34. package/dist/functions/user/deprovision-user.js +21 -0
  35. package/dist/functions/user/index.js +15 -1
  36. package/dist/functions/user/invite-errors.js +18 -0
  37. package/dist/functions/user/invite-user.js +42 -34
  38. package/dist/functions/user/legacy/claimed-account.js +11 -0
  39. package/dist/functions/user/legacy/index.js +4 -0
  40. package/dist/functions/user/legacy/invite.js +20 -0
  41. package/dist/functions/user/legacy/migrate-accounts.js +98 -0
  42. package/dist/functions/user/legacy/record-profile.js +19 -0
  43. package/dist/functions/user/protect-administrators.js +16 -0
  44. package/dist/functions/user/provision-user.js +70 -0
  45. package/dist/functions/user/reactivate-user.js +19 -0
  46. package/dist/functions/user/read-account.js +12 -0
  47. package/dist/functions/user/request-invitation.js +17 -0
  48. package/dist/functions/user/update-profile.js +22 -0
  49. package/dist/functions/user/update-user.js +68 -0
  50. package/dist/functions/user/user-errors.js +69 -0
  51. package/dist/functions/user/write-account.js +57 -0
  52. package/dist/functions/view-access/index.js +2 -1
  53. package/dist/functions/view-access/{assign-views.js → legacy/assign-views.js} +11 -7
  54. package/dist/functions/view-access/legacy/index.js +1 -0
  55. package/dist/functions/view-access/{view-access-errors.js → legacy/view-access-errors.js} +5 -1
  56. package/dist/index.d.ts +1 -1
  57. package/dist/index.js +3 -1
  58. package/dist/integrations/user-invitation/invite-user-request.d.ts +6 -0
  59. package/dist/legacy/index.js +1 -0
  60. package/dist/legacy/release.js +33 -0
  61. package/dist/mutations/composition/grant-role.js +13 -0
  62. package/dist/mutations/composition/index.js +1 -0
  63. package/dist/mutations/group/legacy/index.js +1 -0
  64. package/dist/mutations/group/legacy/membership-class.js +7 -0
  65. package/dist/mutations/group/set-group-membership.js +23 -14
  66. package/dist/mutations/identity/create-profile.js +37 -0
  67. package/dist/mutations/identity/delete-identity.js +28 -0
  68. package/dist/mutations/identity/index.js +4 -0
  69. package/dist/mutations/identity/write-account.js +109 -0
  70. package/dist/mutations/identity/write-group.js +72 -0
  71. package/dist/mutations/invitation/index.js +1 -0
  72. package/dist/mutations/invitation/write-invitation.js +62 -0
  73. package/dist/mutations/user/legacy/index.js +1 -0
  74. package/dist/mutations/user/{record-user-profile.js → legacy/record-user-profile.js} +5 -2
  75. package/dist/providers/admin-enrollment/create-admin-enrollment-provider.js +6 -3
  76. package/dist/providers/admin-enrollment/legacy/index.js +1 -0
  77. package/dist/providers/admin-enrollment/legacy/send-without-profile.js +16 -0
  78. package/dist/queries/application/legacy/index.js +1 -0
  79. package/dist/queries/application/legacy/read-installed-entrypoints.js +47 -0
  80. package/dist/queries/composition/index.js +2 -0
  81. package/dist/queries/composition/read-extensions.js +34 -0
  82. package/dist/queries/composition/read-role-nodes.js +41 -0
  83. package/dist/queries/group/index.js +1 -1
  84. package/dist/queries/group/legacy/index.js +2 -0
  85. package/dist/queries/group/legacy/read-core-groups.js +46 -0
  86. package/dist/queries/group/legacy/read-member-of-group.js +24 -0
  87. package/dist/queries/group/read-group-membership-endpoints.js +11 -0
  88. package/dist/queries/group/read-group-membership.js +6 -21
  89. package/dist/queries/identity/index.js +1 -0
  90. package/dist/queries/identity/read-identities.js +29 -0
  91. package/dist/queries/invitation/index.js +1 -0
  92. package/dist/queries/invitation/read-invitation.js +25 -0
  93. package/dist/queries/profile/index.js +1 -0
  94. package/dist/queries/profile/read-profile.js +15 -0
  95. package/dist/queries/role/index.js +1 -0
  96. package/dist/queries/role/read-role-node.js +13 -0
  97. package/dist/queries/user/legacy/index.js +1 -0
  98. package/dist/queries/user/legacy/read-user-profile.js +27 -0
  99. package/dist/runtime.d.ts +18203 -630
  100. package/dist/runtime.js +32 -7
  101. package/dist/schema/index.d.ts +7 -4
  102. package/dist/schema/index.js +8 -4
  103. package/dist/schema/legacy/index.js +1 -0
  104. package/dist/schema/legacy/schema.js +32 -0
  105. package/dist/schema/modules/application/legacy/entrypoint-entry.js +11 -0
  106. package/dist/schema/modules/application/legacy/functions/index.js +1 -0
  107. package/dist/schema/modules/application/legacy/functions/list-entrypoints.js +21 -0
  108. package/dist/schema/modules/application/legacy/index.js +2 -0
  109. package/dist/schema/modules/directory/functions/disconnect-directory.d.ts +13 -0
  110. package/dist/schema/modules/directory/functions/disconnect-directory.js +15 -0
  111. package/dist/schema/modules/directory/functions/index.d.ts +1 -0
  112. package/dist/schema/modules/directory/functions/index.js +1 -0
  113. package/dist/schema/modules/directory/index.d.ts +1 -0
  114. package/dist/schema/modules/directory/index.js +1 -0
  115. package/dist/schema/modules/group/classes/group-profile-link.d.ts +34 -0
  116. package/dist/schema/modules/group/classes/group-profile-link.js +21 -0
  117. package/dist/schema/modules/group/classes/group-profile.d.ts +15 -0
  118. package/dist/schema/modules/group/classes/group-profile.js +20 -0
  119. package/dist/schema/modules/group/classes/group.d.ts +73 -1
  120. package/dist/schema/modules/group/classes/group.js +28 -7
  121. package/dist/schema/modules/group/classes/index.d.ts +2 -1
  122. package/dist/schema/modules/group/classes/index.js +3 -1
  123. package/dist/schema/modules/group/functions/assign-member.js +17 -0
  124. package/dist/schema/modules/group/functions/create-group.js +20 -0
  125. package/dist/schema/modules/group/functions/delete-group.js +12 -0
  126. package/dist/schema/modules/group/functions/deprovision-group.js +14 -0
  127. package/dist/schema/modules/group/functions/index.js +7 -2
  128. package/dist/schema/modules/group/functions/provision-group.js +14 -0
  129. package/dist/schema/modules/group/functions/unassign-member.js +17 -0
  130. package/dist/schema/modules/group/functions/update-group.js +20 -0
  131. package/dist/schema/modules/group/index.d.ts +3 -3
  132. package/dist/schema/modules/group/index.js +4 -3
  133. package/dist/schema/modules/group/legacy/admission.d.ts +9 -0
  134. package/dist/schema/modules/group/legacy/admission.js +9 -0
  135. package/dist/schema/modules/group/legacy/classes/index.d.ts +1 -0
  136. package/dist/schema/modules/group/legacy/classes/index.js +1 -0
  137. package/dist/schema/modules/group/{classes → legacy/classes}/member-of-group.d.ts +10 -1
  138. package/dist/schema/modules/group/legacy/classes/member-of-group.js +32 -0
  139. package/dist/schema/modules/group/legacy/core-groups.d.ts +22 -0
  140. package/dist/schema/modules/group/legacy/core-groups.js +28 -0
  141. package/dist/schema/modules/group/legacy/index.d.ts +5 -0
  142. package/dist/schema/modules/group/legacy/index.js +6 -0
  143. package/dist/schema/modules/group/legacy/policies/belongs-to-group.d.ts +5 -0
  144. package/dist/schema/modules/group/legacy/policies/belongs-to-group.js +9 -0
  145. package/dist/schema/modules/group/legacy/policies/index.d.ts +2 -0
  146. package/dist/schema/modules/group/legacy/policies/index.js +2 -0
  147. package/dist/schema/modules/group/legacy/policies/owns-membership-group.d.ts +6 -0
  148. package/dist/schema/modules/group/legacy/policies/owns-membership-group.js +12 -0
  149. package/dist/schema/modules/group/legacy/relaxations.d.ts +21 -0
  150. package/dist/schema/modules/group/legacy/relaxations.js +27 -0
  151. package/dist/schema/modules/group/policies/describes-group-of-subject.d.ts +2 -0
  152. package/dist/schema/modules/group/policies/describes-group-of-subject.js +7 -0
  153. package/dist/schema/modules/group/policies/index.d.ts +2 -1
  154. package/dist/schema/modules/group/policies/index.js +2 -1
  155. package/dist/schema/modules/group/policies/is-group-profile-source.d.ts +2 -0
  156. package/dist/schema/modules/group/policies/is-group-profile-source.js +6 -0
  157. package/dist/schema/modules/group/types/group.js +10 -0
  158. package/dist/schema/modules/group/types/index.js +1 -0
  159. package/dist/schema/modules/invitation/classes/index.js +2 -0
  160. package/dist/schema/modules/invitation/classes/invitation-user.js +17 -0
  161. package/dist/schema/modules/invitation/classes/invitation.js +30 -0
  162. package/dist/schema/modules/invitation/functions/accept.js +16 -0
  163. package/dist/schema/modules/invitation/functions/cancel.js +12 -0
  164. package/dist/schema/modules/invitation/functions/index.js +4 -0
  165. package/dist/schema/modules/invitation/functions/resend.js +12 -0
  166. package/dist/schema/modules/invitation/functions/send.js +20 -0
  167. package/dist/schema/modules/invitation/index.js +2 -0
  168. package/dist/schema/modules/invitation/types/index.js +1 -0
  169. package/dist/schema/modules/invitation/types/invitation-status.js +5 -0
  170. package/dist/schema/modules/namespace/classes/alias.d.ts +2 -1
  171. package/dist/schema/modules/namespace/classes/alias.js +11 -2
  172. package/dist/schema/modules/namespace/functions/link.js +3 -2
  173. package/dist/schema/modules/namespace/functions/rename.js +3 -2
  174. package/dist/schema/modules/namespace/functions/unlink.js +3 -2
  175. package/dist/schema/modules/role/classes/index.d.ts +1 -0
  176. package/dist/schema/modules/role/classes/index.js +1 -0
  177. package/dist/schema/modules/role/classes/role.d.ts +16 -0
  178. package/dist/schema/modules/role/classes/role.js +19 -0
  179. package/dist/schema/modules/role/core/index.d.ts +1 -0
  180. package/dist/schema/modules/role/core/index.js +1 -0
  181. package/dist/schema/modules/role/core/roles.d.ts +37 -0
  182. package/dist/schema/modules/role/core/roles.js +30 -0
  183. package/dist/schema/modules/role/index.d.ts +2 -0
  184. package/dist/schema/modules/role/index.js +2 -0
  185. package/dist/schema/modules/user/classes/index.d.ts +2 -0
  186. package/dist/schema/modules/user/classes/index.js +3 -0
  187. package/dist/schema/modules/user/classes/user-profile-link.d.ts +35 -0
  188. package/dist/schema/modules/user/classes/user-profile-link.js +22 -0
  189. package/dist/schema/modules/user/classes/user-profile.d.ts +41 -0
  190. package/dist/schema/modules/user/classes/user-profile.js +30 -0
  191. package/dist/schema/modules/user/classes/user.d.ts +133 -8
  192. package/dist/schema/modules/user/classes/user.js +46 -15
  193. package/dist/schema/modules/user/functions/create-user.js +21 -0
  194. package/dist/schema/modules/user/functions/deactivate-user.js +12 -0
  195. package/dist/schema/modules/user/functions/delete-user.js +12 -0
  196. package/dist/schema/modules/user/functions/deprovision-user.js +14 -0
  197. package/dist/schema/modules/user/functions/index.js +8 -1
  198. package/dist/schema/modules/user/functions/invite-user.js +23 -4
  199. package/dist/schema/modules/user/functions/provision-user.js +25 -0
  200. package/dist/schema/modules/user/functions/reactivate-user.js +12 -0
  201. package/dist/schema/modules/user/functions/update-profile.js +16 -0
  202. package/dist/schema/modules/user/functions/update-user.js +22 -0
  203. package/dist/schema/modules/user/index.d.ts +2 -1
  204. package/dist/schema/modules/user/index.js +2 -1
  205. package/dist/schema/modules/user/legacy/account-properties.js +24 -0
  206. package/dist/schema/modules/user/legacy/functions/index.js +2 -0
  207. package/dist/schema/modules/user/legacy/functions/migrate-accounts.js +23 -0
  208. package/dist/schema/modules/user/legacy/functions/record-profile.js +18 -0
  209. package/dist/schema/modules/user/legacy/index.js +5 -0
  210. package/dist/schema/modules/user/legacy/invite.js +15 -0
  211. package/dist/schema/modules/user/legacy/relaxations.js +37 -0
  212. package/dist/schema/modules/user/policies/describes-subject.d.ts +2 -0
  213. package/dist/schema/modules/user/policies/describes-subject.js +7 -0
  214. package/dist/schema/modules/user/policies/index.d.ts +2 -0
  215. package/dist/schema/modules/user/policies/index.js +2 -0
  216. package/dist/schema/modules/user/policies/is-profile-source.d.ts +2 -0
  217. package/dist/schema/modules/user/policies/is-profile-source.js +6 -0
  218. package/dist/schema/modules/user/types/account.d.ts +12 -0
  219. package/dist/schema/modules/user/types/account.js +12 -0
  220. package/dist/schema/modules/user/types/index.d.ts +1 -1
  221. package/dist/schema/modules/user/types/index.js +1 -1
  222. package/dist/schema/modules/view-access/classes/view-access.d.ts +7 -11
  223. package/dist/schema/modules/view-access/classes/view-access.js +17 -12
  224. package/dist/schema/modules/view-access/index.d.ts +1 -2
  225. package/dist/schema/modules/view-access/index.js +1 -2
  226. package/dist/schema/modules/view-access/legacy/functions/assign-views.js +22 -0
  227. package/dist/schema/modules/view-access/legacy/functions/index.js +1 -0
  228. package/dist/schema/modules/view-access/legacy/index.js +2 -0
  229. package/dist/schema/modules/view-access/legacy/view-assignment.js +24 -0
  230. package/dist/schema/modules/view-access/policies/holds-view-access.d.ts +2 -0
  231. package/dist/schema/modules/view-access/policies/holds-view-access.js +5 -0
  232. package/dist/schema/modules/view-access/policies/index.d.ts +1 -0
  233. package/dist/schema/modules/view-access/policies/index.js +1 -0
  234. package/dist/schema/policies/has-role.d.ts +6 -0
  235. package/dist/schema/policies/has-role.js +9 -0
  236. package/dist/schema/policies/index.d.ts +1 -0
  237. package/dist/schema/policies/index.js +1 -4
  238. package/dist/schema/policies/legacy/administers-shell-class.js +21 -0
  239. package/dist/schema/policies/legacy/index.js +4 -0
  240. package/dist/schema/policies/legacy/is-self.js +9 -0
  241. package/dist/schema/policies/legacy/owns-class.js +12 -0
  242. package/dist/schema/policies/legacy/uses-function.js +9 -0
  243. package/dist/schema/schema.d.ts +1849 -118
  244. package/dist/schema/schema.js +35 -15
  245. package/dist/schema/types/attributes.js +15 -0
  246. package/dist/schema/types/index.js +1 -0
  247. package/dist/utils/attributes/attributes.js +12 -0
  248. package/dist/utils/attributes/index.js +1 -0
  249. package/dist/utils/index.js +3 -0
  250. package/dist/utils/same-json/index.js +1 -0
  251. package/dist/utils/same-json/same-json.js +9 -0
  252. package/package.json +3 -3
  253. package/dist/functions/application/list-entrypoints.js +0 -6
  254. package/dist/functions/user/record-profile.js +0 -18
  255. package/dist/mutations/user/index.js +0 -1
  256. package/dist/queries/application/index.js +0 -1
  257. package/dist/queries/application/read-installed-entrypoints.js +0 -28
  258. package/dist/queries/user/index.js +0 -1
  259. package/dist/queries/user/read-user-profile.js +0 -9
  260. package/dist/schema/modules/application/functions/index.d.ts +0 -1
  261. package/dist/schema/modules/application/functions/index.js +0 -1
  262. package/dist/schema/modules/application/functions/list-entrypoints.d.ts +0 -15
  263. package/dist/schema/modules/application/functions/list-entrypoints.js +0 -16
  264. package/dist/schema/modules/application/index.d.ts +0 -2
  265. package/dist/schema/modules/application/index.js +0 -2
  266. package/dist/schema/modules/application/types/entrypoint-entry.d.ts +0 -8
  267. package/dist/schema/modules/application/types/entrypoint-entry.js +0 -7
  268. package/dist/schema/modules/application/types/index.d.ts +0 -1
  269. package/dist/schema/modules/application/types/index.js +0 -1
  270. package/dist/schema/modules/group/classes/member-of-group.js +0 -12
  271. package/dist/schema/modules/group/core/administrators-group.d.ts +0 -1
  272. package/dist/schema/modules/group/core/administrators-group.js +0 -6
  273. package/dist/schema/modules/group/core/applications-group.d.ts +0 -1
  274. package/dist/schema/modules/group/core/applications-group.js +0 -6
  275. package/dist/schema/modules/group/core/index.d.ts +0 -3
  276. package/dist/schema/modules/group/core/index.js +0 -3
  277. package/dist/schema/modules/group/core/members-group.d.ts +0 -1
  278. package/dist/schema/modules/group/core/members-group.js +0 -6
  279. package/dist/schema/modules/group/functions/assign-member-to-group.js +0 -11
  280. package/dist/schema/modules/group/functions/unassign-member-from-group.js +0 -11
  281. package/dist/schema/modules/group/policies/belongs-to-group.d.ts +0 -1
  282. package/dist/schema/modules/group/policies/belongs-to-group.js +0 -5
  283. package/dist/schema/modules/user/functions/record-profile.js +0 -14
  284. package/dist/schema/modules/user/types/user-profile.d.ts +0 -7
  285. package/dist/schema/modules/user/types/user-profile.js +0 -7
  286. package/dist/schema/modules/view-access/core/index.d.ts +0 -1
  287. package/dist/schema/modules/view-access/core/index.js +0 -1
  288. package/dist/schema/modules/view-access/core/view-only-group.d.ts +0 -5
  289. package/dist/schema/modules/view-access/core/view-only-group.js +0 -10
  290. package/dist/schema/modules/view-access/functions/assign-views.d.ts +0 -16
  291. package/dist/schema/modules/view-access/functions/assign-views.js +0 -17
  292. package/dist/schema/modules/view-access/functions/index.d.ts +0 -1
  293. package/dist/schema/modules/view-access/functions/index.js +0 -1
  294. package/dist/schema/modules/view-access/types/index.js +0 -1
  295. package/dist/schema/modules/view-access/types/view-assignment.js +0 -16
  296. package/dist/schema/policies/administers-shell-class.js +0 -11
  297. package/dist/schema/policies/is-self.js +0 -5
  298. package/dist/schema/policies/owns-class.js +0 -7
  299. package/dist/schema/policies/uses-function.js +0 -5
  300. /package/dist/functions/group/{assign-member-to-group.js → assign-member.js} +0 -0
  301. /package/dist/functions/group/{unassign-member-from-group.js → unassign-member.js} +0 -0
package/dist/runtime.js CHANGED
@@ -1,24 +1,49 @@
1
1
  import { defineRuntime } from '@astrale-os/sdk/runtime';
2
- import { listEntrypoints } from './functions/application/index.js';
3
- import { assignMember, unassignMember } from './functions/group/index.js';
2
+ // L-SHELL-11: the legacy handler of listEntrypoints, through its owner's facade.
3
+ import { legacyListEntrypoints } from './functions/application/index.js';
4
+ import { disconnectDirectory } from './functions/directory/index.js';
5
+ import { assignMember, create as createGroup, deprovision as deprovisionGroup, provision as provisionGroup, remove as deleteGroup, unassignMember, update as updateGroup, } from './functions/group/index.js';
6
+ import { accept as acceptInvitation, cancel as cancelInvitation, resend as resendInvitation, send as sendInvitation, } from './functions/invitation/index.js';
4
7
  import { link, rename, unlink } from './functions/namespace/index.js';
5
- import { invite, recordProfile } from './functions/user/index.js';
6
- import { assignViews } from './functions/view-access/index.js';
8
+ import { create as createUser, deactivate, deprovision as deprovisionUser, invite,
9
+ // L-SHELL-5, L-SHELL-14: legacy handlers, through their owner's facade.
10
+ legacyMigrateAccounts, legacyRecordProfile, provision as provisionUser, reactivate, remove as deleteUser, update as updateUser, updateProfile, } from './functions/user/index.js';
11
+ // L-SHELL-12: the legacy handler of assignViews, through its owner's facade.
12
+ import { legacyAssignViews } from './functions/view-access/index.js';
7
13
  import { integrations } from './integrations/index.js';
8
14
  import { enrollmentProvider } from './providers/admin-enrollment/index.js';
9
15
  const initialize = (environment) => ({
10
16
  providers: { enrollment: enrollmentProvider(environment) },
11
17
  });
12
18
  const functions = [
19
+ createUser,
13
20
  invite,
21
+ updateUser,
22
+ updateProfile,
23
+ deactivate,
24
+ reactivate,
25
+ deleteUser,
26
+ provisionUser,
27
+ deprovisionUser,
28
+ createGroup,
29
+ updateGroup,
30
+ deleteGroup,
14
31
  assignMember,
15
32
  unassignMember,
16
- listEntrypoints,
33
+ provisionGroup,
34
+ deprovisionGroup,
35
+ disconnectDirectory,
36
+ sendInvitation,
37
+ resendInvitation,
38
+ cancelInvitation,
39
+ acceptInvitation,
17
40
  link,
18
41
  unlink,
19
42
  rename,
20
- assignViews,
21
- recordProfile,
43
+ legacyRecordProfile,
44
+ legacyListEntrypoints,
45
+ legacyAssignViews,
46
+ legacyMigrateAccounts,
22
47
  ];
23
48
  const runtime = defineRuntime()({
24
49
  integrations,
@@ -1,7 +1,10 @@
1
- export { ShellSchema, S, type Shell, type ShellClasses, type ShellSchemaInput } from './schema.js';
1
+ export { ShellSchema, S, ORIGIN, type Shell, type ShellClasses, type ShellSchemaInput, } from './schema.js';
2
2
  export { User } from './modules/user/index.js';
3
3
  export type { InvitationSummary } from './modules/user/index.js';
4
- export { Group, member_of_group, adminGroup, applicationsGroup, memberGroup, } from './modules/group/index.js';
5
- export { listEntrypoints, type EntrypointEntry } from './modules/application/index.js';
4
+ export { Group } from './modules/group/index.js';
5
+ export { Role, atomicRoles, profileRoles, shellRoles, PROFILE_NAMES, type ProfileName, } from './modules/role/index.js';
6
+ export { hasRole } from './policies/index.js';
7
+ export { disconnectDirectory } from './modules/directory/index.js';
6
8
  export { Namespace, alias, viewsNamespace } from './modules/namespace/index.js';
7
- export { view_access, viewOnlyGroup, assignViews } from './modules/view-access/index.js';
9
+ export { view_access, holdsViewAccess } from './modules/view-access/index.js';
10
+ export { legacyMemberOfGroup as member_of_group, legacyAdministratorsGroup as adminGroup, legacyMembersGroup as memberGroup, } from './modules/group/index.js';
@@ -1,6 +1,10 @@
1
- export { ShellSchema, S } from './schema.js';
1
+ export { ShellSchema, S, ORIGIN, } from './schema.js';
2
2
  export { User } from './modules/user/index.js';
3
- export { Group, member_of_group, adminGroup, applicationsGroup, memberGroup, } from './modules/group/index.js';
4
- export { listEntrypoints } from './modules/application/index.js';
3
+ export { Group } from './modules/group/index.js';
4
+ export { Role, atomicRoles, profileRoles, shellRoles, PROFILE_NAMES, } from './modules/role/index.js';
5
+ export { hasRole } from './policies/index.js';
6
+ export { disconnectDirectory } from './modules/directory/index.js';
5
7
  export { Namespace, alias, viewsNamespace } from './modules/namespace/index.js';
6
- export { view_access, viewOnlyGroup, assignViews } from './modules/view-access/index.js';
8
+ export { view_access, holdsViewAccess } from './modules/view-access/index.js';
9
+ // Seam L-SHELL-16: the package root's former names of the legacy Edge Class and Core groups.
10
+ export { legacyMemberOfGroup as member_of_group, legacyAdministratorsGroup as adminGroup, legacyMembersGroup as memberGroup, } from './modules/group/index.js';
@@ -0,0 +1 @@
1
+ export { legacyShellSchema } from './schema.js';
@@ -0,0 +1,32 @@
1
+ import { legacyListEntrypoints } from '../modules/application/legacy/index.js';
2
+ import { legacyAdministratorsGroup, legacyApplicationsGroup, legacyBelongsToGroup, legacyMemberOfGroup, legacyMembersGroup, legacyOwnsMembershipGroup, legacyViewOnlyGroup, } from '../modules/group/legacy/index.js';
3
+ import { legacyMigrateAccounts } from '../modules/user/legacy/index.js';
4
+ import { legacyAssignViews } from '../modules/view-access/legacy/index.js';
5
+ import { legacyAdministersShellClass, legacyIsSelf, legacyOwnsClass, legacyUsesFunction, } from '../policies/legacy/index.js';
6
+ /**
7
+ * @deprecated The declarations the Shell keeps for legacy readers and callers, under their stored
8
+ * names so their keys stay (L-SHELL-7). Each item has its own row: L-SHELL-8, L-SHELL-10,
9
+ * L-SHELL-11, L-SHELL-12, L-SHELL-14. Replaced by the target Schema alone. Removal: Shell major (delivery step 5) after 1Pact step 4.
10
+ */
11
+ export const legacyShellSchema = {
12
+ classes: { member_of_group: legacyMemberOfGroup },
13
+ functions: {
14
+ listEntrypoints: legacyListEntrypoints,
15
+ assignViews: legacyAssignViews,
16
+ legacyMigrateAccounts,
17
+ },
18
+ policies: {
19
+ belongsToGroup: legacyBelongsToGroup,
20
+ ownsClass: legacyOwnsClass,
21
+ administersShellClass: legacyAdministersShellClass,
22
+ usesFunction: legacyUsesFunction,
23
+ isSelf: legacyIsSelf,
24
+ legacyOwnsMembershipGroup,
25
+ },
26
+ core: {
27
+ admin: legacyAdministratorsGroup,
28
+ member: legacyMembersGroup,
29
+ applications: legacyApplicationsGroup,
30
+ 'view-only': legacyViewOnlyGroup,
31
+ },
32
+ };
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * @deprecated One installed Domain entrypoint: the Domain origin, its display name, and its View key
4
+ * (L-SHELL-11). Replaced by the visitor's own Query of Domains and Views. Removal: Shell major
5
+ * (delivery step 5) after 1Pact step 4.
6
+ */
7
+ export const legacyEntrypointEntry = z.object({
8
+ origin: z.string().min(1),
9
+ name: z.string().min(1),
10
+ view: z.string().min(1),
11
+ });
@@ -0,0 +1 @@
1
+ export { legacyListEntrypoints } from './list-entrypoints.js';
@@ -0,0 +1,21 @@
1
+ import { func } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { legacyApplicationsGroup } from '../../../group/legacy/index.js';
4
+ import { profileRoles } from '../../../role/index.js';
5
+ import { hasRole } from '../../../../policies/index.js';
6
+ import { legacyEntrypointEntry } from '../entrypoint-entry.js';
7
+ /**
8
+ * @deprecated The entrypoint View and name of every installed Domain that declares one, read with
9
+ * Shell's own authority (L-SHELL-11). Replaced by the visitor's own Query (V2). Removal: Shell major
10
+ * (delivery step 5) after 1Pact step 4.
11
+ *
12
+ * Its legacy `can_use` holders keep it (AM5): Administrators and Members through `workspace.member`,
13
+ * which the release makes them hold (AM3), and the Applications group itself.
14
+ */
15
+ export const legacyListEntrypoints = func({
16
+ description: 'List the entrypoint View and name of every installed Domain that declares one.',
17
+ auth: 'authorized',
18
+ input: z.strictObject({}),
19
+ output: z.object({ entrypoints: z.array(legacyEntrypointEntry) }),
20
+ policy: ({ anyOf, check, ref }) => anyOf(check(hasRole, ref(profileRoles['workspace.member'])), check(hasRole, ref(legacyApplicationsGroup))),
21
+ });
@@ -0,0 +1,2 @@
1
+ export { legacyListEntrypoints } from './functions/index.js';
2
+ export { legacyEntrypointEntry } from './entrypoint-entry.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The directory is disconnected: its accounts and groups become local. `directory`, `externalId`
3
+ * are erased; an account its directory had frozen stays frozen.
4
+ */
5
+ export declare const disconnectDirectory: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<{
6
+ directory: string;
7
+ }, {
8
+ readonly mode: 'value';
9
+ readonly value: {
10
+ users: number;
11
+ groups: number;
12
+ };
13
+ }, "authorized", false, false, undefined, undefined>>;
@@ -0,0 +1,15 @@
1
+ import { func } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ /**
6
+ * The directory is disconnected: its accounts and groups become local. `directory`, `externalId`
7
+ * are erased; an account its directory had frozen stays frozen.
8
+ */
9
+ export const disconnectDirectory = func({
10
+ description: 'Make the accounts and groups of a disconnected directory local.',
11
+ auth: 'authorized',
12
+ input: z.strictObject({ directory: z.string().min(1).max(200) }),
13
+ output: z.object({ users: z.number().int().min(0), groups: z.number().int().min(0) }),
14
+ policy: ({ check, ref }) => check(hasRole, ref(atomicRoles['directory.provisioner'])),
15
+ });
@@ -0,0 +1 @@
1
+ export { disconnectDirectory } from './disconnect-directory.js';
@@ -0,0 +1 @@
1
+ export { disconnectDirectory } from './disconnect-directory.js';
@@ -0,0 +1 @@
1
+ export { disconnectDirectory } from './functions/index.js';
@@ -0,0 +1 @@
1
+ export { disconnectDirectory } from './functions/index.js';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The profile of one group, one each way. `0..1` on both ends, as for accounts; groups stored
3
+ * before profiles get theirs from `legacyMigrateAccounts`. Shell deletes both together.
4
+ */
5
+ export declare const group_profile: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
6
+ readonly depth: 0;
7
+ readonly abstract: false;
8
+ readonly extends: readonly [];
9
+ readonly properties: never;
10
+ readonly source: {
11
+ readonly as: "group";
12
+ readonly accepts: readonly {
13
+ readonly kind: 'node';
14
+ readonly abstract: false;
15
+ readonly depth: 1;
16
+ readonly properties: "attributes" | "description" | "directory" | "externalId" | "frozen" | "icon" | "iss" | "name" | "sub";
17
+ readonly methods: "assignMember" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "update";
18
+ }[];
19
+ readonly outgoing: "0..1";
20
+ };
21
+ readonly target: {
22
+ readonly as: "profile";
23
+ readonly accepts: readonly {
24
+ readonly kind: 'node';
25
+ readonly abstract: false;
26
+ readonly depth: 1;
27
+ readonly properties: "description" | "name";
28
+ readonly methods: never;
29
+ }[];
30
+ readonly incoming: "0..1";
31
+ };
32
+ readonly constraints: Record<never, never>;
33
+ readonly effectiveProperties: never;
34
+ }>;
@@ -0,0 +1,21 @@
1
+ import { edgeClass } from '@astrale-os/sdk/schema';
2
+ import { atomicRoles } from '../../role/index.js';
3
+ import { hasRole } from '../../../policies/index.js';
4
+ import { isGroupProfileSource } from '../policies/index.js';
5
+ import { GroupProfile } from './group-profile.js';
6
+ import { Group } from './group.js';
7
+ /**
8
+ * The profile of one group, one each way. `0..1` on both ends, as for accounts; groups stored
9
+ * before profiles get theirs from `legacyMigrateAccounts`. Shell deletes both together.
10
+ */
11
+ export const group_profile = edgeClass.directed({
12
+ inheritance: 'final',
13
+ abstract: false,
14
+ description: 'The profile of this group.',
15
+ source: { as: 'group', accepts: [Group], outgoing: '0..1', onDelete: 'detach' },
16
+ target: { as: 'profile', accepts: [GroupProfile], incoming: '0..1', onDelete: 'detach' },
17
+ policies: {
18
+ read: ({ anyOf, check, ref, self }) => anyOf(check(hasRole, ref(atomicRoles['group-profile.reader'])), check(hasRole, ref(atomicRoles['group.writer'])), check(isGroupProfileSource, self)),
19
+ traverse: true,
20
+ },
21
+ });
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The shared part of a group: its name and description. Only Shell writes it, through its methods.
3
+ * It reads by `group-profile.reader`, `group.writer`, or the group's members.
4
+ */
5
+ export declare const GroupProfile: import("@astrale-os/sdk/schema").AuthoredNodeClass<{
6
+ readonly icon: import("@astrale-os/sdk/schema").ClassIcon;
7
+ readonly inheritance: "final";
8
+ readonly abstract: false;
9
+ readonly description: "What others see of a group: name and description.";
10
+ readonly extends: readonly [import("@astrale-os/sdk/schema").KernelClass<"Named">, import("@astrale-os/sdk/schema").KernelClass<"Descriptable">];
11
+ readonly policies: {
12
+ readonly read: ({ anyOf, check, ref, self }: import("@astrale-os/sdk/schema").ClassRuleContext) => import("@astrale-os/sdk/schema").PolicyCheckExpression<import("@astrale-os/sdk/schema").PolicyRef, import("@astrale-os/sdk/schema").ClassRuleObject>;
13
+ readonly traverse: true;
14
+ };
15
+ }>;
@@ -0,0 +1,20 @@
1
+ import { K, classIcon, nodeClass } from '@astrale-os/sdk/schema';
2
+ import { UsersRound } from '@astrale-os/sdk/schema/icons';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ import { describesGroupOfSubject } from '../policies/index.js';
6
+ /**
7
+ * The shared part of a group: its name and description. Only Shell writes it, through its methods.
8
+ * It reads by `group-profile.reader`, `group.writer`, or the group's members.
9
+ */
10
+ export const GroupProfile = nodeClass({
11
+ icon: classIcon.lucide(UsersRound),
12
+ inheritance: 'final',
13
+ abstract: false,
14
+ description: 'What others see of a group: name and description.',
15
+ extends: [K.classes.Named, K.classes.Descriptable],
16
+ policies: {
17
+ read: ({ anyOf, check, ref, self }) => anyOf(check(hasRole, ref(atomicRoles['group-profile.reader'])), check(hasRole, ref(atomicRoles['group.writer'])), check(describesGroupOfSubject, self)),
18
+ traverse: true,
19
+ },
20
+ });
@@ -1,11 +1,65 @@
1
+ /**
2
+ * A set of accounts and groups: its members hold what it holds, through Kernel `extends_with`
3
+ * (G1). A group reads by `group.reader` or by its members (G5); only Shell writes it.
4
+ */
1
5
  export declare const Group: import("@astrale-os/sdk/schema").AuthoredNodeClass<{
2
6
  readonly icon: import("@astrale-os/sdk/schema").ClassIcon;
3
7
  readonly inheritance: "open";
8
+ readonly abstract: false;
9
+ readonly description: "A set of accounts and groups; its members hold what it holds.";
10
+ readonly extends: readonly [import("@astrale-os/sdk/schema").KernelClass<"Identity">, import("@astrale-os/sdk/schema").KernelClass<"Named">, import("@astrale-os/sdk/schema").KernelClass<"Descriptable">, import("@astrale-os/sdk/schema").KernelClass<"Iconable">];
11
+ readonly properties: {
12
+ directory: import("@astrale-os/sdk/schema").AuthoredProperty<{
13
+ readonly type: 'string';
14
+ readonly minLength: 1;
15
+ readonly maxLength: 200;
16
+ }, {
17
+ readonly required: false;
18
+ }>;
19
+ externalId: import("@astrale-os/sdk/schema").AuthoredProperty<{
20
+ readonly type: 'string';
21
+ readonly minLength: 1;
22
+ readonly maxLength: 200;
23
+ }, {
24
+ readonly required: false;
25
+ }>;
26
+ attributes: import("@astrale-os/sdk/schema").AuthoredProperty<{
27
+ readonly type: "object";
28
+ readonly additionalProperties: true;
29
+ readonly maxProperties: 64;
30
+ }, {
31
+ readonly required: false;
32
+ }>;
33
+ };
4
34
  readonly policies: {
5
35
  readonly read: true;
36
+ readonly traverse: true;
6
37
  };
7
- readonly extends: readonly [import("@astrale-os/sdk/schema").KernelClass<"Identity">, import("@astrale-os/sdk/schema").KernelClass<"Named">, import("@astrale-os/sdk/schema").KernelClass<"Descriptable">];
8
38
  readonly methods: {
39
+ readonly create: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
40
+ name: string;
41
+ description?: string | undefined;
42
+ icon?: string | null | undefined;
43
+ attributes?: Record<string, unknown> | undefined;
44
+ }, {
45
+ readonly mode: 'value';
46
+ readonly value: {
47
+ group: string;
48
+ };
49
+ }, "authorized", true, false, undefined, undefined>>;
50
+ readonly update: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
51
+ name?: string | undefined;
52
+ description?: string | null | undefined;
53
+ icon?: string | null | undefined;
54
+ attributes?: Record<string, unknown> | null | undefined;
55
+ }, {
56
+ readonly mode: 'value';
57
+ readonly value: Record<string, never>;
58
+ }, "authorized", false, false, undefined, undefined>>;
59
+ readonly delete: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
60
+ readonly mode: 'value';
61
+ readonly value: Record<string, never>;
62
+ }, "authorized", false, false, undefined, undefined>>;
9
63
  readonly assignMember: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
10
64
  member: string;
11
65
  group: string;
@@ -20,5 +74,23 @@ export declare const Group: import("@astrale-os/sdk/schema").AuthoredNodeClass<{
20
74
  readonly mode: 'value';
21
75
  readonly value: Record<string, never>;
22
76
  }, "authorized", true, false, undefined, undefined>>;
77
+ readonly provision: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
78
+ directory: string;
79
+ externalId: string;
80
+ name: string;
81
+ }, {
82
+ readonly mode: 'value';
83
+ readonly value: {
84
+ group: string;
85
+ created: boolean;
86
+ };
87
+ }, "authorized", true, false, undefined, undefined>>;
88
+ readonly deprovision: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
89
+ directory: string;
90
+ externalId: string;
91
+ }, {
92
+ readonly mode: 'value';
93
+ readonly value: Record<string, never>;
94
+ }, "authorized", true, false, undefined, undefined>>;
23
95
  };
24
96
  }>;
@@ -1,11 +1,32 @@
1
- import { K, classIcon, nodeClass } from '@astrale-os/sdk/schema';
1
+ import { classIcon, nodeClass, property } from '@astrale-os/sdk/schema';
2
2
  import { UsersRound } from '@astrale-os/sdk/schema/icons';
3
- import { assignMember, unassignMember } from '../functions/index.js';
3
+ import { attributesProperty } from '../../../types/index.js';
4
+ import { assignMember, create, deprovision, provision, remove, unassignMember, update, } from '../functions/index.js';
5
+ // Seams L-SHELL-1, L-SHELL-2: the relaxations existing groups and extending Domains still need.
6
+ import { LEGACY_GROUP_EXTENDS, LEGACY_GROUP_INHERITANCE, LEGACY_GROUP_READ, } from '../legacy/index.js';
7
+ const text = { type: 'string', minLength: 1, maxLength: 200 };
8
+ /**
9
+ * A set of accounts and groups: its members hold what it holds, through Kernel `extends_with`
10
+ * (G1). A group reads by `group.reader` or by its members (G5); only Shell writes it.
11
+ */
4
12
  export const Group = nodeClass({
5
13
  icon: classIcon.lucide(UsersRound),
6
- // Domains that depend on Shell extend it with the groups they own.
7
- inheritance: 'open',
8
- policies: { read: true },
9
- extends: [K.classes.Identity, K.classes.Named, K.classes.Descriptable],
10
- methods: { assignMember, unassignMember },
14
+ inheritance: LEGACY_GROUP_INHERITANCE,
15
+ abstract: false,
16
+ description: 'A set of accounts and groups; its members hold what it holds.',
17
+ extends: LEGACY_GROUP_EXTENDS,
18
+ properties: {
19
+ // The WorkOS directory that provides the group, and its id there. Absent: a local group.
20
+ directory: property(text, { required: false }),
21
+ externalId: property(text, { required: false }),
22
+ // Free JSON a Domain or an admin attaches to the group (AM11).
23
+ attributes: attributesProperty(),
24
+ },
25
+ // L-SHELL-19: no unique constraint and an open read, as Domains built against the released
26
+ // Shell expect.
27
+ policies: {
28
+ read: LEGACY_GROUP_READ,
29
+ traverse: true,
30
+ },
31
+ methods: { create, update, delete: remove, assignMember, unassignMember, provision, deprovision },
11
32
  });
@@ -1,2 +1,3 @@
1
1
  export { Group } from './group.js';
2
- export { member_of_group } from './member-of-group.js';
2
+ export { group_profile } from './group-profile-link.js';
3
+ export { GroupProfile } from './group-profile.js';
@@ -1,2 +1,4 @@
1
1
  export { Group } from './group.js';
2
- export { member_of_group } from './member-of-group.js';
2
+ // The link first: it loads the profile, whose read rule names a policy over the link.
3
+ export { group_profile } from './group-profile-link.js';
4
+ export { GroupProfile } from './group-profile.js';
@@ -0,0 +1,17 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ import { legacyMembershipOwnerAdmission } from '../legacy/index.js';
6
+ import { groupMembershipInput } from '../types/index.js';
7
+ /** Make an account or a group a member of this group: it holds what the group holds (G1–G3). */
8
+ export const assignMember = method({
9
+ static: true,
10
+ description: 'Make an account or a group a member of a group.',
11
+ auth: 'authorized',
12
+ input: groupMembershipInput,
13
+ output: z.object({}),
14
+ policy: (context) => context.anyOf(context.check(hasRole, context.ref(atomicRoles['group.writer'])), context.check(hasRole, context.ref(atomicRoles['directory.provisioner'])),
15
+ // Seam L-SHELL-9: a Domain that extends Group manages the members of its own groups.
16
+ legacyMembershipOwnerAdmission(context, context.input.group)),
17
+ });
@@ -0,0 +1,20 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ import { attributesInput } from '../../../types/index.js';
6
+ import { groupDescription, groupIcon, groupName, nodeReference } from '../types/index.js';
7
+ /** Create a local group. An empty group holds nothing: creating one grants no right. */
8
+ export const create = method({
9
+ static: true,
10
+ description: 'Create a local group.',
11
+ auth: 'authorized',
12
+ input: z.strictObject({
13
+ name: groupName,
14
+ description: groupDescription.optional(),
15
+ icon: groupIcon.optional(),
16
+ attributes: attributesInput.optional(),
17
+ }),
18
+ output: z.object({ group: nodeReference }),
19
+ policy: ({ check, ref }) => check(hasRole, ref(atomicRoles['group.writer'])),
20
+ });
@@ -0,0 +1,12 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ /** Withdraw this group's memberships, incoming and outgoing, and delete it (G2, G3, G4). */
6
+ export const remove = method({
7
+ description: "Withdraw this group's memberships and delete it.",
8
+ auth: 'authorized',
9
+ input: z.strictObject({}),
10
+ output: z.object({}),
11
+ policy: ({ check, ref }) => check(hasRole, ref(atomicRoles['group.writer'])),
12
+ });
@@ -0,0 +1,14 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ import { directoryId, externalId } from '../types/index.js';
6
+ /** Delete the group a directory deleted, with its memberships (G4). */
7
+ export const deprovision = method({
8
+ static: true,
9
+ description: 'Delete the group a directory deleted, with its memberships.',
10
+ auth: 'authorized',
11
+ input: z.strictObject({ directory: directoryId, externalId }),
12
+ output: z.object({}),
13
+ policy: ({ check, ref }) => check(hasRole, ref(atomicRoles['directory.provisioner'])),
14
+ });
@@ -1,2 +1,7 @@
1
- export { assignMember } from './assign-member-to-group.js';
2
- export { unassignMember } from './unassign-member-from-group.js';
1
+ export { create } from './create-group.js';
2
+ export { update } from './update-group.js';
3
+ export { remove } from './delete-group.js';
4
+ export { assignMember } from './assign-member.js';
5
+ export { unassignMember } from './unassign-member.js';
6
+ export { provision } from './provision-group.js';
7
+ export { deprovision } from './deprovision-group.js';
@@ -0,0 +1,14 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ import { directoryId, externalId, groupName, nodeReference } from '../types/index.js';
6
+ /** Create or rename the group a directory provides; replaying it changes nothing (A3). */
7
+ export const provision = method({
8
+ static: true,
9
+ description: 'Create or rename the group a directory provides.',
10
+ auth: 'authorized',
11
+ input: z.strictObject({ directory: directoryId, externalId, name: groupName }),
12
+ output: z.object({ group: nodeReference, created: z.boolean() }),
13
+ policy: ({ check, ref }) => check(hasRole, ref(atomicRoles['directory.provisioner'])),
14
+ });
@@ -0,0 +1,17 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ import { legacyMembershipOwnerAdmission } from '../legacy/index.js';
6
+ import { groupMembershipInput } from '../types/index.js';
7
+ /** Withdraw one direct member from a group (G2, G3). */
8
+ export const unassignMember = method({
9
+ static: true,
10
+ description: 'Withdraw an account or a group from a group.',
11
+ auth: 'authorized',
12
+ input: groupMembershipInput,
13
+ output: z.object({}),
14
+ policy: (context) => context.anyOf(context.check(hasRole, context.ref(atomicRoles['group.writer'])), context.check(hasRole, context.ref(atomicRoles['directory.provisioner'])),
15
+ // Seam L-SHELL-9: a Domain that extends Group manages the members of its own groups.
16
+ legacyMembershipOwnerAdmission(context, context.input.group)),
17
+ });
@@ -0,0 +1,20 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { atomicRoles } from '../../role/index.js';
4
+ import { hasRole } from '../../../policies/index.js';
5
+ import { attributesInput } from '../../../types/index.js';
6
+ import { groupDescription, groupIcon, groupName } from '../types/index.js';
7
+ /** Rename this group, describe it, or change its icon or its attributes (G2, AM11). */
8
+ export const update = method({
9
+ description: 'Rename this group, describe it, or change its icon or its attributes.',
10
+ auth: 'authorized',
11
+ input: z.strictObject({
12
+ name: groupName.optional(),
13
+ description: groupDescription.nullable().optional(),
14
+ icon: groupIcon.optional(),
15
+ // Replaces them all; `null` erases them (AM11).
16
+ attributes: attributesInput.nullable().optional(),
17
+ }),
18
+ output: z.object({}),
19
+ policy: ({ check, ref }) => check(hasRole, ref(atomicRoles['group.writer'])),
20
+ });
@@ -1,3 +1,3 @@
1
- export { Group, member_of_group } from './classes/index.js';
2
- export { adminGroup, applicationsGroup, memberGroup } from './core/index.js';
3
- export { belongsToGroup } from './policies/index.js';
1
+ export { Group, GroupProfile, group_profile } from './classes/index.js';
2
+ export { describesGroupOfSubject, isGroupProfileSource } from './policies/index.js';
3
+ export { legacyAdministratorsGroup, legacyMemberOfGroup, legacyMembersGroup, } from './legacy/index.js';
@@ -1,3 +1,4 @@
1
- export { Group, member_of_group } from './classes/index.js';
2
- export { adminGroup, applicationsGroup, memberGroup } from './core/index.js';
3
- export { belongsToGroup } from './policies/index.js';
1
+ export { Group, GroupProfile, group_profile } from './classes/index.js';
2
+ export { describesGroupOfSubject, isGroupProfileSource } from './policies/index.js';
3
+ // Seam L-SHELL-16: the package root's former names, reached through this module's facade.
4
+ export { legacyAdministratorsGroup, legacyMemberOfGroup, legacyMembersGroup, } from './legacy/index.js';
@@ -0,0 +1,9 @@
1
+ import type { CallablePolicyContext } from '@astrale-os/sdk/schema';
2
+ type PolicyObject = CallablePolicyContext['input'][string];
3
+ /**
4
+ * @deprecated The owner of a Group subclass changes the members of its own groups (L-SHELL-9).
5
+ * Replaced by `group.writer`, or by the Domain's own Identity and Roles (P5, P6). Removal: Shell
6
+ * major (delivery step 5) after 1Pact step 4.
7
+ */
8
+ export declare function legacyMembershipOwnerAdmission(context: CallablePolicyContext, group: PolicyObject): import("@astrale-os/sdk/schema").PolicyCheckExpression<import("@astrale-os/sdk/schema").PolicyRef, import("@astrale-os/sdk/schema").PolicyCheckObject>;
9
+ export {};