@contractspec/module.learning-journey 1.44.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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/dist/contracts/index.d.ts +5 -0
  4. package/dist/contracts/index.js +6 -0
  5. package/dist/contracts/models.d.ts +451 -0
  6. package/dist/contracts/models.d.ts.map +1 -0
  7. package/dist/contracts/models.js +388 -0
  8. package/dist/contracts/models.js.map +1 -0
  9. package/dist/contracts/onboarding.d.ts +666 -0
  10. package/dist/contracts/onboarding.d.ts.map +1 -0
  11. package/dist/contracts/onboarding.js +402 -0
  12. package/dist/contracts/onboarding.js.map +1 -0
  13. package/dist/contracts/operations.d.ts +280 -0
  14. package/dist/contracts/operations.d.ts.map +1 -0
  15. package/dist/contracts/operations.js +151 -0
  16. package/dist/contracts/operations.js.map +1 -0
  17. package/dist/contracts/shared.d.ts +5 -0
  18. package/dist/contracts/shared.d.ts.map +1 -0
  19. package/dist/contracts/shared.js +6 -0
  20. package/dist/contracts/shared.js.map +1 -0
  21. package/dist/docs/index.d.ts +1 -0
  22. package/dist/docs/index.js +1 -0
  23. package/dist/docs/learning-journey.docblock.d.ts +1 -0
  24. package/dist/docs/learning-journey.docblock.js +136 -0
  25. package/dist/docs/learning-journey.docblock.js.map +1 -0
  26. package/dist/engines/index.d.ts +4 -0
  27. package/dist/engines/index.js +5 -0
  28. package/dist/engines/srs.d.ts +111 -0
  29. package/dist/engines/srs.d.ts.map +1 -0
  30. package/dist/engines/srs.js +219 -0
  31. package/dist/engines/srs.js.map +1 -0
  32. package/dist/engines/streak.d.ts +100 -0
  33. package/dist/engines/streak.d.ts.map +1 -0
  34. package/dist/engines/streak.js +194 -0
  35. package/dist/engines/streak.js.map +1 -0
  36. package/dist/engines/xp.d.ts +97 -0
  37. package/dist/engines/xp.d.ts.map +1 -0
  38. package/dist/engines/xp.js +213 -0
  39. package/dist/engines/xp.js.map +1 -0
  40. package/dist/entities/ai.d.ts +232 -0
  41. package/dist/entities/ai.d.ts.map +1 -0
  42. package/dist/entities/ai.js +376 -0
  43. package/dist/entities/ai.js.map +1 -0
  44. package/dist/entities/course.d.ts +184 -0
  45. package/dist/entities/course.d.ts.map +1 -0
  46. package/dist/entities/course.js +316 -0
  47. package/dist/entities/course.js.map +1 -0
  48. package/dist/entities/flashcard.d.ts +170 -0
  49. package/dist/entities/flashcard.d.ts.map +1 -0
  50. package/dist/entities/flashcard.js +249 -0
  51. package/dist/entities/flashcard.js.map +1 -0
  52. package/dist/entities/gamification.d.ts +238 -0
  53. package/dist/entities/gamification.d.ts.map +1 -0
  54. package/dist/entities/gamification.js +392 -0
  55. package/dist/entities/gamification.js.map +1 -0
  56. package/dist/entities/index.d.ts +629 -0
  57. package/dist/entities/index.d.ts.map +1 -0
  58. package/dist/entities/index.js +45 -0
  59. package/dist/entities/index.js.map +1 -0
  60. package/dist/entities/learner.d.ts +224 -0
  61. package/dist/entities/learner.d.ts.map +1 -0
  62. package/dist/entities/learner.js +365 -0
  63. package/dist/entities/learner.js.map +1 -0
  64. package/dist/entities/onboarding.d.ts +190 -0
  65. package/dist/entities/onboarding.d.ts.map +1 -0
  66. package/dist/entities/onboarding.js +307 -0
  67. package/dist/entities/onboarding.js.map +1 -0
  68. package/dist/entities/quiz.d.ts +220 -0
  69. package/dist/entities/quiz.d.ts.map +1 -0
  70. package/dist/entities/quiz.js +370 -0
  71. package/dist/entities/quiz.js.map +1 -0
  72. package/dist/events.d.ts +796 -0
  73. package/dist/events.d.ts.map +1 -0
  74. package/dist/events.js +690 -0
  75. package/dist/events.js.map +1 -0
  76. package/dist/index.d.ts +20 -0
  77. package/dist/index.js +22 -0
  78. package/dist/learning-journey.feature.d.ts +12 -0
  79. package/dist/learning-journey.feature.d.ts.map +1 -0
  80. package/dist/learning-journey.feature.js +150 -0
  81. package/dist/learning-journey.feature.js.map +1 -0
  82. package/dist/track-spec.d.ts +129 -0
  83. package/dist/track-spec.d.ts.map +1 -0
  84. package/dist/track-spec.js +0 -0
  85. package/package.json +98 -0
