@contractspec/module.learning-journey 1.57.0 → 1.59.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 (140) hide show
  1. package/dist/browser/contracts/index.js +578 -0
  2. package/dist/browser/contracts/models.js +193 -0
  3. package/dist/browser/contracts/onboarding.js +417 -0
  4. package/dist/browser/contracts/operations.js +326 -0
  5. package/dist/browser/contracts/shared.js +5 -0
  6. package/dist/browser/docs/index.js +124 -0
  7. package/dist/browser/docs/learning-journey.docblock.js +124 -0
  8. package/dist/browser/engines/index.js +526 -0
  9. package/dist/browser/engines/srs.js +198 -0
  10. package/dist/browser/engines/streak.js +159 -0
  11. package/dist/browser/engines/xp.js +171 -0
  12. package/dist/browser/entities/ai.js +343 -0
  13. package/dist/browser/entities/course.js +276 -0
  14. package/dist/browser/entities/flashcard.js +222 -0
  15. package/dist/browser/entities/gamification.js +340 -0
  16. package/dist/browser/entities/index.js +2136 -0
  17. package/dist/browser/entities/learner.js +329 -0
  18. package/dist/browser/entities/onboarding.js +301 -0
  19. package/dist/browser/entities/quiz.js +304 -0
  20. package/dist/browser/events.js +423 -0
  21. package/dist/browser/index.js +3833 -0
  22. package/dist/browser/learning-journey.capability.js +40 -0
  23. package/dist/browser/learning-journey.feature.js +56 -0
  24. package/dist/browser/track-spec.js +0 -0
  25. package/dist/contracts/index.d.ts +5 -5
  26. package/dist/contracts/index.d.ts.map +1 -0
  27. package/dist/contracts/index.js +578 -5
  28. package/dist/contracts/models.d.ts +426 -431
  29. package/dist/contracts/models.d.ts.map +1 -1
  30. package/dist/contracts/models.js +178 -372
  31. package/dist/contracts/onboarding.d.ts +621 -627
  32. package/dist/contracts/onboarding.d.ts.map +1 -1
  33. package/dist/contracts/onboarding.js +404 -388
  34. package/dist/contracts/operations.d.ts +243 -249
  35. package/dist/contracts/operations.d.ts.map +1 -1
  36. package/dist/contracts/operations.js +324 -148
  37. package/dist/contracts/shared.d.ts +1 -4
  38. package/dist/contracts/shared.d.ts.map +1 -1
  39. package/dist/contracts/shared.js +6 -6
  40. package/dist/docs/index.d.ts +2 -1
  41. package/dist/docs/index.d.ts.map +1 -0
  42. package/dist/docs/index.js +125 -1
  43. package/dist/docs/learning-journey.docblock.d.ts +2 -1
  44. package/dist/docs/learning-journey.docblock.d.ts.map +1 -0
  45. package/dist/docs/learning-journey.docblock.js +47 -58
  46. package/dist/engines/index.d.ts +4 -4
  47. package/dist/engines/index.d.ts.map +1 -0
  48. package/dist/engines/index.js +526 -4
  49. package/dist/engines/srs.d.ts +89 -92
  50. package/dist/engines/srs.d.ts.map +1 -1
  51. package/dist/engines/srs.js +197 -217
  52. package/dist/engines/streak.d.ts +84 -87
  53. package/dist/engines/streak.d.ts.map +1 -1
  54. package/dist/engines/streak.js +158 -192
  55. package/dist/engines/xp.d.ts +80 -83
  56. package/dist/engines/xp.d.ts.map +1 -1
  57. package/dist/engines/xp.js +170 -211
  58. package/dist/entities/ai.d.ts +199 -204
  59. package/dist/entities/ai.d.ts.map +1 -1
  60. package/dist/entities/ai.js +336 -368
  61. package/dist/entities/course.d.ts +149 -154
  62. package/dist/entities/course.d.ts.map +1 -1
  63. package/dist/entities/course.js +267 -306
  64. package/dist/entities/flashcard.d.ts +144 -149
  65. package/dist/entities/flashcard.d.ts.map +1 -1
  66. package/dist/entities/flashcard.js +217 -243
  67. package/dist/entities/gamification.d.ts +197 -202
  68. package/dist/entities/gamification.d.ts.map +1 -1
  69. package/dist/entities/gamification.js +331 -382
  70. package/dist/entities/index.d.ts +613 -618
  71. package/dist/entities/index.d.ts.map +1 -1
  72. package/dist/entities/index.js +2135 -43
  73. package/dist/entities/learner.d.ts +191 -196
  74. package/dist/entities/learner.d.ts.map +1 -1
  75. package/dist/entities/learner.js +322 -357
  76. package/dist/entities/onboarding.d.ts +164 -169
  77. package/dist/entities/onboarding.d.ts.map +1 -1
  78. package/dist/entities/onboarding.js +296 -301
  79. package/dist/entities/quiz.d.ts +184 -189
  80. package/dist/entities/quiz.d.ts.map +1 -1
  81. package/dist/entities/quiz.js +296 -361
  82. package/dist/events.d.ts +608 -614
  83. package/dist/events.d.ts.map +1 -1
  84. package/dist/events.js +421 -687
  85. package/dist/index.d.ts +8 -20
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +3834 -22
  88. package/dist/learning-journey.capability.d.ts +3 -8
  89. package/dist/learning-journey.capability.d.ts.map +1 -1
  90. package/dist/learning-journey.capability.js +41 -46
  91. package/dist/learning-journey.feature.d.ts +1 -6
  92. package/dist/learning-journey.feature.d.ts.map +1 -1
  93. package/dist/learning-journey.feature.js +55 -155
  94. package/dist/node/contracts/index.js +578 -0
  95. package/dist/node/contracts/models.js +193 -0
  96. package/dist/node/contracts/onboarding.js +417 -0
  97. package/dist/node/contracts/operations.js +326 -0
  98. package/dist/node/contracts/shared.js +5 -0
  99. package/dist/node/docs/index.js +124 -0
  100. package/dist/node/docs/learning-journey.docblock.js +124 -0
  101. package/dist/node/engines/index.js +526 -0
  102. package/dist/node/engines/srs.js +198 -0
  103. package/dist/node/engines/streak.js +159 -0
  104. package/dist/node/engines/xp.js +171 -0
  105. package/dist/node/entities/ai.js +343 -0
  106. package/dist/node/entities/course.js +276 -0
  107. package/dist/node/entities/flashcard.js +222 -0
  108. package/dist/node/entities/gamification.js +340 -0
  109. package/dist/node/entities/index.js +2136 -0
  110. package/dist/node/entities/learner.js +329 -0
  111. package/dist/node/entities/onboarding.js +301 -0
  112. package/dist/node/entities/quiz.js +304 -0
  113. package/dist/node/events.js +423 -0
  114. package/dist/node/index.js +3833 -0
  115. package/dist/node/learning-journey.capability.js +40 -0
  116. package/dist/node/learning-journey.feature.js +56 -0
  117. package/dist/node/track-spec.js +0 -0
  118. package/dist/track-spec.d.ts +115 -118
  119. package/dist/track-spec.d.ts.map +1 -1
  120. package/dist/track-spec.js +1 -0
  121. package/package.json +237 -60
  122. package/dist/contracts/models.js.map +0 -1
  123. package/dist/contracts/onboarding.js.map +0 -1
  124. package/dist/contracts/operations.js.map +0 -1
  125. package/dist/contracts/shared.js.map +0 -1
  126. package/dist/docs/learning-journey.docblock.js.map +0 -1
  127. package/dist/engines/srs.js.map +0 -1
  128. package/dist/engines/streak.js.map +0 -1
  129. package/dist/engines/xp.js.map +0 -1
  130. package/dist/entities/ai.js.map +0 -1
  131. package/dist/entities/course.js.map +0 -1
  132. package/dist/entities/flashcard.js.map +0 -1
  133. package/dist/entities/gamification.js.map +0 -1
  134. package/dist/entities/index.js.map +0 -1
  135. package/dist/entities/learner.js.map +0 -1
  136. package/dist/entities/onboarding.js.map +0 -1
  137. package/dist/entities/quiz.js.map +0 -1
  138. package/dist/events.js.map +0 -1
  139. package/dist/learning-journey.capability.js.map +0 -1
  140. package/dist/learning-journey.feature.js.map +0 -1
