@headless-lms/core 0.4.0 → 0.5.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 (249) hide show
  1. package/dist/assets/events.d.ts +27 -21
  2. package/dist/assets/file-urls.d.ts +11 -7
  3. package/dist/assets/file-urls.js +14 -4
  4. package/dist/assets/file-urls.js.map +1 -1
  5. package/dist/assets/index.d.ts +4 -4
  6. package/dist/assets/index.js +3 -3
  7. package/dist/assets/ports.d.ts +34 -15
  8. package/dist/assets/service.d.ts +30 -14
  9. package/dist/assets/service.js +230 -56
  10. package/dist/assets/service.js.map +1 -1
  11. package/dist/automations/actions.js.map +1 -1
  12. package/dist/automations/catalog.js +69 -4
  13. package/dist/automations/catalog.js.map +1 -1
  14. package/dist/automations/community-derivations.js +16 -16
  15. package/dist/automations/community-derivations.js.map +1 -1
  16. package/dist/automations/community-mail.d.ts +34 -4
  17. package/dist/automations/community-mail.js +32 -4
  18. package/dist/automations/community-mail.js.map +1 -1
  19. package/dist/automations/event-permissions.d.ts +12 -0
  20. package/dist/automations/event-permissions.js +38 -0
  21. package/dist/automations/event-permissions.js.map +1 -0
  22. package/dist/automations/index.d.ts +2 -1
  23. package/dist/automations/index.js +2 -1
  24. package/dist/automations/notifications/applicable.d.ts +8 -0
  25. package/dist/automations/notifications/applicable.js +12 -0
  26. package/dist/automations/notifications/applicable.js.map +1 -0
  27. package/dist/automations/notifications/debounce.js +1 -1
  28. package/dist/automations/notifications/debounce.js.map +1 -1
  29. package/dist/automations/notifications/defaults.js +33 -3
  30. package/dist/automations/notifications/defaults.js.map +1 -1
  31. package/dist/automations/notifications/processor.js +3 -3
  32. package/dist/automations/notifications/processor.js.map +1 -1
  33. package/dist/automations/notifications/rules/content.js +60 -3
  34. package/dist/automations/notifications/rules/content.js.map +1 -1
  35. package/dist/automations/notifications/rules/discussion.js +29 -29
  36. package/dist/automations/notifications/rules/discussion.js.map +1 -1
  37. package/dist/automations/notifications/rules/entitlements.js +36 -9
  38. package/dist/automations/notifications/rules/entitlements.js.map +1 -1
  39. package/dist/automations/notifications/rules/events.d.ts +9 -0
  40. package/dist/automations/notifications/rules/events.js +27 -0
  41. package/dist/automations/notifications/rules/events.js.map +1 -0
  42. package/dist/automations/notifications/rules/organizations.js +17 -10
  43. package/dist/automations/notifications/rules/organizations.js.map +1 -1
  44. package/dist/automations/notifications/rules/recipients.js +0 -1
  45. package/dist/automations/notifications/rules/recipients.js.map +1 -1
  46. package/dist/automations/notifications/service.d.ts +8 -6
  47. package/dist/automations/notifications/service.js +13 -13
  48. package/dist/automations/notifications/service.js.map +1 -1
  49. package/dist/automations/notifications/types.js +94 -7
  50. package/dist/automations/notifications/types.js.map +1 -1
  51. package/dist/automations/ports.d.ts +30 -31
  52. package/dist/automations/service.d.ts +20 -17
  53. package/dist/automations/service.js +91 -62
  54. package/dist/automations/service.js.map +1 -1
  55. package/dist/content/event-sight.d.ts +11 -0
  56. package/dist/content/event-sight.js +11 -0
  57. package/dist/content/event-sight.js.map +1 -0
  58. package/dist/content/events.d.ts +413 -72
  59. package/dist/content/events.js +34 -1
  60. package/dist/content/events.js.map +1 -1
  61. package/dist/content/index.d.ts +6 -4
  62. package/dist/content/index.js +3 -1
  63. package/dist/content/jobs.d.ts +16 -0
  64. package/dist/content/jobs.js +37 -0
  65. package/dist/content/jobs.js.map +1 -0
  66. package/dist/content/model.d.ts +2 -2
  67. package/dist/content/notification-categories.d.ts +5 -4
  68. package/dist/content/notification-categories.js +15 -6
  69. package/dist/content/notification-categories.js.map +1 -1
  70. package/dist/content/ports.d.ts +113 -68
  71. package/dist/content/service.d.ts +99 -67
  72. package/dist/content/service.js +680 -139
  73. package/dist/content/service.js.map +1 -1
  74. package/dist/content/titles.d.ts +6 -3
  75. package/dist/content/titles.js +37 -24
  76. package/dist/content/titles.js.map +1 -1
  77. package/dist/content/types.d.ts +2 -2
  78. package/dist/discussion/authors.d.ts +4 -2
  79. package/dist/discussion/authors.js +9 -5
  80. package/dist/discussion/authors.js.map +1 -1
  81. package/dist/discussion/chats.d.ts +56 -37
  82. package/dist/discussion/chats.js +393 -161
  83. package/dist/discussion/chats.js.map +1 -1
  84. package/dist/discussion/events.d.ts +77 -39
  85. package/dist/discussion/events.js +41 -3
  86. package/dist/discussion/events.js.map +1 -1
  87. package/dist/discussion/index.d.ts +8 -5
  88. package/dist/discussion/index.js +5 -3
  89. package/dist/discussion/live.d.ts +106 -0
  90. package/dist/discussion/live.js +642 -0
  91. package/dist/discussion/live.js.map +1 -0
  92. package/dist/discussion/mentions.js +2 -2
  93. package/dist/discussion/mentions.js.map +1 -1
  94. package/dist/discussion/ports.d.ts +182 -100
  95. package/dist/discussion/ports.js.map +1 -1
  96. package/dist/discussion/posts.d.ts +45 -39
  97. package/dist/discussion/posts.js +268 -154
  98. package/dist/discussion/posts.js.map +1 -1
  99. package/dist/discussion/rules.d.ts +18 -0
  100. package/dist/discussion/rules.js +22 -0
  101. package/dist/discussion/rules.js.map +1 -0
  102. package/dist/discussion/service.d.ts +37 -31
  103. package/dist/discussion/service.js +252 -188
  104. package/dist/discussion/service.js.map +1 -1
  105. package/dist/discussion/subscriptions.d.ts +8 -8
  106. package/dist/discussion/subscriptions.js +29 -13
  107. package/dist/discussion/subscriptions.js.map +1 -1
  108. package/dist/discussion/titles.d.ts +4 -2
  109. package/dist/discussion/titles.js +27 -13
  110. package/dist/discussion/titles.js.map +1 -1
  111. package/dist/entitlements/events.d.ts +20 -20
  112. package/dist/entitlements/index.d.ts +4 -4
  113. package/dist/entitlements/index.js +2 -2
  114. package/dist/entitlements/model.d.ts +2 -2
  115. package/dist/entitlements/ports.d.ts +65 -39
  116. package/dist/entitlements/rules.d.ts +3 -6
  117. package/dist/entitlements/rules.js +5 -10
  118. package/dist/entitlements/rules.js.map +1 -1
  119. package/dist/entitlements/service.d.ts +40 -28
  120. package/dist/entitlements/service.js +370 -163
  121. package/dist/entitlements/service.js.map +1 -1
  122. package/dist/identity/devices.d.ts +3 -3
  123. package/dist/identity/devices.js +7 -5
  124. package/dist/identity/devices.js.map +1 -1
  125. package/dist/identity/events.d.ts +2 -2
  126. package/dist/identity/index.d.ts +2 -2
  127. package/dist/identity/index.js +2 -2
  128. package/dist/identity/notification-settings.d.ts +1 -1
  129. package/dist/identity/notification-settings.js +3 -2
  130. package/dist/identity/notification-settings.js.map +1 -1
  131. package/dist/identity/ports.d.ts +7 -7
  132. package/dist/identity/service.d.ts +8 -7
  133. package/dist/identity/service.js +17 -13
  134. package/dist/identity/service.js.map +1 -1
  135. package/dist/integrations/events.d.ts +3 -3
  136. package/dist/integrations/ports.d.ts +9 -8
  137. package/dist/integrations/service.d.ts +9 -8
  138. package/dist/integrations/service.js +33 -16
  139. package/dist/integrations/service.js.map +1 -1
  140. package/dist/organizations/default-roles.d.ts +22 -0
  141. package/dist/organizations/default-roles.js +89 -0
  142. package/dist/organizations/default-roles.js.map +1 -0
  143. package/dist/organizations/effective-permissions.d.ts +45 -0
  144. package/dist/organizations/effective-permissions.js +113 -0
  145. package/dist/organizations/effective-permissions.js.map +1 -0
  146. package/dist/organizations/events.d.ts +320 -181
  147. package/dist/organizations/events.js +90 -18
  148. package/dist/organizations/events.js.map +1 -1
  149. package/dist/organizations/index.d.ts +14 -10
  150. package/dist/organizations/index.js +7 -3
  151. package/dist/organizations/members.d.ts +66 -8
  152. package/dist/organizations/members.js.map +1 -1
  153. package/dist/organizations/notification-catalog.d.ts +31 -0
  154. package/dist/organizations/notification-catalog.js +32 -0
  155. package/dist/organizations/notification-catalog.js.map +1 -0
  156. package/dist/organizations/notification-categories.d.ts +6 -4
  157. package/dist/organizations/notification-categories.js +25 -10
  158. package/dist/organizations/notification-categories.js.map +1 -1
  159. package/dist/organizations/org-roles.d.ts +33 -0
  160. package/dist/organizations/org-roles.js +49 -0
  161. package/dist/organizations/org-roles.js.map +1 -0
  162. package/dist/organizations/permissions.d.ts +311 -0
  163. package/dist/organizations/permissions.js +327 -0
  164. package/dist/organizations/permissions.js.map +1 -0
  165. package/dist/organizations/ports.d.ts +184 -65
  166. package/dist/organizations/service.d.ts +102 -35
  167. package/dist/organizations/service.js +1245 -328
  168. package/dist/organizations/service.js.map +1 -1
  169. package/dist/organizations/testing.d.ts +18 -0
  170. package/dist/organizations/testing.js +37 -0
  171. package/dist/organizations/testing.js.map +1 -0
  172. package/dist/organizations/types.d.ts +5 -16
  173. package/dist/progress/events.d.ts +14 -14
  174. package/dist/progress/index.d.ts +2 -2
  175. package/dist/progress/ports.d.ts +11 -3
  176. package/dist/progress/service.d.ts +6 -5
  177. package/dist/progress/service.js +23 -8
  178. package/dist/progress/service.js.map +1 -1
  179. package/dist/reporting/admin/index.d.ts +6 -4
  180. package/dist/reporting/admin/model.d.ts +36 -3
  181. package/dist/reporting/admin/ports.d.ts +39 -14
  182. package/dist/reporting/admin/service.d.ts +32 -11
  183. package/dist/reporting/admin/service.js +102 -18
  184. package/dist/reporting/admin/service.js.map +1 -1
  185. package/dist/reporting/events/index.d.ts +27 -0
  186. package/dist/reporting/events/index.js +20 -0
  187. package/dist/reporting/events/index.js.map +1 -0
  188. package/dist/reporting/member/calendar.d.ts +11 -0
  189. package/dist/reporting/member/calendar.js +75 -0
  190. package/dist/reporting/member/calendar.js.map +1 -0
  191. package/dist/reporting/member/index.d.ts +3 -2
  192. package/dist/reporting/member/model.d.ts +26 -5
  193. package/dist/reporting/member/ports.d.ts +48 -29
  194. package/dist/reporting/member/service.d.ts +56 -29
  195. package/dist/reporting/member/service.js +328 -113
  196. package/dist/reporting/member/service.js.map +1 -1
  197. package/dist/shared/actor.d.ts +22 -3
  198. package/dist/shared/errors.d.ts +2 -1
  199. package/dist/shared/errors.js +3 -1
  200. package/dist/shared/errors.js.map +1 -1
  201. package/dist/shared/id.d.ts +4 -0
  202. package/dist/shared/id.js +4 -0
  203. package/dist/shared/id.js.map +1 -1
  204. package/dist/shared/logger.d.ts +2 -1
  205. package/dist/shared/logger.js +10 -1
  206. package/dist/shared/logger.js.map +1 -1
  207. package/dist/shared/ports.d.ts +25 -5
  208. package/dist/types/content.d.ts +2 -2
  209. package/dist/types/discussion.d.ts +4 -5
  210. package/dist/types/email-templates.d.ts +22 -3
  211. package/dist/types/entitlements.d.ts +2 -2
  212. package/dist/types/identity.d.ts +13 -16
  213. package/dist/types/index.d.ts +9 -9
  214. package/dist/types/index.js +2 -1
  215. package/dist/types/notifications.d.ts +4 -4
  216. package/dist/types/organizations.d.ts +3 -2
  217. package/dist/types/ports.d.ts +8 -1
  218. package/dist/types/ports.js +7 -1
  219. package/dist/types/ports.js.map +1 -0
  220. package/dist/types/schemas/assets.d.ts +5 -5
  221. package/dist/types/schemas/assets.js +4 -3
  222. package/dist/types/schemas/assets.js.map +1 -1
  223. package/dist/types/schemas/content.d.ts +537 -13
  224. package/dist/types/schemas/content.js +201 -7
  225. package/dist/types/schemas/content.js.map +1 -1
  226. package/dist/types/schemas/discussion.d.ts +282 -59
  227. package/dist/types/schemas/discussion.js +77 -3
  228. package/dist/types/schemas/discussion.js.map +1 -1
  229. package/dist/types/schemas/entitlements.d.ts +14 -1
  230. package/dist/types/schemas/entitlements.js +11 -4
  231. package/dist/types/schemas/entitlements.js.map +1 -1
  232. package/dist/types/schemas/index.d.ts +5 -5
  233. package/dist/types/schemas/index.js +5 -5
  234. package/dist/types/schemas/notifications.d.ts +13 -12
  235. package/dist/types/schemas/notifications.js +3 -2
  236. package/dist/types/schemas/notifications.js.map +1 -1
  237. package/dist/types/schemas/organizations.d.ts +96 -60
  238. package/dist/types/schemas/organizations.js +78 -27
  239. package/dist/types/schemas/organizations.js.map +1 -1
  240. package/dist/types/schemas/progress.d.ts +3 -4
  241. package/dist/types/schemas/progress.js +0 -1
  242. package/dist/types/schemas/progress.js.map +1 -1
  243. package/package.json +1 -1
  244. package/dist/organizations/access-scopes.d.ts +0 -19
  245. package/dist/organizations/access-scopes.js +0 -89
  246. package/dist/organizations/access-scopes.js.map +0 -1
  247. package/dist/organizations/roles.d.ts +0 -19
  248. package/dist/organizations/roles.js +0 -82
  249. package/dist/organizations/roles.js.map +0 -1