@@ -0,0 +1,402 @@
1
+ import { LEARNING_JOURNEY_OWNERS } from "./shared.js";
2
+ import { SuccessOutput } from "./models.js";
3
+ import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
4
+ import { defineCommand, defineQuery } from "@contractspec/lib.contracts";
5
+
6
+ //#region src/contracts/onboarding.ts
7
+ const OnboardingStepConditionModel = defineSchemaModel({
8
+ name: "OnboardingStepCondition",
9
+ description: "Structured completion condition for onboarding steps.",
10
+ fields: {
11
+ eventName: {
12
+ type: ScalarTypeEnum.String_unsecure(),
13
+ isOptional: false
14
+ },
15
+ eventVersion: {
16
+ type: ScalarTypeEnum.Int_unsecure(),
17
+ isOptional: true
18
+ },
19
+ sourceModule: {
20
+ type: ScalarTypeEnum.String_unsecure(),
21
+ isOptional: true
22
+ },
23
+ payloadFilter: {
24
+ type: ScalarTypeEnum.JSON(),
25
+ isOptional: true
26
+ }
27
+ }
28
+ });
29
+ const OnboardingStepModel = defineSchemaModel({
30
+ name: "OnboardingStep",
31
+ description: "Declarative onboarding step definition.",
32
+ fields: {
33
+ id: {
34
+ type: ScalarTypeEnum.String_unsecure(),
35
+ isOptional: false
36
+ },
37
+ trackId: {
38
+ type: ScalarTypeEnum.String_unsecure(),
39
+ isOptional: false
40
+ },
41
+ title: {
42
+ type: ScalarTypeEnum.String_unsecure(),
43
+ isOptional: false
44
+ },
45
+ description: {
46
+ type: ScalarTypeEnum.String_unsecure(),
47
+ isOptional: true
48
+ },
49
+ instructions: {
50
+ type: ScalarTypeEnum.String_unsecure(),
51
+ isOptional: true
52
+ },
53
+ helpUrl: {
54
+ type: ScalarTypeEnum.String_unsecure(),
55
+ isOptional: true
56
+ },
57
+ order: {
58
+ type: ScalarTypeEnum.Int_unsecure(),
59
+ isOptional: false
60
+ },
61
+ completionEvent: {
62
+ type: ScalarTypeEnum.String_unsecure(),
63
+ isOptional: false
64
+ },
65
+ completionCondition: {
66
+ type: OnboardingStepConditionModel,
67
+ isOptional: true
68
+ },
69
+ xpReward: {
70
+ type: ScalarTypeEnum.Int_unsecure(),
71
+ isOptional: true
72
+ },
73
+ isRequired: {
74
+ type: ScalarTypeEnum.Boolean(),
75
+ isOptional: true
76
+ },
77
+ canSkip: {
78
+ type: ScalarTypeEnum.Boolean(),
79
+ isOptional: true
80
+ },
81
+ actionUrl: {
82
+ type: ScalarTypeEnum.String_unsecure(),
83
+ isOptional: true
84
+ },
85
+ actionLabel: {
86
+ type: ScalarTypeEnum.String_unsecure(),
87
+ isOptional: true
88
+ },
89
+ metadata: {
90
+ type: ScalarTypeEnum.JSON(),
91
+ isOptional: true
92
+ }
93
+ }
94
+ });
95
+ const OnboardingTrackModel = defineSchemaModel({
96
+ name: "OnboardingTrack",
97
+ description: "Onboarding track metadata and steps.",
98
+ fields: {
99
+ id: {
100
+ type: ScalarTypeEnum.String_unsecure(),
101
+ isOptional: false
102
+ },
103
+ productId: {
104
+ type: ScalarTypeEnum.String_unsecure(),
105
+ isOptional: true
106
+ },
107
+ name: {
108
+ type: ScalarTypeEnum.String_unsecure(),
109
+ isOptional: false
110
+ },
111
+ description: {
112
+ type: ScalarTypeEnum.String_unsecure(),
113
+ isOptional: true
114
+ },
115
+ targetUserSegment: {
116
+ type: ScalarTypeEnum.String_unsecure(),
117
+ isOptional: true
118
+ },
119
+ targetRole: {
120
+ type: ScalarTypeEnum.String_unsecure(),
121
+ isOptional: true
122
+ },
123
+ isActive: {
124
+ type: ScalarTypeEnum.Boolean(),
125
+ isOptional: true
126
+ },
127
+ isRequired: {
128
+ type: ScalarTypeEnum.Boolean(),
129
+ isOptional: true
130
+ },
131
+ canSkip: {
132
+ type: ScalarTypeEnum.Boolean(),
133
+ isOptional: true
134
+ },
135
+ totalXp: {
136
+ type: ScalarTypeEnum.Int_unsecure(),
137
+ isOptional: true
138
+ },
139
+ completionXpBonus: {
140
+ type: ScalarTypeEnum.Int_unsecure(),
141
+ isOptional: true
142
+ },
143
+ completionBadgeKey: {
144
+ type: ScalarTypeEnum.String_unsecure(),
145
+ isOptional: true
146
+ },
147
+ streakHoursWindow: {
148
+ type: ScalarTypeEnum.Int_unsecure(),
149
+ isOptional: true
150
+ },
151
+ streakBonusXp: {
152
+ type: ScalarTypeEnum.Int_unsecure(),
153
+ isOptional: true
154
+ },
155
+ metadata: {
156
+ type: ScalarTypeEnum.JSON(),
157
+ isOptional: true
158
+ },
159
+ steps: {
160
+ type: OnboardingStepModel,
161
+ isArray: true,
162
+ isOptional: false
163
+ }
164
+ }
165
+ });
166
+ const OnboardingStepProgressModel = defineSchemaModel({
167
+ name: "OnboardingStepProgress",
168
+ description: "Progress for a specific onboarding step.",
169
+ fields: {
170
+ stepId: {
171
+ type: ScalarTypeEnum.String_unsecure(),
172
+ isOptional: false
173
+ },
174
+ status: {
175
+ type: ScalarTypeEnum.String_unsecure(),
176
+ isOptional: false
177
+ },
178
+ xpEarned: {
179
+ type: ScalarTypeEnum.Int_unsecure(),
180
+ isOptional: true
181
+ },
182
+ triggeringEvent: {
183
+ type: ScalarTypeEnum.String_unsecure(),
184
+ isOptional: true
185
+ },
186
+ eventPayload: {
187
+ type: ScalarTypeEnum.JSON(),
188
+ isOptional: true
189
+ },
190
+ completedAt: {
191
+ type: ScalarTypeEnum.DateTime(),
192
+ isOptional: true
193
+ }
194
+ }
195
+ });
196
+ const OnboardingProgressModel = defineSchemaModel({
197
+ name: "OnboardingProgress",
198
+ description: "Aggregated progress for an onboarding track.",
199
+ fields: {
200
+ learnerId: {
201
+ type: ScalarTypeEnum.String_unsecure(),
202
+ isOptional: true
203
+ },
204
+ trackId: {
205
+ type: ScalarTypeEnum.String_unsecure(),
206
+ isOptional: false
207
+ },
208
+ progress: {
209
+ type: ScalarTypeEnum.Int_unsecure(),
210
+ isOptional: false
211
+ },
212
+ isCompleted: {
213
+ type: ScalarTypeEnum.Boolean(),
214
+ isOptional: false
215
+ },
216
+ xpEarned: {
217
+ type: ScalarTypeEnum.Int_unsecure(),
218
+ isOptional: true
219
+ },
220
+ startedAt: {
221
+ type: ScalarTypeEnum.DateTime(),
222
+ isOptional: true
223
+ },
224
+ completedAt: {
225
+ type: ScalarTypeEnum.DateTime(),
226
+ isOptional: true
227
+ },
228
+ lastActivityAt: {
229
+ type: ScalarTypeEnum.DateTime(),
230
+ isOptional: true
231
+ },
232
+ steps: {
233
+ type: OnboardingStepProgressModel,
234
+ isArray: true,
235
+ isOptional: true
236
+ }
237
+ }
238
+ });
239
+ const ListOnboardingTracksInput = defineSchemaModel({
240
+ name: "ListOnboardingTracksInput",
241
+ description: "Filters for listing onboarding tracks.",
242
+ fields: {
243
+ learnerId: {
244
+ type: ScalarTypeEnum.String_unsecure(),
245
+ isOptional: true
246
+ },
247
+ productId: {
248
+ type: ScalarTypeEnum.String_unsecure(),
249
+ isOptional: true
250
+ },
251
+ trackIds: {
252
+ type: ScalarTypeEnum.String_unsecure(),
253
+ isArray: true,
254
+ isOptional: true
255
+ },
256
+ includeProgress: {
257
+ type: ScalarTypeEnum.Boolean(),
258
+ isOptional: true
259
+ }
260
+ }
261
+ });
262
+ const ListOnboardingTracksOutput = defineSchemaModel({
263
+ name: "ListOnboardingTracksOutput",
264
+ description: "Available onboarding tracks with optional progress.",
265
+ fields: {
266
+ tracks: {
267
+ type: OnboardingTrackModel,
268
+ isArray: true,
269
+ isOptional: false
270
+ },
271
+ progress: {
272
+ type: OnboardingProgressModel,
273
+ isArray: true,
274
+ isOptional: true
275
+ }
276
+ }
277
+ });
278
+ const GetOnboardingProgressInput = defineSchemaModel({
279
+ name: "GetOnboardingProgressInput",
280
+ description: "Input for fetching onboarding progress for a track.",
281
+ fields: {
282
+ trackId: {
283
+ type: ScalarTypeEnum.String_unsecure(),
284
+ isOptional: false
285
+ },
286
+ learnerId: {
287
+ type: ScalarTypeEnum.String_unsecure(),
288
+ isOptional: true
289
+ }
290
+ }
291
+ });
292
+ const RecordOnboardingEventInput = defineSchemaModel({
293
+ name: "RecordOnboardingEventInput",
294
+ description: "Record a domain event to advance onboarding progress via completion conditions.",
295
+ fields: {
296
+ learnerId: {
297
+ type: ScalarTypeEnum.String_unsecure(),
298
+ isOptional: false
299
+ },
300
+ trackId: {
301
+ type: ScalarTypeEnum.String_unsecure(),
302
+ isOptional: true
303
+ },
304
+ eventName: {
305
+ type: ScalarTypeEnum.String_unsecure(),
306
+ isOptional: false
307
+ },
308
+ eventVersion: {
309
+ type: ScalarTypeEnum.Int_unsecure(),
310
+ isOptional: true
311
+ },
312
+ eventPayload: {
313
+ type: ScalarTypeEnum.JSON(),
314
+ isOptional: true
315
+ },
316
+ occurredAt: {
317
+ type: ScalarTypeEnum.DateTime(),
318
+ isOptional: true
319
+ }
320
+ }
321
+ });
322
+ const ListOnboardingTracksContract = defineQuery({
323
+ meta: {
324
+ key: "learning.onboarding.listTracks",
325
+ version: 1,
326
+ stability: "stable",
327
+ owners: [...LEARNING_JOURNEY_OWNERS],
328
+ tags: [
329
+ "learning",
330
+ "onboarding",
331
+ "journey"
332
+ ],
333
+ description: "List onboarding tracks available to a learner or product.",
334
+ goal: "Expose track catalog for UI/API surfaces.",
335
+ context: "Called when showing onboarding/learning journey catalog."
336
+ },
337
+ io: {
338
+ input: ListOnboardingTracksInput,
339
+ output: ListOnboardingTracksOutput
340
+ },
341
+ policy: { auth: "user" }
342
+ });
343
+ const GetOnboardingProgressContract = defineQuery({
344
+ meta: {
345
+ key: "learning.onboarding.getProgress",
346
+ version: 1,
347
+ stability: "stable",
348
+ owners: [...LEARNING_JOURNEY_OWNERS],
349
+ tags: [
350
+ "learning",
351
+ "onboarding",
352
+ "journey"
353
+ ],
354
+ description: "Fetch onboarding progress for a specific track.",
355
+ goal: "Display learner progress and remaining steps.",
356
+ context: "Called when rendering a track detail or widget."
357
+ },
358
+ io: {
359
+ input: GetOnboardingProgressInput,
360
+ output: OnboardingProgressModel
361
+ },
362
+ policy: { auth: "user" }
363
+ });
364
+ const RecordOnboardingEventContract = defineCommand({
365
+ meta: {
366
+ key: "learning.onboarding.recordEvent",
367
+ version: 1,
368
+ stability: "stable",
369
+ owners: [...LEARNING_JOURNEY_OWNERS],
370
+ tags: [
371
+ "learning",
372
+ "onboarding",
373
+ "events"
374
+ ],
375
+ description: "Record a domain event to evaluate onboarding step completion conditions.",
376
+ goal: "Advance onboarding automatically from product events.",
377
+ context: "Called by event bus handlers when relevant product events fire (e.g., deal.created)."
378
+ },
379
+ io: {
380
+ input: RecordOnboardingEventInput,
381
+ output: SuccessOutput,
382
+ errors: {
383
+ TRACK_NOT_FOUND: {
384
+ description: "Track not found for event routing",
385
+ http: 404,
386
+ gqlCode: "TRACK_NOT_FOUND",
387
+ when: "Track ID or routing context is invalid"
388
+ },
389
+ STEP_NOT_FOUND: {
390
+ description: "Step not found for completion condition",
391
+ http: 404,
392
+ gqlCode: "STEP_NOT_FOUND",
393
+ when: "No step matches the incoming event"
394
+ }
395
+ }
396
+ },
397
+ policy: { auth: "user" }
398
+ });
399
+
400
+ //#endregion
401
+ export { GetOnboardingProgressContract, ListOnboardingTracksContract, OnboardingProgressModel, OnboardingStepModel, OnboardingStepProgressModel, OnboardingTrackModel, RecordOnboardingEventContract };
402
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","names":[],"sources":["../../src/contracts/onboarding.ts"],"sourcesContent":["import { ScalarTypeEnum, defineSchemaModel } from '@contractspec/lib.schema';\nimport { defineCommand, defineQuery } from '@contractspec/lib.contracts';\n\nimport { SuccessOutput } from './models';\nimport { LEARNING_JOURNEY_OWNERS } from './shared';\n\nconst OnboardingStepConditionModel = defineSchemaModel({\n name: 'OnboardingStepCondition',\n description: 'Structured completion condition for onboarding steps.',\n fields: {\n eventName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n eventVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n sourceModule: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n payloadFilter: { type: ScalarTypeEnum.JSON(), isOptional: true },\n },\n});\n\nexport const OnboardingStepModel = defineSchemaModel({\n name: 'OnboardingStep',\n description: 'Declarative onboarding step definition.',\n fields: {\n id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n trackId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n instructions: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n helpUrl: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n order: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n completionEvent: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: false,\n },\n completionCondition: {\n type: OnboardingStepConditionModel,\n isOptional: true,\n },\n xpReward: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n isRequired: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n canSkip: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n actionUrl: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n actionLabel: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n metadata: { type: ScalarTypeEnum.JSON(), isOptional: true },\n },\n});\n\nexport const OnboardingTrackModel = defineSchemaModel({\n name: 'OnboardingTrack',\n description: 'Onboarding track metadata and steps.',\n fields: {\n id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n productId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n targetUserSegment: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n targetRole: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n isActive: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n isRequired: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n canSkip: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n totalXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n completionXpBonus: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: true,\n },\n completionBadgeKey: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n streakHoursWindow: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: true,\n },\n streakBonusXp: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n metadata: { type: ScalarTypeEnum.JSON(), isOptional: true },\n steps: { type: OnboardingStepModel, isArray: true, isOptional: false },\n },\n});\n\nexport const OnboardingStepProgressModel = defineSchemaModel({\n name: 'OnboardingStepProgress',\n description: 'Progress for a specific onboarding step.',\n fields: {\n stepId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n triggeringEvent: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n eventPayload: { type: ScalarTypeEnum.JSON(), isOptional: true },\n completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n },\n});\n\nexport const OnboardingProgressModel = defineSchemaModel({\n name: 'OnboardingProgress',\n description: 'Aggregated progress for an onboarding track.',\n fields: {\n learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n trackId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n progress: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n isCompleted: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n xpEarned: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n lastActivityAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n steps: {\n type: OnboardingStepProgressModel,\n isArray: true,\n isOptional: true,\n },\n },\n});\n\nconst ListOnboardingTracksInput = defineSchemaModel({\n name: 'ListOnboardingTracksInput',\n description: 'Filters for listing onboarding tracks.',\n fields: {\n learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n productId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n trackIds: {\n type: ScalarTypeEnum.String_unsecure(),\n isArray: true,\n isOptional: true,\n },\n includeProgress: {\n type: ScalarTypeEnum.Boolean(),\n isOptional: true,\n },\n },\n});\n\nconst ListOnboardingTracksOutput = defineSchemaModel({\n name: 'ListOnboardingTracksOutput',\n description: 'Available onboarding tracks with optional progress.',\n fields: {\n tracks: { type: OnboardingTrackModel, isArray: true, isOptional: false },\n progress: {\n type: OnboardingProgressModel,\n isArray: true,\n isOptional: true,\n },\n },\n});\n\nconst GetOnboardingProgressInput = defineSchemaModel({\n name: 'GetOnboardingProgressInput',\n description: 'Input for fetching onboarding progress for a track.',\n fields: {\n trackId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst RecordOnboardingEventInput = defineSchemaModel({\n name: 'RecordOnboardingEventInput',\n description:\n 'Record a domain event to advance onboarding progress via completion conditions.',\n fields: {\n learnerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n trackId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n eventName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n eventVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n eventPayload: { type: ScalarTypeEnum.JSON(), isOptional: true },\n occurredAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n },\n});\n\nexport const ListOnboardingTracksContract = defineQuery({\n meta: {\n key: 'learning.onboarding.listTracks',\n version: 1,\n stability: 'stable',\n owners: [...LEARNING_JOURNEY_OWNERS],\n tags: ['learning', 'onboarding', 'journey'],\n description: 'List onboarding tracks available to a learner or product.',\n goal: 'Expose track catalog for UI/API surfaces.',\n context: 'Called when showing onboarding/learning journey catalog.',\n },\n io: {\n input: ListOnboardingTracksInput,\n output: ListOnboardingTracksOutput,\n },\n policy: {\n auth: 'user',\n },\n});\n\nexport const GetOnboardingProgressContract = defineQuery({\n meta: {\n key: 'learning.onboarding.getProgress',\n version: 1,\n stability: 'stable',\n owners: [...LEARNING_JOURNEY_OWNERS],\n tags: ['learning', 'onboarding', 'journey'],\n description: 'Fetch onboarding progress for a specific track.',\n goal: 'Display learner progress and remaining steps.',\n context: 'Called when rendering a track detail or widget.',\n },\n io: {\n input: GetOnboardingProgressInput,\n output: OnboardingProgressModel,\n },\n policy: {\n auth: 'user',\n },\n});\n\nexport const RecordOnboardingEventContract = defineCommand({\n meta: {\n key: 'learning.onboarding.recordEvent',\n version: 1,\n stability: 'stable',\n owners: [...LEARNING_JOURNEY_OWNERS],\n tags: ['learning', 'onboarding', 'events'],\n description:\n 'Record a domain event to evaluate onboarding step completion conditions.',\n goal: 'Advance onboarding automatically from product events.',\n context:\n 'Called by event bus handlers when relevant product events fire (e.g., deal.created).',\n },\n io: {\n input: RecordOnboardingEventInput,\n output: SuccessOutput,\n errors: {\n TRACK_NOT_FOUND: {\n description: 'Track not found for event routing',\n http: 404,\n gqlCode: 'TRACK_NOT_FOUND',\n when: 'Track ID or routing context is invalid',\n },\n STEP_NOT_FOUND: {\n description: 'Step not found for completion condition',\n http: 404,\n gqlCode: 'STEP_NOT_FOUND',\n when: 'No step matches the incoming event',\n },\n },\n },\n policy: {\n auth: 'user',\n },\n});\n"],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ import * as _contractspec_lib_schema678 from "@contractspec/lib.schema";
2
+ import * as _contractspec_lib_contracts34 from "@contractspec/lib.contracts";
3
+
4
+ //#region src/contracts/operations.d.ts
5
+ /**
6
+ * Enroll in a course.
7
+ */
8
+ declare const EnrollInCourseContract: _contractspec_lib_contracts34.OperationSpec<_contractspec_lib_schema678.SchemaModel<{
9
+ courseId: {
10
+ type: _contractspec_lib_schema678.FieldType<string, string>;
11
+ isOptional: false;
12
+ };
13
+ }>, _contractspec_lib_schema678.SchemaModel<{
14
+ id: {
15
+ type: _contractspec_lib_schema678.FieldType<string, string>;
16
+ isOptional: false;
17
+ };
18
+ learnerId: {
19
+ type: _contractspec_lib_schema678.FieldType<string, string>;
20
+ isOptional: false;
21
+ };
22
+ courseId: {
23
+ type: _contractspec_lib_schema678.FieldType<string, string>;
24
+ isOptional: false;
25
+ };
26
+ status: {
27
+ type: _contractspec_lib_schema678.FieldType<string, string>;
28
+ isOptional: false;
29
+ };
30
+ progress: {
31
+ type: _contractspec_lib_schema678.FieldType<number, number>;
32
+ isOptional: false;
33
+ };
34
+ startedAt: {
35
+ type: _contractspec_lib_schema678.FieldType<Date, string>;
36
+ isOptional: true;
37
+ };
38
+ completedAt: {
39
+ type: _contractspec_lib_schema678.FieldType<Date, string>;
40
+ isOptional: true;
41
+ };
42
+ }>, undefined>;
43
+ /**
44
+ * Complete a lesson.
45
+ */
46
+ declare const CompleteLessonContract: _contractspec_lib_contracts34.OperationSpec<_contractspec_lib_schema678.SchemaModel<{
47
+ lessonId: {
48
+ type: _contractspec_lib_schema678.FieldType<string, string>;
49
+ isOptional: false;
50
+ };
51
+ score: {
52
+ type: _contractspec_lib_schema678.FieldType<number, number>;
53
+ isOptional: true;
54
+ };
55
+ timeSpent: {
56
+ type: _contractspec_lib_schema678.FieldType<number, number>;
57
+ isOptional: false;
58
+ };
59
+ }>, _contractspec_lib_schema678.SchemaModel<{
60
+ success: {
61
+ type: _contractspec_lib_schema678.FieldType<boolean, boolean>;
62
+ isOptional: false;
63
+ };
64
+ xpEarned: {
65
+ type: _contractspec_lib_schema678.FieldType<number, number>;
66
+ isOptional: true;
67
+ };
68
+ }>, undefined>;
69
+ /**
70
+ * Submit a card review.
71
+ */
72
+ declare const SubmitCardReviewContract: _contractspec_lib_contracts34.OperationSpec<_contractspec_lib_schema678.SchemaModel<{
73
+ cardId: {
74
+ type: _contractspec_lib_schema678.FieldType<string, string>;
75
+ isOptional: false;
76
+ };
77
+ rating: {
78
+ type: _contractspec_lib_schema678.FieldType<string, string>;
79
+ isOptional: false;
80
+ };
81
+ responseTimeMs: {
82
+ type: _contractspec_lib_schema678.FieldType<number, number>;
83
+ isOptional: true;
84
+ };
85
+ }>, _contractspec_lib_schema678.SchemaModel<{
86
+ success: {
87
+ type: _contractspec_lib_schema678.FieldType<boolean, boolean>;
88
+ isOptional: false;
89
+ };
90
+ xpEarned: {
91
+ type: _contractspec_lib_schema678.FieldType<number, number>;
92
+ isOptional: true;
93
+ };
94
+ }>, undefined>;
95
+ /**
96
+ * Get cards due for review.
97
+ */
98
+ declare const GetDueCardsContract: _contractspec_lib_contracts34.OperationSpec<_contractspec_lib_schema678.SchemaModel<{
99
+ deckId: {
100
+ type: _contractspec_lib_schema678.FieldType<string, string>;
101
+ isOptional: true;
102
+ };
103
+ limit: {
104
+ type: _contractspec_lib_schema678.FieldType<number, number>;
105
+ isOptional: true;
106
+ };
107
+ }>, _contractspec_lib_schema678.SchemaModel<{
108
+ cards: {
109
+ type: _contractspec_lib_schema678.SchemaModel<{
110
+ id: {
111
+ type: _contractspec_lib_schema678.FieldType<string, string>;
112
+ isOptional: false;
113
+ };
114
+ deckId: {
115
+ type: _contractspec_lib_schema678.FieldType<string, string>;
116
+ isOptional: false;
117
+ };
118
+ front: {
119
+ type: _contractspec_lib_schema678.FieldType<string, string>;
120
+ isOptional: false;
121
+ };
122
+ back: {
123
+ type: _contractspec_lib_schema678.FieldType<string, string>;
124
+ isOptional: false;
125
+ };
126
+ hints: {
127
+ type: _contractspec_lib_schema678.FieldType<unknown, unknown>;
128
+ isOptional: true;
129
+ };
130
+ isDue: {
131
+ type: _contractspec_lib_schema678.FieldType<boolean, boolean>;
132
+ isOptional: false;
133
+ };
134
+ nextReviewAt: {
135
+ type: _contractspec_lib_schema678.FieldType<Date, string>;
136
+ isOptional: true;
137
+ };
138
+ }>;
139
+ isArray: true;
140
+ isOptional: false;
141
+ };
142
+ total: {
143
+ type: _contractspec_lib_schema678.FieldType<number, number>;
144
+ isOptional: false;
145
+ };
146
+ }>, undefined>;
147
+ /**
148
+ * Get learner dashboard.
149
+ */
150
+ declare const GetLearnerDashboardContract: _contractspec_lib_contracts34.OperationSpec<_contractspec_lib_schema678.SchemaModel<{
151
+ learnerId: {
152
+ type: _contractspec_lib_schema678.FieldType<string, string>;
153
+ isOptional: true;
154
+ };
155
+ }>, _contractspec_lib_schema678.SchemaModel<{
156
+ learner: {
157
+ type: _contractspec_lib_schema678.SchemaModel<{
158
+ id: {
159
+ type: _contractspec_lib_schema678.FieldType<string, string>;
160
+ isOptional: false;
161
+ };
162
+ userId: {
163
+ type: _contractspec_lib_schema678.FieldType<string, string>;
164
+ isOptional: false;
165
+ };
166
+ displayName: {
167
+ type: _contractspec_lib_schema678.FieldType<string, string>;
168
+ isOptional: true;
169
+ };
170
+ level: {
171
+ type: _contractspec_lib_schema678.FieldType<number, number>;
172
+ isOptional: false;
173
+ };
174
+ totalXp: {
175
+ type: _contractspec_lib_schema678.FieldType<number, number>;
176
+ isOptional: false;
177
+ };
178
+ currentStreak: {
179
+ type: _contractspec_lib_schema678.FieldType<number, number>;
180
+ isOptional: false;
181
+ };
182
+ longestStreak: {
183
+ type: _contractspec_lib_schema678.FieldType<number, number>;
184
+ isOptional: false;
185
+ };
186
+ createdAt: {
187
+ type: _contractspec_lib_schema678.FieldType<Date, string>;
188
+ isOptional: false;
189
+ };
190
+ }>;
191
+ isOptional: false;
192
+ };
193
+ currentStreak: {
194
+ type: _contractspec_lib_schema678.FieldType<number, number>;
195
+ isOptional: false;
196
+ };
197
+ dailyXpGoal: {
198
+ type: _contractspec_lib_schema678.FieldType<number, number>;
199
+ isOptional: false;
200
+ };
201
+ dailyXpProgress: {
202
+ type: _contractspec_lib_schema678.FieldType<number, number>;
203
+ isOptional: false;
204
+ };
205
+ activeEnrollments: {
206
+ type: _contractspec_lib_schema678.SchemaModel<{
207
+ id: {
208
+ type: _contractspec_lib_schema678.FieldType<string, string>;
209
+ isOptional: false;
210
+ };
211
+ learnerId: {
212
+ type: _contractspec_lib_schema678.FieldType<string, string>;
213
+ isOptional: false;
214
+ };
215
+ courseId: {
216
+ type: _contractspec_lib_schema678.FieldType<string, string>;
217
+ isOptional: false;
218
+ };
219
+ status: {
220
+ type: _contractspec_lib_schema678.FieldType<string, string>;
221
+ isOptional: false;
222
+ };
223
+ progress: {
224
+ type: _contractspec_lib_schema678.FieldType<number, number>;
225
+ isOptional: false;
226
+ };
227
+ startedAt: {
228
+ type: _contractspec_lib_schema678.FieldType<Date, string>;
229
+ isOptional: true;
230
+ };
231
+ completedAt: {
232
+ type: _contractspec_lib_schema678.FieldType<Date, string>;
233
+ isOptional: true;
234
+ };
235
+ }>;
236
+ isArray: true;
237
+ isOptional: false;
238
+ };
239
+ recentAchievements: {
240
+ type: _contractspec_lib_schema678.SchemaModel<{
241
+ id: {
242
+ type: _contractspec_lib_schema678.FieldType<string, string>;
243
+ isOptional: false;
244
+ };
245
+ key: {
246
+ type: _contractspec_lib_schema678.FieldType<string, string>;
247
+ isOptional: false;
248
+ };
249
+ name: {
250
+ type: _contractspec_lib_schema678.FieldType<string, string>;
251
+ isOptional: false;
252
+ };
253
+ description: {
254
+ type: _contractspec_lib_schema678.FieldType<string, string>;
255
+ isOptional: false;
256
+ };
257
+ icon: {
258
+ type: _contractspec_lib_schema678.FieldType<string, string>;
259
+ isOptional: true;
260
+ };
261
+ xpReward: {
262
+ type: _contractspec_lib_schema678.FieldType<number, number>;
263
+ isOptional: false;
264
+ };
265
+ unlockedAt: {
266
+ type: _contractspec_lib_schema678.FieldType<Date, string>;
267
+ isOptional: true;
268
+ };
269
+ }>;
270
+ isArray: true;
271
+ isOptional: false;
272
+ };
273
+ dueCardCount: {
274
+ type: _contractspec_lib_schema678.FieldType<number, number>;
275
+ isOptional: false;
276
+ };
277
+ }>, undefined>;
278
+ //#endregion
279
+ export { CompleteLessonContract, EnrollInCourseContract, GetDueCardsContract, GetLearnerDashboardContract, SubmitCardReviewContract };
280
+ //# sourceMappingURL=operations.d.ts.map