@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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
//#region src/reporting/member/calendar.ts
|
|
2
|
+
function stamp(date) {
|
|
3
|
+
return date.toISOString().replace(/[-:]/g, "").replace(/\.\d{3}/, "");
|
|
4
|
+
}
|
|
5
|
+
function text(value) {
|
|
6
|
+
return value.replace(/\\/g, "\\\\").replace(/;/g, "\\;").replace(/,/g, "\\,").replace(/\r?\n/g, "\\n");
|
|
7
|
+
}
|
|
8
|
+
const encoder = new TextEncoder();
|
|
9
|
+
function octets(value) {
|
|
10
|
+
return encoder.encode(value).length;
|
|
11
|
+
}
|
|
12
|
+
function fold(line) {
|
|
13
|
+
const parts = [];
|
|
14
|
+
let part = "";
|
|
15
|
+
let size = 0;
|
|
16
|
+
let width = 75;
|
|
17
|
+
for (const char of line) {
|
|
18
|
+
const length = octets(char);
|
|
19
|
+
if (size + length > width) {
|
|
20
|
+
parts.push(part);
|
|
21
|
+
part = "";
|
|
22
|
+
size = 0;
|
|
23
|
+
width = 74;
|
|
24
|
+
}
|
|
25
|
+
part += char;
|
|
26
|
+
size += length;
|
|
27
|
+
}
|
|
28
|
+
parts.push(part);
|
|
29
|
+
return parts.join("\r\n ");
|
|
30
|
+
}
|
|
31
|
+
function where(event) {
|
|
32
|
+
const venue = event.location.venue;
|
|
33
|
+
if (venue) {
|
|
34
|
+
const address = venue.address;
|
|
35
|
+
const lines = address ? [
|
|
36
|
+
address.line1,
|
|
37
|
+
address.line2,
|
|
38
|
+
address.city,
|
|
39
|
+
address.region,
|
|
40
|
+
address.postalCode,
|
|
41
|
+
address.country
|
|
42
|
+
] : [];
|
|
43
|
+
return [venue.name, ...lines].filter((part) => Boolean(part)).join(", ");
|
|
44
|
+
}
|
|
45
|
+
return event.location.online?.url ?? null;
|
|
46
|
+
}
|
|
47
|
+
function eventCalendar(event, options) {
|
|
48
|
+
const lines = [
|
|
49
|
+
"BEGIN:VCALENDAR",
|
|
50
|
+
"VERSION:2.0",
|
|
51
|
+
"PRODID:-//Headless LMS//Events//EN",
|
|
52
|
+
"CALSCALE:GREGORIAN",
|
|
53
|
+
"METHOD:PUBLISH",
|
|
54
|
+
"BEGIN:VEVENT",
|
|
55
|
+
`UID:${event.id}`,
|
|
56
|
+
`DTSTAMP:${stamp(options.now)}`,
|
|
57
|
+
`DTSTART:${stamp(event.startsAt)}`,
|
|
58
|
+
`DTEND:${stamp(event.endsAt)}`,
|
|
59
|
+
`SUMMARY:${text(event.title)}`,
|
|
60
|
+
`DESCRIPTION:${text(options.pageUrl)}`,
|
|
61
|
+
`URL:${options.pageUrl}`
|
|
62
|
+
];
|
|
63
|
+
if (event.status === "canceled") lines.push("STATUS:CANCELLED");
|
|
64
|
+
if (options.withLocation) {
|
|
65
|
+
const location = where(event);
|
|
66
|
+
if (location) lines.push(`LOCATION:${text(location)}`);
|
|
67
|
+
if (event.location.online) lines.push(`CONFERENCE;VALUE=URI:${event.location.online.url}`);
|
|
68
|
+
}
|
|
69
|
+
lines.push("END:VEVENT", "END:VCALENDAR");
|
|
70
|
+
return `${lines.map(fold).join("\r\n")}\r\n`;
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { eventCalendar };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","names":[],"sources":["../../../src/reporting/member/calendar.ts"],"sourcesContent":["import type { Event } from '../../content/index.js';\n\nfunction stamp(date: Date): string {\n return date\n .toISOString()\n .replace(/[-:]/g, '')\n .replace(/\\.\\d{3}/, '');\n}\n\nfunction text(value: string): string {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/;/g, '\\\\;')\n .replace(/,/g, '\\\\,')\n .replace(/\\r?\\n/g, '\\\\n');\n}\n\nconst encoder = new TextEncoder();\n\nfunction octets(value: string): number {\n return encoder.encode(value).length;\n}\n\nfunction fold(line: string): string {\n const parts: string[] = [];\n let part = '';\n let size = 0;\n let width = 75;\n for (const char of line) {\n const length = octets(char);\n if (size + length > width) {\n parts.push(part);\n part = '';\n size = 0;\n width = 74;\n }\n part += char;\n size += length;\n }\n parts.push(part);\n return parts.join('\\r\\n ');\n}\n\nfunction where(event: Event): string | null {\n const venue = event.location.venue;\n if (venue) {\n const address = venue.address;\n const lines = address\n ? [\n address.line1,\n address.line2,\n address.city,\n address.region,\n address.postalCode,\n address.country,\n ]\n : [];\n return [venue.name, ...lines].filter((part): part is string => Boolean(part)).join(', ');\n }\n return event.location.online?.url ?? null;\n}\n\nexport function eventCalendar(\n event: Event,\n options: { pageUrl: string; withLocation: boolean; now: Date },\n): string {\n const lines = [\n 'BEGIN:VCALENDAR',\n 'VERSION:2.0',\n 'PRODID:-//Headless LMS//Events//EN',\n 'CALSCALE:GREGORIAN',\n 'METHOD:PUBLISH',\n 'BEGIN:VEVENT',\n `UID:${event.id}`,\n `DTSTAMP:${stamp(options.now)}`,\n `DTSTART:${stamp(event.startsAt)}`,\n `DTEND:${stamp(event.endsAt)}`,\n `SUMMARY:${text(event.title)}`,\n `DESCRIPTION:${text(options.pageUrl)}`,\n `URL:${options.pageUrl}`,\n ];\n if (event.status === 'canceled') {\n lines.push('STATUS:CANCELLED');\n }\n if (options.withLocation) {\n const location = where(event);\n if (location) {\n lines.push(`LOCATION:${text(location)}`);\n }\n if (event.location.online) {\n lines.push(`CONFERENCE;VALUE=URI:${event.location.online.url}`);\n }\n }\n lines.push('END:VEVENT', 'END:VCALENDAR');\n return `${lines.map(fold).join('\\r\\n')}\\r\\n`;\n}\n"],"mappings":";AAEA,SAAS,MAAM,MAAoB;CACjC,OAAO,KACJ,YAAY,CAAC,CACb,QAAQ,SAAS,EAAE,CAAC,CACpB,QAAQ,WAAW,EAAE;AAC1B;AAEA,SAAS,KAAK,OAAuB;CACnC,OAAO,MACJ,QAAQ,OAAO,MAAM,CAAC,CACtB,QAAQ,MAAM,KAAK,CAAC,CACpB,QAAQ,MAAM,KAAK,CAAC,CACpB,QAAQ,UAAU,KAAK;AAC5B;AAEA,MAAM,UAAU,IAAI,YAAY;AAEhC,SAAS,OAAO,OAAuB;CACrC,OAAO,QAAQ,OAAO,KAAK,CAAC,CAAC;AAC/B;AAEA,SAAS,KAAK,MAAsB;CAClC,MAAM,QAAkB,CAAC;CACzB,IAAI,OAAO;CACX,IAAI,OAAO;CACX,IAAI,QAAQ;CACZ,KAAK,MAAM,QAAQ,MAAM;EACvB,MAAM,SAAS,OAAO,IAAI;EAC1B,IAAI,OAAO,SAAS,OAAO;GACzB,MAAM,KAAK,IAAI;GACf,OAAO;GACP,OAAO;GACP,QAAQ;EACV;EACA,QAAQ;EACR,QAAQ;CACV;CACA,MAAM,KAAK,IAAI;CACf,OAAO,MAAM,KAAK,OAAO;AAC3B;AAEA,SAAS,MAAM,OAA6B;CAC1C,MAAM,QAAQ,MAAM,SAAS;CAC7B,IAAI,OAAO;EACT,MAAM,UAAU,MAAM;EACtB,MAAM,QAAQ,UACV;GACE,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;EACV,IACA,CAAC;EACL,OAAO,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,SAAyB,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;CACzF;CACA,OAAO,MAAM,SAAS,QAAQ,OAAO;AACvC;AAEA,SAAgB,cACd,OACA,SACQ;CACR,MAAM,QAAQ;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,MAAM;EACb,WAAW,MAAM,QAAQ,GAAG;EAC5B,WAAW,MAAM,MAAM,QAAQ;EAC/B,SAAS,MAAM,MAAM,MAAM;EAC3B,WAAW,KAAK,MAAM,KAAK;EAC3B,eAAe,KAAK,QAAQ,OAAO;EACnC,OAAO,QAAQ;CACjB;CACA,IAAI,MAAM,WAAW,YACnB,MAAM,KAAK,kBAAkB;CAE/B,IAAI,QAAQ,cAAc;EACxB,MAAM,WAAW,MAAM,KAAK;EAC5B,IAAI,UACF,MAAM,KAAK,YAAY,KAAK,QAAQ,GAAG;EAEzC,IAAI,MAAM,SAAS,QACjB,MAAM,KAAK,wBAAwB,MAAM,SAAS,OAAO,KAAK;CAElE;CACA,MAAM,KAAK,cAAc,eAAe;CACxC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE;AACzC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CourseView, Module } from "../../types/schemas/content.js";
|
|
2
|
-
import {
|
|
2
|
+
import { EventAttendeeRow, EventReader } from "../events/index.js";
|
|
3
|
+
import { CommunityHome, CommunityHomeSpace, CommunityNotificationSettingsView, CommunityViewer, CourseProgressView, DirectoryEntry, DirectoryQuery, DirectoryRow, LockedCommunitySpace, MemberViewer, NotificationItemView, NotificationSettingsCategoryView, NotificationUnreadCounts, NotificationView, NotificationsView, OpenCommunitySpace, OrgNotificationSettingsView, SettingsChannelView } from "./model.js";
|
|
3
4
|
import { MemberReportRepository, MemberReportService } from "./ports.js";
|
|
4
5
|
import { MemberReportServiceImpl } from "./service.js";
|
|
5
|
-
export { type CommunityHome, type CommunityHomeSpace, type CommunityNotificationSettingsView, type CourseProgressView, type CourseView, type DirectoryEntry, type DirectoryQuery, type DirectoryRow, type LockedCommunitySpace, type MemberReportRepository, type MemberReportService, MemberReportServiceImpl, type Module, type NotificationItemView, type NotificationSettingsCategoryView, type NotificationUnreadCounts, type NotificationView, type NotificationsView, type OpenCommunitySpace, type OrgNotificationSettingsView, type SettingsChannelView };
|
|
6
|
+
export { type CommunityHome, type CommunityHomeSpace, type CommunityNotificationSettingsView, type CommunityViewer, type CourseProgressView, type CourseView, type DirectoryEntry, type DirectoryQuery, type DirectoryRow, type EventAttendeeRow, type EventReader, type LockedCommunitySpace, type MemberReportRepository, type MemberReportService, MemberReportServiceImpl, type MemberViewer, type Module, type NotificationItemView, type NotificationSettingsCategoryView, type NotificationUnreadCounts, type NotificationView, type NotificationsView, type OpenCommunitySpace, type OrgNotificationSettingsView, type SettingsChannelView };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { JsonValue } from "../../types/shared.js";
|
|
2
|
-
import { ActivityView, CourseView, DigestSchedule, DownloadFile, DownloadView, Module } from "../../types/schemas/content.js";
|
|
2
|
+
import { ActivityView, CourseView, DigestSchedule, DownloadFile, DownloadView, EventAttendee, MemberEvent, MemberEventSummary, MemberEventsQuery, Module } from "../../types/schemas/content.js";
|
|
3
|
+
import { Permission } from "../../types/schemas/organizations.js";
|
|
3
4
|
import { SubscriptionView } from "../../types/schemas/discussion.js";
|
|
4
5
|
import { Reason, Scope, SubjectRef } from "../../types/notifications.js";
|
|
5
6
|
import "../../types/index.js";
|
|
6
7
|
import "../../content/index.js";
|
|
8
|
+
import { EventAttendeeRow, EventReader } from "../events/index.js";
|
|
7
9
|
import { ResolvedChannel } from "../../shared/notification-settings.js";
|
|
8
10
|
//#region src/reporting/member/model.d.ts
|
|
9
11
|
/** Per-course progress for the student surface. Derived on read against the
|
|
@@ -11,7 +13,6 @@ import { ResolvedChannel } from "../../shared/notification-settings.js";
|
|
|
11
13
|
interface DirectoryRow {
|
|
12
14
|
orgUserId: string;
|
|
13
15
|
userId: string;
|
|
14
|
-
role: string;
|
|
15
16
|
displayName: string | null;
|
|
16
17
|
headline: string | null;
|
|
17
18
|
bio: string | null;
|
|
@@ -24,6 +25,25 @@ interface DirectoryQuery {
|
|
|
24
25
|
}
|
|
25
26
|
interface DirectoryEntry extends DirectoryRow {
|
|
26
27
|
imageUrl: string | null;
|
|
28
|
+
team: boolean;
|
|
29
|
+
roleName: string | null;
|
|
30
|
+
opensEverySpace: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface MemberViewer {
|
|
33
|
+
orgUserId: string;
|
|
34
|
+
orgRole: {
|
|
35
|
+
key: string;
|
|
36
|
+
name: string;
|
|
37
|
+
};
|
|
38
|
+
permissions: Permission[];
|
|
39
|
+
orgPermissions: Permission[];
|
|
40
|
+
}
|
|
41
|
+
interface CommunityViewer {
|
|
42
|
+
permissions: Permission[];
|
|
43
|
+
opensEverySpace: boolean;
|
|
44
|
+
team: boolean;
|
|
45
|
+
roleName: string;
|
|
46
|
+
canCreateEvents: boolean;
|
|
27
47
|
}
|
|
28
48
|
interface CommunityHomeLink {
|
|
29
49
|
id: string;
|
|
@@ -37,6 +57,9 @@ interface CommunityHomeSpaceBase {
|
|
|
37
57
|
memberCount: number;
|
|
38
58
|
accessRule: 'all_members' | 'by_request' | 'by_invite';
|
|
39
59
|
standing: 'open' | 'member' | 'requested' | 'invited' | 'full' | 'none';
|
|
60
|
+
coverUrl: string | null;
|
|
61
|
+
backgroundUrl: string | null;
|
|
62
|
+
iconUrl: string | null;
|
|
40
63
|
}
|
|
41
64
|
/** A space the viewer can see but not open: enough to request, accept or ask. */
|
|
42
65
|
interface LockedCommunitySpace extends CommunityHomeSpaceBase {
|
|
@@ -67,13 +90,14 @@ interface CommunityHome {
|
|
|
67
90
|
dm: {
|
|
68
91
|
enabled: boolean;
|
|
69
92
|
memberToMember: boolean;
|
|
70
|
-
|
|
71
|
-
|
|
93
|
+
memberToTeam: boolean;
|
|
94
|
+
teamToAnyone: boolean;
|
|
72
95
|
firstMessageIsRequest: boolean;
|
|
73
96
|
groupChats: boolean;
|
|
74
97
|
groupSize: number;
|
|
75
98
|
};
|
|
76
99
|
spaces: CommunityHomeSpace[];
|
|
100
|
+
viewer: CommunityViewer;
|
|
77
101
|
}
|
|
78
102
|
interface CourseProgressView {
|
|
79
103
|
/** Keyed by activity id; absent key = not started. */
|
|
@@ -153,5 +177,5 @@ interface OrgNotificationSettingsView {
|
|
|
153
177
|
categories: NotificationSettingsCategoryView[];
|
|
154
178
|
}
|
|
155
179
|
//#endregion
|
|
156
|
-
export { type ActivityView, CommunityHome, CommunityHomeLink, CommunityHomeSpace, CommunityNotificationSettingsView, CourseProgressView, type CourseView, DirectoryEntry, DirectoryQuery, DirectoryRow, type DownloadFile, type DownloadView, LockedCommunitySpace, type Module, NotificationItemView, NotificationSettingsCategoryView, NotificationUnreadCounts, NotificationView, NotificationsView, OpenCommunitySpace, OrgNotificationSettingsView, SettingsChannelView };
|
|
180
|
+
export { type ActivityView, CommunityHome, CommunityHomeLink, CommunityHomeSpace, CommunityNotificationSettingsView, CommunityViewer, CourseProgressView, type CourseView, DirectoryEntry, DirectoryQuery, DirectoryRow, type DownloadFile, type DownloadView, type EventAttendee, type EventAttendeeRow, type EventReader, LockedCommunitySpace, type MemberEvent, type MemberEventSummary, type MemberEventsQuery, MemberViewer, type Module, NotificationItemView, NotificationSettingsCategoryView, NotificationUnreadCounts, NotificationView, NotificationsView, OpenCommunitySpace, OrgNotificationSettingsView, SettingsChannelView };
|
|
157
181
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1,47 +1,67 @@
|
|
|
1
1
|
import { Page } from "../../types/shared.js";
|
|
2
|
-
import { ActivityView, CourseView, DownloadFile, DownloadView, Module } from "../../types/schemas/content.js";
|
|
2
|
+
import { ActivityView, CourseView, DownloadFile, DownloadView, EventAttendee, MemberEvent, MemberEventSummary, MemberEventsQuery, Module, SpaceImage } from "../../types/schemas/content.js";
|
|
3
3
|
import { NotificationFilter } from "../../types/notifications.js";
|
|
4
4
|
import "../../types/index.js";
|
|
5
5
|
import { Actor } from "../../shared/actor.js";
|
|
6
|
-
import {
|
|
6
|
+
import { MemberActor } from "../../identity/ports.js";
|
|
7
|
+
import "../../identity/index.js";
|
|
8
|
+
import { EventAttendeeRow, EventFaces, EventReader } from "../events/index.js";
|
|
9
|
+
import { CommunityHome, CommunityHomeSpace, CommunityNotificationSettingsView, CourseProgressView, DirectoryEntry, DirectoryQuery, DirectoryRow, MemberViewer, NotificationUnreadCounts, NotificationView, NotificationsView, OrgNotificationSettingsView } from "./model.js";
|
|
7
10
|
//#region src/reporting/member/ports.d.ts
|
|
8
11
|
interface MemberReportService {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
/** Who the caller is in the org, and the permissions they hold. */
|
|
13
|
+
viewer(actor: Actor): MemberViewer;
|
|
14
|
+
listCourses(actor: Actor): Promise<CourseView[]>;
|
|
15
|
+
getCourse(courseId: string, actor: Actor): Promise<CourseView>;
|
|
16
|
+
listModules(courseId: string, actor: Actor): Promise<Module[]>;
|
|
17
|
+
listActivities(courseId: string, actor: Actor): Promise<ActivityView[]>;
|
|
18
|
+
courseProgress(courseId: string, actor: Actor): Promise<CourseProgressView>;
|
|
19
|
+
listDownloads(actor: Actor): Promise<DownloadView[]>;
|
|
20
|
+
getDownload(downloadId: string, actor: Actor): Promise<{
|
|
16
21
|
download: DownloadView;
|
|
17
22
|
assets: DownloadFile[];
|
|
18
|
-
}
|
|
19
|
-
/** Signed URL of a course, download or community thumbnail: published, or
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
directory(orgId: string, actor: Actor, communityId: string, query: DirectoryQuery): Promise<Page<DirectoryEntry> | null>;
|
|
28
|
-
communityHome(orgId: string, actor: Actor, communityId: string): Promise<CommunityHome | null>;
|
|
29
|
-
communitySpace(orgId: string, actor: Actor, communityId: string, spaceId: string): Promise<CommunityHomeSpace | null>;
|
|
30
|
-
notifications(orgId: string, actor: Actor, userId: string, filter: NotificationFilter, page: {
|
|
23
|
+
}>;
|
|
24
|
+
/** Signed URL of a course, download or community thumbnail: published, or the item's read
|
|
25
|
+
* permission. An event's when the caller can read the event. */
|
|
26
|
+
thumbnailFile(owner: 'course' | 'download' | 'community' | 'event', id: string, actor: Actor): Promise<string>;
|
|
27
|
+
spaceImageFile(spaceId: string, image: SpaceImage, actor: Actor): Promise<string>;
|
|
28
|
+
getEvent(eventId: string, actor: Actor): Promise<MemberEvent>;
|
|
29
|
+
listEvents(query: MemberEventsQuery, actor: Actor): Promise<Page<MemberEventSummary>>;
|
|
30
|
+
eventCalendar(eventId: string, actor: Actor): Promise<string>;
|
|
31
|
+
eventAttendees(eventId: string, query: {
|
|
31
32
|
page: number;
|
|
32
33
|
pageSize: number;
|
|
33
|
-
}): Promise<
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
}, actor: Actor): Promise<Page<EventAttendee>>;
|
|
35
|
+
eventFile(eventId: string, assetId: string, actor: Actor): Promise<string>;
|
|
36
|
+
/** Signed URL of an asset the activity links, for a person who can open its course. */
|
|
37
|
+
activityFile(activityId: string, assetId: string, actor: Actor): Promise<string>;
|
|
38
|
+
/** Signed download URL of a file in a download the person can open. */
|
|
39
|
+
downloadFile(downloadId: string, assetId: string, actor: Actor): Promise<string>;
|
|
40
|
+
directory(communityId: string, query: DirectoryQuery, actor: Actor): Promise<Page<DirectoryEntry>>;
|
|
41
|
+
communityHome(communityId: string, actor: Actor): Promise<CommunityHome>;
|
|
42
|
+
communitySpace(communityId: string, spaceId: string, actor: Actor): Promise<CommunityHomeSpace>;
|
|
43
|
+
notifications(filter: NotificationFilter, page: {
|
|
44
|
+
page: number;
|
|
45
|
+
pageSize: number;
|
|
46
|
+
}, actor: MemberActor): Promise<NotificationsView>;
|
|
47
|
+
notification(notificationId: string, actor: MemberActor): Promise<NotificationView>;
|
|
48
|
+
notificationUnreadCounts(actor: MemberActor): Promise<NotificationUnreadCounts>;
|
|
36
49
|
/** The person's notification settings in a community they can open, resolved per channel. */
|
|
37
|
-
communityNotificationSettings(
|
|
50
|
+
communityNotificationSettings(communityId: string, actor: MemberActor): Promise<CommunityNotificationSettingsView>;
|
|
38
51
|
/** The person's notification settings for the org's categories. */
|
|
39
|
-
orgNotificationSettings(
|
|
52
|
+
orgNotificationSettings(actor: MemberActor): Promise<OrgNotificationSettingsView>;
|
|
40
53
|
}
|
|
41
54
|
interface MemberReportRepository {
|
|
42
|
-
directory(orgId: string, communityId: string, query: DirectoryQuery): Promise<Page<DirectoryRow>>;
|
|
43
|
-
spaceMemberCounts(orgId: string, communityId: string): Promise<Record<string, number>>;
|
|
55
|
+
directory(orgId: string, communityId: string, query: DirectoryQuery, readerIds: string[]): Promise<Page<DirectoryRow>>;
|
|
56
|
+
spaceMemberCounts(orgId: string, communityId: string, excluding: string[]): Promise<Record<string, number>>;
|
|
44
57
|
people(orgId: string, orgUserIds: string[]): Promise<DirectoryRow[]>;
|
|
58
|
+
eventAttendees(orgId: string, eventId: string, page: {
|
|
59
|
+
page: number;
|
|
60
|
+
pageSize: number;
|
|
61
|
+
}): Promise<Page<EventAttendeeRow>>;
|
|
62
|
+
eventFaces(orgId: string, eventIds: string[], limit: number): Promise<Record<string, EventFaces>>;
|
|
63
|
+
directEventGrants(orgId: string, orgUserId: string, eventIds: string[]): Promise<string[]>;
|
|
64
|
+
events(orgId: string, query: MemberEventsQuery, reader: EventReader, now: Date): Promise<Page<string>>;
|
|
45
65
|
}
|
|
46
66
|
//#endregion
|
|
47
67
|
export { MemberReportRepository, MemberReportService };
|
|
@@ -1,35 +1,41 @@
|
|
|
1
1
|
import { Page } from "../../types/shared.js";
|
|
2
|
-
import { ActivityView, CourseView, DownloadFile, DownloadView, Module } from "../../types/schemas/content.js";
|
|
2
|
+
import { ActivityView, CourseView, DownloadFile, DownloadView, EventAttendee, MemberEvent, MemberEventSummary, MemberEventsQuery, Module, SpaceImage } from "../../types/schemas/content.js";
|
|
3
3
|
import { NotificationFilter } from "../../types/notifications.js";
|
|
4
4
|
import "../../types/index.js";
|
|
5
|
+
import { Actor } from "../../shared/actor.js";
|
|
5
6
|
import { ChannelRegistry, NotificationCategoryService } from "../../shared/ports.js";
|
|
6
7
|
import { FileUrls } from "../../assets/file-urls.js";
|
|
7
8
|
import { AssetFiles } from "../../assets/ports.js";
|
|
8
9
|
import "../../assets/index.js";
|
|
9
|
-
import { Actor } from "../../shared/actor.js";
|
|
10
10
|
import { ContentService, ItemTitles } from "../../content/ports.js";
|
|
11
11
|
import "../../content/index.js";
|
|
12
|
-
import { NotificationSettingsService } from "../../identity/ports.js";
|
|
13
|
-
import "../../identity/index.js";
|
|
14
12
|
import { EntitlementsService } from "../../entitlements/ports.js";
|
|
15
13
|
import "../../entitlements/index.js";
|
|
14
|
+
import { MemberActor, NotificationSettingsService } from "../../identity/ports.js";
|
|
15
|
+
import "../../identity/index.js";
|
|
16
16
|
import { NotificationsService } from "../../automations/ports.js";
|
|
17
17
|
import "../../automations/index.js";
|
|
18
18
|
import { ItemTitles as ItemTitles$1, SubscriptionService } from "../../discussion/ports.js";
|
|
19
19
|
import "../../discussion/index.js";
|
|
20
|
+
import { OrganizationService } from "../../organizations/ports.js";
|
|
21
|
+
import "../../organizations/index.js";
|
|
20
22
|
import { ProgressService } from "../../progress/ports.js";
|
|
21
23
|
import "../../progress/index.js";
|
|
22
|
-
import { CommunityHome, CommunityHomeSpace, CommunityNotificationSettingsView, CourseProgressView, DirectoryEntry, DirectoryQuery, NotificationUnreadCounts, NotificationView, NotificationsView, OrgNotificationSettingsView } from "./model.js";
|
|
24
|
+
import { CommunityHome, CommunityHomeSpace, CommunityNotificationSettingsView, CourseProgressView, DirectoryEntry, DirectoryQuery, MemberViewer, NotificationUnreadCounts, NotificationView, NotificationsView, OrgNotificationSettingsView } from "./model.js";
|
|
23
25
|
import { MemberReportRepository, MemberReportService } from "./ports.js";
|
|
24
26
|
//#region src/reporting/member/service.d.ts
|
|
25
|
-
type MemberAccess = Pick<EntitlementsService, 'isCommunityMember' | 'openSpaceIds' | 'spaceStandings' | 'hasAccess' | 'listAccessibleContent' | 'openCommunityIds'>;
|
|
27
|
+
type MemberAccess = Pick<EntitlementsService, 'isCommunityMember' | 'openSpaceIds' | 'spaceStandings' | 'hasAccess' | 'listAccessibleContent' | 'openCommunityIds' | 'opensEverySpace' | 'everySpaceOpeners'>;
|
|
28
|
+
type MemberContent = Pick<ContentService, 'findCourse' | 'listCourseModules' | 'listCourseActivityViews' | 'listCourseActivities' | 'listCourseActivityAssets' | 'getActivity' | 'findDownload' | 'listDownloadAssets' | 'findCommunity' | 'listSpaces' | 'getSpace' | 'findEvent' | 'findEvents' | 'eventFilesFor'>;
|
|
29
|
+
type MemberPeople = Pick<OrganizationService, 'systemActor' | 'permissionsOfMany' | 'holders'>;
|
|
30
|
+
type Owner = 'course' | 'download' | 'community' | 'event';
|
|
26
31
|
type MemberReportServiceParams = {
|
|
27
32
|
repo: MemberReportRepository;
|
|
28
|
-
content:
|
|
29
|
-
progress: ProgressService
|
|
33
|
+
content: MemberContent;
|
|
34
|
+
progress: Pick<ProgressService, 'get' | 'listByTargets'>;
|
|
30
35
|
files: Pick<AssetFiles, 'signFile'>;
|
|
31
36
|
fileUrls: FileUrls;
|
|
32
37
|
access: MemberAccess;
|
|
38
|
+
people: MemberPeople;
|
|
33
39
|
notifications: Pick<NotificationsService, 'list' | 'get' | 'unreadCounts'>;
|
|
34
40
|
titles: {
|
|
35
41
|
discussion: ItemTitles$1;
|
|
@@ -42,6 +48,8 @@ type MemberReportServiceParams = {
|
|
|
42
48
|
};
|
|
43
49
|
notificationSettings: Pick<NotificationSettingsService, 'get'>;
|
|
44
50
|
channels: Pick<ChannelRegistry, 'list'>;
|
|
51
|
+
studentPortalUrl: string;
|
|
52
|
+
now?: () => Date;
|
|
45
53
|
};
|
|
46
54
|
declare class MemberReportServiceImpl implements MemberReportService {
|
|
47
55
|
private readonly repo;
|
|
@@ -50,40 +58,60 @@ declare class MemberReportServiceImpl implements MemberReportService {
|
|
|
50
58
|
private readonly files;
|
|
51
59
|
private readonly fileUrls;
|
|
52
60
|
private readonly access;
|
|
61
|
+
private readonly people;
|
|
53
62
|
private readonly notificationList;
|
|
54
63
|
private readonly titles;
|
|
55
64
|
private readonly subscriptions;
|
|
56
65
|
private readonly notificationCategories;
|
|
57
66
|
private readonly notificationSettings;
|
|
58
67
|
private readonly channels;
|
|
68
|
+
private readonly studentPortalUrl;
|
|
69
|
+
private readonly now;
|
|
59
70
|
constructor(params: MemberReportServiceParams);
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
private system;
|
|
72
|
+
viewer(actor: Actor): MemberViewer;
|
|
73
|
+
communityNotificationSettings(communityId: string, actor: MemberActor): Promise<CommunityNotificationSettingsView>;
|
|
74
|
+
orgNotificationSettings(actor: MemberActor): Promise<OrgNotificationSettingsView>;
|
|
62
75
|
private settingsView;
|
|
63
|
-
notifications(
|
|
76
|
+
notifications(filter: NotificationFilter, page: {
|
|
64
77
|
page: number;
|
|
65
78
|
pageSize: number;
|
|
66
|
-
}): Promise<NotificationsView>;
|
|
67
|
-
notification(
|
|
68
|
-
notificationUnreadCounts(
|
|
79
|
+
}, actor: MemberActor): Promise<NotificationsView>;
|
|
80
|
+
notification(notificationId: string, actor: MemberActor): Promise<NotificationView>;
|
|
81
|
+
notificationUnreadCounts(actor: MemberActor): Promise<NotificationUnreadCounts>;
|
|
69
82
|
private describeNotifications;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
private opensCourse;
|
|
84
|
+
private opensDownload;
|
|
85
|
+
listCourses(actor: Actor): Promise<CourseView[]>;
|
|
86
|
+
private requireCourse;
|
|
87
|
+
getCourse(courseId: string, actor: Actor): Promise<CourseView>;
|
|
88
|
+
listModules(courseId: string, actor: Actor): Promise<Module[]>;
|
|
89
|
+
listActivities(courseId: string, actor: Actor): Promise<ActivityView[]>;
|
|
90
|
+
courseProgress(courseId: string, actor: Actor): Promise<CourseProgressView>;
|
|
91
|
+
listDownloads(actor: Actor): Promise<DownloadView[]>;
|
|
92
|
+
getDownload(downloadId: string, actor: Actor): Promise<{
|
|
77
93
|
download: DownloadView;
|
|
78
94
|
assets: DownloadFile[];
|
|
79
|
-
}
|
|
80
|
-
thumbnailFile(
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
95
|
+
}>;
|
|
96
|
+
thumbnailFile(owner: Owner, id: string, actor: Actor): Promise<string>;
|
|
97
|
+
spaceImageFile(spaceId: string, image: SpaceImage, actor: Actor): Promise<string>;
|
|
98
|
+
activityFile(activityId: string, assetId: string, actor: Actor): Promise<string>;
|
|
99
|
+
downloadFile(downloadId: string, assetId: string, actor: Actor): Promise<string>;
|
|
100
|
+
private seeEvents;
|
|
101
|
+
private requireEvent;
|
|
102
|
+
private eventSummaries;
|
|
103
|
+
private eventSummary;
|
|
104
|
+
getEvent(eventId: string, actor: Actor): Promise<MemberEvent>;
|
|
105
|
+
listEvents(query: MemberEventsQuery, actor: Actor): Promise<Page<MemberEventSummary>>;
|
|
106
|
+
eventCalendar(eventId: string, actor: Actor): Promise<string>;
|
|
107
|
+
eventAttendees(eventId: string, query: {
|
|
108
|
+
page: number;
|
|
109
|
+
pageSize: number;
|
|
110
|
+
}, actor: Actor): Promise<Page<EventAttendee>>;
|
|
111
|
+
eventFile(eventId: string, assetId: string, actor: Actor): Promise<string>;
|
|
112
|
+
directory(communityId: string, query: DirectoryQuery, actor: Actor): Promise<Page<DirectoryEntry>>;
|
|
113
|
+
communityHome(communityId: string, actor: Actor): Promise<CommunityHome>;
|
|
114
|
+
communitySpace(communityId: string, spaceId: string, actor: Actor): Promise<CommunityHomeSpace>;
|
|
87
115
|
private homeSpaces;
|
|
88
116
|
private linkViews;
|
|
89
117
|
}
|