@@ -27,18 +27,18 @@ declare const entitlementEvents: {
27
27
  createdAt: unknown;
28
28
  updatedAt: unknown;
29
29
  }, import("zod").ZodObject<{
30
- id: import("zod").ZodString;
31
30
  orgId: import("zod").ZodString;
32
- orgUserId: import("zod").ZodString;
31
+ id: import("zod").ZodString;
33
32
  createdAt: import("zod").ZodCoercedDate<unknown>;
34
33
  updatedAt: import("zod").ZodCoercedDate<unknown>;
35
- source: import("zod").ZodString;
36
34
  status: import("zod").ZodEnum<{
37
35
  active: "active";
38
36
  revoked: "revoked";
39
37
  }>;
40
- bundleId: import("zod").ZodNullable<import("zod").ZodString>;
38
+ source: import("zod").ZodString;
41
39
  contentId: import("zod").ZodNullable<import("zod").ZodString>;
40
+ bundleId: import("zod").ZodNullable<import("zod").ZodString>;
41
+ orgUserId: import("zod").ZodString;
42
42
  grantedAt: import("zod").ZodCoercedDate<unknown>;
43
43
  expiresAt: import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>;
44
44
  }, import("zod/v4/core").$strip>>;
@@ -67,18 +67,18 @@ declare const entitlementEvents: {
67
67
  createdAt: unknown;
68
68
  updatedAt: unknown;
69
69
  }, import("zod").ZodObject<{
70
- id: import("zod").ZodString;
71
70
  orgId: import("zod").ZodString;
72
- orgUserId: import("zod").ZodString;
71
+ id: import("zod").ZodString;
73
72
  createdAt: import("zod").ZodCoercedDate<unknown>;
74
73
  updatedAt: import("zod").ZodCoercedDate<unknown>;
75
- source: import("zod").ZodString;
76
74
  status: import("zod").ZodEnum<{
77
75
  active: "active";
78
76
  revoked: "revoked";
79
77
  }>;
80
- bundleId: import("zod").ZodNullable<import("zod").ZodString>;
78
+ source: import("zod").ZodString;
81
79
  contentId: import("zod").ZodNullable<import("zod").ZodString>;
80
+ bundleId: import("zod").ZodNullable<import("zod").ZodString>;
81
+ orgUserId: import("zod").ZodString;
82
82
  grantedAt: import("zod").ZodCoercedDate<unknown>;
83
83
  expiresAt: import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>;
84
84
  }, import("zod/v4/core").$strip>>;
