@headless-lms/core 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/dist/assets/events.d.ts +39 -21
  2. package/dist/assets/events.js +1 -1
  3. package/dist/assets/events.js.map +1 -1
  4. package/dist/assets/file-urls.d.ts +20 -0
  5. package/dist/assets/file-urls.js +25 -0
  6. package/dist/assets/file-urls.js.map +1 -0
  7. package/dist/assets/index.d.ts +5 -4
  8. package/dist/assets/index.js +3 -2
  9. package/dist/assets/model.d.ts +2 -2
  10. package/dist/assets/ports.d.ts +45 -15
  11. package/dist/assets/service.d.ts +39 -7
  12. package/dist/assets/service.js +291 -38
  13. package/dist/assets/service.js.map +1 -1
  14. package/dist/automations/actions.d.ts +13 -24
  15. package/dist/automations/actions.js +168 -43
  16. package/dist/automations/actions.js.map +1 -1
  17. package/dist/automations/catalog.d.ts +2 -1
  18. package/dist/automations/catalog.js +229 -13
  19. package/dist/automations/catalog.js.map +1 -1
  20. package/dist/automations/community-derivations.d.ts +14 -0
  21. package/dist/automations/community-derivations.js +439 -0
  22. package/dist/automations/community-derivations.js.map +1 -0
  23. package/dist/automations/community-mail.d.ts +112 -0
  24. package/dist/automations/community-mail.js +90 -0
  25. package/dist/automations/community-mail.js.map +1 -0
  26. package/dist/automations/community-notifications.d.ts +16 -0
  27. package/dist/automations/community-notifications.js +84 -0
  28. package/dist/automations/community-notifications.js.map +1 -0
  29. package/dist/automations/events.d.ts +28 -0
  30. package/dist/automations/index.d.ts +4 -2
  31. package/dist/automations/index.js +3 -2
  32. package/dist/automations/model.d.ts +10 -3
  33. package/dist/automations/model.js +15 -2
  34. package/dist/automations/model.js.map +1 -1
  35. package/dist/automations/ports.d.ts +5 -1
  36. package/dist/automations/schedule.d.ts +6 -0
  37. package/dist/automations/schedule.js +41 -0
  38. package/dist/automations/schedule.js.map +1 -0
  39. package/dist/automations/seeds.d.ts +17 -0
  40. package/dist/automations/seeds.js +235 -0
  41. package/dist/automations/seeds.js.map +1 -0
  42. package/dist/automations/service.d.ts +22 -3
  43. package/dist/automations/service.js +306 -43
  44. package/dist/automations/service.js.map +1 -1
  45. package/dist/content/events.d.ts +631 -19
  46. package/dist/content/events.js +44 -1
  47. package/dist/content/events.js.map +1 -1
  48. package/dist/content/index.d.ts +4 -4
  49. package/dist/content/model.d.ts +2 -2
  50. package/dist/content/ports.d.ts +71 -18
  51. package/dist/content/service.d.ts +57 -18
  52. package/dist/content/service.js +502 -23
  53. package/dist/content/service.js.map +1 -1
  54. package/dist/content/types.d.ts +2 -2
  55. package/dist/discussion/authors.d.ts +10 -0
  56. package/dist/discussion/authors.js +23 -0
  57. package/dist/discussion/authors.js.map +1 -0
  58. package/dist/discussion/chats.d.ts +104 -0
  59. package/dist/discussion/chats.js +798 -0
  60. package/dist/discussion/chats.js.map +1 -0
  61. package/dist/discussion/events.d.ts +619 -56
  62. package/dist/discussion/events.js +106 -3
  63. package/dist/discussion/events.js.map +1 -1
  64. package/dist/discussion/index.d.ts +7 -3
  65. package/dist/discussion/index.js +4 -1
  66. package/dist/discussion/ports.d.ts +288 -27
  67. package/dist/discussion/ports.js +6 -1
  68. package/dist/discussion/ports.js.map +1 -0
  69. package/dist/discussion/posts.d.ts +103 -0
  70. package/dist/discussion/posts.js +723 -0
  71. package/dist/discussion/posts.js.map +1 -0
  72. package/dist/discussion/service.d.ts +32 -10
  73. package/dist/discussion/service.js +293 -78
  74. package/dist/discussion/service.js.map +1 -1
  75. package/dist/entitlements/events.d.ts +178 -11
  76. package/dist/entitlements/events.js +28 -1
  77. package/dist/entitlements/events.js.map +1 -1
  78. package/dist/entitlements/index.d.ts +5 -4
  79. package/dist/entitlements/index.js +2 -1
  80. package/dist/entitlements/model.d.ts +3 -2
  81. package/dist/entitlements/ports.d.ts +124 -11
  82. package/dist/entitlements/rules.d.ts +12 -0
  83. package/dist/entitlements/rules.js +17 -0
  84. package/dist/entitlements/rules.js.map +1 -0
  85. package/dist/entitlements/service.d.ts +54 -3
  86. package/dist/entitlements/service.js +472 -2
  87. package/dist/entitlements/service.js.map +1 -1
  88. package/dist/identity/access.d.ts +6 -0
  89. package/dist/identity/access.js +7 -0
  90. package/dist/identity/access.js.map +1 -0
  91. package/dist/identity/index.d.ts +6 -4
  92. package/dist/identity/index.js +3 -1
  93. package/dist/identity/model.d.ts +2 -1
  94. package/dist/identity/notifications.d.ts +27 -0
  95. package/dist/identity/notifications.js +101 -0
  96. package/dist/identity/notifications.js.map +1 -0
  97. package/dist/identity/ports.d.ts +73 -3
  98. package/dist/identity/service.d.ts +14 -3
  99. package/dist/identity/service.js +62 -5
  100. package/dist/identity/service.js.map +1 -1
  101. package/dist/integrations/model.js +1 -1
  102. package/dist/integrations/model.js.map +1 -1
  103. package/dist/integrations/service.js +2 -2
  104. package/dist/integrations/service.js.map +1 -1
  105. package/dist/organizations/access-scopes.d.ts +19 -0
  106. package/dist/organizations/access-scopes.js +89 -0
  107. package/dist/organizations/access-scopes.js.map +1 -0
  108. package/dist/organizations/events.d.ts +74 -32
  109. package/dist/organizations/events.js +6 -0
  110. package/dist/organizations/events.js.map +1 -1
  111. package/dist/organizations/index.d.ts +7 -6
  112. package/dist/organizations/index.js +4 -3
  113. package/dist/organizations/members.d.ts +8 -5
  114. package/dist/organizations/members.js.map +1 -1
  115. package/dist/organizations/ports.d.ts +14 -11
  116. package/dist/organizations/roles.d.ts +6 -10
  117. package/dist/organizations/roles.js +19 -7
  118. package/dist/organizations/roles.js.map +1 -1
  119. package/dist/organizations/service.d.ts +20 -11
  120. package/dist/organizations/service.js +157 -47
  121. package/dist/organizations/service.js.map +1 -1
  122. package/dist/organizations/types.d.ts +1 -10
  123. package/dist/progress/index.d.ts +2 -2
  124. package/dist/progress/ports.d.ts +6 -1
  125. package/dist/progress/service.d.ts +3 -1
  126. package/dist/progress/service.js +6 -2
  127. package/dist/progress/service.js.map +1 -1
  128. package/dist/reporting/admin/index.d.ts +4 -0
  129. package/dist/reporting/admin/index.js +2 -0
  130. package/dist/reporting/admin/model.d.ts +108 -0
  131. package/dist/reporting/admin/ports.d.ts +27 -0
  132. package/dist/reporting/admin/service.d.ts +22 -0
  133. package/dist/reporting/admin/service.js +38 -0
  134. package/dist/reporting/admin/service.js.map +1 -0
  135. package/dist/reporting/member/index.d.ts +5 -0
  136. package/dist/reporting/member/index.js +2 -0
  137. package/dist/reporting/member/model.d.ts +124 -0
  138. package/dist/reporting/member/ports.d.ts +45 -0
  139. package/dist/reporting/member/service.d.ts +73 -0
  140. package/dist/reporting/member/service.js +286 -0
  141. package/dist/reporting/member/service.js.map +1 -0
  142. package/dist/shared/actor.d.ts +9 -0
  143. package/dist/shared/errors.d.ts +7 -1
  144. package/dist/shared/errors.js +10 -1
  145. package/dist/shared/errors.js.map +1 -1
  146. package/dist/shared/id.d.ts +11 -0
  147. package/dist/shared/id.js +12 -1
  148. package/dist/shared/id.js.map +1 -1
  149. package/dist/shared/mailer.d.ts +4 -1
  150. package/dist/shared/mailer.js.map +1 -1
  151. package/dist/shared/network.d.ts +10 -0
  152. package/dist/shared/network.js +211 -0
  153. package/dist/shared/network.js.map +1 -0
  154. package/dist/types/assets.d.ts +2 -2
  155. package/dist/types/automations.d.ts +10 -2
  156. package/dist/types/content.d.ts +2 -2
  157. package/dist/types/discussion.d.ts +11 -3
  158. package/dist/types/email-templates.d.ts +121 -0
  159. package/dist/types/entitlements.d.ts +2 -2
  160. package/dist/types/identity.d.ts +48 -2
  161. package/dist/types/index.d.ts +9 -9
  162. package/dist/types/ports.d.ts +6 -0
  163. package/dist/types/schemas/assets.d.ts +65 -37
  164. package/dist/types/schemas/assets.js +17 -12
  165. package/dist/types/schemas/assets.js.map +1 -1
  166. package/dist/types/schemas/automations.d.ts +18 -1
  167. package/dist/types/schemas/automations.js +15 -6
  168. package/dist/types/schemas/automations.js.map +1 -1
  169. package/dist/types/schemas/content.d.ts +335 -3
  170. package/dist/types/schemas/content.js +139 -3
  171. package/dist/types/schemas/content.js.map +1 -1
  172. package/dist/types/schemas/discussion.d.ts +370 -3
  173. package/dist/types/schemas/discussion.js +199 -4
  174. package/dist/types/schemas/discussion.js.map +1 -1
  175. package/dist/types/schemas/entitlements.d.ts +36 -2
  176. package/dist/types/schemas/entitlements.js +23 -1
  177. package/dist/types/schemas/entitlements.js.map +1 -1
  178. package/dist/types/schemas/identity.d.ts +111 -1
  179. package/dist/types/schemas/identity.js +55 -2
  180. package/dist/types/schemas/identity.js.map +1 -1
  181. package/dist/types/schemas/index.d.ts +8 -8
  182. package/dist/types/schemas/index.js +8 -8
  183. package/dist/types/schemas/organizations.d.ts +8 -0
  184. package/dist/types/schemas/organizations.js +2 -0
  185. package/dist/types/schemas/organizations.js.map +1 -1
  186. package/dist/types/schemas/shared.d.ts +3 -1
  187. package/dist/types/schemas/shared.js +5 -1
  188. package/dist/types/schemas/shared.js.map +1 -1
  189. package/package.json +2 -2
  190. package/dist/reporting/courses/index.d.ts +0 -4
  191. package/dist/reporting/courses/index.js +0 -2
  192. package/dist/reporting/courses/model.d.ts +0 -24
  193. package/dist/reporting/courses/ports.d.ts +0 -13
  194. package/dist/reporting/courses/service.d.ts +0 -19
  195. package/dist/reporting/courses/service.js +0 -20
  196. package/dist/reporting/courses/service.js.map +0 -1
  197. package/dist/reporting/dashboard/index.d.ts +0 -4
  198. package/dist/reporting/dashboard/index.js +0 -2
  199. package/dist/reporting/dashboard/model.d.ts +0 -14
  200. package/dist/reporting/dashboard/ports.d.ts +0 -13
  201. package/dist/reporting/dashboard/service.d.ts +0 -19
  202. package/dist/reporting/dashboard/service.js +0 -20
  203. package/dist/reporting/dashboard/service.js.map +0 -1
  204. package/dist/reporting/learn/index.d.ts +0 -5
  205. package/dist/reporting/learn/index.js +0 -2
  206. package/dist/reporting/learn/model.d.ts +0 -23
  207. package/dist/reporting/learn/ports.d.ts +0 -43
  208. package/dist/reporting/learn/ports.js +0 -1
  209. package/dist/reporting/learn/service.d.ts +0 -49
  210. package/dist/reporting/learn/service.js +0 -116
  211. package/dist/reporting/learn/service.js.map +0 -1
  212. package/dist/reporting/students/index.d.ts +0 -4
  213. package/dist/reporting/students/index.js +0 -2
  214. package/dist/reporting/students/model.d.ts +0 -51
  215. package/dist/reporting/students/model.js +0 -1
  216. package/dist/reporting/students/ports.d.ts +0 -15
  217. package/dist/reporting/students/ports.js +0 -1
  218. package/dist/reporting/students/service.d.ts +0 -20
  219. package/dist/reporting/students/service.js +0 -23
  220. package/dist/reporting/students/service.js.map +0 -1
  221. /package/dist/reporting/{courses → admin}/model.js +0 -0
  222. /package/dist/reporting/{courses → admin}/ports.js +0 -0
  223. /package/dist/reporting/{dashboard → member}/model.js +0 -0
  224. /package/dist/reporting/{dashboard → member}/ports.js +0 -0
  225. /package/dist/{reporting/learn/model.js → shared/actor.js} +0 -0