@@ -0,0 +1,423 @@
1
+ // src/contracts/shared.ts
2
+ var LEARNING_JOURNEY_OWNERS = ["modules.learning-journey"];
3
+
4
+ // src/events.ts
5
+ import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
6
+ import { defineEvent } from "@contractspec/lib.contracts";
7
+ var CoursePublishedPayload = defineSchemaModel({
8
+ name: "CoursePublishedEventPayload",
9
+ description: "Payload when a course is published",
10
+ fields: {
11
+ courseId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
12
+ title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
13
+ authorId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
14
+ publishedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
15
+ }
16
+ });
17
+ var CoursePublishedEvent = defineEvent({
18
+ meta: {
19
+ key: "course.published",
20
+ version: "1.0.0",
21
+ description: "A course has been published.",
22
+ stability: "stable",
23
+ owners: [...LEARNING_JOURNEY_OWNERS],
24
+ tags: ["learning", "course"]
25
+ },
26
+ payload: CoursePublishedPayload
27
+ });
28
+ var EnrollmentCreatedPayload = defineSchemaModel({
29
+ name: "EnrollmentCreatedEventPayload",
30
+ description: "Payload when a learner enrolls in a course",
31
+ fields: {
32
+ enrollmentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
33
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
34
+ courseId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
35
+ enrolledAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
36
+ }
37
+ });
38
+ var EnrollmentCreatedEvent = defineEvent({
39
+ meta: {
40
+ key: "enrollment.created",
41
+ version: "1.0.0",
42
+ description: "A learner has enrolled in a course.",
43
+ stability: "stable",
44
+ owners: [...LEARNING_JOURNEY_OWNERS],
45
+ tags: ["learning", "enrollment"]
46
+ },
47
+ payload: EnrollmentCreatedPayload
48
+ });
49
+ var LessonCompletedPayload = defineSchemaModel({
50
+ name: "LessonCompletedEventPayload",
51
+ description: "Payload when a lesson is completed",
52
+ fields: {
53
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
54
+ lessonId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
55
+ courseId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
56
+ score: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
57
+ xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
58
+ timeSpent: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
59
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
60
+ }
61
+ });
62
+ var LessonCompletedEvent = defineEvent({
63
+ meta: {
64
+ key: "lesson.completed",
65
+ version: "1.0.0",
66
+ description: "A learner has completed a lesson.",
67
+ stability: "stable",
68
+ owners: [...LEARNING_JOURNEY_OWNERS],
69
+ tags: ["learning", "progress", "lesson"]
70
+ },
71
+ payload: LessonCompletedPayload
72
+ });
73
+ var CourseCompletedPayload = defineSchemaModel({
74
+ name: "CourseCompletedEventPayload",
75
+ description: "Payload when a course is completed",
76
+ fields: {
77
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
78
+ courseId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
79
+ enrollmentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
80
+ score: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
81
+ xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
82
+ certificateId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
83
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
84
+ }
85
+ });
86
+ var CourseCompletedEvent = defineEvent({
87
+ meta: {
88
+ key: "course.completed",
89
+ version: "1.0.0",
90
+ description: "A learner has completed a course.",
91
+ stability: "stable",
92
+ owners: [...LEARNING_JOURNEY_OWNERS],
93
+ tags: ["learning", "progress", "course"]
94
+ },
95
+ payload: CourseCompletedPayload
96
+ });
97
+ var OnboardingStartedPayload = defineSchemaModel({
98
+ name: "OnboardingStartedEventPayload",
99
+ description: "Payload when onboarding starts",
100
+ fields: {
101
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
102
+ trackId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
103
+ productId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
104
+ startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
105
+ }
106
+ });
107
+ var OnboardingStartedEvent = defineEvent({
108
+ meta: {
109
+ key: "onboarding.started",
110
+ version: "1.0.0",
111
+ description: "A learner has started onboarding.",
112
+ stability: "stable",
113
+ owners: [...LEARNING_JOURNEY_OWNERS],
114
+ tags: ["learning", "onboarding"]
115
+ },
116
+ payload: OnboardingStartedPayload
117
+ });
118
+ var OnboardingStepCompletedPayload = defineSchemaModel({
119
+ name: "OnboardingStepCompletedEventPayload",
120
+ description: "Payload when an onboarding step is completed",
121
+ fields: {
122
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
123
+ trackId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
124
+ stepId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
125
+ triggeringEvent: {
126
+ type: ScalarTypeEnum.String_unsecure(),
127
+ isOptional: true
128
+ },
129
+ xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
130
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
131
+ }
132
+ });
133
+ var OnboardingStepCompletedEvent = defineEvent({
134
+ meta: {
135
+ key: "onboarding.step_completed",
136
+ version: "1.0.0",
137
+ description: "An onboarding step has been completed.",
138
+ stability: "stable",
139
+ owners: [...LEARNING_JOURNEY_OWNERS],
140
+ tags: ["learning", "onboarding"]
141
+ },
142
+ payload: OnboardingStepCompletedPayload
143
+ });
144
+ var OnboardingCompletedPayload = defineSchemaModel({
145
+ name: "OnboardingCompletedEventPayload",
146
+ description: "Payload when onboarding is completed",
147
+ fields: {
148
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
149
+ trackId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
150
+ productId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
151
+ xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
152
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
153
+ }
154
+ });
155
+ var OnboardingCompletedEvent = defineEvent({
156
+ meta: {
157
+ key: "onboarding.completed",
158
+ version: "1.0.0",
159
+ description: "A learner has completed onboarding.",
160
+ stability: "stable",
161
+ owners: [...LEARNING_JOURNEY_OWNERS],
162
+ tags: ["learning", "onboarding"]
163
+ },
164
+ payload: OnboardingCompletedPayload
165
+ });
166
+ var CardReviewedPayload = defineSchemaModel({
167
+ name: "CardReviewedEventPayload",
168
+ description: "Payload when a flashcard is reviewed",
169
+ fields: {
170
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
171
+ cardId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
172
+ deckId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
173
+ rating: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
174
+ responseTimeMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
175
+ reviewedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
176
+ }
177
+ });
178
+ var CardReviewedEvent = defineEvent({
179
+ meta: {
180
+ key: "flashcard.reviewed",
181
+ version: "1.0.0",
182
+ description: "A flashcard has been reviewed.",
183
+ stability: "stable",
184
+ owners: [...LEARNING_JOURNEY_OWNERS],
185
+ tags: ["learning", "flashcards"]
186
+ },
187
+ payload: CardReviewedPayload
188
+ });
189
+ var QuizStartedPayload = defineSchemaModel({
190
+ name: "QuizStartedEventPayload",
191
+ description: "Payload when a quiz is started",
192
+ fields: {
193
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
194
+ quizId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
195
+ attemptId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
196
+ attemptNumber: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
197
+ startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
198
+ }
199
+ });
200
+ var QuizStartedEvent = defineEvent({
201
+ meta: {
202
+ key: "quiz.started",
203
+ version: "1.0.0",
204
+ description: "A quiz attempt has started.",
205
+ stability: "stable",
206
+ owners: [...LEARNING_JOURNEY_OWNERS],
207
+ tags: ["learning", "quiz"]
208
+ },
209
+ payload: QuizStartedPayload
210
+ });
211
+ var QuizCompletedPayload = defineSchemaModel({
212
+ name: "QuizCompletedEventPayload",
213
+ description: "Payload when a quiz is completed",
214
+ fields: {
215
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
216
+ quizId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
217
+ attemptId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
218
+ score: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
219
+ percentageScore: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
220
+ passed: { type: ScalarTypeEnum.Boolean(), isOptional: false },
221
+ xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
222
+ timeSpent: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
223
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
224
+ }
225
+ });
226
+ var QuizCompletedEvent = defineEvent({
227
+ meta: {
228
+ key: "quiz.completed",
229
+ version: "1.0.0",
230
+ description: "A quiz attempt has been completed.",
231
+ stability: "stable",
232
+ owners: [...LEARNING_JOURNEY_OWNERS],
233
+ tags: ["learning", "quiz"]
234
+ },
235
+ payload: QuizCompletedPayload
236
+ });
237
+ var XpEarnedPayload = defineSchemaModel({
238
+ name: "XpEarnedEventPayload",
239
+ description: "Payload when XP is earned",
240
+ fields: {
241
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
242
+ amount: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
243
+ source: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
244
+ sourceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
245
+ totalXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
246
+ earnedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
247
+ }
248
+ });
249
+ var XpEarnedEvent = defineEvent({
250
+ meta: {
251
+ key: "xp.earned",
252
+ version: "1.0.0",
253
+ description: "XP has been earned.",
254
+ stability: "stable",
255
+ owners: [...LEARNING_JOURNEY_OWNERS],
256
+ tags: ["learning", "gamification", "xp"]
257
+ },
258
+ payload: XpEarnedPayload
259
+ });
260
+ var LevelUpPayload = defineSchemaModel({
261
+ name: "LevelUpEventPayload",
262
+ description: "Payload when a learner levels up",
263
+ fields: {
264
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
265
+ previousLevel: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
266
+ newLevel: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
267
+ totalXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
268
+ leveledUpAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
269
+ }
270
+ });
271
+ var LevelUpEvent = defineEvent({
272
+ meta: {
273
+ key: "level.up",
274
+ version: "1.0.0",
275
+ description: "A learner has leveled up.",
276
+ stability: "stable",
277
+ owners: [...LEARNING_JOURNEY_OWNERS],
278
+ tags: ["learning", "gamification", "level"]
279
+ },
280
+ payload: LevelUpPayload
281
+ });
282
+ var StreakUpdatedPayload = defineSchemaModel({
283
+ name: "StreakUpdatedEventPayload",
284
+ description: "Payload when a streak is updated",
285
+ fields: {
286
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
287
+ previousStreak: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
288
+ currentStreak: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
289
+ longestStreak: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
290
+ freezeUsed: { type: ScalarTypeEnum.Boolean(), isOptional: false },
291
+ updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
292
+ }
293
+ });
294
+ var StreakUpdatedEvent = defineEvent({
295
+ meta: {
296
+ key: "streak.updated",
297
+ version: "1.0.0",
298
+ description: "A streak has been updated.",
299
+ stability: "stable",
300
+ owners: [...LEARNING_JOURNEY_OWNERS],
301
+ tags: ["learning", "gamification", "streak"]
302
+ },
303
+ payload: StreakUpdatedPayload
304
+ });
305
+ var AchievementUnlockedPayload = defineSchemaModel({
306
+ name: "AchievementUnlockedEventPayload",
307
+ description: "Payload when an achievement is unlocked",
308
+ fields: {
309
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
310
+ achievementId: {
311
+ type: ScalarTypeEnum.String_unsecure(),
312
+ isOptional: false
313
+ },
314
+ achievementKey: {
315
+ type: ScalarTypeEnum.String_unsecure(),
316
+ isOptional: false
317
+ },
318
+ achievementName: {
319
+ type: ScalarTypeEnum.String_unsecure(),
320
+ isOptional: false
321
+ },
322
+ xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
323
+ unlockedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
324
+ }
325
+ });
326
+ var AchievementUnlockedEvent = defineEvent({
327
+ meta: {
328
+ key: "achievement.unlocked",
329
+ version: "1.0.0",
330
+ description: "An achievement has been unlocked.",
331
+ stability: "stable",
332
+ owners: [...LEARNING_JOURNEY_OWNERS],
333
+ tags: ["learning", "gamification", "achievement"]
334
+ },
335
+ payload: AchievementUnlockedPayload
336
+ });
337
+ var DailyGoalCompletedPayload = defineSchemaModel({
338
+ name: "DailyGoalCompletedEventPayload",
339
+ description: "Payload when a daily goal is completed",
340
+ fields: {
341
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
342
+ date: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
343
+ targetXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
344
+ actualXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
345
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
346
+ }
347
+ });
348
+ var DailyGoalCompletedEvent = defineEvent({
349
+ meta: {
350
+ key: "daily_goal.completed",
351
+ version: "1.0.0",
352
+ description: "A daily goal has been completed.",
353
+ stability: "stable",
354
+ owners: [...LEARNING_JOURNEY_OWNERS],
355
+ tags: ["learning", "gamification", "goal"]
356
+ },
357
+ payload: DailyGoalCompletedPayload
358
+ });
359
+ var CertificateIssuedPayload = defineSchemaModel({
360
+ name: "CertificateIssuedEventPayload",
361
+ description: "Payload when a certificate is issued",
362
+ fields: {
363
+ certificateId: {
364
+ type: ScalarTypeEnum.String_unsecure(),
365
+ isOptional: false
366
+ },
367
+ learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
368
+ courseId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
369
+ certificateNumber: {
370
+ type: ScalarTypeEnum.String_unsecure(),
371
+ isOptional: false
372
+ },
373
+ issuedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
374
+ }
375
+ });
376
+ var CertificateIssuedEvent = defineEvent({
377
+ meta: {
378
+ key: "certificate.issued",
379
+ version: "1.0.0",
380
+ description: "A certificate has been issued.",
381
+ stability: "stable",
382
+ owners: [...LEARNING_JOURNEY_OWNERS],
383
+ tags: ["learning", "certificate"]
384
+ },
385
+ payload: CertificateIssuedPayload
386
+ });
387
+ var LearningJourneyEvents = {
388
+ CoursePublishedEvent,
389
+ EnrollmentCreatedEvent,
390
+ LessonCompletedEvent,
391
+ CourseCompletedEvent,
392
+ OnboardingStartedEvent,
393
+ OnboardingStepCompletedEvent,
394
+ OnboardingCompletedEvent,
395
+ CardReviewedEvent,
396
+ QuizStartedEvent,
397
+ QuizCompletedEvent,
398
+ XpEarnedEvent,
399
+ LevelUpEvent,
400
+ StreakUpdatedEvent,
401
+ AchievementUnlockedEvent,
402
+ DailyGoalCompletedEvent,
403
+ CertificateIssuedEvent
404
+ };
405
+ export {
406
+ XpEarnedEvent,
407
+ StreakUpdatedEvent,
408
+ QuizStartedEvent,
409
+ QuizCompletedEvent,
410
+ OnboardingStepCompletedEvent,
411
+ OnboardingStartedEvent,
412
+ OnboardingCompletedEvent,
413
+ LevelUpEvent,
414
+ LessonCompletedEvent,
415
+ LearningJourneyEvents,
416
+ EnrollmentCreatedEvent,
417
+ DailyGoalCompletedEvent,
418
+ CoursePublishedEvent,
419
+ CourseCompletedEvent,
420
+ CertificateIssuedEvent,
421
+ CardReviewedEvent,
422
+ AchievementUnlockedEvent
423
+ };