@@ -107,18 +107,18 @@ declare const entitlementEvents: {
107
107
  createdAt: unknown;
108
108
  updatedAt: unknown;
109
109
  }, import("zod").ZodObject<{
110
- id: import("zod").ZodString;
111
110
  orgId: import("zod").ZodString;
112
- orgUserId: import("zod").ZodString;
111
+ id: import("zod").ZodString;
113
112
  createdAt: import("zod").ZodCoercedDate<unknown>;
114
113
  updatedAt: import("zod").ZodCoercedDate<unknown>;
115
- source: import("zod").ZodString;
116
114
  status: import("zod").ZodEnum<{
117
115
  active: "active";
118
116
  revoked: "revoked";
119
117
  }>;
120
- bundleId: import("zod").ZodNullable<import("zod").ZodString>;
118
+ source: import("zod").ZodString;
121
119
  contentId: import("zod").ZodNullable<import("zod").ZodString>;
120
+ bundleId: import("zod").ZodNullable<import("zod").ZodString>;
121
+ orgUserId: import("zod").ZodString;
122
122
  grantedAt: import("zod").ZodCoercedDate<unknown>;
123
123
  expiresAt: import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>;
124
124
  }, import("zod/v4/core").$strip>>;
@@ -147,18 +147,18 @@ declare const entitlementEvents: {
147
147
  createdAt: unknown;
148
148
  updatedAt: unknown;
149
149
  }, import("zod").ZodObject<{
150
- id: import("zod").ZodString;
151
150
  orgId: import("zod").ZodString;
152
- orgUserId: import("zod").ZodString;
151
+ id: import("zod").ZodString;
153
152
  createdAt: import("zod").ZodCoercedDate<unknown>;
154
153
  updatedAt: import("zod").ZodCoercedDate<unknown>;
155
- source: import("zod").ZodString;
156
154
  status: import("zod").ZodEnum<{
157
155
  active: "active";
158
156
  revoked: "revoked";
159
157
  }>;
160
- bundleId: import("zod").ZodNullable<import("zod").ZodString>;
158
+ source: import("zod").ZodString;
161
159
  contentId: import("zod").ZodNullable<import("zod").ZodString>;
160
+ bundleId: import("zod").ZodNullable<import("zod").ZodString>;
161
+ orgUserId: import("zod").ZodString;
162
162
  grantedAt: import("zod").ZodCoercedDate<unknown>;
163
163
  expiresAt: import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>;
164
164
  }, import("zod/v4/core").$strip>>;