package/dist/shared/id.js CHANGED
@@ -30,7 +30,18 @@ const ID_PREFIXES = {
30
30
  automation: "atm",
31
31
  automationRun: "run",
32
32
  comment: "cmt",
33
- commentReport: "crp"
33
+ commentReport: "crp",
34
+ community: "cmy",
35
+ space: "spc",
36
+ topic: "top",
37
+ spaceLink: "slk",
38
+ spaceMember: "spm",
39
+ post: "pst",
40
+ postFlag: "pfl",
41
+ chat: "cht",
42
+ message: "msg",
43
+ messageFlag: "mfl",
44
+ notification: "ntf"
34
45
  };
35
46
  /** A bare KSUID body (27-char base62, time-sortable), no prefix. */
36
47
  function ksuid() {
@@ -1 +1 @@
1
- {"version":3,"file":"id.js","names":[],"sources":["../../src/shared/id.ts"],"sourcesContent":["import KSUID from 'ksuid';\n\n/**\n * Prefixed, KSUID-bodied string ids — `${prefix}_${ksuid}`, e.g. `org_2QZ4mK...`.\n *\n * The body is a real KSUID (27-char base62, 4-byte timestamp + 16 random bytes),\n * so ids are lexicographically time-sortable. The prefix marks the entity type at\n * a glance. A core utility (one implementation, nothing to swap), called directly\n * by core services and used as the Drizzle `.$defaultFn` for every domain id column.\n */\nexport const ID_PREFIXES = {\n organization: 'org',\n user: 'usr',\n student: 'stu',\n orgUser: 'orm',\n invite: 'ivt',\n bundle: 'bun',\n course: 'crs',\n module: 'mod',\n activity: 'act',\n activityAsset: 'aca',\n download: 'dwn',\n downloadAsset: 'dla',\n asset: 'ast',\n entitlement: 'ent',\n progress: 'prg',\n credential: 'crd',\n connection: 'con',\n event: 'evt',\n automation: 'atm',\n automationRun: 'run',\n comment: 'cmt',\n commentReport: 'crp',\n} as const;\n\nexport type IdType = keyof typeof ID_PREFIXES;\n\n/** A bare KSUID body (27-char base62, time-sortable), no prefix. */\nexport function ksuid(): string {\n return KSUID.randomSync().string;\n}\n\n/** Attach an arbitrary prefix to a fresh KSUID — `${prefix}_${ksuid}`. */\nexport function prefixId(prefix: string): string {\n return `${prefix}_${ksuid()}`;\n}\n\n/** Generate a prefixed, time-sortable id for the given domain entity type. */\nexport function genId(type: IdType): string {\n return prefixId(ID_PREFIXES[type]);\n}\n\n/** True when `value` carries the prefix for `type` (shape check only, not existence). */\nexport function isId(type: IdType, value: string): boolean {\n return value.startsWith(`${ID_PREFIXES[type]}_`);\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAa,cAAc;CACzB,cAAc;CACd,MAAM;CACN,SAAS;CACT,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,eAAe;CACf,UAAU;CACV,eAAe;CACf,OAAO;CACP,aAAa;CACb,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,eAAe;CACf,SAAS;CACT,eAAe;AACjB;;AAKA,SAAgB,QAAgB;CAC9B,OAAO,MAAM,WAAW,CAAC,CAAC;AAC5B;;AAGA,SAAgB,SAAS,QAAwB;CAC/C,OAAO,GAAG,OAAO,GAAG,MAAM;AAC5B;;AAGA,SAAgB,MAAM,MAAsB;CAC1C,OAAO,SAAS,YAAY,KAAK;AACnC;;AAGA,SAAgB,KAAK,MAAc,OAAwB;CACzD,OAAO,MAAM,WAAW,GAAG,YAAY,MAAM,EAAE;AACjD"}
1
+ {"version":3,"file":"id.js","names":[],"sources":["../../src/shared/id.ts"],"sourcesContent":["import KSUID from 'ksuid';\n\n/**\n * Prefixed, KSUID-bodied string ids — `${prefix}_${ksuid}`, e.g. `org_2QZ4mK...`.\n *\n * The body is a real KSUID (27-char base62, 4-byte timestamp + 16 random bytes),\n * so ids are lexicographically time-sortable. The prefix marks the entity type at\n * a glance. A core utility (one implementation, nothing to swap), called directly\n * by core services and used as the Drizzle `.$defaultFn` for every domain id column.\n */\nexport const ID_PREFIXES = {\n organization: 'org',\n user: 'usr',\n student: 'stu',\n orgUser: 'orm',\n invite: 'ivt',\n bundle: 'bun',\n course: 'crs',\n module: 'mod',\n activity: 'act',\n activityAsset: 'aca',\n download: 'dwn',\n downloadAsset: 'dla',\n asset: 'ast',\n entitlement: 'ent',\n progress: 'prg',\n credential: 'crd',\n connection: 'con',\n event: 'evt',\n automation: 'atm',\n automationRun: 'run',\n comment: 'cmt',\n commentReport: 'crp',\n community: 'cmy',\n space: 'spc',\n topic: 'top',\n spaceLink: 'slk',\n spaceMember: 'spm',\n post: 'pst',\n postFlag: 'pfl',\n chat: 'cht',\n message: 'msg',\n messageFlag: 'mfl',\n notification: 'ntf',\n} as const;\n\nexport type IdType = keyof typeof ID_PREFIXES;\n\n/** A bare KSUID body (27-char base62, time-sortable), no prefix. */\nexport function ksuid(): string {\n return KSUID.randomSync().string;\n}\n\n/** Attach an arbitrary prefix to a fresh KSUID — `${prefix}_${ksuid}`. */\nexport function prefixId(prefix: string): string {\n return `${prefix}_${ksuid()}`;\n}\n\n/** Generate a prefixed, time-sortable id for the given domain entity type. */\nexport function genId(type: IdType): string {\n return prefixId(ID_PREFIXES[type]);\n}\n\n/** True when `value` carries the prefix for `type` (shape check only, not existence). */\nexport function isId(type: IdType, value: string): boolean {\n return value.startsWith(`${ID_PREFIXES[type]}_`);\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAa,cAAc;CACzB,cAAc;CACd,MAAM;CACN,SAAS;CACT,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,eAAe;CACf,UAAU;CACV,eAAe;CACf,OAAO;CACP,aAAa;CACb,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,eAAe;CACf,SAAS;CACT,eAAe;CACf,WAAW;CACX,OAAO;CACP,OAAO;CACP,WAAW;CACX,aAAa;CACb,MAAM;CACN,UAAU;CACV,MAAM;CACN,SAAS;CACT,aAAa;CACb,cAAc;AAChB;;AAKA,SAAgB,QAAgB;CAC9B,OAAO,MAAM,WAAW,CAAC,CAAC;AAC5B;;AAGA,SAAgB,SAAS,QAAwB;CAC/C,OAAO,GAAG,OAAO,GAAG,MAAM;AAC5B;;AAGA,SAAgB,MAAM,MAAsB;CAC1C,OAAO,SAAS,YAAY,KAAK;AACnC;;AAGA,SAAgB,KAAK,MAAc,OAAwB;CACzD,OAAO,MAAM,WAAW,GAAG,YAAY,MAAM,EAAE;AACjD"}
@@ -6,7 +6,10 @@ import "./ports.js";
6
6
  /** Resolves the recipient/content details a template needs when the
7
7
  * triggering event carries only row ids. Wired by the app layer. */
8
8
  interface MailerLookups {
9
- orgUserEmail(orgId: string, orgUserId: string): Promise<string | null>;
9
+ orgUserPerson(orgId: string, orgUserId: string): Promise<{
10
+ userId: string;
11
+ email: string;
12
+ } | null>;
10
13
  contentInfo(orgId: string, contentId: string): Promise<{
11
14
  id: string;
12
15
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"mailer.js","names":[],"sources":["../../src/shared/mailer.ts"],"sourcesContent":["// Composes a TemplateRenderer with an EmailSender: callers name a template,\n// the mailer resolves content and hands it to the transport.\nimport type {\n EmailSender,\n EmailTemplateId,\n EmailTemplateParams,\n TemplateContext,\n TemplateRenderer,\n} from './ports.js';\nimport type { ContentType } from '../types/schemas/content.js';\n\n/** Resolves the recipient/content details a template needs when the\n * triggering event carries only row ids. Wired by the app layer. */\nexport interface MailerLookups {\n orgUserEmail(orgId: string, orgUserId: string): Promise<string | null>;\n contentInfo(\n orgId: string,\n contentId: string,\n ): Promise<{ id: string; title: string; type: ContentType } | null>;\n}\n\nexport class Mailer {\n constructor(\n private readonly templates: TemplateRenderer,\n private readonly email: EmailSender,\n private readonly ctx: TemplateContext,\n ) {}\n\n async send<K extends EmailTemplateId>(\n to: string,\n id: K,\n params: EmailTemplateParams[K],\n ctx?: Partial<TemplateContext>,\n ): Promise<void> {\n const content = await this.templates.render(id, { ...this.ctx, ...ctx }, params);\n await this.email.send({ to, subject: content.subject, text: content.text, html: content.html });\n }\n}\n"],"mappings":";AAqBA,IAAa,SAAb,MAAoB;CAEC;CACA;CACA;CAHnB,YACE,WACA,OACA,KACA;EAHiB,KAAA,YAAA;EACA,KAAA,QAAA;EACA,KAAA,MAAA;CAChB;CAEH,MAAM,KACJ,IACA,IACA,QACA,KACe;EACf,MAAM,UAAU,MAAM,KAAK,UAAU,OAAO,IAAI;GAAE,GAAG,KAAK;GAAK,GAAG;EAAI,GAAG,MAAM;EAC/E,MAAM,KAAK,MAAM,KAAK;GAAE;GAAI,SAAS,QAAQ;GAAS,MAAM,QAAQ;GAAM,MAAM,QAAQ;EAAK,CAAC;CAChG;AACF"}
1
+ {"version":3,"file":"mailer.js","names":[],"sources":["../../src/shared/mailer.ts"],"sourcesContent":["// Composes a TemplateRenderer with an EmailSender: callers name a template,\n// the mailer resolves content and hands it to the transport.\nimport type {\n EmailSender,\n EmailTemplateId,\n EmailTemplateParams,\n TemplateContext,\n TemplateRenderer,\n} from './ports.js';\nimport type { ContentType } from '../types/schemas/content.js';\n\n/** Resolves the recipient/content details a template needs when the\n * triggering event carries only row ids. Wired by the app layer. */\nexport interface MailerLookups {\n orgUserPerson(\n orgId: string,\n orgUserId: string,\n ): Promise<{ userId: string; email: string } | null>;\n contentInfo(\n orgId: string,\n contentId: string,\n ): Promise<{ id: string; title: string; type: ContentType } | null>;\n}\n\nexport class Mailer {\n constructor(\n private readonly templates: TemplateRenderer,\n private readonly email: EmailSender,\n private readonly ctx: TemplateContext,\n ) {}\n\n async send<K extends EmailTemplateId>(\n to: string,\n id: K,\n params: EmailTemplateParams[K],\n ctx?: Partial<TemplateContext>,\n ): Promise<void> {\n const content = await this.templates.render(id, { ...this.ctx, ...ctx }, params);\n await this.email.send({ to, subject: content.subject, text: content.text, html: content.html });\n }\n}\n"],"mappings":";AAwBA,IAAa,SAAb,MAAoB;CAEC;CACA;CACA;CAHnB,YACE,WACA,OACA,KACA;EAHiB,KAAA,YAAA;EACA,KAAA,QAAA;EACA,KAAA,MAAA;CAChB;CAEH,MAAM,KACJ,IACA,IACA,QACA,KACe;EACf,MAAM,UAAU,MAAM,KAAK,UAAU,OAAO,IAAI;GAAE,GAAG,KAAK;GAAK,GAAG;EAAI,GAAG,MAAM;EAC/E,MAAM,KAAK,MAAM,KAAK;GAAE;GAAI,SAAS,QAAQ;GAAS,MAAM,QAAQ;GAAM,MAAM,QAAQ;EAAK,CAAC;CAChG;AACF"}
@@ -0,0 +1,10 @@
1
+ //#region src/shared/network.d.ts
2
+ /** True when `address` is an IP literal; brackets and an IPv6 zone are allowed. */
3
+ declare function isIpLiteral(address: string): boolean;
4
+ /** True only for an IP literal routable on the public internet; anything unparseable is not public. */
5
+ declare function isPublicIp(address: string): boolean;
6
+ /** False for localhost names and for IP literals outside the public internet. */
7
+ declare function isPublicHostname(hostname: string): boolean;
8
+ //#endregion
9
+ export { isIpLiteral, isPublicHostname, isPublicIp };
10
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1,211 @@
1
+ //#region src/shared/network.ts
2
+ const NON_PUBLIC_IPV4 = [
3
+ [ipv4Number([
4
+ 0,
5
+ 0,
6
+ 0,
7
+ 0
8
+ ]), 8],
9
+ [ipv4Number([
10
+ 10,
11
+ 0,
12
+ 0,
13
+ 0
14
+ ]), 8],
15
+ [ipv4Number([
16
+ 100,
17
+ 64,
18
+ 0,
19
+ 0
20
+ ]), 10],
21
+ [ipv4Number([
22
+ 127,
23
+ 0,
24
+ 0,
25
+ 0
26
+ ]), 8],
27
+ [ipv4Number([
28
+ 169,
29
+ 254,
30
+ 0,
31
+ 0
32
+ ]), 16],
33
+ [ipv4Number([
34
+ 172,
35
+ 16,
36
+ 0,
37
+ 0
38
+ ]), 12],
39
+ [ipv4Number([
40
+ 192,
41
+ 0,
42
+ 0,
43
+ 0
44
+ ]), 24],
45
+ [ipv4Number([
46
+ 192,
47
+ 0,
48
+ 2,
49
+ 0
50
+ ]), 24],
51
+ [ipv4Number([
52
+ 192,
53
+ 88,
54
+ 99,
55
+ 0
56
+ ]), 24],
57
+ [ipv4Number([
58
+ 192,
59
+ 168,
60
+ 0,
61
+ 0
62
+ ]), 16],
63
+ [ipv4Number([
64
+ 198,
65
+ 18,
66
+ 0,
67
+ 0
68
+ ]), 15],
69
+ [ipv4Number([
70
+ 198,
71
+ 51,
72
+ 100,
73
+ 0
74
+ ]), 24],
75
+ [ipv4Number([
76
+ 203,
77
+ 0,
78
+ 113,
79
+ 0
80
+ ]), 24],
81
+ [ipv4Number([
82
+ 224,
83
+ 0,
84
+ 0,
85
+ 0
86
+ ]), 4],
87
+ [ipv4Number([
88
+ 240,
89
+ 0,
90
+ 0,
91
+ 0
92
+ ]), 4]
93
+ ];
94
+ function ipv4Number(octets) {
95
+ return (octets[0] << 24 | octets[1] << 16 | octets[2] << 8 | octets[3]) >>> 0;
96
+ }
97
+ function parseIpv4(value) {
98
+ const parts = value.split(".");
99
+ if (parts.length !== 4 || !parts.every((part) => /^\d{1,3}$/.test(part))) return null;
100
+ const octets = parts.map(Number);
101
+ return octets.every((octet) => octet <= 255) ? octets : null;
102
+ }
103
+ function parseHextets(part) {
104
+ if (part === "") return [];
105
+ const groups = part.split(":");
106
+ const hextets = [];
107
+ for (const [i, group] of groups.entries()) if (i === groups.length - 1 && group.includes(".")) {
108
+ const octets = parseIpv4(group);
109
+ if (!octets) return null;
110
+ hextets.push(octets[0] << 8 | octets[1], octets[2] << 8 | octets[3]);
111
+ } else if (/^[0-9a-f]{1,4}$/i.test(group)) hextets.push(parseInt(group, 16));
112
+ else return null;
113
+ return hextets;
114
+ }
115
+ function parseIpv6(value) {
116
+ const halves = value.split("%")[0].split("::");
117
+ if (halves.length > 2) return null;
118
+ const head = parseHextets(halves[0]);
119
+ const tail = halves.length === 2 ? parseHextets(halves[1]) : [];
120
+ if (!head || !tail) return null;
121
+ const missing = 8 - head.length - tail.length;
122
+ if (halves.length === 2 ? missing < 1 : missing !== 0) return null;
123
+ return [
124
+ ...head,
125
+ ...new Array(missing).fill(0),
126
+ ...tail
127
+ ].flatMap((hextet) => [hextet >> 8, hextet & 255]);
128
+ }
129
+ function isPublicIpv4(octets) {
130
+ const address = ipv4Number(octets);
131
+ return NON_PUBLIC_IPV4.every(([network, bits]) => {
132
+ const mask = bits === 0 ? 0 : -1 << 32 - bits >>> 0;
133
+ return (address & mask) >>> 0 !== network;
134
+ });
135
+ }
136
+ function startsWith(bytes, prefix) {
137
+ return prefix.every((byte, i) => bytes[i] === byte);
138
+ }
139
+ function isPublicIpv6(bytes) {
140
+ if (bytes.slice(0, 10).every((b) => b === 0)) {
141
+ const mapped = bytes[10] === 255 && bytes[11] === 255;
142
+ const compatible = bytes[10] === 0 && bytes[11] === 0;
143
+ return (mapped || compatible) && isPublicIpv4(bytes.slice(12));
144
+ }
145
+ if (startsWith(bytes, [
146
+ 0,
147
+ 100,
148
+ 255,
149
+ 155,
150
+ 0,
151
+ 0,
152
+ 0,
153
+ 0,
154
+ 0,
155
+ 0,
156
+ 0,
157
+ 0
158
+ ])) return isPublicIpv4(bytes.slice(12));
159
+ if (startsWith(bytes, [32, 2])) return isPublicIpv4(bytes.slice(2, 6));
160
+ const [first = 0, second = 0] = bytes;
161
+ return !((first & 254) === 252 || first === 254 && (second & 128) === 128 || first === 255 || startsWith(bytes, [
162
+ 0,
163
+ 100,
164
+ 255,
165
+ 155,
166
+ 0,
167
+ 1
168
+ ]) || startsWith(bytes, [
169
+ 1,
170
+ 0,
171
+ 0,
172
+ 0,
173
+ 0,
174
+ 0,
175
+ 0,
176
+ 0
177
+ ]) || startsWith(bytes, [
178
+ 32,
179
+ 1,
180
+ 13,
181
+ 184
182
+ ]) || startsWith(bytes, [
183
+ 32,
184
+ 1,
185
+ 0,
186
+ 0
187
+ ]));
188
+ }
189
+ /** True when `address` is an IP literal; brackets and an IPv6 zone are allowed. */
190
+ function isIpLiteral(address) {
191
+ const bare = address.replace(/^\[(.*)\]$/, "$1");
192
+ return parseIpv4(bare) !== null || parseIpv6(bare) !== null;
193
+ }
194
+ /** True only for an IP literal routable on the public internet; anything unparseable is not public. */
195
+ function isPublicIp(address) {
196
+ const bare = address.replace(/^\[(.*)\]$/, "$1");
197
+ const v4 = parseIpv4(bare);
198
+ if (v4) return isPublicIpv4(v4);
199
+ const v6 = parseIpv6(bare);
200
+ return v6 !== null && isPublicIpv6(v6);
201
+ }
202
+ /** False for localhost names and for IP literals outside the public internet. */
203
+ function isPublicHostname(hostname) {
204
+ const host = hostname.toLowerCase().replace(/\.$/, "");
205
+ if (host === "localhost" || host.endsWith(".localhost")) return false;
206
+ return isIpLiteral(host) ? isPublicIp(host) : true;
207
+ }
208
+ //#endregion
209
+ export { isIpLiteral, isPublicHostname, isPublicIp };
210
+
211
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","names":[],"sources":["../../src/shared/network.ts"],"sourcesContent":["const NON_PUBLIC_IPV4: ReadonlyArray<readonly [number, number]> = [\n [ipv4Number([0, 0, 0, 0]), 8],\n [ipv4Number([10, 0, 0, 0]), 8],\n [ipv4Number([100, 64, 0, 0]), 10],\n [ipv4Number([127, 0, 0, 0]), 8],\n [ipv4Number([169, 254, 0, 0]), 16],\n [ipv4Number([172, 16, 0, 0]), 12],\n [ipv4Number([192, 0, 0, 0]), 24],\n [ipv4Number([192, 0, 2, 0]), 24],\n [ipv4Number([192, 88, 99, 0]), 24],\n [ipv4Number([192, 168, 0, 0]), 16],\n [ipv4Number([198, 18, 0, 0]), 15],\n [ipv4Number([198, 51, 100, 0]), 24],\n [ipv4Number([203, 0, 113, 0]), 24],\n [ipv4Number([224, 0, 0, 0]), 4],\n [ipv4Number([240, 0, 0, 0]), 4],\n];\n\nfunction ipv4Number(octets: number[]): number {\n return ((octets[0]! << 24) | (octets[1]! << 16) | (octets[2]! << 8) | octets[3]!) >>> 0;\n}\n\nfunction parseIpv4(value: string): number[] | null {\n const parts = value.split('.');\n if (parts.length !== 4 || !parts.every((part) => /^\\d{1,3}$/.test(part))) {\n return null;\n }\n const octets = parts.map(Number);\n return octets.every((octet) => octet <= 255) ? octets : null;\n}\n\nfunction parseHextets(part: string): number[] | null {\n if (part === '') {\n return [];\n }\n const groups = part.split(':');\n const hextets: number[] = [];\n for (const [i, group] of groups.entries()) {\n if (i === groups.length - 1 && group.includes('.')) {\n const octets = parseIpv4(group);\n if (!octets) {\n return null;\n }\n hextets.push((octets[0]! << 8) | octets[1]!, (octets[2]! << 8) | octets[3]!);\n } else if (/^[0-9a-f]{1,4}$/i.test(group)) {\n hextets.push(parseInt(group, 16));\n } else {\n return null;\n }\n }\n return hextets;\n}\n\nfunction parseIpv6(value: string): number[] | null {\n const address = value.split('%')[0]!;\n const halves = address.split('::');\n if (halves.length > 2) {\n return null;\n }\n const head = parseHextets(halves[0]!);\n const tail = halves.length === 2 ? parseHextets(halves[1]!) : [];\n if (!head || !tail) {\n return null;\n }\n const missing = 8 - head.length - tail.length;\n if (halves.length === 2 ? missing < 1 : missing !== 0) {\n return null;\n }\n const hextets = [...head, ...new Array<number>(missing).fill(0), ...tail];\n return hextets.flatMap((hextet) => [hextet >> 8, hextet & 0xff]);\n}\n\nfunction isPublicIpv4(octets: number[]): boolean {\n const address = ipv4Number(octets);\n return NON_PUBLIC_IPV4.every(([network, bits]) => {\n const mask = bits === 0 ? 0 : (~0 << (32 - bits)) >>> 0;\n return (address & mask) >>> 0 !== network;\n });\n}\n\nfunction startsWith(bytes: number[], prefix: number[]): boolean {\n return prefix.every((byte, i) => bytes[i] === byte);\n}\n\nfunction isPublicIpv6(bytes: number[]): boolean {\n if (bytes.slice(0, 10).every((b) => b === 0)) {\n const mapped = bytes[10] === 0xff && bytes[11] === 0xff;\n const compatible = bytes[10] === 0 && bytes[11] === 0;\n return (mapped || compatible) && isPublicIpv4(bytes.slice(12));\n }\n if (startsWith(bytes, [0x00, 0x64, 0xff, 0x9b, 0, 0, 0, 0, 0, 0, 0, 0])) {\n return isPublicIpv4(bytes.slice(12));\n }\n if (startsWith(bytes, [0x20, 0x02])) {\n return isPublicIpv4(bytes.slice(2, 6));\n }\n const [first = 0, second = 0] = bytes;\n return !(\n (first & 0xfe) === 0xfc ||\n (first === 0xfe && (second & 0x80) === 0x80) ||\n first === 0xff ||\n startsWith(bytes, [0x00, 0x64, 0xff, 0x9b, 0x00, 0x01]) ||\n startsWith(bytes, [0x01, 0x00, 0, 0, 0, 0, 0, 0]) ||\n startsWith(bytes, [0x20, 0x01, 0x0d, 0xb8]) ||\n startsWith(bytes, [0x20, 0x01, 0x00, 0x00])\n );\n}\n\n/** True when `address` is an IP literal; brackets and an IPv6 zone are allowed. */\nexport function isIpLiteral(address: string): boolean {\n const bare = address.replace(/^\\[(.*)\\]$/, '$1');\n return parseIpv4(bare) !== null || parseIpv6(bare) !== null;\n}\n\n/** True only for an IP literal routable on the public internet; anything unparseable is not public. */\nexport function isPublicIp(address: string): boolean {\n const bare = address.replace(/^\\[(.*)\\]$/, '$1');\n const v4 = parseIpv4(bare);\n if (v4) {\n return isPublicIpv4(v4);\n }\n const v6 = parseIpv6(bare);\n return v6 !== null && isPublicIpv6(v6);\n}\n\n/** False for localhost names and for IP literals outside the public internet. */\nexport function isPublicHostname(hostname: string): boolean {\n const host = hostname.toLowerCase().replace(/\\.$/, '');\n if (host === 'localhost' || host.endsWith('.localhost')) {\n return false;\n }\n return isIpLiteral(host) ? isPublicIp(host) : true;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { Asset, AssetKind, AssetStatus, AssetsQuery, DownloadTicket, RequestUploadInput, UploadTicket } from "./schemas/assets.js";
2
- export type { Asset, AssetKind, AssetStatus, AssetsQuery, DownloadTicket, RequestUploadInput, UploadTicket };
1
+ import { Asset, AssetKind, AssetSource, AssetStatus, AssetUrls, AssetView, AssetsQuery, RequestUploadInput, UploadTicket } from "./schemas/assets.js";
2
+ export type { Asset, AssetKind, AssetSource, AssetStatus, AssetUrls, AssetView, AssetsQuery, RequestUploadInput, UploadTicket };
@@ -1,5 +1,5 @@
1
1
  import { DomainEvent } from "./shared.js";
2
- import { Automation, AutomationAction, AutomationActionResult, AutomationKind, AutomationRun, AutomationRunStatus, AutomationRunsQuery, AutomationTrigger, AutomationsQuery, AvailableAction, AvailableActions, AvailableTriggers, CreateAutomationInput, CreateWebhookInput, CreatedWebhook, DeliverWebhookInput, UpdateAutomationInput, UpdateWebhookInput, Webhook, WebhookSecret } from "./schemas/automations.js";
2
+ import { Automation, AutomationAction, AutomationActionResult, AutomationKind, AutomationRun, AutomationRunStatus, AutomationRunsQuery, AutomationSource, AutomationTrigger, AutomationsQuery, AvailableAction, AvailableActions, AvailableTriggers, CreateAutomationInput, CreateWebhookInput, CreatedWebhook, DeliverWebhookInput, UpdateAutomationInput, UpdateWebhookInput, Webhook, WebhookSecret } from "./schemas/automations.js";
3
3
  //#region src/types/automations.d.ts
4
4
  interface AutomationDispatch {
5
5
  runId: string;
@@ -8,15 +8,23 @@ interface AutomationDispatch {
8
8
  actions: AutomationAction[];
9
9
  event: DomainEvent;
10
10
  }
11
+ interface ScheduledAutomation {
12
+ orgId: string;
13
+ automationId: string;
14
+ cron: string;
15
+ }
11
16
  interface AutomationExecutor {
12
17
  runAction(d: AutomationDispatch, index: number): Promise<AutomationActionResult>;
13
18
  finalize(d: AutomationDispatch, results: AutomationActionResult[]): Promise<void>;
19
+ listSchedules?(): Promise<ScheduledAutomation[]>;
20
+ fireSchedule?(orgId: string, automationId: string, firedAt: Date): Promise<void>;
14
21
  }
15
22
  interface AutomationEngine {
16
23
  register(executor: AutomationExecutor): void;
17
24
  dispatch(d: AutomationDispatch): Promise<void>;
18
25
  start(): Promise<void>;
19
26
  stop(): Promise<void>;
27
+ syncSchedules?(): Promise<void>;
20
28
  }
21
29
  interface WebhookRequest {
22
30
  url: string;
@@ -30,5 +38,5 @@ interface WebhookSender {
30
38
  send(request: WebhookRequest): Promise<WebhookResponse>;
31
39
  }
32
40
  //#endregion
33
- export { type Automation, type AutomationAction, type AutomationActionResult, AutomationDispatch, AutomationEngine, AutomationExecutor, type AutomationKind, type AutomationRun, type AutomationRunStatus, type AutomationRunsQuery, type AutomationTrigger, type AutomationsQuery, type AvailableAction, type AvailableActions, type AvailableTriggers, type CreateAutomationInput, type CreateWebhookInput, type CreatedWebhook, type DeliverWebhookInput, type UpdateAutomationInput, type UpdateWebhookInput, type Webhook, WebhookRequest, WebhookResponse, type WebhookSecret, WebhookSender };
41
+ export { type Automation, type AutomationAction, type AutomationActionResult, AutomationDispatch, AutomationEngine, AutomationExecutor, type AutomationKind, type AutomationRun, type AutomationRunStatus, type AutomationRunsQuery, type AutomationSource, type AutomationTrigger, type AutomationsQuery, type AvailableAction, type AvailableActions, type AvailableTriggers, type CreateAutomationInput, type CreateWebhookInput, type CreatedWebhook, type DeliverWebhookInput, ScheduledAutomation, type UpdateAutomationInput, type UpdateWebhookInput, type Webhook, WebhookRequest, WebhookResponse, type WebhookSecret, WebhookSender };
34
42
  //# sourceMappingURL=automations.d.ts.map
@@ -1,2 +1,2 @@
1
- import { Activity, ActivityAsset, ActivitySettings, AddDownloadAssetInput, Bundle, BundleItem, ContentItem, ContentType, Course, CourseSettings, CourseStatus, CreateBundleInput, CreateCourseInput, CreateDownloadInput, Download, DownloadAsset, DownloadStatus, ListBundlesQuery, ListCoursesQuery, ListDownloadsQuery, Module, ReorderDownloadAssetsInput, SaveActivityInput, UpdateBundleInput, UpdateCourseInput, UpdateDownloadInput } from "./schemas/content.js";
2
- export type { Activity, ActivityAsset, ActivitySettings, AddDownloadAssetInput, Bundle, BundleItem, ContentItem, ContentType, Course, CourseSettings, CourseStatus, CreateBundleInput, CreateCourseInput, CreateDownloadInput, Download, DownloadAsset, DownloadStatus, ListBundlesQuery, ListCoursesQuery, ListDownloadsQuery, Module, ReorderDownloadAssetsInput, SaveActivityInput, UpdateBundleInput, UpdateCourseInput, UpdateDownloadInput };
1
+ import { Activity, ActivityAsset, ActivitySettings, ActivityView, AddDownloadAssetInput, AddSpaceLinkInput, Bundle, BundleItem, Community, CommunitySettings, CommunityStatus, CommunityView, ContentItem, ContentType, Course, CourseSettings, CourseStatus, CourseView, CreateBundleInput, CreateCommunityInput, CreateCourseInput, CreateDownloadInput, CreateSpaceInput, DmSettings, Download, DownloadAsset, DownloadFile, DownloadStatus, DownloadView, ListBundlesQuery, ListCommunitiesQuery, ListCoursesQuery, ListDownloadsQuery, Module, PatchDmSettingsInput, ReorderDownloadAssetsInput, SaveActivityInput, SetSpaceTopicsInput, Space, SpaceAccessRule, SpaceDetail, SpaceLink, SpaceSettings, SpaceTopic, UpdateBundleInput, UpdateCommunityInput, UpdateCourseInput, UpdateDownloadInput, UpdateSpaceInput } from "./schemas/content.js";
2
+ export type { Activity, ActivityAsset, ActivitySettings, ActivityView, AddDownloadAssetInput, AddSpaceLinkInput, Bundle, BundleItem, Community, CommunitySettings, CommunityStatus, CommunityView, ContentItem, ContentType, Course, CourseSettings, CourseStatus, CourseView, CreateBundleInput, CreateCommunityInput, CreateCourseInput, CreateDownloadInput, CreateSpaceInput, DmSettings, Download, DownloadAsset, DownloadFile, DownloadStatus, DownloadView, ListBundlesQuery, ListCommunitiesQuery, ListCoursesQuery, ListDownloadsQuery, Module, PatchDmSettingsInput, ReorderDownloadAssetsInput, SaveActivityInput, SetSpaceTopicsInput, Space, SpaceAccessRule, SpaceDetail, SpaceLink, SpaceSettings, SpaceTopic, UpdateBundleInput, UpdateCommunityInput, UpdateCourseInput, UpdateDownloadInput, UpdateSpaceInput };
@@ -1,12 +1,14 @@
1
1
  import { Page } from "./shared.js";
2
2
  import { Role } from "./schemas/organizations.js";
3
3
  import "./organizations.js";
4
- import { ActivityCommentsRule, CommentListItem, CommentReaction, CommentReportSummary, CommentSettings, CommentStatus, CommentView, CommentsConfig, ListCommentsQuery, ReactionCounts, ReactionEmoji } from "./schemas/discussion.js";
4
+ import { ActivityCommentsRule, BlockedUser, Chat, ChatKind, ChatLastMessage, ChatStatus, ChatUser, CommentFlagResolution, CommentListItem, CommentReaction, CommentReportSummary, CommentSettings, CommentStatus, CommentView, CommentsConfig, FlaggedComment, ListCommentsQuery, Message, MessageAttachment, MessageFile, MessageFlag, MessageFlagResolution, MessageReaction, MessageView, Post, PostBookmark, PostFlag, PostFlagResolution, PostFollow, PostReaction, PostStatus, PostView, ReactionCounts, ReactionEmoji } from "./schemas/discussion.js";
5
5
  //#region src/types/discussion.d.ts
6
6
  interface Comment {
7
7
  readonly id: string;
8
8
  readonly orgId: string;
9
- readonly activityId: string;
9
+ readonly activityId: string | null;
10
+ readonly postId: string | null;
11
+ readonly communityId: string | null;
10
12
  readonly parentId: string | null;
11
13
  readonly orgUserId: string;
12
14
  body: string;
@@ -19,7 +21,11 @@ interface CommentAuthor {
19
21
  id: string;
20
22
  firstName: string | null;
21
23
  lastName: string | null;
24
+ displayName: string | null;
25
+ headline: string | null;
22
26
  image: string | null;
27
+ imageAssetId: string | null;
28
+ imageUrl: string | null;
23
29
  role: Role;
24
30
  }
25
31
  interface CommentReport {
@@ -29,9 +35,11 @@ interface CommentReport {
29
35
  readonly orgUserId: string;
30
36
  readonly reason: string;
31
37
  resolvedAt: Date | null;
38
+ resolution: 'dismissed' | 'removed' | null;
39
+ resolvedBy: string | null;
32
40
  readonly createdAt: Date;
33
41
  updatedAt: Date;
34
42
  }
35
43
  //#endregion
36
- export { type ActivityCommentsRule, Comment, CommentAuthor, type CommentListItem, type CommentReaction, CommentReport, type CommentReportSummary, type CommentSettings, type CommentStatus, type CommentView, type CommentsConfig, type ListCommentsQuery, type Page, type ReactionCounts, type ReactionEmoji };
44
+ export { type ActivityCommentsRule, type BlockedUser, type Chat, type ChatKind, type ChatLastMessage, type ChatStatus, type ChatUser, Comment, CommentAuthor, type CommentFlagResolution, type CommentListItem, type CommentReaction, CommentReport, type CommentReportSummary, type CommentSettings, type CommentStatus, type CommentView, type CommentsConfig, type FlaggedComment, type ListCommentsQuery, type Message, type MessageAttachment, type MessageFile, type MessageFlag, type MessageFlagResolution, type MessageReaction, type MessageView, type Page, type Post, type PostBookmark, type PostFlag, type PostFlagResolution, type PostFollow, type PostReaction, type PostStatus, type PostView, type ReactionCounts, type ReactionEmoji };
37
45
  //# sourceMappingURL=discussion.d.ts.map
@@ -47,6 +47,127 @@ interface EmailTemplateParams {
47
47
  courseCompleted: {
48
48
  courseTitle: string;
49
49
  };
50
+ welcomeToCommunity: {
51
+ communityTitle: string;
52
+ communityId: string;
53
+ spaceNames: string[];
54
+ };
55
+ membershipEndingSoon: {
56
+ communityTitle: string;
57
+ communityId: string;
58
+ expiresAt: string;
59
+ };
60
+ membershipEnded: {
61
+ communityTitle: string;
62
+ communityId: string;
63
+ };
64
+ newPostInSpace: {
65
+ spaceName: string;
66
+ postTitle: string;
67
+ authorName: string;
68
+ excerpt: string;
69
+ postId: string;
70
+ communityId: string;
71
+ };
72
+ yourPostWasPublished: {
73
+ postTitle: string;
74
+ spaceName: string;
75
+ postId: string;
76
+ communityId: string;
77
+ };
78
+ yourPostWasRemoved: {
79
+ postTitle: string;
80
+ spaceName: string;
81
+ spaceId: string;
82
+ communityId: string;
83
+ };
84
+ newCommentOnPost: {
85
+ postTitle: string;
86
+ commenterName: string;
87
+ excerpt: string;
88
+ commentId: string;
89
+ postId: string;
90
+ communityId: string;
91
+ };
92
+ replyToYourComment: {
93
+ postTitle: string;
94
+ commenterName: string;
95
+ excerpt: string;
96
+ commentId: string;
97
+ postId: string;
98
+ communityId: string;
99
+ };
100
+ yourCommentWasRemoved: {
101
+ postTitle: string;
102
+ postId: string;
103
+ communityId: string;
104
+ };
105
+ requestApproved: {
106
+ spaceName: string;
107
+ spaceId: string;
108
+ communityId: string;
109
+ };
110
+ requestDeclined: {
111
+ spaceName: string;
112
+ communityId: string;
113
+ };
114
+ invitedToSpace: {
115
+ spaceName: string;
116
+ inviterName: string;
117
+ spaceId: string;
118
+ communityId: string;
119
+ };
120
+ messageRequest: {
121
+ senderName: string;
122
+ excerpt: string;
123
+ chatId: string;
124
+ communityId: string;
125
+ };
126
+ newMessage: {
127
+ senderName: string;
128
+ chatTitle: string;
129
+ excerpt: string;
130
+ chatId: string;
131
+ communityId: string;
132
+ };
133
+ addedToGroupChat: {
134
+ adderName: string;
135
+ participantNames: string[];
136
+ chatId: string;
137
+ communityId: string;
138
+ };
139
+ youAreNowAModerator: {
140
+ communityTitles: string[];
141
+ };
142
+ digest: {
143
+ communityTitle: string;
144
+ communityId: string;
145
+ };
146
+ postAwaitingReview: {
147
+ spaceName: string;
148
+ postTitle: string;
149
+ authorName: string;
150
+ spaceId: string;
151
+ communityId: string;
152
+ };
153
+ joinRequest: {
154
+ spaceName: string;
155
+ memberName: string;
156
+ seatsLeft: string;
157
+ spaceId: string;
158
+ communityId: string;
159
+ };
160
+ somethingWasFlagged: {
161
+ spaceName: string;
162
+ excerpt: string;
163
+ reason: string;
164
+ spaceId: string;
165
+ communityId: string;
166
+ };
167
+ messageWasFlagged: {
168
+ reason: string;
169
+ communityId: string;
170
+ };
50
171
  }
51
172
  type EmailTemplateId = keyof EmailTemplateParams;
52
173
  /** Resolves a template + data to rendered content. Deployment-swappable;
@@ -1,3 +1,3 @@
1
1
  import { Page } from "./shared.js";
2
- import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput } from "./schemas/entitlements.js";
3
- export type { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, Page };
2
+ import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "./schemas/entitlements.js";
3
+ export type { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, Page, SpaceMember, SpaceMemberSource, SpaceMemberStatus };
@@ -1,4 +1,4 @@
1
- import { CreateUserInput, ProvisionUserInput, UpdateUserInput } from "./schemas/identity.js";
1
+ import { CreateUserInput, Notification, NotificationKind, NotificationPreference, ProvisionUserInput, UpdateUserInput, UserProfile, UserProfileView } from "./schemas/identity.js";
2
2
  //#region src/types/identity.d.ts
3
3
  interface User {
4
4
  readonly id: string;
@@ -32,6 +32,52 @@ interface AccountProvisioner {
32
32
  delete(externalId: string): Promise<void>;
33
33
  }
34
34
  type UserId = string;
35
+ type HeaderBag = Record<string, string | string[] | undefined>;
36
+ type AccessGrant = {
37
+ userId: string;
38
+ orgId: string;
39
+ scopes: string[];
40
+ clientId: string;
41
+ };
42
+ type AccessRequest = {
43
+ method: string;
44
+ url: string;
45
+ headers: HeaderBag;
46
+ };
47
+ interface AccessTokenVerifier {
48
+ verifyAccess(request: AccessRequest): Promise<AccessGrant | null>;
49
+ }
50
+ type ConnectedApp = {
51
+ clientId: string;
52
+ name: string;
53
+ iconUrl: string | null;
54
+ scopes: string[];
55
+ connectedAt: Date;
56
+ };
57
+ type ApiKeySummary = {
58
+ id: string;
59
+ name: string | null;
60
+ start: string | null;
61
+ scopes: string[];
62
+ createdAt: Date;
63
+ lastUsedAt: Date | null;
64
+ };
65
+ type CreatedApiKey = ApiKeySummary & {
66
+ key: string;
67
+ };
68
+ type NewApiKey = {
69
+ authUserId: string;
70
+ orgId: string;
71
+ name: string;
72
+ scopes: string[];
73
+ };
74
+ interface AppAccessAdmin {
75
+ listConnectedApps(headers: HeaderBag, orgId: string): Promise<ConnectedApp[]>;
76
+ revokeConnectedApp(headers: HeaderBag, orgId: string, clientId: string): Promise<void>;
77
+ listApiKeys(headers: HeaderBag, orgId: string): Promise<ApiKeySummary[]>;
78
+ createApiKey(input: NewApiKey): Promise<CreatedApiKey>;
79
+ deleteApiKey(headers: HeaderBag, orgId: string, keyId: string): Promise<void>;
80
+ }
35
81
  //#endregion
36
- export { AccountProvisioner, ActiveSession, type CreateUserInput, type ProvisionUserInput, SessionVerifier, type UpdateUserInput, User, UserId };
82
+ export { AccessGrant, AccessRequest, AccessTokenVerifier, AccountProvisioner, ActiveSession, ApiKeySummary, AppAccessAdmin, ConnectedApp, type CreateUserInput, CreatedApiKey, HeaderBag, NewApiKey, type Notification, type NotificationKind, type NotificationPreference, type ProvisionUserInput, SessionVerifier, type UpdateUserInput, User, UserId, type UserProfile, type UserProfileView };
37
83
  //# sourceMappingURL=identity.d.ts.map
@@ -1,23 +1,23 @@
1
1
  import { ContractNewDomainEvent, DomainEvent, EventMetadata, JsonValue, NewDomainEvent, Page } from "./shared.js";
2
2
  import { EventDefinition, EventParseResult, MakeEventInput } from "./events.js";
3
3
  import { EmailMessage, EmailSender, Logger, ObjectStorage, PresignDownloadInput, PresignedUpload, StoredObjectInfo } from "./ports.js";
4
- import { Activity, ActivityAsset, ActivitySettings, AddDownloadAssetInput, Bundle, BundleItem, ContentItem, ContentType, Course, CourseSettings, CourseStatus, CreateBundleInput, CreateCourseInput, CreateDownloadInput, Download, DownloadAsset, DownloadStatus, ListBundlesQuery, ListCoursesQuery, ListDownloadsQuery, Module, ReorderDownloadAssetsInput, SaveActivityInput, UpdateBundleInput, UpdateCourseInput, UpdateDownloadInput } from "./schemas/content.js";
4
+ import { Activity, ActivityAsset, ActivitySettings, ActivityView, AddDownloadAssetInput, AddSpaceLinkInput, Bundle, BundleItem, Community, CommunitySettings, CommunityStatus, CommunityView, ContentItem, ContentType, Course, CourseSettings, CourseStatus, CourseView, CreateBundleInput, CreateCommunityInput, CreateCourseInput, CreateDownloadInput, CreateSpaceInput, DmSettings, Download, DownloadAsset, DownloadFile, DownloadStatus, DownloadView, ListBundlesQuery, ListCommunitiesQuery, ListCoursesQuery, ListDownloadsQuery, Module, PatchDmSettingsInput, ReorderDownloadAssetsInput, SaveActivityInput, SetSpaceTopicsInput, Space, SpaceAccessRule, SpaceDetail, SpaceLink, SpaceSettings, SpaceTopic, UpdateBundleInput, UpdateCommunityInput, UpdateCourseInput, UpdateDownloadInput, UpdateSpaceInput } from "./schemas/content.js";
5
5
  import { EmailContent, EmailTemplateId, EmailTemplateParams, TemplateContext, TemplateRenderer } from "./email-templates.js";
6
- import { CreateUserInput, ProvisionUserInput, UpdateUserInput } from "./schemas/identity.js";
7
- import { AccountProvisioner, ActiveSession, SessionVerifier, User, UserId } from "./identity.js";
6
+ import { CreateUserInput, Notification, NotificationKind, NotificationPreference, ProvisionUserInput, UpdateUserInput, UserProfile, UserProfileView } from "./schemas/identity.js";
7
+ import { AccessGrant, AccessRequest, AccessTokenVerifier, AccountProvisioner, ActiveSession, ApiKeySummary, AppAccessAdmin, ConnectedApp, CreatedApiKey, HeaderBag, NewApiKey, SessionVerifier, User, UserId } from "./identity.js";
8
8
  import { AcceptInviteInput, AddOrgUserInput, CreateInviteInput, CreateOrgUserInput, Invite, InviteInput, InviteRole, NewOrganizationInput, OrgUser, OrgUserInput, OrgUserProfile, OrgUserStatus, Organization, OrganizationInput, Role, UpdateOrgUserInput } from "./schemas/organizations.js";
9
9
  import { CreateOrganizationInput, InviteId, OrgUserId, OrganizationId } from "./organizations.js";
10
10
  import "./content.js";
11
- import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput } from "./schemas/entitlements.js";
11
+ import { Entitlement, EntitlementStatus, EntitlementsQuery, GrantEntitlementInput, SpaceMember, SpaceMemberSource, SpaceMemberStatus } from "./schemas/entitlements.js";
12
12
  import "./entitlements.js";
13
13
  import { ProgressRecord, ProgressRecordInput, ProgressReportItem, ProgressTarget, ProgressTargetType, ReportProgressInput } from "./schemas/progress.js";
14
14
  import { ProgressId } from "./progress.js";
15
- import { Asset, AssetKind, AssetStatus, AssetsQuery, DownloadTicket, RequestUploadInput, UploadTicket } from "./schemas/assets.js";
15
+ import { Asset, AssetKind, AssetSource, AssetStatus, AssetUrls, AssetView, AssetsQuery, RequestUploadInput, UploadTicket } from "./schemas/assets.js";
16
16
  import "./assets.js";
17
17
  import { ConfigureInput, ConnectInput, Connection, Validation } from "./schemas/integrations.js";
18
18
  import { Action, ActionContext, Integration } from "./integrations.js";
19
- import { Automation, AutomationAction, AutomationActionResult, AutomationKind, AutomationRun, AutomationRunStatus, AutomationRunsQuery, AutomationTrigger, AutomationsQuery, AvailableAction, AvailableActions, AvailableTriggers, CreateAutomationInput, CreateWebhookInput, CreatedWebhook, DeliverWebhookInput, UpdateAutomationInput, UpdateWebhookInput, Webhook, WebhookSecret } from "./schemas/automations.js";
20
- import { AutomationDispatch, AutomationEngine, AutomationExecutor, WebhookRequest, WebhookResponse, WebhookSender } from "./automations.js";
21
- import { ActivityCommentsRule, CommentListItem, CommentReaction, CommentReportSummary, CommentSettings, CommentStatus, CommentView, CommentsConfig, ListCommentsQuery, ReactionCounts, ReactionEmoji } from "./schemas/discussion.js";
19
+ import { Automation, AutomationAction, AutomationActionResult, AutomationKind, AutomationRun, AutomationRunStatus, AutomationRunsQuery, AutomationSource, AutomationTrigger, AutomationsQuery, AvailableAction, AvailableActions, AvailableTriggers, CreateAutomationInput, CreateWebhookInput, CreatedWebhook, DeliverWebhookInput, UpdateAutomationInput, UpdateWebhookInput, Webhook, WebhookSecret } from "./schemas/automations.js";
20
+ import { AutomationDispatch, AutomationEngine, AutomationExecutor, ScheduledAutomation, WebhookRequest, WebhookResponse, WebhookSender } from "./automations.js";
21
+ import { ActivityCommentsRule, BlockedUser, Chat, ChatKind, ChatLastMessage, ChatStatus, ChatUser, CommentFlagResolution, CommentListItem, CommentReaction, CommentReportSummary, CommentSettings, CommentStatus, CommentView, CommentsConfig, FlaggedComment, ListCommentsQuery, Message, MessageAttachment, MessageFile, MessageFlag, MessageFlagResolution, MessageReaction, MessageView, Post, PostBookmark, PostFlag, PostFlagResolution, PostFollow, PostReaction, PostStatus, PostView, ReactionCounts, ReactionEmoji } from "./schemas/discussion.js";
22
22
  import { Comment, CommentAuthor, CommentReport } from "./discussion.js";
23
- export { type AcceptInviteInput, AccountProvisioner, Action, ActionContext, ActiveSession, type Activity, type ActivityAsset, type ActivityCommentsRule, type ActivitySettings, type AddDownloadAssetInput, type AddOrgUserInput, type Asset, type AssetKind, type AssetStatus, type AssetsQuery, type Automation, type AutomationAction, type AutomationActionResult, AutomationDispatch, AutomationEngine, AutomationExecutor, type AutomationKind, type AutomationRun, type AutomationRunStatus, type AutomationRunsQuery, type AutomationTrigger, type AutomationsQuery, type AvailableAction, type AvailableActions, type AvailableTriggers, type Bundle, type BundleItem, Comment, CommentAuthor, type CommentListItem, type CommentReaction, CommentReport, type CommentReportSummary, type CommentSettings, type CommentStatus, type CommentView, type CommentsConfig, type ConfigureInput, type ConnectInput, type Connection, type ContentItem, type ContentType, ContractNewDomainEvent, type Course, type CourseSettings, type CourseStatus, type CreateAutomationInput, type CreateBundleInput, type CreateCourseInput, type CreateDownloadInput, type CreateInviteInput, type CreateOrgUserInput, CreateOrganizationInput, type CreateUserInput, type CreateWebhookInput, type CreatedWebhook, type DeliverWebhookInput, DomainEvent, type Download, type DownloadAsset, type DownloadStatus, type DownloadTicket, EmailContent, EmailMessage, EmailSender, EmailTemplateId, EmailTemplateParams, type Entitlement, type EntitlementStatus, type EntitlementsQuery, EventDefinition, EventMetadata, EventParseResult, type GrantEntitlementInput, Integration, type Invite, InviteId, type InviteInput, type InviteRole, JsonValue, type ListBundlesQuery, type ListCommentsQuery, type ListCoursesQuery, type ListDownloadsQuery, Logger, MakeEventInput, type Module, NewDomainEvent, type NewOrganizationInput, ObjectStorage, type OrgUser, OrgUserId, type OrgUserInput, type OrgUserProfile, type OrgUserStatus, type Organization, OrganizationId, type OrganizationInput, Page, PresignDownloadInput, PresignedUpload, ProgressId, type ProgressRecord, type ProgressRecordInput, type ProgressReportItem, type ProgressTarget, type ProgressTargetType, type ProvisionUserInput, type ReactionCounts, type ReactionEmoji, type ReorderDownloadAssetsInput, type ReportProgressInput, type RequestUploadInput, type Role, type SaveActivityInput, SessionVerifier, StoredObjectInfo, TemplateContext, TemplateRenderer, type UpdateAutomationInput, type UpdateBundleInput, type UpdateCourseInput, type UpdateDownloadInput, type UpdateOrgUserInput, type UpdateUserInput, type UpdateWebhookInput, type UploadTicket, User, UserId, type Validation, type Webhook, WebhookRequest, WebhookResponse, type WebhookSecret, WebhookSender };
23
+ export { type AcceptInviteInput, AccessGrant, AccessRequest, AccessTokenVerifier, AccountProvisioner, Action, ActionContext, ActiveSession, type Activity, type ActivityAsset, type ActivityCommentsRule, type ActivitySettings, type ActivityView, type AddDownloadAssetInput, type AddOrgUserInput, type AddSpaceLinkInput, ApiKeySummary, AppAccessAdmin, type Asset, type AssetKind, type AssetSource, type AssetStatus, type AssetUrls, type AssetView, type AssetsQuery, type Automation, type AutomationAction, type AutomationActionResult, AutomationDispatch, AutomationEngine, AutomationExecutor, type AutomationKind, type AutomationRun, type AutomationRunStatus, type AutomationRunsQuery, type AutomationSource, type AutomationTrigger, type AutomationsQuery, type AvailableAction, type AvailableActions, type AvailableTriggers, type BlockedUser, type Bundle, type BundleItem, type Chat, type ChatKind, type ChatLastMessage, type ChatStatus, type ChatUser, Comment, CommentAuthor, type CommentFlagResolution, type CommentListItem, type CommentReaction, CommentReport, type CommentReportSummary, type CommentSettings, type CommentStatus, type CommentView, type CommentsConfig, type Community, type CommunitySettings, type CommunityStatus, type CommunityView, type ConfigureInput, type ConnectInput, ConnectedApp, type Connection, type ContentItem, type ContentType, ContractNewDomainEvent, type Course, type CourseSettings, type CourseStatus, type CourseView, type CreateAutomationInput, type CreateBundleInput, type CreateCommunityInput, type CreateCourseInput, type CreateDownloadInput, type CreateInviteInput, type CreateOrgUserInput, CreateOrganizationInput, type CreateSpaceInput, type CreateUserInput, type CreateWebhookInput, CreatedApiKey, type CreatedWebhook, type DeliverWebhookInput, type DmSettings, DomainEvent, type Download, type DownloadAsset, type DownloadFile, type DownloadStatus, type DownloadView, EmailContent, EmailMessage, EmailSender, EmailTemplateId, EmailTemplateParams, type Entitlement, type EntitlementStatus, type EntitlementsQuery, EventDefinition, EventMetadata, EventParseResult, type FlaggedComment, type GrantEntitlementInput, HeaderBag, Integration, type Invite, InviteId, type InviteInput, type InviteRole, JsonValue, type ListBundlesQuery, type ListCommentsQuery, type ListCommunitiesQuery, type ListCoursesQuery, type ListDownloadsQuery, Logger, MakeEventInput, type Message, type MessageAttachment, type MessageFile, type MessageFlag, type MessageFlagResolution, type MessageReaction, type MessageView, type Module, NewApiKey, NewDomainEvent, type NewOrganizationInput, type Notification, type NotificationKind, type NotificationPreference, ObjectStorage, type OrgUser, OrgUserId, type OrgUserInput, type OrgUserProfile, type OrgUserStatus, type Organization, OrganizationId, type OrganizationInput, Page, type PatchDmSettingsInput, type Post, type PostBookmark, type PostFlag, type PostFlagResolution, type PostFollow, type PostReaction, type PostStatus, type PostView, PresignDownloadInput, PresignedUpload, ProgressId, type ProgressRecord, type ProgressRecordInput, type ProgressReportItem, type ProgressTarget, type ProgressTargetType, type ProvisionUserInput, type ReactionCounts, type ReactionEmoji, type ReorderDownloadAssetsInput, type ReportProgressInput, type RequestUploadInput, type Role, type SaveActivityInput, ScheduledAutomation, SessionVerifier, type SetSpaceTopicsInput, type Space, type SpaceAccessRule, type SpaceDetail, type SpaceLink, type SpaceMember, type SpaceMemberSource, type SpaceMemberStatus, type SpaceSettings, type SpaceTopic, StoredObjectInfo, TemplateContext, TemplateRenderer, type UpdateAutomationInput, type UpdateBundleInput, type UpdateCommunityInput, type UpdateCourseInput, type UpdateDownloadInput, type UpdateOrgUserInput, type UpdateSpaceInput, type UpdateUserInput, type UpdateWebhookInput, type UploadTicket, User, UserId, type UserProfile, type UserProfileView, type Validation, type Webhook, WebhookRequest, WebhookResponse, type WebhookSecret, WebhookSender };