@headless-lms/core 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/events.d.ts +15 -9
- package/dist/assets/file-urls.d.ts +14 -7
- package/dist/assets/file-urls.js +15 -4
- package/dist/assets/file-urls.js.map +1 -1
- package/dist/assets/index.d.ts +4 -4
- package/dist/assets/index.js +3 -3
- package/dist/assets/ports.d.ts +34 -15
- package/dist/assets/service.d.ts +30 -14
- package/dist/assets/service.js +233 -54
- package/dist/assets/service.js.map +1 -1
- package/dist/automations/actions.js.map +1 -1
- package/dist/automations/catalog.js +68 -3
- package/dist/automations/catalog.js.map +1 -1
- package/dist/automations/community-derivations.js +16 -16
- package/dist/automations/community-derivations.js.map +1 -1
- package/dist/automations/community-mail.d.ts +34 -4
- package/dist/automations/community-mail.js +32 -4
- package/dist/automations/community-mail.js.map +1 -1
- package/dist/automations/event-permissions.d.ts +12 -0
- package/dist/automations/event-permissions.js +38 -0
- package/dist/automations/event-permissions.js.map +1 -0
- package/dist/automations/index.d.ts +2 -1
- package/dist/automations/index.js +2 -1
- package/dist/automations/notifications/applicable.d.ts +8 -0
- package/dist/automations/notifications/applicable.js +12 -0
- package/dist/automations/notifications/applicable.js.map +1 -0
- package/dist/automations/notifications/debounce.js +1 -1
- package/dist/automations/notifications/debounce.js.map +1 -1
- package/dist/automations/notifications/defaults.js +33 -3
- package/dist/automations/notifications/defaults.js.map +1 -1
- package/dist/automations/notifications/processor.js +1 -1
- package/dist/automations/notifications/processor.js.map +1 -1
- package/dist/automations/notifications/rules/content.js +60 -3
- package/dist/automations/notifications/rules/content.js.map +1 -1
- package/dist/automations/notifications/rules/discussion.js +29 -29
- package/dist/automations/notifications/rules/discussion.js.map +1 -1
- package/dist/automations/notifications/rules/entitlements.js +36 -9
- package/dist/automations/notifications/rules/entitlements.js.map +1 -1
- package/dist/automations/notifications/rules/events.d.ts +9 -0
- package/dist/automations/notifications/rules/events.js +27 -0
- package/dist/automations/notifications/rules/events.js.map +1 -0
- package/dist/automations/notifications/rules/organizations.js +17 -10
- package/dist/automations/notifications/rules/organizations.js.map +1 -1
- package/dist/automations/notifications/rules/recipients.js +0 -1
- package/dist/automations/notifications/rules/recipients.js.map +1 -1
- package/dist/automations/notifications/service.d.ts +8 -6
- package/dist/automations/notifications/service.js +12 -12
- package/dist/automations/notifications/service.js.map +1 -1
- package/dist/automations/notifications/types.js +94 -7
- package/dist/automations/notifications/types.js.map +1 -1
- package/dist/automations/ports.d.ts +30 -31
- package/dist/automations/service.d.ts +20 -17
- package/dist/automations/service.js +90 -61
- package/dist/automations/service.js.map +1 -1
- package/dist/content/event-sight.d.ts +11 -0
- package/dist/content/event-sight.js +11 -0
- package/dist/content/event-sight.js.map +1 -0
- package/dist/content/events.d.ts +465 -88
- package/dist/content/events.js +34 -1
- package/dist/content/events.js.map +1 -1
- package/dist/content/index.d.ts +6 -4
- package/dist/content/index.js +3 -1
- package/dist/content/jobs.d.ts +16 -0
- package/dist/content/jobs.js +37 -0
- package/dist/content/jobs.js.map +1 -0
- package/dist/content/model.d.ts +2 -2
- package/dist/content/notification-categories.d.ts +5 -4
- package/dist/content/notification-categories.js +15 -6
- package/dist/content/notification-categories.js.map +1 -1
- package/dist/content/ports.d.ts +113 -68
- package/dist/content/service.d.ts +103 -67
- package/dist/content/service.js +739 -152
- package/dist/content/service.js.map +1 -1
- package/dist/content/titles.d.ts +6 -3
- package/dist/content/titles.js +37 -24
- package/dist/content/titles.js.map +1 -1
- package/dist/content/types.d.ts +2 -2
- package/dist/discussion/authors.d.ts +4 -2
- package/dist/discussion/authors.js +9 -5
- package/dist/discussion/authors.js.map +1 -1
- package/dist/discussion/chats.d.ts +56 -37
- package/dist/discussion/chats.js +392 -160
- package/dist/discussion/chats.js.map +1 -1
- package/dist/discussion/events.d.ts +85 -47
- package/dist/discussion/events.js +41 -3
- package/dist/discussion/events.js.map +1 -1
- package/dist/discussion/index.d.ts +8 -5
- package/dist/discussion/index.js +5 -3
- package/dist/discussion/live.d.ts +106 -0
- package/dist/discussion/live.js +642 -0
- package/dist/discussion/live.js.map +1 -0
- package/dist/discussion/mentions.js +2 -2
- package/dist/discussion/mentions.js.map +1 -1
- package/dist/discussion/ports.d.ts +182 -100
- package/dist/discussion/ports.js.map +1 -1
- package/dist/discussion/posts.d.ts +45 -39
- package/dist/discussion/posts.js +266 -152
- package/dist/discussion/posts.js.map +1 -1
- package/dist/discussion/rules.d.ts +18 -0
- package/dist/discussion/rules.js +22 -0
- package/dist/discussion/rules.js.map +1 -0
- package/dist/discussion/service.d.ts +37 -31
- package/dist/discussion/service.js +250 -186
- package/dist/discussion/service.js.map +1 -1
- package/dist/discussion/subscriptions.d.ts +8 -8
- package/dist/discussion/subscriptions.js +28 -12
- package/dist/discussion/subscriptions.js.map +1 -1
- package/dist/discussion/titles.d.ts +4 -2
- package/dist/discussion/titles.js +27 -13
- package/dist/discussion/titles.js.map +1 -1
- package/dist/entitlements/events.d.ts +58 -58
- package/dist/entitlements/index.d.ts +4 -4
- package/dist/entitlements/index.js +2 -2
- package/dist/entitlements/model.d.ts +2 -2
- package/dist/entitlements/ports.d.ts +65 -39
- package/dist/entitlements/rules.d.ts +3 -6
- package/dist/entitlements/rules.js +5 -10
- package/dist/entitlements/rules.js.map +1 -1
- package/dist/entitlements/service.d.ts +40 -28
- package/dist/entitlements/service.js +369 -162
- package/dist/entitlements/service.js.map +1 -1
- package/dist/identity/devices.d.ts +3 -3
- package/dist/identity/devices.js +6 -4
- package/dist/identity/devices.js.map +1 -1
- package/dist/identity/index.d.ts +2 -2
- package/dist/identity/index.js +2 -2
- package/dist/identity/notification-settings.d.ts +1 -1
- package/dist/identity/notification-settings.js +2 -1
- package/dist/identity/notification-settings.js.map +1 -1
- package/dist/identity/ports.d.ts +7 -7
- package/dist/identity/service.d.ts +8 -7
- package/dist/identity/service.js +16 -12
- package/dist/identity/service.js.map +1 -1
- package/dist/integrations/events.d.ts +3 -3
- package/dist/integrations/ports.d.ts +9 -8
- package/dist/integrations/service.d.ts +9 -8
- package/dist/integrations/service.js +31 -14
- package/dist/integrations/service.js.map +1 -1
- package/dist/organizations/default-roles.d.ts +22 -0
- package/dist/organizations/default-roles.js +89 -0
- package/dist/organizations/default-roles.js.map +1 -0
- package/dist/organizations/effective-permissions.d.ts +47 -0
- package/dist/organizations/effective-permissions.js +118 -0
- package/dist/organizations/effective-permissions.js.map +1 -0
- package/dist/organizations/events.d.ts +326 -181
- package/dist/organizations/events.js +90 -18
- package/dist/organizations/events.js.map +1 -1
- package/dist/organizations/index.d.ts +14 -10
- package/dist/organizations/index.js +7 -3
- package/dist/organizations/members.d.ts +66 -8
- package/dist/organizations/members.js.map +1 -1
- package/dist/organizations/model.d.ts +2 -2
- package/dist/organizations/notification-catalog.d.ts +31 -0
- package/dist/organizations/notification-catalog.js +32 -0
- package/dist/organizations/notification-catalog.js.map +1 -0
- package/dist/organizations/notification-categories.d.ts +6 -4
- package/dist/organizations/notification-categories.js +25 -10
- package/dist/organizations/notification-categories.js.map +1 -1
- package/dist/organizations/org-roles.d.ts +33 -0
- package/dist/organizations/org-roles.js +49 -0
- package/dist/organizations/org-roles.js.map +1 -0
- package/dist/organizations/permissions.d.ts +311 -0
- package/dist/organizations/permissions.js +327 -0
- package/dist/organizations/permissions.js.map +1 -0
- package/dist/organizations/ports.d.ts +187 -65
- package/dist/organizations/service.d.ts +102 -35
- package/dist/organizations/service.js +1254 -327
- package/dist/organizations/service.js.map +1 -1
- package/dist/organizations/testing.d.ts +18 -0
- package/dist/organizations/testing.js +37 -0
- package/dist/organizations/testing.js.map +1 -0
- package/dist/organizations/types.d.ts +5 -16
- package/dist/progress/events.d.ts +14 -14
- package/dist/progress/index.d.ts +2 -2
- package/dist/progress/ports.d.ts +11 -3
- package/dist/progress/service.d.ts +6 -5
- package/dist/progress/service.js +21 -6
- package/dist/progress/service.js.map +1 -1
- package/dist/reporting/admin/index.d.ts +6 -4
- package/dist/reporting/admin/model.d.ts +36 -3
- package/dist/reporting/admin/ports.d.ts +39 -14
- package/dist/reporting/admin/service.d.ts +32 -11
- package/dist/reporting/admin/service.js +102 -18
- package/dist/reporting/admin/service.js.map +1 -1
- package/dist/reporting/events/index.d.ts +27 -0
- package/dist/reporting/events/index.js +20 -0
- package/dist/reporting/events/index.js.map +1 -0
- package/dist/reporting/member/calendar.d.ts +11 -0
- package/dist/reporting/member/calendar.js +75 -0
- package/dist/reporting/member/calendar.js.map +1 -0
- package/dist/reporting/member/index.d.ts +3 -2
- package/dist/reporting/member/model.d.ts +29 -5
- package/dist/reporting/member/ports.d.ts +49 -29
- package/dist/reporting/member/service.d.ts +57 -29
- package/dist/reporting/member/service.js +345 -114
- package/dist/reporting/member/service.js.map +1 -1
- package/dist/shared/actor.d.ts +23 -3
- package/dist/shared/errors.d.ts +2 -1
- package/dist/shared/errors.js +3 -1
- package/dist/shared/errors.js.map +1 -1
- package/dist/shared/id.d.ts +4 -0
- package/dist/shared/id.js +4 -0
- package/dist/shared/id.js.map +1 -1
- package/dist/shared/logger.d.ts +2 -1
- package/dist/shared/logger.js +10 -1
- package/dist/shared/logger.js.map +1 -1
- package/dist/shared/ports.d.ts +25 -5
- package/dist/types/content.d.ts +2 -2
- package/dist/types/discussion.d.ts +4 -5
- package/dist/types/email-templates.d.ts +22 -3
- package/dist/types/entitlements.d.ts +2 -2
- package/dist/types/identity.d.ts +13 -16
- package/dist/types/index.d.ts +9 -9
- package/dist/types/index.js +2 -1
- package/dist/types/notifications.d.ts +4 -4
- package/dist/types/organizations.d.ts +3 -2
- package/dist/types/ports.d.ts +8 -1
- package/dist/types/ports.js +7 -1
- package/dist/types/ports.js.map +1 -0
- package/dist/types/schemas/assets.d.ts +5 -5
- package/dist/types/schemas/assets.js +4 -3
- package/dist/types/schemas/assets.js.map +1 -1
- package/dist/types/schemas/content.d.ts +599 -13
- package/dist/types/schemas/content.js +219 -8
- package/dist/types/schemas/content.js.map +1 -1
- package/dist/types/schemas/discussion.d.ts +280 -57
- package/dist/types/schemas/discussion.js +77 -3
- package/dist/types/schemas/discussion.js.map +1 -1
- package/dist/types/schemas/entitlements.d.ts +21 -8
- package/dist/types/schemas/entitlements.js +11 -4
- package/dist/types/schemas/entitlements.js.map +1 -1
- package/dist/types/schemas/index.d.ts +5 -5
- package/dist/types/schemas/index.js +5 -5
- package/dist/types/schemas/notifications.d.ts +11 -10
- package/dist/types/schemas/notifications.js +3 -2
- package/dist/types/schemas/notifications.js.map +1 -1
- package/dist/types/schemas/organizations.d.ts +99 -60
- package/dist/types/schemas/organizations.js +80 -27
- package/dist/types/schemas/organizations.js.map +1 -1
- package/dist/types/schemas/progress.d.ts +3 -4
- package/dist/types/schemas/progress.js +0 -1
- package/dist/types/schemas/progress.js.map +1 -1
- package/package.json +1 -1
- package/dist/organizations/access-scopes.d.ts +0 -19
- package/dist/organizations/access-scopes.js +0 -89
- package/dist/organizations/access-scopes.js.map +0 -1
- package/dist/organizations/roles.d.ts +0 -19
- package/dist/organizations/roles.js +0 -82
- package/dist/organizations/roles.js.map +0 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { contentTypeSchema } from "../types/schemas/content.js";
|
|
2
|
+
import { inviteSchema, levelSchema, orgUserSchema, organizationSchema } from "../types/schemas/organizations.js";
|
|
2
3
|
import { defineEvent } from "../shared/events.js";
|
|
4
|
+
import { z } from "zod";
|
|
3
5
|
//#region src/organizations/events.ts
|
|
4
6
|
const publicOrganization = organizationSchema.pick({
|
|
5
7
|
id: true,
|
|
@@ -13,7 +15,6 @@ const publicOrgUser = orgUserSchema.pick({
|
|
|
13
15
|
id: true,
|
|
14
16
|
orgId: true,
|
|
15
17
|
userId: true,
|
|
16
|
-
role: true,
|
|
17
18
|
status: true,
|
|
18
19
|
createdAt: true,
|
|
19
20
|
updatedAt: true
|
|
@@ -22,13 +23,48 @@ const publicInvite = inviteSchema.pick({
|
|
|
22
23
|
id: true,
|
|
23
24
|
orgId: true,
|
|
24
25
|
email: true,
|
|
25
|
-
|
|
26
|
+
roleKey: true,
|
|
26
27
|
status: true,
|
|
27
28
|
invitedBy: true,
|
|
28
29
|
expiresAt: true,
|
|
29
30
|
createdAt: true,
|
|
30
31
|
updatedAt: true
|
|
31
32
|
}).strip();
|
|
33
|
+
const orgUserWithRole = orgUserSchema.extend({ orgRole: z.object({ key: z.string() }) });
|
|
34
|
+
const publicOrgUserWithRole = publicOrgUser.extend({ orgRole: z.object({ key: z.string() }) });
|
|
35
|
+
const roleSnapshot = z.object({
|
|
36
|
+
key: z.string(),
|
|
37
|
+
name: z.string(),
|
|
38
|
+
description: z.string(),
|
|
39
|
+
base: z.string(),
|
|
40
|
+
levels: z.array(levelSchema),
|
|
41
|
+
team: z.boolean(),
|
|
42
|
+
permissions: z.array(z.string())
|
|
43
|
+
});
|
|
44
|
+
const roleUpdated = z.object({
|
|
45
|
+
key: z.string(),
|
|
46
|
+
before: roleSnapshot,
|
|
47
|
+
after: roleSnapshot
|
|
48
|
+
});
|
|
49
|
+
const roleCreated = z.object({ role: roleSnapshot });
|
|
50
|
+
const roleDeleted = z.object({ key: z.string() });
|
|
51
|
+
const roleAssigned = z.object({
|
|
52
|
+
orgUserId: z.string(),
|
|
53
|
+
roleKey: z.string(),
|
|
54
|
+
contentId: z.string().nullable(),
|
|
55
|
+
contentType: contentTypeSchema.nullable(),
|
|
56
|
+
previousRoleKey: z.string().nullable()
|
|
57
|
+
});
|
|
58
|
+
const roleUnassigned = z.object({
|
|
59
|
+
orgUserId: z.string(),
|
|
60
|
+
roleKey: z.string(),
|
|
61
|
+
contentId: z.string(),
|
|
62
|
+
contentType: contentTypeSchema
|
|
63
|
+
});
|
|
64
|
+
const ownershipTransferred = z.object({
|
|
65
|
+
previousOwnerOrgUserId: z.string(),
|
|
66
|
+
newOwnerOrgUserId: z.string()
|
|
67
|
+
});
|
|
32
68
|
const organizationEvents = {
|
|
33
69
|
organizationCreated: defineEvent({
|
|
34
70
|
type: "organization.created",
|
|
@@ -50,54 +86,90 @@ const organizationEvents = {
|
|
|
50
86
|
}),
|
|
51
87
|
orgUserLinked: defineEvent({
|
|
52
88
|
type: "organization.user.linked",
|
|
53
|
-
version:
|
|
54
|
-
data:
|
|
55
|
-
publicData:
|
|
89
|
+
version: 2,
|
|
90
|
+
data: orgUserWithRole,
|
|
91
|
+
publicData: publicOrgUserWithRole
|
|
56
92
|
}),
|
|
57
93
|
orgUserDeleted: defineEvent({
|
|
58
94
|
type: "organization.user.deleted",
|
|
59
|
-
version:
|
|
60
|
-
data:
|
|
61
|
-
publicData:
|
|
95
|
+
version: 2,
|
|
96
|
+
data: orgUserWithRole,
|
|
97
|
+
publicData: publicOrgUserWithRole
|
|
62
98
|
}),
|
|
63
99
|
orgUserUpdated: defineEvent({
|
|
64
100
|
type: "organization.user.updated",
|
|
65
|
-
version:
|
|
66
|
-
data:
|
|
67
|
-
publicData:
|
|
101
|
+
version: 2,
|
|
102
|
+
data: orgUserWithRole,
|
|
103
|
+
publicData: publicOrgUserWithRole
|
|
68
104
|
}),
|
|
69
105
|
inviteCreated: defineEvent({
|
|
70
106
|
type: "organization.invite.created",
|
|
71
|
-
version:
|
|
107
|
+
version: 2,
|
|
72
108
|
data: inviteSchema,
|
|
73
109
|
publicData: publicInvite
|
|
74
110
|
}),
|
|
75
111
|
inviteAccepted: defineEvent({
|
|
76
112
|
type: "organization.invite.accepted",
|
|
77
|
-
version:
|
|
113
|
+
version: 2,
|
|
78
114
|
data: inviteSchema,
|
|
79
115
|
publicData: publicInvite
|
|
80
116
|
}),
|
|
81
117
|
inviteCanceled: defineEvent({
|
|
82
118
|
type: "organization.invite.canceled",
|
|
83
|
-
version:
|
|
119
|
+
version: 2,
|
|
84
120
|
data: inviteSchema
|
|
85
121
|
}),
|
|
86
122
|
studentCreated: defineEvent({
|
|
87
123
|
type: "organization.student.created",
|
|
88
|
-
version:
|
|
124
|
+
version: 2,
|
|
89
125
|
data: orgUserSchema,
|
|
90
126
|
publicData: publicOrgUser
|
|
91
127
|
}),
|
|
92
128
|
studentDeleted: defineEvent({
|
|
93
129
|
type: "organization.student.deleted",
|
|
94
|
-
version:
|
|
130
|
+
version: 2,
|
|
95
131
|
data: orgUserSchema,
|
|
96
132
|
publicData: publicOrgUser
|
|
97
133
|
}),
|
|
134
|
+
roleUpdated: defineEvent({
|
|
135
|
+
type: "organization.role.updated",
|
|
136
|
+
version: 1,
|
|
137
|
+
data: roleUpdated,
|
|
138
|
+
publicData: roleUpdated
|
|
139
|
+
}),
|
|
140
|
+
roleCreated: defineEvent({
|
|
141
|
+
type: "organization.role.created",
|
|
142
|
+
version: 1,
|
|
143
|
+
data: roleCreated,
|
|
144
|
+
publicData: roleCreated
|
|
145
|
+
}),
|
|
146
|
+
roleDeleted: defineEvent({
|
|
147
|
+
type: "organization.role.deleted",
|
|
148
|
+
version: 1,
|
|
149
|
+
data: roleDeleted,
|
|
150
|
+
publicData: roleDeleted
|
|
151
|
+
}),
|
|
152
|
+
roleAssigned: defineEvent({
|
|
153
|
+
type: "organization.role.assigned",
|
|
154
|
+
version: 1,
|
|
155
|
+
data: roleAssigned,
|
|
156
|
+
publicData: roleAssigned
|
|
157
|
+
}),
|
|
158
|
+
roleUnassigned: defineEvent({
|
|
159
|
+
type: "organization.role.unassigned",
|
|
160
|
+
version: 1,
|
|
161
|
+
data: roleUnassigned,
|
|
162
|
+
publicData: roleUnassigned
|
|
163
|
+
}),
|
|
164
|
+
ownershipTransferred: defineEvent({
|
|
165
|
+
type: "organization.ownership.transferred",
|
|
166
|
+
version: 1,
|
|
167
|
+
data: ownershipTransferred,
|
|
168
|
+
publicData: ownershipTransferred
|
|
169
|
+
}),
|
|
98
170
|
studentLinked: defineEvent({
|
|
99
171
|
type: "organization.student.linked",
|
|
100
|
-
version:
|
|
172
|
+
version: 2,
|
|
101
173
|
data: orgUserSchema,
|
|
102
174
|
publicData: publicOrgUser
|
|
103
175
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","names":[],"sources":["../../src/organizations/events.ts"],"sourcesContent":["import { inviteSchema
|
|
1
|
+
{"version":3,"file":"events.js","names":[],"sources":["../../src/organizations/events.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n contentTypeSchema,\n inviteSchema,\n levelSchema,\n organizationSchema,\n orgUserSchema,\n} from '../types/schemas/index.js';\nimport { defineEvent, type EventOf, type EventOfValues } from '../shared/ports.js';\n\nconst publicOrganization = organizationSchema\n .pick({\n id: true,\n name: true,\n slug: true,\n ownerId: true,\n createdAt: true,\n updatedAt: true,\n })\n .strip();\n\nconst publicOrgUser = orgUserSchema\n .pick({\n id: true,\n orgId: true,\n userId: true,\n status: true,\n createdAt: true,\n updatedAt: true,\n })\n .strip();\n\nconst publicInvite = inviteSchema\n .pick({\n id: true,\n orgId: true,\n email: true,\n roleKey: true,\n status: true,\n invitedBy: true,\n expiresAt: true,\n createdAt: true,\n updatedAt: true,\n })\n .strip();\n\nconst orgUserWithRole = orgUserSchema.extend({ orgRole: z.object({ key: z.string() }) });\nconst publicOrgUserWithRole = publicOrgUser.extend({ orgRole: z.object({ key: z.string() }) });\n\nconst roleSnapshot = z.object({\n key: z.string(),\n name: z.string(),\n description: z.string(),\n base: z.string(),\n levels: z.array(levelSchema),\n team: z.boolean(),\n permissions: z.array(z.string()),\n});\n\nconst roleUpdated = z.object({ key: z.string(), before: roleSnapshot, after: roleSnapshot });\nconst roleCreated = z.object({ role: roleSnapshot });\nconst roleDeleted = z.object({ key: z.string() });\nconst roleAssigned = z.object({\n orgUserId: z.string(),\n roleKey: z.string(),\n contentId: z.string().nullable(),\n contentType: contentTypeSchema.nullable(),\n previousRoleKey: z.string().nullable(),\n});\nconst roleUnassigned = z.object({\n orgUserId: z.string(),\n roleKey: z.string(),\n contentId: z.string(),\n contentType: contentTypeSchema,\n});\nconst ownershipTransferred = z.object({\n previousOwnerOrgUserId: z.string(),\n newOwnerOrgUserId: z.string(),\n});\n\nexport const organizationEvents = {\n organizationCreated: defineEvent({\n type: 'organization.created',\n version: 1,\n data: organizationSchema,\n publicData: publicOrganization,\n }),\n organizationUpdated: defineEvent({\n type: 'organization.updated',\n version: 1,\n data: organizationSchema,\n publicData: publicOrganization,\n }),\n organizationDeleted: defineEvent({\n type: 'organization.deleted',\n version: 1,\n data: organizationSchema,\n publicData: publicOrganization,\n }),\n orgUserLinked: defineEvent({\n type: 'organization.user.linked',\n version: 2,\n data: orgUserWithRole,\n publicData: publicOrgUserWithRole,\n }),\n orgUserDeleted: defineEvent({\n type: 'organization.user.deleted',\n version: 2,\n data: orgUserWithRole,\n publicData: publicOrgUserWithRole,\n }),\n orgUserUpdated: defineEvent({\n type: 'organization.user.updated',\n version: 2,\n data: orgUserWithRole,\n publicData: publicOrgUserWithRole,\n }),\n inviteCreated: defineEvent({\n type: 'organization.invite.created',\n version: 2,\n data: inviteSchema,\n publicData: publicInvite,\n }),\n inviteAccepted: defineEvent({\n type: 'organization.invite.accepted',\n version: 2,\n data: inviteSchema,\n publicData: publicInvite,\n }),\n inviteCanceled: defineEvent({\n type: 'organization.invite.canceled',\n version: 2,\n data: inviteSchema,\n }),\n studentCreated: defineEvent({\n type: 'organization.student.created',\n version: 2,\n data: orgUserSchema,\n publicData: publicOrgUser,\n }),\n studentDeleted: defineEvent({\n type: 'organization.student.deleted',\n version: 2,\n data: orgUserSchema,\n publicData: publicOrgUser,\n }),\n roleUpdated: defineEvent({\n type: 'organization.role.updated',\n version: 1,\n data: roleUpdated,\n publicData: roleUpdated,\n }),\n roleCreated: defineEvent({\n type: 'organization.role.created',\n version: 1,\n data: roleCreated,\n publicData: roleCreated,\n }),\n roleDeleted: defineEvent({\n type: 'organization.role.deleted',\n version: 1,\n data: roleDeleted,\n publicData: roleDeleted,\n }),\n roleAssigned: defineEvent({\n type: 'organization.role.assigned',\n version: 1,\n data: roleAssigned,\n publicData: roleAssigned,\n }),\n roleUnassigned: defineEvent({\n type: 'organization.role.unassigned',\n version: 1,\n data: roleUnassigned,\n publicData: roleUnassigned,\n }),\n ownershipTransferred: defineEvent({\n type: 'organization.ownership.transferred',\n version: 1,\n data: ownershipTransferred,\n publicData: ownershipTransferred,\n }),\n studentLinked: defineEvent({\n type: 'organization.student.linked',\n version: 2,\n data: orgUserSchema,\n publicData: publicOrgUser,\n }),\n};\n\nexport type OrganizationCreated = EventOf<typeof organizationEvents.organizationCreated>;\nexport type OrganizationUpdated = EventOf<typeof organizationEvents.organizationUpdated>;\nexport type OrganizationDeleted = EventOf<typeof organizationEvents.organizationDeleted>;\nexport type OrgUserLinked = EventOf<typeof organizationEvents.orgUserLinked>;\nexport type OrgUserDeleted = EventOf<typeof organizationEvents.orgUserDeleted>;\nexport type OrgUserUpdated = EventOf<typeof organizationEvents.orgUserUpdated>;\nexport type InviteCreated = EventOf<typeof organizationEvents.inviteCreated>;\nexport type InviteAccepted = EventOf<typeof organizationEvents.inviteAccepted>;\nexport type InviteCanceled = EventOf<typeof organizationEvents.inviteCanceled>;\nexport type StudentCreated = EventOf<typeof organizationEvents.studentCreated>;\nexport type StudentDeleted = EventOf<typeof organizationEvents.studentDeleted>;\nexport type StudentLinked = EventOf<typeof organizationEvents.studentLinked>;\nexport type RoleUpdated = EventOf<typeof organizationEvents.roleUpdated>;\nexport type RoleCreated = EventOf<typeof organizationEvents.roleCreated>;\nexport type RoleDeleted = EventOf<typeof organizationEvents.roleDeleted>;\nexport type RoleAssigned = EventOf<typeof organizationEvents.roleAssigned>;\nexport type RoleUnassigned = EventOf<typeof organizationEvents.roleUnassigned>;\nexport type OwnershipTransferred = EventOf<typeof organizationEvents.ownershipTransferred>;\nexport type OrganizationEvent = EventOfValues<typeof organizationEvents>;\n"],"mappings":"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"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import { AcceptInviteInput, AddOrgUserInput, CreateInviteInput, CreateOrgUserInput, Invite,
|
|
1
|
+
import { AcceptInviteInput, AddOrgUserInput, CreateInviteInput, CreateOrgUserInput, Invite, NewOrganizationInput, OrgUser, OrgUserStatus, Organization, OrganizationMetadata, UpdateOrgUserInput } from "../types/schemas/organizations.js";
|
|
2
2
|
import { InviteId, OrgUserId, OrganizationId } from "../types/organizations.js";
|
|
3
|
-
import "./model.js";
|
|
4
|
-
import { Capability, Permission, ROLES, STAFF_ROLES, STUDENT_ROLE, StaffRole, TeamRole, canModerate, capability, isRole, isStaffRole, normalizeRole, parseRole } from "./roles.js";
|
|
5
|
-
import { InviteError, Member, MemberRoleChange, MemberStatus, MembersQuery, OrganizationRuleError, Page } from "./members.js";
|
|
6
|
-
import { CreateOrganizationInput, LinkOrgUserInput, ResendStudentInviteInput, UnlinkOrgUserInput, UpdateOrganizationInput } from "./types.js";
|
|
7
3
|
import { AuthHeaders } from "../identity/ports.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
4
|
+
import { DEFAULT_ROLES, MEMBER_ROLE_KEY, OWNER_ROLE_KEY, RoleDefinition, RoleSetError, defaultHolders, validateRoleSet } from "./default-roles.js";
|
|
5
|
+
import { OrgRole, RoleCatalog, StoredOrgRole, catalogOf, isSystemRole, resolveOrgRoles, resolveRole } from "./org-roles.js";
|
|
6
|
+
import { AssignmentRow, ResolveInput, ResolvedPermissions, resolvePermissions, systemPermissions } from "./effective-permissions.js";
|
|
7
|
+
import { InviteAccepted, InviteCanceled, InviteCreated, OrgUserDeleted, OrgUserLinked, OrgUserUpdated, OrganizationCreated, OrganizationDeleted, OrganizationEvent, OrganizationUpdated, OwnershipTransferred, RoleAssigned, RoleCreated, RoleDeleted, RoleUnassigned, RoleUpdated, StudentCreated, StudentDeleted, StudentLinked, organizationEvents } from "./events.js";
|
|
8
|
+
import "./model.js";
|
|
9
|
+
import { AssignmentView, CreateRoleInput, InviteDetails, InviteError, ItemRole, Member, MemberStatus, MembersQuery, OrganizationRuleError, Page, RoleView, UpdateRoleInput, ViewerPermissions } from "./members.js";
|
|
10
|
+
import { ALL_PERMISSIONS, PERMISSIONS, PermissionDefinition, PermissionGroup, PermissionListEntry, fitsLevels, isPermission, permissionList, withImplied } from "./permissions.js";
|
|
11
|
+
import { CreateOrganizationInput, UpdateOrganizationInput } from "./types.js";
|
|
12
|
+
import { Accounts, ActorFacts, ApiKeyRole, ApiKeys, AuthOrganization, CallerFacts, CallerLimit, CreateApiKeyInput, GrantReader, MembersRepository, NewApiKey, NewInviteRow, NewOrganizationRow, OrgAdmin, OrganizationService, OrganizationsRepository, OrganizationsUnitOfWork, OrganizationsWriteScope, PlatformAccount, PlatformOrganization, PlatformOrganizationInput, ResolvedCaller, RolesRepository, StoredApiKey, TeamRow, TransferOwnershipInput } from "./ports.js";
|
|
13
|
+
import { InviteUrls, OrganizationServiceImpl, OrganizationServiceParams } from "./service.js";
|
|
10
14
|
import { OrgNotificationCategories } from "./notification-categories.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
export {
|
|
15
|
+
import { NotificationCatalog, NotificationCatalogParams, NotificationCatalogService } from "./notification-catalog.js";
|
|
16
|
+
import { ActorShape, actorWith } from "./testing.js";
|
|
17
|
+
export { ALL_PERMISSIONS, type AcceptInviteInput, type Accounts, type ActorFacts, type ActorShape, type AddOrgUserInput, type ApiKeyRole, type ApiKeys, type AssignmentRow, type AssignmentView, type AuthHeaders, type AuthOrganization, type CallerFacts, type CallerLimit, type CreateApiKeyInput, type CreateInviteInput, type CreateOrgUserInput, type CreateOrganizationInput, type CreateRoleInput, DEFAULT_ROLES, type GrantReader, type Invite, type InviteAccepted, type InviteCanceled, type InviteCreated, type InviteDetails, InviteError, type InviteId, type InviteUrls, type ItemRole, MEMBER_ROLE_KEY, type Member, type MemberStatus, type MembersQuery, type MembersRepository, type NewApiKey, type NewInviteRow, type NewOrganizationInput, type NewOrganizationRow, NotificationCatalog, type NotificationCatalogParams, type NotificationCatalogService, OWNER_ROLE_KEY, type OrgAdmin, OrgNotificationCategories, type OrgRole, type OrgUser, type OrgUserDeleted, type OrgUserId, type OrgUserLinked, type OrgUserStatus, type OrgUserUpdated, type Organization, type OrganizationCreated, type OrganizationDeleted, type OrganizationEvent, type OrganizationId, type OrganizationMetadata, OrganizationRuleError, type OrganizationService, OrganizationServiceImpl, type OrganizationServiceParams, type OrganizationUpdated, type OrganizationsRepository, type OrganizationsUnitOfWork, type OrganizationsWriteScope, type OwnershipTransferred, PERMISSIONS, type Page, type PermissionDefinition, type PermissionGroup, type PermissionListEntry, type PlatformAccount, type PlatformOrganization, type PlatformOrganizationInput, type ResolveInput, type ResolvedCaller, ResolvedPermissions, type RoleAssigned, type RoleCatalog, type RoleCreated, type RoleDefinition, type RoleDeleted, RoleSetError, type RoleUnassigned, type RoleUpdated, type RoleView, type RolesRepository, type StoredApiKey, type StoredOrgRole, type StudentCreated, type StudentDeleted, type StudentLinked, type TeamRow, type TransferOwnershipInput, type UpdateOrgUserInput, type UpdateOrganizationInput, type UpdateRoleInput, type ViewerPermissions, actorWith, catalogOf, defaultHolders, fitsLevels, isPermission, isSystemRole, organizationEvents, permissionList, resolveOrgRoles, resolvePermissions, resolveRole, systemPermissions, validateRoleSet, withImplied };
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { ROLES, STAFF_ROLES, STUDENT_ROLE, canModerate, capability, isRole, isStaffRole, normalizeRole, parseRole } from "./roles.js";
|
|
2
1
|
import { InviteError, OrganizationRuleError } from "./members.js";
|
|
3
2
|
import { organizationEvents } from "./events.js";
|
|
3
|
+
import { ALL_PERMISSIONS, PERMISSIONS, fitsLevels, isPermission, permissionList, withImplied } from "./permissions.js";
|
|
4
|
+
import { DEFAULT_ROLES, MEMBER_ROLE_KEY, OWNER_ROLE_KEY, RoleSetError, defaultHolders, validateRoleSet } from "./default-roles.js";
|
|
5
|
+
import { catalogOf, isSystemRole, resolveOrgRoles, resolveRole } from "./org-roles.js";
|
|
6
|
+
import { ResolvedPermissions, resolvePermissions, systemPermissions } from "./effective-permissions.js";
|
|
4
7
|
import { OrganizationServiceImpl } from "./service.js";
|
|
5
8
|
import { OrgNotificationCategories } from "./notification-categories.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
9
|
+
import { NotificationCatalog } from "./notification-catalog.js";
|
|
10
|
+
import { actorWith } from "./testing.js";
|
|
11
|
+
export { ALL_PERMISSIONS, DEFAULT_ROLES, InviteError, MEMBER_ROLE_KEY, NotificationCatalog, OWNER_ROLE_KEY, OrgNotificationCategories, OrganizationRuleError, OrganizationServiceImpl, PERMISSIONS, ResolvedPermissions, RoleSetError, actorWith, catalogOf, defaultHolders, fitsLevels, isPermission, isSystemRole, organizationEvents, permissionList, resolveOrgRoles, resolvePermissions, resolveRole, systemPermissions, validateRoleSet, withImplied };
|
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContentType } from "../types/schemas/content.js";
|
|
2
|
+
import { Level, OrgUserProfile, Permission } from "../types/schemas/organizations.js";
|
|
2
3
|
import "../types/index.js";
|
|
3
|
-
import { TeamRole } from "./roles.js";
|
|
4
4
|
//#region src/organizations/members.d.ts
|
|
5
5
|
type MemberStatus = 'active' | 'invited';
|
|
6
|
+
interface ItemRole {
|
|
7
|
+
contentId: string;
|
|
8
|
+
contentType: ContentType;
|
|
9
|
+
roleKey: string;
|
|
10
|
+
roleName: string;
|
|
11
|
+
}
|
|
6
12
|
interface Member extends OrgUserProfile {
|
|
7
|
-
|
|
13
|
+
orgRole: {
|
|
14
|
+
key: string;
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
isOwner: boolean;
|
|
18
|
+
items: ItemRole[];
|
|
8
19
|
status: MemberStatus;
|
|
9
20
|
joinedAt: string | null;
|
|
10
21
|
invitedAt: string | null;
|
|
11
22
|
}
|
|
12
|
-
interface MemberRoleChange extends Omit<Member, 'role'> {
|
|
13
|
-
role: Role;
|
|
14
|
-
}
|
|
15
23
|
interface MembersQuery {
|
|
16
24
|
page: number;
|
|
17
25
|
pageSize: number;
|
|
18
26
|
search?: string | undefined;
|
|
19
27
|
sort?: string | undefined;
|
|
20
|
-
|
|
28
|
+
roleKey?: string | undefined;
|
|
21
29
|
status?: MemberStatus | undefined;
|
|
22
30
|
}
|
|
23
31
|
interface Page<T> {
|
|
@@ -26,10 +34,60 @@ interface Page<T> {
|
|
|
26
34
|
page: number;
|
|
27
35
|
pageSize: number;
|
|
28
36
|
}
|
|
37
|
+
interface RoleView {
|
|
38
|
+
key: string;
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
base: string;
|
|
42
|
+
levels: Level[];
|
|
43
|
+
team: boolean;
|
|
44
|
+
permissions: Permission[];
|
|
45
|
+
system: boolean;
|
|
46
|
+
added: boolean;
|
|
47
|
+
customized: boolean;
|
|
48
|
+
holders: number;
|
|
49
|
+
givable: boolean;
|
|
50
|
+
}
|
|
51
|
+
interface UpdateRoleInput {
|
|
52
|
+
name?: string | undefined;
|
|
53
|
+
description?: string | undefined;
|
|
54
|
+
levels?: Level[] | undefined;
|
|
55
|
+
team?: boolean | undefined;
|
|
56
|
+
permissions?: Partial<Record<Permission, boolean>> | undefined;
|
|
57
|
+
}
|
|
58
|
+
interface CreateRoleInput {
|
|
59
|
+
base: string;
|
|
60
|
+
name: string;
|
|
61
|
+
description?: string | undefined;
|
|
62
|
+
levels?: Level[] | undefined;
|
|
63
|
+
team?: boolean | undefined;
|
|
64
|
+
permissions?: Partial<Record<Permission, boolean>> | undefined;
|
|
65
|
+
}
|
|
66
|
+
interface AssignmentView {
|
|
67
|
+
orgUserId: string;
|
|
68
|
+
roleKey: string;
|
|
69
|
+
roleName: string;
|
|
70
|
+
contentId: string | null;
|
|
71
|
+
contentType: ContentType | null;
|
|
72
|
+
}
|
|
73
|
+
interface ViewerPermissions {
|
|
74
|
+
orgRole: {
|
|
75
|
+
key: string;
|
|
76
|
+
name: string;
|
|
77
|
+
};
|
|
78
|
+
isOwner: boolean;
|
|
79
|
+
org: Permission[];
|
|
80
|
+
content: Record<string, Permission[]>;
|
|
81
|
+
}
|
|
82
|
+
interface InviteDetails {
|
|
83
|
+
email: string;
|
|
84
|
+
firstName: string | null;
|
|
85
|
+
lastName: string | null;
|
|
86
|
+
}
|
|
29
87
|
declare class OrganizationRuleError extends Error {}
|
|
30
88
|
declare class InviteError extends Error {
|
|
31
89
|
constructor(message: string);
|
|
32
90
|
}
|
|
33
91
|
//#endregion
|
|
34
|
-
export { InviteError,
|
|
92
|
+
export { AssignmentView, CreateRoleInput, InviteDetails, InviteError, ItemRole, Member, MemberStatus, MembersQuery, OrganizationRuleError, Page, RoleView, UpdateRoleInput, ViewerPermissions };
|
|
35
93
|
//# sourceMappingURL=members.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members.js","names":[],"sources":["../../src/organizations/members.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"members.js","names":[],"sources":["../../src/organizations/members.ts"],"sourcesContent":["import type { ContentType, Level, OrgUserProfile, Permission } from '../types/index.js';\n\nexport type MemberStatus = 'active' | 'invited';\n\nexport interface ItemRole {\n contentId: string;\n contentType: ContentType;\n roleKey: string;\n roleName: string;\n}\n\nexport interface Member extends OrgUserProfile {\n orgRole: { key: string; name: string };\n isOwner: boolean;\n items: ItemRole[];\n status: MemberStatus;\n joinedAt: string | null;\n invitedAt: string | null;\n}\n\nexport interface MembersQuery {\n page: number;\n pageSize: number;\n search?: string | undefined;\n sort?: string | undefined;\n roleKey?: string | undefined;\n status?: MemberStatus | undefined;\n}\n\nexport interface Page<T> {\n rows: T[];\n total: number;\n page: number;\n pageSize: number;\n}\n\nexport interface RoleView {\n key: string;\n name: string;\n description: string;\n base: string;\n levels: Level[];\n team: boolean;\n permissions: Permission[];\n system: boolean;\n added: boolean;\n customized: boolean;\n holders: number;\n givable: boolean;\n}\n\nexport interface UpdateRoleInput {\n name?: string | undefined;\n description?: string | undefined;\n levels?: Level[] | undefined;\n team?: boolean | undefined;\n permissions?: Partial<Record<Permission, boolean>> | undefined;\n}\n\nexport interface CreateRoleInput {\n base: string;\n name: string;\n description?: string | undefined;\n levels?: Level[] | undefined;\n team?: boolean | undefined;\n permissions?: Partial<Record<Permission, boolean>> | undefined;\n}\n\nexport interface AssignmentView {\n orgUserId: string;\n roleKey: string;\n roleName: string;\n contentId: string | null;\n contentType: ContentType | null;\n}\n\nexport interface ViewerPermissions {\n orgRole: { key: string; name: string };\n isOwner: boolean;\n org: Permission[];\n content: Record<string, Permission[]>;\n}\n\nexport interface InviteDetails {\n email: string;\n firstName: string | null;\n lastName: string | null;\n}\n\nexport class OrganizationRuleError extends Error {}\nexport class InviteError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InviteError';\n }\n}\n"],"mappings":";AAyFA,IAAa,wBAAb,cAA2C,MAAM,CAAC;AAClD,IAAa,cAAb,cAAiC,MAAM;CACrC,YAAY,SAAiB;EAC3B,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Invite, OrgUser, Organization } from "../types/schemas/organizations.js";
|
|
1
|
+
import { Invite, OrgUser, Organization, OrganizationMetadata } from "../types/schemas/organizations.js";
|
|
2
2
|
import "../types/index.js";
|
|
3
|
-
export type { Invite, OrgUser, Organization };
|
|
3
|
+
export type { Invite, OrgUser, Organization, OrganizationMetadata };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { NotificationCategory, NotificationTypeDeclaration } from "../types/notifications.js";
|
|
2
|
+
import "../types/index.js";
|
|
3
|
+
import { Actor } from "../shared/actor.js";
|
|
4
|
+
import { ChannelRegistry, NotificationTypeRegistry } from "../shared/ports.js";
|
|
5
|
+
import { CategoryListScope } from "../shared/notification-categories.js";
|
|
6
|
+
//#region src/organizations/notification-catalog.d.ts
|
|
7
|
+
interface NotificationCatalogService {
|
|
8
|
+
types(actor: Actor, scope: CategoryListScope): Pick<NotificationTypeDeclaration, 'type' | 'scopes' | 'reasons'>[];
|
|
9
|
+
channels(actor: Actor): {
|
|
10
|
+
channel: string;
|
|
11
|
+
}[];
|
|
12
|
+
defaults(actor: Actor, scope: CategoryListScope): NotificationCategory[];
|
|
13
|
+
}
|
|
14
|
+
type NotificationCatalogParams = {
|
|
15
|
+
types: NotificationTypeRegistry;
|
|
16
|
+
channels: Pick<ChannelRegistry, 'list'>;
|
|
17
|
+
};
|
|
18
|
+
declare class NotificationCatalog implements NotificationCatalogService {
|
|
19
|
+
private readonly registry;
|
|
20
|
+
private readonly channelRegistry;
|
|
21
|
+
constructor(params: NotificationCatalogParams);
|
|
22
|
+
types(actor: Actor, scope: CategoryListScope): Pick<NotificationTypeDeclaration, 'type' | 'scopes' | 'reasons'>[];
|
|
23
|
+
channels(actor: Actor): {
|
|
24
|
+
channel: string;
|
|
25
|
+
}[];
|
|
26
|
+
defaults(actor: Actor, scope: CategoryListScope): NotificationCategory[];
|
|
27
|
+
private requireFor;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { NotificationCatalog, NotificationCatalogParams, NotificationCatalogService };
|
|
31
|
+
//# sourceMappingURL=notification-catalog.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ForbiddenError } from "../shared/errors.js";
|
|
2
|
+
import { typesForList } from "../shared/notification-categories.js";
|
|
3
|
+
//#region src/organizations/notification-catalog.ts
|
|
4
|
+
var NotificationCatalog = class {
|
|
5
|
+
registry;
|
|
6
|
+
channelRegistry;
|
|
7
|
+
constructor(params) {
|
|
8
|
+
this.registry = params.types;
|
|
9
|
+
this.channelRegistry = params.channels;
|
|
10
|
+
}
|
|
11
|
+
types(actor, scope) {
|
|
12
|
+
this.requireFor(actor, scope);
|
|
13
|
+
return typesForList(this.registry, scope);
|
|
14
|
+
}
|
|
15
|
+
channels(actor) {
|
|
16
|
+
this.requireFor(actor, "community");
|
|
17
|
+
return this.channelRegistry.list().map((channel) => ({ channel }));
|
|
18
|
+
}
|
|
19
|
+
defaults(actor, scope) {
|
|
20
|
+
this.requireFor(actor, scope);
|
|
21
|
+
return this.registry.defaults(scope);
|
|
22
|
+
}
|
|
23
|
+
requireFor(actor, scope) {
|
|
24
|
+
if (actor.permissions.has("notification_categories:read")) return;
|
|
25
|
+
if (scope === "community" && actor.permissions.anywhere("communities:read")) return;
|
|
26
|
+
throw new ForbiddenError(scope === "org" ? "You need notification_categories:read" : "You need notification_categories:read or communities:read");
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
export { NotificationCatalog };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=notification-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-catalog.js","names":[],"sources":["../../src/organizations/notification-catalog.ts"],"sourcesContent":["import type { NotificationCategory, NotificationTypeDeclaration } from '../types/index.js';\nimport type { ChannelRegistry, NotificationTypeRegistry } from '../shared/ports.js';\nimport type { Actor } from '../shared/actor.js';\nimport { ForbiddenError } from '../shared/errors.js';\nimport { typesForList, type CategoryListScope } from '../shared/notification-categories.js';\n\nexport interface NotificationCatalogService {\n types(\n actor: Actor,\n scope: CategoryListScope,\n ): Pick<NotificationTypeDeclaration, 'type' | 'scopes' | 'reasons'>[];\n channels(actor: Actor): { channel: string }[];\n defaults(actor: Actor, scope: CategoryListScope): NotificationCategory[];\n}\n\nexport type NotificationCatalogParams = {\n types: NotificationTypeRegistry;\n channels: Pick<ChannelRegistry, 'list'>;\n};\n\nexport class NotificationCatalog implements NotificationCatalogService {\n private readonly registry: NotificationTypeRegistry;\n private readonly channelRegistry: Pick<ChannelRegistry, 'list'>;\n\n constructor(params: NotificationCatalogParams) {\n this.registry = params.types;\n this.channelRegistry = params.channels;\n }\n\n types(\n actor: Actor,\n scope: CategoryListScope,\n ): Pick<NotificationTypeDeclaration, 'type' | 'scopes' | 'reasons'>[] {\n this.requireFor(actor, scope);\n return typesForList(this.registry, scope);\n }\n\n channels(actor: Actor): { channel: string }[] {\n this.requireFor(actor, 'community');\n return this.channelRegistry.list().map((channel) => ({ channel }));\n }\n\n defaults(actor: Actor, scope: CategoryListScope): NotificationCategory[] {\n this.requireFor(actor, scope);\n return this.registry.defaults(scope);\n }\n\n private requireFor(actor: Actor, scope: CategoryListScope): void {\n if (actor.permissions.has('notification_categories:read')) {\n return;\n }\n if (scope === 'community' && actor.permissions.anywhere('communities:read')) {\n return;\n }\n throw new ForbiddenError(\n scope === 'org'\n ? 'You need notification_categories:read'\n : 'You need notification_categories:read or communities:read',\n );\n }\n}\n"],"mappings":";;;AAoBA,IAAa,sBAAb,MAAuE;CACrE;CACA;CAEA,YAAY,QAAmC;EAC7C,KAAK,WAAW,OAAO;EACvB,KAAK,kBAAkB,OAAO;CAChC;CAEA,MACE,OACA,OACoE;EACpE,KAAK,WAAW,OAAO,KAAK;EAC5B,OAAO,aAAa,KAAK,UAAU,KAAK;CAC1C;CAEA,SAAS,OAAqC;EAC5C,KAAK,WAAW,OAAO,WAAW;EAClC,OAAO,KAAK,gBAAgB,KAAK,CAAC,CAAC,KAAK,aAAa,EAAE,QAAQ,EAAE;CACnE;CAEA,SAAS,OAAc,OAAkD;EACvE,KAAK,WAAW,OAAO,KAAK;EAC5B,OAAO,KAAK,SAAS,SAAS,KAAK;CACrC;CAEA,WAAmB,OAAc,OAAgC;EAC/D,IAAI,MAAM,YAAY,IAAI,8BAA8B,GACtD;EAEF,IAAI,UAAU,eAAe,MAAM,YAAY,SAAS,kBAAkB,GACxE;EAEF,MAAM,IAAI,eACR,UAAU,QACN,0CACA,2DACN;CACF;AACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Logger } from "../types/ports.js";
|
|
2
2
|
import { NotificationCategory } from "../types/notifications.js";
|
|
3
3
|
import "../types/index.js";
|
|
4
|
+
import { Actor } from "../shared/actor.js";
|
|
4
5
|
import { ChannelRegistry, NotificationCategoryService, NotificationTypeRegistry } from "../shared/ports.js";
|
|
5
6
|
import { SettingsService } from "../shared/settings.js";
|
|
6
7
|
//#region src/organizations/notification-categories.d.ts
|
|
@@ -16,16 +17,17 @@ declare class OrgNotificationCategories implements NotificationCategoryService {
|
|
|
16
17
|
private readonly channels;
|
|
17
18
|
private readonly logger;
|
|
18
19
|
constructor(params: OrgNotificationCategoriesParams);
|
|
19
|
-
get(
|
|
20
|
+
get(scopeId: string, actor: Actor): Promise<{
|
|
20
21
|
categories: NotificationCategory[];
|
|
21
22
|
source: 'default' | 'stored';
|
|
22
23
|
}>;
|
|
23
|
-
replace(
|
|
24
|
+
replace(scopeId: string, categories: NotificationCategory[], actor: Actor): Promise<{
|
|
24
25
|
categories: NotificationCategory[];
|
|
25
26
|
source: 'stored';
|
|
26
27
|
}>;
|
|
27
|
-
reset(
|
|
28
|
-
defaults(): NotificationCategory[];
|
|
28
|
+
reset(scopeId: string, actor: Actor): Promise<void>;
|
|
29
|
+
defaults(actor: Actor): NotificationCategory[];
|
|
30
|
+
private assertOrg;
|
|
29
31
|
}
|
|
30
32
|
//#endregion
|
|
31
33
|
export { OrgNotificationCategories, OrgNotificationCategoriesParams };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NotFoundError } from "../shared/errors.js";
|
|
1
2
|
import { noopLogger } from "../shared/logger.js";
|
|
2
3
|
import "../shared/settings.js";
|
|
3
4
|
import { assertValidCategoryList, offeringConfigured, storedCategoryList } from "../shared/notification-categories.js";
|
|
@@ -13,23 +14,28 @@ var OrgNotificationCategories = class {
|
|
|
13
14
|
this.channels = params.channels;
|
|
14
15
|
this.logger = params.logger ?? noopLogger;
|
|
15
16
|
}
|
|
16
|
-
async get(
|
|
17
|
-
|
|
17
|
+
async get(scopeId, actor) {
|
|
18
|
+
actor.permissions.require("notification_categories:read");
|
|
19
|
+
this.assertOrg(scopeId, actor);
|
|
20
|
+
const stored = storedCategoryList((await this.settings.get(actor.orgId, "organizations", scopeId))?.notificationCategories);
|
|
18
21
|
return stored ? {
|
|
19
22
|
categories: offeringConfigured(stored, this.channels.list()),
|
|
20
23
|
source: "stored"
|
|
21
24
|
} : {
|
|
22
|
-
categories: this.defaults(),
|
|
25
|
+
categories: this.types.defaults("org"),
|
|
23
26
|
source: "default"
|
|
24
27
|
};
|
|
25
28
|
}
|
|
26
|
-
async replace(
|
|
29
|
+
async replace(scopeId, categories, actor) {
|
|
30
|
+
actor.permissions.require("notification_categories:write");
|
|
31
|
+
this.assertOrg(scopeId, actor);
|
|
27
32
|
const configured = this.channels.list();
|
|
28
33
|
assertValidCategoryList(categories, "org", this.types, configured);
|
|
29
34
|
const ordered = offeringConfigured(categories, configured);
|
|
30
|
-
await this.settings.patch(orgId, "organizations", scopeId, { notificationCategories: ordered });
|
|
35
|
+
await this.settings.patch(actor.orgId, "organizations", scopeId, { notificationCategories: ordered });
|
|
31
36
|
this.logger.info("org notification categories replaced", {
|
|
32
|
-
orgId,
|
|
37
|
+
orgId: actor.orgId,
|
|
38
|
+
orgUserId: actor.id,
|
|
33
39
|
keys: categories.map((category) => category.key)
|
|
34
40
|
});
|
|
35
41
|
return {
|
|
@@ -37,13 +43,22 @@ var OrgNotificationCategories = class {
|
|
|
37
43
|
source: "stored"
|
|
38
44
|
};
|
|
39
45
|
}
|
|
40
|
-
async reset(
|
|
41
|
-
|
|
42
|
-
this.
|
|
46
|
+
async reset(scopeId, actor) {
|
|
47
|
+
actor.permissions.require("notification_categories:write");
|
|
48
|
+
this.assertOrg(scopeId, actor);
|
|
49
|
+
await this.settings.patch(actor.orgId, "organizations", scopeId, { notificationCategories: null });
|
|
50
|
+
this.logger.info("org notification categories reset", {
|
|
51
|
+
orgId: actor.orgId,
|
|
52
|
+
orgUserId: actor.id
|
|
53
|
+
});
|
|
43
54
|
}
|
|
44
|
-
defaults() {
|
|
55
|
+
defaults(actor) {
|
|
56
|
+
actor.permissions.require("notification_categories:read");
|
|
45
57
|
return this.types.defaults("org");
|
|
46
58
|
}
|
|
59
|
+
assertOrg(scopeId, actor) {
|
|
60
|
+
if (scopeId !== actor.orgId) throw new NotFoundError("Organization", scopeId);
|
|
61
|
+
}
|
|
47
62
|
};
|
|
48
63
|
//#endregion
|
|
49
64
|
export { OrgNotificationCategories };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-categories.js","names":[],"sources":["../../src/organizations/notification-categories.ts"],"sourcesContent":["import type { NotificationCategory } from '../types/index.js';\nimport type {\n ChannelRegistry,\n Logger,\n NotificationCategoryService,\n NotificationTypeRegistry,\n} from '../shared/ports.js';\nimport { noopLogger } from '../shared/logger.js';\nimport { SettingsNamespace, type SettingsService } from '../shared/settings.js';\nimport {\n assertValidCategoryList,\n offeringConfigured,\n storedCategoryList,\n} from '../shared/notification-categories.js';\n\nexport type OrgNotificationCategoriesParams = {\n settings: SettingsService;\n types: NotificationTypeRegistry;\n channels: ChannelRegistry;\n logger?: Logger;\n};\n\nexport class OrgNotificationCategories implements NotificationCategoryService {\n private readonly settings: SettingsService;\n private readonly types: NotificationTypeRegistry;\n private readonly channels: ChannelRegistry;\n private readonly logger: Logger;\n\n constructor(params: OrgNotificationCategoriesParams) {\n this.settings = params.settings;\n this.types = params.types;\n this.channels = params.channels;\n this.logger = params.logger ?? noopLogger;\n }\n\n async get(\n
|
|
1
|
+
{"version":3,"file":"notification-categories.js","names":[],"sources":["../../src/organizations/notification-categories.ts"],"sourcesContent":["import type { NotificationCategory } from '../types/index.js';\nimport type {\n ChannelRegistry,\n Logger,\n NotificationCategoryService,\n NotificationTypeRegistry,\n} from '../shared/ports.js';\nimport type { Actor } from '../shared/actor.js';\nimport { NotFoundError } from '../shared/errors.js';\nimport { noopLogger } from '../shared/logger.js';\nimport { SettingsNamespace, type SettingsService } from '../shared/settings.js';\nimport {\n assertValidCategoryList,\n offeringConfigured,\n storedCategoryList,\n} from '../shared/notification-categories.js';\n\nexport type OrgNotificationCategoriesParams = {\n settings: SettingsService;\n types: NotificationTypeRegistry;\n channels: ChannelRegistry;\n logger?: Logger;\n};\n\nexport class OrgNotificationCategories implements NotificationCategoryService {\n private readonly settings: SettingsService;\n private readonly types: NotificationTypeRegistry;\n private readonly channels: ChannelRegistry;\n private readonly logger: Logger;\n\n constructor(params: OrgNotificationCategoriesParams) {\n this.settings = params.settings;\n this.types = params.types;\n this.channels = params.channels;\n this.logger = params.logger ?? noopLogger;\n }\n\n async get(\n scopeId: string,\n actor: Actor,\n ): Promise<{ categories: NotificationCategory[]; source: 'default' | 'stored' }> {\n actor.permissions.require('notification_categories:read');\n this.assertOrg(scopeId, actor);\n const value = await this.settings.get<Record<string, unknown>>(\n actor.orgId,\n SettingsNamespace.organizations,\n scopeId,\n );\n const stored = storedCategoryList(value?.notificationCategories);\n return stored\n ? { categories: offeringConfigured(stored, this.channels.list()), source: 'stored' }\n : { categories: this.types.defaults('org'), source: 'default' };\n }\n\n async replace(\n scopeId: string,\n categories: NotificationCategory[],\n actor: Actor,\n ): Promise<{ categories: NotificationCategory[]; source: 'stored' }> {\n actor.permissions.require('notification_categories:write');\n this.assertOrg(scopeId, actor);\n const configured = this.channels.list();\n assertValidCategoryList(categories, 'org', this.types, configured);\n const ordered = offeringConfigured(categories, configured);\n await this.settings.patch(actor.orgId, SettingsNamespace.organizations, scopeId, {\n notificationCategories: ordered,\n });\n this.logger.info('org notification categories replaced', {\n orgId: actor.orgId,\n orgUserId: actor.id,\n keys: categories.map((category) => category.key),\n });\n return { categories: ordered, source: 'stored' };\n }\n\n async reset(scopeId: string, actor: Actor): Promise<void> {\n actor.permissions.require('notification_categories:write');\n this.assertOrg(scopeId, actor);\n await this.settings.patch(actor.orgId, SettingsNamespace.organizations, scopeId, {\n notificationCategories: null,\n });\n this.logger.info('org notification categories reset', {\n orgId: actor.orgId,\n orgUserId: actor.id,\n });\n }\n\n defaults(actor: Actor): NotificationCategory[] {\n actor.permissions.require('notification_categories:read');\n return this.types.defaults('org');\n }\n\n private assertOrg(scopeId: string, actor: Actor): void {\n if (scopeId !== actor.orgId) {\n throw new NotFoundError('Organization', scopeId);\n }\n }\n}\n"],"mappings":";;;;;AAwBA,IAAa,4BAAb,MAA8E;CAC5E;CACA;CACA;CACA;CAEA,YAAY,QAAyC;EACnD,KAAK,WAAW,OAAO;EACvB,KAAK,QAAQ,OAAO;EACpB,KAAK,WAAW,OAAO;EACvB,KAAK,SAAS,OAAO,UAAU;CACjC;CAEA,MAAM,IACJ,SACA,OAC+E;EAC/E,MAAM,YAAY,QAAQ,8BAA8B;EACxD,KAAK,UAAU,SAAS,KAAK;EAM7B,MAAM,SAAS,oBAAmB,MALd,KAAK,SAAS,IAChC,MAAM,OAAA,iBAEN,OACF,EAAA,EACyC,sBAAsB;EAC/D,OAAO,SACH;GAAE,YAAY,mBAAmB,QAAQ,KAAK,SAAS,KAAK,CAAC;GAAG,QAAQ;EAAS,IACjF;GAAE,YAAY,KAAK,MAAM,SAAS,KAAK;GAAG,QAAQ;EAAU;CAClE;CAEA,MAAM,QACJ,SACA,YACA,OACmE;EACnE,MAAM,YAAY,QAAQ,+BAA+B;EACzD,KAAK,UAAU,SAAS,KAAK;EAC7B,MAAM,aAAa,KAAK,SAAS,KAAK;EACtC,wBAAwB,YAAY,OAAO,KAAK,OAAO,UAAU;EACjE,MAAM,UAAU,mBAAmB,YAAY,UAAU;EACzD,MAAM,KAAK,SAAS,MAAM,MAAM,OAAA,iBAAwC,SAAS,EAC/E,wBAAwB,QAC1B,CAAC;EACD,KAAK,OAAO,KAAK,wCAAwC;GACvD,OAAO,MAAM;GACb,WAAW,MAAM;GACjB,MAAM,WAAW,KAAK,aAAa,SAAS,GAAG;EACjD,CAAC;EACD,OAAO;GAAE,YAAY;GAAS,QAAQ;EAAS;CACjD;CAEA,MAAM,MAAM,SAAiB,OAA6B;EACxD,MAAM,YAAY,QAAQ,+BAA+B;EACzD,KAAK,UAAU,SAAS,KAAK;EAC7B,MAAM,KAAK,SAAS,MAAM,MAAM,OAAA,iBAAwC,SAAS,EAC/E,wBAAwB,KAC1B,CAAC;EACD,KAAK,OAAO,KAAK,qCAAqC;GACpD,OAAO,MAAM;GACb,WAAW,MAAM;EACnB,CAAC;CACH;CAEA,SAAS,OAAsC;EAC7C,MAAM,YAAY,QAAQ,8BAA8B;EACxD,OAAO,KAAK,MAAM,SAAS,KAAK;CAClC;CAEA,UAAkB,SAAiB,OAAoB;EACrD,IAAI,YAAY,MAAM,OACpB,MAAM,IAAI,cAAc,gBAAgB,OAAO;CAEnD;AACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Level, Permission } from "../types/schemas/organizations.js";
|
|
2
|
+
import "../types/index.js";
|
|
3
|
+
import { RoleDefinition } from "./default-roles.js";
|
|
4
|
+
//#region src/organizations/org-roles.d.ts
|
|
5
|
+
interface StoredOrgRole {
|
|
6
|
+
key: string;
|
|
7
|
+
name: string | null;
|
|
8
|
+
description: string | null;
|
|
9
|
+
base: string;
|
|
10
|
+
levels: Level[] | null;
|
|
11
|
+
permissions: Partial<Record<Permission, boolean>>;
|
|
12
|
+
team: boolean | null;
|
|
13
|
+
}
|
|
14
|
+
interface OrgRole {
|
|
15
|
+
key: string;
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
base: string;
|
|
19
|
+
levels: Level[];
|
|
20
|
+
team: boolean;
|
|
21
|
+
permissions: Permission[];
|
|
22
|
+
system: boolean;
|
|
23
|
+
added: boolean;
|
|
24
|
+
customized: boolean;
|
|
25
|
+
}
|
|
26
|
+
type RoleCatalog = ReadonlyMap<string, RoleDefinition>;
|
|
27
|
+
declare function catalogOf(roles: readonly RoleDefinition[]): RoleCatalog;
|
|
28
|
+
declare function isSystemRole(key: string): boolean;
|
|
29
|
+
declare function resolveRole(key: string, catalog: RoleCatalog, stored: StoredOrgRole | undefined): OrgRole | null;
|
|
30
|
+
declare function resolveOrgRoles(catalog: RoleCatalog, stored: readonly StoredOrgRole[]): OrgRole[];
|
|
31
|
+
//#endregion
|
|
32
|
+
export { OrgRole, RoleCatalog, StoredOrgRole, catalogOf, isSystemRole, resolveOrgRoles, resolveRole };
|
|
33
|
+
//# sourceMappingURL=org-roles.d.ts.map
|