@@ -189,18 +189,18 @@ declare const entitlementEvents: {
189
189
  updatedAt: unknown;
190
190
  communityId: string;
191
191
  }, import("zod").ZodObject<{
192
- id: import("zod").ZodString;
193
192
  orgId: import("zod").ZodString;
194
- orgUserId: import("zod").ZodString;
193
+ id: import("zod").ZodString;
195
194
  createdAt: import("zod").ZodCoercedDate<unknown>;
196
195
  updatedAt: import("zod").ZodCoercedDate<unknown>;
197
- source: import("zod").ZodString;
198
196
  status: import("zod").ZodEnum<{
199
197
  active: "active";
200
198
  revoked: "revoked";
201
199
  }>;
202
- bundleId: import("zod").ZodNullable<import("zod").ZodString>;
200
+ source: import("zod").ZodString;
203
201
  contentId: import("zod").ZodNullable<import("zod").ZodString>;
202
+ bundleId: import("zod").ZodNullable<import("zod").ZodString>;
203
+ orgUserId: import("zod").ZodString;
204
204
  grantedAt: import("zod").ZodCoercedDate<unknown>;
205
205
  expiresAt: import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>;
206
206
  communityId: import("zod").ZodString;
@@ -1,9 +1,9 @@
1
1
  import { Page } from "../types/shared.js";
2
- import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "../types/schemas/entitlements.js";
2
+ import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, GrantSource, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "../types/schemas/entitlements.js";
3
3
  import "./model.js";
4
- import { AccessFacts, CommunityAccessReader, EndingGrant, EndingGrantKey, EntitlementNotice, EntitlementsRepository, EntitlementsService, GrantKey, GrantTarget, InsertSpaceMemberInput, OpenableSpace, SpaceAccessRule, SpaceMembersQuery } from "./ports.js";
4
+ import { AccessFacts, CommunityAccessReader, CommunityReaders, ContentReader, EndingGrant, EndingGrantKey, EntitlementNotice, EntitlementsRepository, EntitlementsService, GrantKey, GrantTarget, InsertGrantInput, InsertSpaceMemberInput, OpenableSpace, PermissionHolders, RevokeGrantInput, SpaceAccessRule, SpaceMembersQuery } from "./ports.js";
5
5
  import { EntitlementsServiceImpl } from "./service.js";
6
6
  import { EntitlementCreated, EntitlementDeleted, EntitlementEndingSoon, EntitlementEvent, EntitlementExpired, EntitlementUpdated, SpaceMemberCreated, SpaceMemberDeleted, SpaceMemberUpdated, entitlementEvents } from "./events.js";
7
- import { seesSpace } from "./rules.js";
7
+ import { opensSpace, seesSpace } from "./rules.js";
8
8
  import { GRANTS_EXPIRE_JOB, entitlementsJobs, entitlementsRecurringJobs } from "./jobs.js";
9
- export { type AccessFacts, type CommunityAccessReader, type EndingGrant, type EndingGrantKey, type Entitlement, type EntitlementCreated, type EntitlementDeleted, type EntitlementEndingSoon, type EntitlementEvent, type EntitlementExpired, type EntitlementNotice, type EntitlementStatus, type EntitlementUpdated, type EntitlementsQuery, type EntitlementsRepository, type EntitlementsService, EntitlementsServiceImpl, GRANTS_EXPIRE_JOB, type GrantEntitlementInput, type GrantKey, type GrantTarget, type InsertSpaceMemberInput, type OpenableSpace, type Page, type SpaceAccessRule, type SpaceMember, type SpaceMemberCreated, type SpaceMemberDeleted, type SpaceMemberSource, type SpaceMemberStatus, type SpaceMemberUpdated, type SpaceMembersQuery, entitlementEvents, entitlementsJobs, entitlementsRecurringJobs, seesSpace };
9
+ export { type AccessFacts, type CommunityAccessReader, type CommunityReaders, type ContentReader, type EndingGrant, type EndingGrantKey, type Entitlement, type EntitlementCreated, type EntitlementDeleted, type EntitlementEndingSoon, type EntitlementEvent, type EntitlementExpired, type EntitlementNotice, type EntitlementStatus, type EntitlementUpdated, type EntitlementsQuery, type EntitlementsRepository, type EntitlementsService, EntitlementsServiceImpl, GRANTS_EXPIRE_JOB, type GrantEntitlementInput, type GrantKey, type GrantSource, type GrantTarget, type InsertGrantInput, type InsertSpaceMemberInput, type OpenableSpace, type Page, type PermissionHolders, type RevokeGrantInput, type SpaceAccessRule, type SpaceMember, type SpaceMemberCreated, type SpaceMemberDeleted, type SpaceMemberSource, type SpaceMemberStatus, type SpaceMemberUpdated, type SpaceMembersQuery, entitlementEvents, entitlementsJobs, entitlementsRecurringJobs, opensSpace, seesSpace };
@@ -1,5 +1,5 @@
1
1
  import { entitlementEvents } from "./events.js";
2
- import { seesSpace } from "./rules.js";
2
+ import { opensSpace, seesSpace } from "./rules.js";
3
3
  import { EntitlementsServiceImpl } from "./service.js";
4
4
  import { GRANTS_EXPIRE_JOB, entitlementsJobs, entitlementsRecurringJobs } from "./jobs.js";
5
- export { EntitlementsServiceImpl, GRANTS_EXPIRE_JOB, entitlementEvents, entitlementsJobs, entitlementsRecurringJobs, seesSpace };
5
+ export { EntitlementsServiceImpl, GRANTS_EXPIRE_JOB, entitlementEvents, entitlementsJobs, entitlementsRecurringJobs, opensSpace, seesSpace };
@@ -1,5 +1,5 @@
1
1
  import { Page } from "../types/shared.js";
2
2
  import { ContentType } from "../types/schemas/content.js";
3
- import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "../types/schemas/entitlements.js";
3
+ import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, GrantSource, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "../types/schemas/entitlements.js";
4
4
  import "../types/index.js";
5
- export type { ContentType, Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, Page, SpaceMember, SpaceMemberSource, SpaceMemberStatus };
5
+ export type { ContentType, Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, GrantSource, Page, SpaceMember, SpaceMemberSource, SpaceMemberStatus };
@@ -1,13 +1,13 @@
1
1
  import { Page } from "../types/shared.js";
2
- import { ContentType, Space } from "../types/schemas/content.js";
3
- import { Role } from "../types/schemas/organizations.js";
4
- import { Entitlement, EntitlementsQuery, GrantEntitlementInput, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "../types/schemas/entitlements.js";
5
- import { OutboxAppender, UnitOfWork } from "../shared/ports.js";
2
+ import { ContentType, Event, Space } from "../types/schemas/content.js";
3
+ import { Permission } from "../types/schemas/organizations.js";
4
+ import { Entitlement, EntitlementsQuery, GrantEntitlementInput, GrantSource, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "../types/schemas/entitlements.js";
5
+ import "../types/index.js";
6
6
  import { Actor } from "../shared/actor.js";
7
+ import { OutboxAppender, UnitOfWork } from "../shared/ports.js";
7
8
  import { SpaceRowLock } from "../content/ports.js";
8
9
  import "../content/index.js";
9
10
  import "./model.js";
10
- import "../organizations/index.js";
11
11
  //#region src/entitlements/ports.d.ts
12
12
  interface GrantTarget {
13
13
  contentId: string | null;
@@ -20,12 +20,12 @@ interface OpenableSpace {
20
20
  accessRule: SpaceAccessRule;
21
21
  }
22
22
  interface CommunityAccessReader {
23
- isCommunityMember(orgId: string, actor: Actor, communityId: string): Promise<boolean>;
24
- canOpenSpace(orgId: string, actor: Actor, spaceId: string): Promise<boolean>;
25
- canOpen(orgId: string, actor: Actor, space: OpenableSpace): Promise<boolean>;
26
- openSpaceIds(orgId: string, actor: Actor, communityId: string): Promise<string[]>;
27
- openSpacesFor(orgId: string, actor: Actor, communityId: string): Promise<Space[]>;
28
- spaceStandings(orgId: string, actor: Actor, communityId: string): Promise<Record<string, SpaceMember['status']>>;
23
+ isCommunityMember(communityId: string, actor: Actor): Promise<boolean>;
24
+ canOpenSpace(spaceId: string, actor: Actor): Promise<boolean>;
25
+ canOpen(space: OpenableSpace, actor: Actor): Promise<boolean>;
26
+ openSpaceIds(communityId: string, actor: Actor): Promise<string[]>;
27
+ openSpacesFor(communityId: string, actor: Actor): Promise<Space[]>;
28
+ spaceStandings(communityId: string, actor: Actor): Promise<Record<string, SpaceMember['status']>>;
29
29
  communityMembersAmong(orgId: string, communityId: string, orgUserIds: string[]): Promise<string[]>;
30
30
  spaceOpenersAmong(orgId: string, spaceId: string, orgUserIds: string[]): Promise<string[]>;
31
31
  spaceOpeners(orgId: string, spaceId: string): Promise<string[]>;
@@ -50,10 +50,28 @@ interface EndingGrantKey {
50
50
  }
51
51
  interface AccessFacts {
52
52
  orgUserId: string;
53
- role: Role;
54
- member: boolean;
53
+ granted: boolean;
55
54
  activeInSpace: boolean;
56
55
  }
56
+ interface PermissionHolders {
57
+ holders(orgId: string, permission: Permission, on?: string): Promise<string[]>;
58
+ systemActor(orgId: string): Actor;
59
+ }
60
+ interface ContentReader {
61
+ getSpace(spaceId: string, actor: Actor): Promise<Space | null>;
62
+ listSpaces(communityId: string, actor: Actor): Promise<Space[]>;
63
+ getEvent(eventId: string, actor: Actor): Promise<Event>;
64
+ }
65
+ interface RevokeGrantInput {
66
+ orgUserId: string;
67
+ contentId?: string | null;
68
+ bundleId?: string | null;
69
+ contentType?: ContentType;
70
+ }
71
+ interface CommunityReaders {
72
+ all: boolean;
73
+ ids: string[];
74
+ }
57
75
  interface GrantKey {
58
76
  orgUserId: string;
59
77
  contentId?: string | null;
@@ -63,7 +81,11 @@ interface SpaceMembersQuery {
63
81
  page: number;
64
82
  pageSize: number;
65
83
  statuses?: SpaceMemberStatus[];
84
+ excluding?: string[];
66
85
  }
86
+ type InsertGrantInput = Omit<GrantEntitlementInput, 'contentType'> & {
87
+ source: GrantSource;
88
+ };
67
89
  interface InsertSpaceMemberInput {
68
90
  communityId: string;
69
91
  spaceId: string;
@@ -72,48 +94,52 @@ interface InsertSpaceMemberInput {
72
94
  source: SpaceMemberSource;
73
95
  }
74
96
  interface EntitlementsService extends CommunityAccessReader {
75
- list(orgId: string, query: EntitlementsQuery): Promise<Page<Entitlement>>;
76
- grant(orgId: string, input: GrantEntitlementInput): Promise<Entitlement>;
77
- ensureGrant(orgId: string, input: GrantEntitlementInput): Promise<Entitlement>;
78
- setStatus(orgId: string, id: string, status: 'active' | 'revoked'): Promise<Entitlement | null>;
97
+ list(query: EntitlementsQuery, actor: Actor): Promise<Page<Entitlement>>;
98
+ grant(input: GrantEntitlementInput, actor: Actor): Promise<Entitlement>;
99
+ revoke(input: RevokeGrantInput, actor: Actor): Promise<Entitlement>;
79
100
  /** Whether this org user can open the content right now, through a grant to
80
101
  * it or to a bundle holding it. The only access check — nothing else may
81
102
  * derive access from grants. */
82
103
  hasAccess(orgId: string, orgUserId: string, contentId: string): Promise<boolean>;
83
104
  /** Ids of the content this org user can open right now, optionally of one type. */
84
105
  listAccessibleContent(orgId: string, orgUserId: string, type?: ContentType): Promise<string[]>;
85
- requestJoin(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
86
- invite(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
87
- addSpaceMember(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
88
- accept(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
89
- approve(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
90
- decline(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
91
- refuse(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
92
- leave(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
93
- remove(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
94
- listSpaceMembers(orgId: string, actor: Actor, communityId: string, spaceId: string, query: {
106
+ holdsAnyGrant(orgId: string, orgUserId: string): Promise<boolean>;
107
+ /** `communities:read` on the community, or a member of it holding `communities:moderate` on it. */
108
+ opensEverySpace(actor: Actor, communityId: string): Promise<boolean>;
109
+ requestJoin(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
110
+ invite(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
111
+ addSpaceMember(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
112
+ accept(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
113
+ approve(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
114
+ decline(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
115
+ refuse(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
116
+ leave(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
117
+ remove(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
118
+ listSpaceMembers(communityId: string, spaceId: string, query: {
95
119
  page: number;
96
120
  pageSize: number;
97
- }): Promise<Page<SpaceMember>>;
121
+ }, actor: Actor): Promise<Page<SpaceMember>>;
98
122
  expireDueGrants(now: Date): Promise<void>;
99
123
  communitiesOpenedBy(orgId: string, grant: GrantTarget): Promise<string[]>;
100
124
  communityModeratorIds(orgId: string, communityId: string): Promise<string[]>;
101
125
  communityIdsOpenedFor(orgId: string, orgUserId: string): Promise<string[]>;
102
- openCommunityIds(orgId: string, actor: Actor): Promise<string[]>;
126
+ openCommunityIds(actor: Actor): Promise<string[]>;
103
127
  communityMemberIds(orgId: string, communityId: string): Promise<string[]>;
104
- contentHolderIds(orgId: string, contentId: string): Promise<string[]>;
128
+ grantedOrgUserIds(orgId: string, contentId: string): Promise<string[]>;
105
129
  countActiveSpaceMembers(orgId: string, spaceId: string): Promise<number>;
130
+ /** Org users who open every space of the community, so hold no place in its spaces. */
131
+ everySpaceOpeners(orgId: string, communityId: string): Promise<string[]>;
106
132
  }
107
133
  interface EntitlementsRepository {
108
134
  list(orgId: string, query: EntitlementsQuery): Promise<Page<Entitlement>>;
109
- insert(orgId: string, input: GrantEntitlementInput): Promise<Entitlement>;
110
- insertIfAbsent(orgId: string, input: GrantEntitlementInput): Promise<Entitlement | null>;
135
+ insert(orgId: string, input: InsertGrantInput): Promise<Entitlement>;
111
136
  lockGrant(orgId: string, key: GrantKey): Promise<Entitlement | null>;
112
- setExpiresAt(orgId: string, id: string, expiresAt: Date | null): Promise<Entitlement | null>;
113
137
  setStatus(orgId: string, id: string, status: 'active' | 'revoked'): Promise<Entitlement | null>;
114
138
  hasAccess(orgId: string, orgUserId: string, contentId: string): Promise<boolean>;
115
139
  listAccessibleContent(orgId: string, orgUserId: string, type?: ContentType): Promise<string[]>;
116
140
  hasCommunityAccess(orgId: string, orgUserId: string, communityId: string): Promise<boolean>;
141
+ holdsAnyGrant(orgId: string, orgUserId: string): Promise<boolean>;
142
+ contentTypeOf(orgId: string, contentId: string): Promise<ContentType | null>;
117
143
  communitiesOpenedBy(orgId: string, grant: GrantTarget): Promise<string[]>;
118
144
  accessAmong(orgId: string, communityId: string, spaceId: string | null, orgUserIds: string[]): Promise<AccessFacts[]>;
119
145
  findSpaceMember(orgId: string, spaceId: string, orgUserId: string): Promise<SpaceMember | null>;
@@ -123,7 +149,7 @@ interface EntitlementsRepository {
123
149
  insertSpaceMember(orgId: string, input: InsertSpaceMemberInput): Promise<SpaceMember>;
124
150
  updateSpaceMemberStatus(orgId: string, id: string, status: SpaceMemberStatus): Promise<SpaceMember | null>;
125
151
  deleteSpaceMember(orgId: string, id: string): Promise<void>;
126
- countActiveSpaceMembers(orgId: string, spaceId: string): Promise<number>;
152
+ countActiveSpaceMembers(orgId: string, spaceId: string, excluding: string[]): Promise<number>;
127
153
  activeSpaceIds(orgId: string, orgUserId: string, communityId: string): Promise<string[]>;
128
154
  /** Expired grants with no expiry notice, in id order, after `afterId` when given. */
129
155
  listGrantsExpiredBy(orgId: string, now: Date, limit: number, afterId?: string): Promise<Entitlement[]>;
@@ -131,11 +157,11 @@ interface EntitlementsRepository {
131
157
  listGrantsEndingBetween(orgId: string, after: Date, until: Date, limit: number, afterKey?: EndingGrantKey): Promise<EndingGrant[]>;
132
158
  orgIdsWithDueNotices(now: Date, until: Date): Promise<string[]>;
133
159
  claimNotice(orgId: string, notice: EntitlementNotice, now: Date): Promise<boolean>;
134
- communityModeratorIds(orgId: string, communityId: string): Promise<string[]>;
135
- communityMemberIds(orgId: string, communityId: string): Promise<string[]>;
160
+ communityMemberIds(orgId: string, communityId: string, readerIds: string[]): Promise<string[]>;
136
161
  communityIdsOpenedFor(orgId: string, orgUserId: string): Promise<string[]>;
137
- openCommunityIds(orgId: string, orgUserId: string): Promise<string[]>;
138
- contentHolderIds(orgId: string, contentId: string): Promise<string[]>;
162
+ openCommunityIds(orgId: string, orgUserId: string, readers: CommunityReaders): Promise<string[]>;
163
+ grantedOrgUserIds(orgId: string, contentId: string): Promise<string[]>;
164
+ lockCapacity(orgId: string, contentId: string): Promise<void>;
139
165
  }
140
166
  /** Tx-scoped port bundle for this context's mutating use cases — every member
141
167
  * is bound to the UnitOfWork's transaction, so the write and the event append
@@ -147,5 +173,5 @@ interface EntitlementsTxScope {
147
173
  }
148
174
  type EntitlementsUnitOfWork = UnitOfWork<EntitlementsTxScope>;
149
175
  //#endregion
150
- export { AccessFacts, CommunityAccessReader, EndingGrant, EndingGrantKey, EntitlementNotice, EntitlementsRepository, EntitlementsService, EntitlementsTxScope, EntitlementsUnitOfWork, GrantKey, GrantTarget, InsertSpaceMemberInput, OpenableSpace, SpaceAccessRule, SpaceMembersQuery };
176
+ export { AccessFacts, CommunityAccessReader, CommunityReaders, ContentReader, EndingGrant, EndingGrantKey, EntitlementNotice, EntitlementsRepository, EntitlementsService, EntitlementsTxScope, EntitlementsUnitOfWork, GrantKey, GrantTarget, InsertGrantInput, InsertSpaceMemberInput, OpenableSpace, PermissionHolders, RevokeGrantInput, SpaceAccessRule, SpaceMembersQuery };
151
177
  //# sourceMappingURL=ports.d.ts.map
@@ -1,12 +1,9 @@
1
- import { Role } from "../types/schemas/organizations.js";
2
1
  import { SpaceMemberStatus } from "../types/schemas/entitlements.js";
3
2
  import "./model.js";
4
- import "../organizations/index.js";
5
3
  import { SpaceAccessRule } from "./ports.js";
6
4
  //#region src/entitlements/rules.d.ts
7
- declare function opensSpace(role: Role, member: boolean, accessRule: SpaceAccessRule, activeInSpace: boolean): boolean;
8
- declare function seesSpace(role: Role, accessRule: SpaceAccessRule, status: SpaceMemberStatus | undefined): boolean;
9
- declare function laterExpiry(a: Date | null, b: Date | null): Date | null;
5
+ declare function opensSpace(member: boolean, everySpace: boolean, accessRule: SpaceAccessRule, activeInSpace: boolean): boolean;
6
+ declare function seesSpace(everySpace: boolean, accessRule: SpaceAccessRule, status: SpaceMemberStatus | undefined): boolean;
10
7
  //#endregion
11
- export { laterExpiry, opensSpace, seesSpace };
8
+ export { opensSpace, seesSpace };
12
9
  //# sourceMappingURL=rules.d.ts.map
@@ -1,17 +1,12 @@
1
- import { canModerate } from "../organizations/roles.js";
2
1
  //#region src/entitlements/rules.ts
3
- function opensSpace(role, member, accessRule, activeInSpace) {
2
+ function opensSpace(member, everySpace, accessRule, activeInSpace) {
4
3
  if (!member) return false;
5
- return canModerate(role) || accessRule === "all_members" || activeInSpace;
4
+ return everySpace || accessRule === "all_members" || activeInSpace;
6
5
  }
7
- function seesSpace(role, accessRule, status) {
8
- return canModerate(role) || accessRule !== "by_invite" || status !== void 0 && status !== "revoked";
9
- }
10
- function laterExpiry(a, b) {
11
- if (a === null || b === null) return null;
12
- return a.getTime() >= b.getTime() ? a : b;
6
+ function seesSpace(everySpace, accessRule, status) {
7
+ return everySpace || accessRule !== "by_invite" || status !== void 0 && status !== "revoked";
13
8
  }
14
9
  //#endregion
15
- export { laterExpiry, opensSpace, seesSpace };
10
+ export { opensSpace, seesSpace };
16
11
 
17
12
  //# sourceMappingURL=rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","names":[],"sources":["../../src/entitlements/rules.ts"],"sourcesContent":["import { canModerate, type Role } from '../organizations/index.js';\nimport type { SpaceAccessRule } from './ports.js';\nimport type { SpaceMemberStatus } from './model.js';\n\nexport function opensSpace(\n role: Role,\n member: boolean,\n accessRule: SpaceAccessRule,\n activeInSpace: boolean,\n): boolean {\n if (!member) {\n return false;\n }\n return canModerate(role) || accessRule === 'all_members' || activeInSpace;\n}\n\nexport function seesSpace(\n role: Role,\n accessRule: SpaceAccessRule,\n status: SpaceMemberStatus | undefined,\n): boolean {\n return (\n canModerate(role) ||\n accessRule !== 'by_invite' ||\n (status !== undefined && status !== 'revoked')\n );\n}\n\nexport function laterExpiry(a: Date | null, b: Date | null): Date | null {\n if (a === null || b === null) {\n return null;\n }\n return a.getTime() >= b.getTime() ? a : b;\n}\n"],"mappings":";;AAIA,SAAgB,WACd,MACA,QACA,YACA,eACS;CACT,IAAI,CAAC,QACH,OAAO;CAET,OAAO,YAAY,IAAI,KAAK,eAAe,iBAAiB;AAC9D;AAEA,SAAgB,UACd,MACA,YACA,QACS;CACT,OACE,YAAY,IAAI,KAChB,eAAe,eACd,WAAW,KAAA,KAAa,WAAW;AAExC;AAEA,SAAgB,YAAY,GAAgB,GAA6B;CACvE,IAAI,MAAM,QAAQ,MAAM,MACtB,OAAO;CAET,OAAO,EAAE,QAAQ,KAAK,EAAE,QAAQ,IAAI,IAAI;AAC1C"}
1
+ {"version":3,"file":"rules.js","names":[],"sources":["../../src/entitlements/rules.ts"],"sourcesContent":["import type { SpaceAccessRule } from './ports.js';\nimport type { SpaceMemberStatus } from './model.js';\n\nexport function opensSpace(\n member: boolean,\n everySpace: boolean,\n accessRule: SpaceAccessRule,\n activeInSpace: boolean,\n): boolean {\n if (!member) {\n return false;\n }\n return everySpace || accessRule === 'all_members' || activeInSpace;\n}\n\nexport function seesSpace(\n everySpace: boolean,\n accessRule: SpaceAccessRule,\n status: SpaceMemberStatus | undefined,\n): boolean {\n return everySpace || accessRule !== 'by_invite' || (status !== undefined && status !== 'revoked');\n}\n"],"mappings":";AAGA,SAAgB,WACd,QACA,YACA,YACA,eACS;CACT,IAAI,CAAC,QACH,OAAO;CAET,OAAO,cAAc,eAAe,iBAAiB;AACvD;AAEA,SAAgB,UACd,YACA,YACA,QACS;CACT,OAAO,cAAc,eAAe,eAAgB,WAAW,KAAA,KAAa,WAAW;AACzF"}
@@ -2,17 +2,17 @@ import { Page } from "../types/shared.js";
2
2
  import { Logger } from "../types/ports.js";
3
3
  import { ContentType, Space } from "../types/schemas/content.js";
4
4
  import { Entitlement, EntitlementsQuery, GrantEntitlementInput, SpaceMember } from "../types/schemas/entitlements.js";
5
- import "../shared/ports.js";
6
5
  import { Actor } from "../shared/actor.js";
7
- import { CommunityReader } from "../content/ports.js";
6
+ import "../shared/ports.js";
8
7
  import "../content/index.js";
9
8
  import "./model.js";
10
- import { EntitlementsRepository, EntitlementsService, EntitlementsUnitOfWork, GrantTarget, OpenableSpace } from "./ports.js";
9
+ import { ContentReader, EntitlementsRepository, EntitlementsService, EntitlementsUnitOfWork, GrantTarget, OpenableSpace, PermissionHolders, RevokeGrantInput } from "./ports.js";
11
10
  //#region src/entitlements/service.d.ts
12
11
  type EntitlementsServiceParams = {
13
12
  /** Read-only access (list) — runs outside any transaction. */
14
13
  repo: EntitlementsRepository;
15
- content: CommunityReader;
14
+ content: ContentReader;
15
+ permissions: PermissionHolders;
16
16
  /** Atomic write scope: tx-bound repo + outbox appender. */
17
17
  uow: EntitlementsUnitOfWork;
18
18
  logger?: Logger;
@@ -20,52 +20,64 @@ type EntitlementsServiceParams = {
20
20
  declare class EntitlementsServiceImpl implements EntitlementsService {
21
21
  private readonly repo;
22
22
  private readonly content;
23
+ private readonly permissions;
23
24
  private readonly uow;
24
25
  private readonly logger;
25
26
  constructor(params: EntitlementsServiceParams);
26
- list(orgId: string, query: EntitlementsQuery): Promise<Page<Entitlement>>;
27
- grant(orgId: string, input: GrantEntitlementInput): Promise<Entitlement>;
28
- ensureGrant(orgId: string, input: GrantEntitlementInput): Promise<Entitlement>;
29
- setStatus(orgId: string, id: string, status: 'active' | 'revoked'): Promise<Entitlement | null>;
27
+ list(query: EntitlementsQuery, actor: Actor): Promise<Page<Entitlement>>;
28
+ grant(input: GrantEntitlementInput, actor: Actor): Promise<Entitlement>;
29
+ revoke(input: RevokeGrantInput, actor: Actor): Promise<Entitlement>;
30
+ private grantEvent;
31
+ private assertCanRegister;
32
+ private requireAttendeeManager;
33
+ private assertPlace;
34
+ private sourceOf;
35
+ private actorMetadata;
30
36
  hasAccess(orgId: string, orgUserId: string, contentId: string): Promise<boolean>;
31
37
  listAccessibleContent(orgId: string, orgUserId: string, type?: ContentType): Promise<string[]>;
32
- isCommunityMember(orgId: string, actor: Actor, communityId: string): Promise<boolean>;
33
- canOpenSpace(orgId: string, actor: Actor, spaceId: string): Promise<boolean>;
34
- canOpen(orgId: string, actor: Actor, space: OpenableSpace): Promise<boolean>;
35
- spaceStandings(orgId: string, actor: Actor, communityId: string): Promise<Record<string, SpaceMember['status']>>;
36
- openSpacesFor(orgId: string, actor: Actor, communityId: string): Promise<Space[]>;
37
- openSpaceIds(orgId: string, actor: Actor, communityId: string): Promise<string[]>;
38
+ holdsAnyGrant(orgId: string, orgUserId: string): Promise<boolean>;
39
+ opensEverySpace(actor: Actor, communityId: string): Promise<boolean>;
40
+ isCommunityMember(communityId: string, actor: Actor): Promise<boolean>;
41
+ canOpenSpace(spaceId: string, actor: Actor): Promise<boolean>;
42
+ canOpen(space: OpenableSpace, actor: Actor): Promise<boolean>;
43
+ spaceStandings(communityId: string, actor: Actor): Promise<Record<string, SpaceMember['status']>>;
44
+ openSpacesFor(communityId: string, actor: Actor): Promise<Space[]>;
45
+ openSpaceIds(communityId: string, actor: Actor): Promise<string[]>;
38
46
  communityMembersAmong(orgId: string, communityId: string, orgUserIds: string[]): Promise<string[]>;
39
47
  spaceOpenersAmong(orgId: string, spaceId: string, orgUserIds: string[]): Promise<string[]>;
40
48
  spaceOpeners(orgId: string, spaceId: string): Promise<string[]>;
41
49
  communitiesOpenedBy(orgId: string, grant: GrantTarget): Promise<string[]>;
42
50
  communityModeratorIds(orgId: string, communityId: string): Promise<string[]>;
43
51
  communityIdsOpenedFor(orgId: string, orgUserId: string): Promise<string[]>;
44
- openCommunityIds(orgId: string, actor: Actor): Promise<string[]>;
52
+ openCommunityIds(actor: Actor): Promise<string[]>;
45
53
  communityMemberIds(orgId: string, communityId: string): Promise<string[]>;
46
- contentHolderIds(orgId: string, contentId: string): Promise<string[]>;
54
+ grantedOrgUserIds(orgId: string, contentId: string): Promise<string[]>;
47
55
  countActiveSpaceMembers(orgId: string, spaceId: string): Promise<number>;
48
- requestJoin(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
49
- invite(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
50
- addSpaceMember(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
51
- accept(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
52
- approve(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
53
- decline(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
54
- refuse(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
55
- leave(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<SpaceMember>;
56
- remove(orgId: string, actor: Actor, communityId: string, spaceId: string, orgUserId: string): Promise<SpaceMember>;
57
- listSpaceMembers(orgId: string, actor: Actor, communityId: string, spaceId: string, query: {
56
+ everySpaceOpeners(orgId: string, communityId: string): Promise<string[]>;
57
+ requestJoin(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
58
+ invite(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
59
+ addSpaceMember(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
60
+ accept(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
61
+ approve(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
62
+ decline(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
63
+ refuse(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
64
+ leave(communityId: string, spaceId: string, actor: Actor): Promise<SpaceMember>;
65
+ remove(communityId: string, spaceId: string, orgUserId: string, actor: Actor): Promise<SpaceMember>;
66
+ listSpaceMembers(communityId: string, spaceId: string, query: {
58
67
  page: number;
59
68
  pageSize: number;
60
- }): Promise<Page<SpaceMember>>;
69
+ }, actor: Actor): Promise<Page<SpaceMember>>;
61
70
  expireDueGrants(now: Date): Promise<void>;
62
71
  private expireDueIn;
72
+ private system;
73
+ private teamOf;
74
+ private standingOf;
63
75
  private requireSpaceIn;
64
76
  private requireVisibleSpaceIn;
65
77
  private assertHasMembers;
66
78
  private assertRule;
67
79
  private assertHolder;
68
- private assertGrant;
80
+ private assertMember;
69
81
  private assertHolds;
70
82
  private assertCanManage;
71
83
  private accessOf;