@timeback/powerpath 0.1.3 → 0.1.5

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.
@@ -0,0 +1,957 @@
1
+ /**
2
+ * PowerPath Base Types
3
+ *
4
+ * Common types and enums for PowerPath API responses.
5
+ */
6
+
7
+ // ═══════════════════════════════════════════════════════════════════════════════
8
+ // ENUMS
9
+ // ═══════════════════════════════════════════════════════════════════════════════
10
+
11
+ /**
12
+ * Test assignment status values.
13
+ */
14
+ type TestAssignmentStatus =
15
+ | 'assigned'
16
+ | 'in_progress'
17
+ | 'completed'
18
+ | 'failed'
19
+ | 'expired'
20
+ | 'cancelled'
21
+
22
+ /**
23
+ * Lesson types for PowerPath assessments.
24
+ */
25
+ type PowerPathLessonType = 'powerpath-100' | 'quiz' | 'test-out' | 'placement' | 'unit-test'
26
+
27
+ /**
28
+ * Question difficulty levels.
29
+ */
30
+ type PowerPathQuestionDifficulty = 'easy' | 'medium' | 'hard'
31
+
32
+ /**
33
+ * Lesson plan operation types.
34
+ */
35
+ type LessonPlanOperationType =
36
+ | 'set-skipped'
37
+ | 'add-custom-resource'
38
+ | 'move-item-before'
39
+ | 'move-item-after'
40
+ | 'move-item-to-start'
41
+ | 'move-item-to-end'
42
+ | 'change-item-parent'
43
+
44
+ // ═══════════════════════════════════════════════════════════════════════════════
45
+ // PAGINATION
46
+ // ═══════════════════════════════════════════════════════════════════════════════
47
+
48
+ /**
49
+ * Pagination metadata from PowerPath list responses.
50
+ */
51
+ interface PaginationMeta {
52
+ /** Total items across all pages */
53
+ totalCount: number
54
+ /** Total number of pages */
55
+ pageCount: number
56
+ /** Current page number (1-indexed) */
57
+ pageNumber: number
58
+ /**
59
+ * Offset for the next page of results.
60
+ *
61
+ * This API uses offset pagination: request `offset` is the number of items to skip.
62
+ * List responses also include an `offset` field; treat it as the server-provided
63
+ * next offset (and fall back to `currentOffset + limit` when implementing iterators).
64
+ */
65
+ offset: number
66
+ /** Items per page (default 100, max 3000) */
67
+ limit: number
68
+ }
69
+
70
+ /**
71
+ * PowerPath Response Types
72
+ *
73
+ * Entity types returned by PowerPath API endpoints.
74
+ */
75
+
76
+
77
+
78
+ // ═══════════════════════════════════════════════════════════════════════════════
79
+ // TEST ASSIGNMENTS
80
+ // ═══════════════════════════════════════════════════════════════════════════════
81
+
82
+ /**
83
+ * A single test assignment entity.
84
+ */
85
+ interface TestAssignment {
86
+ sourcedId: string
87
+ studentSourcedId: string
88
+ studentEmail: string
89
+ assignedByUserSourcedId?: string
90
+ subject: string
91
+ grade: string
92
+ assignmentStatus: TestAssignmentStatus
93
+ testName?: string
94
+ assignedAt?: string
95
+ expiresAt?: string
96
+ completedAt?: string
97
+ resourceSourcedId?: string
98
+ componentResourceSourcedId?: string
99
+ }
100
+
101
+ /**
102
+ * List response for test assignments.
103
+ */
104
+ interface TestAssignmentsListResponse extends PaginationMeta {
105
+ testAssignments: TestAssignment[]
106
+ }
107
+
108
+ /**
109
+ * Result from creating a test assignment.
110
+ */
111
+ interface AssignmentResult {
112
+ assignmentId: string
113
+ lessonId: string
114
+ resourceId: string
115
+ }
116
+
117
+ /**
118
+ * Result from bulk operations.
119
+ */
120
+ interface BulkResult {
121
+ success: boolean
122
+ results: AssignmentResult[]
123
+ errors: Array<{ row: number; message: string }>
124
+ }
125
+
126
+ // ═══════════════════════════════════════════════════════════════════════════════
127
+ // QUESTIONS
128
+ // ═══════════════════════════════════════════════════════════════════════════════
129
+
130
+ /**
131
+ * QTI content associated with a question.
132
+ */
133
+ interface PowerPathQuestionContent {
134
+ /** The type of the question (e.g., choiceInteraction) */
135
+ type?: string
136
+ /** The raw XML question in QTI format */
137
+ rawXml: string
138
+ }
139
+
140
+ /**
141
+ * Result of evaluating a student's response to a question.
142
+ */
143
+ interface PowerPathQuestionResult {
144
+ /** Score assigned considering the student's response */
145
+ score: number
146
+ /** Feedback text for the question */
147
+ feedback: string
148
+ /** Outcome variables from response processing */
149
+ outcomes?: Record<string, string>
150
+ }
151
+
152
+ /**
153
+ * A question in a PowerPath test.
154
+ *
155
+ * Represents a question with its metadata, optional QTI content,
156
+ * and (when answered) the student's response and result.
157
+ */
158
+ interface PowerPathTestQuestion {
159
+ /** ID that represents the question in the test */
160
+ id: string
161
+ /** Index of the question in the test */
162
+ index: number
163
+ /** Title of the question */
164
+ title: string
165
+ /** URL of the QTI question */
166
+ url: string
167
+ /** Difficulty of the question */
168
+ difficulty: PowerPathQuestionDifficulty
169
+ /** Whether the question has been approved by a human */
170
+ humanApproved?: boolean | null
171
+ /** QTI content of the question */
172
+ content?: PowerPathQuestionContent
173
+ /** Student's response (single value or array) */
174
+ response?: string | string[]
175
+ /** Student's responses keyed by response identifier */
176
+ responses?: Record<string, string | string[]>
177
+ /** Whether the student's response is correct */
178
+ correct?: boolean
179
+ /** Result of evaluating the response */
180
+ result?: PowerPathQuestionResult
181
+ /** sourcedId of the AssessmentResult for this question attempt */
182
+ resultId?: string
183
+ /** Learning objective IDs associated with the question */
184
+ learningObjectives?: string[]
185
+ }
186
+
187
+ // ═══════════════════════════════════════════════════════════════════════════════
188
+ // ASSESSMENTS
189
+ // ═══════════════════════════════════════════════════════════════════════════════
190
+
191
+ /**
192
+ * Result from creating an external test (test-out, placement, or internal).
193
+ */
194
+ interface ExternalTestCreateResponse {
195
+ lessonId: string
196
+ resourceId: string
197
+ }
198
+
199
+ /**
200
+ * A single attempt record.
201
+ */
202
+ interface Attempt {
203
+ attempt?: number
204
+ score: number
205
+ scoreStatus: string
206
+ }
207
+
208
+ /**
209
+ * Result from creating a new attempt.
210
+ */
211
+ interface CreateAttemptResponse {
212
+ attempt: Attempt
213
+ }
214
+
215
+ /**
216
+ * Result from getting attempts for a lesson.
217
+ */
218
+ interface GetAttemptsResponse {
219
+ attempts: Attempt[]
220
+ }
221
+
222
+ /**
223
+ * Result from resetting an attempt.
224
+ */
225
+ interface ResetAttemptResponse {
226
+ success: boolean
227
+ score: number
228
+ }
229
+
230
+ // ═══════════════════════════════════════════════════════════════════════════════
231
+ // ASSESSMENT PROGRESS (getAssessmentProgress)
232
+ // ═══════════════════════════════════════════════════════════════════════════════
233
+
234
+ /**
235
+ * Progress for a PowerPath 100 lesson.
236
+ *
237
+ * Uses `seenQuestions` (not `questions`) and includes remaining question counts
238
+ * per difficulty level.
239
+ */
240
+ interface PowerPath100ProgressResponse {
241
+ lessonType: 'powerpath-100'
242
+ /** Remaining question counts per difficulty level */
243
+ remainingQuestionsPerDifficulty: {
244
+ easy: number
245
+ medium: number
246
+ hard: number
247
+ }
248
+ /** Current score for this attempt */
249
+ score: number
250
+ /** Questions the student has seen */
251
+ seenQuestions: PowerPathTestQuestion[]
252
+ /** sourcedId of the parent test AssessmentResult */
253
+ testResultId?: string
254
+ /** Attempt number */
255
+ attempt: number
256
+ /** XP earned in the lesson */
257
+ xp: number | null
258
+ /** Multiplier for XP */
259
+ multiplier: number | null
260
+ /** Accuracy of the student's attempted questions */
261
+ accuracy: number
262
+ /** Number of correct questions answered */
263
+ correctQuestions: number
264
+ /** Total number of questions in the lesson */
265
+ totalQuestions: number
266
+ }
267
+
268
+ /**
269
+ * Progress for quiz, test-out, placement, or unit-test lessons.
270
+ *
271
+ * Uses `questions` (not `seenQuestions`). Includes `finalized` to indicate
272
+ * whether the lesson has been completed.
273
+ */
274
+ interface StandardProgressResponse {
275
+ lessonType: 'quiz' | 'test-out' | 'placement' | 'unit-test'
276
+ /** Whether the lesson has been finalized in the current attempt */
277
+ finalized: boolean
278
+ /** Current score for this attempt */
279
+ score?: number
280
+ /** Questions in the test */
281
+ questions: PowerPathTestQuestion[]
282
+ /** Tool provider of the lesson if external */
283
+ toolProvider: string | null
284
+ /** Whether auto-enrollment failed (only for finalized external tests) */
285
+ enrollmentFailed?: boolean
286
+ /** sourcedId of the parent test AssessmentResult */
287
+ testResultId?: string
288
+ /** Attempt number */
289
+ attempt: number
290
+ /** XP earned in the lesson */
291
+ xp: number | null
292
+ /** Multiplier for XP */
293
+ multiplier: number | null
294
+ /** Accuracy of the student's attempted questions */
295
+ accuracy: number
296
+ /** Number of correct questions answered */
297
+ correctQuestions: number
298
+ /** Total number of questions in the lesson */
299
+ totalQuestions: number
300
+ }
301
+
302
+ /**
303
+ * Result from getting assessment progress.
304
+ *
305
+ * Discriminated union on `lessonType`:
306
+ * - `'powerpath-100'` — uses `seenQuestions` and `remainingQuestionsPerDifficulty`
307
+ * - `'quiz' | 'test-out' | 'placement' | 'unit-test'` — uses `questions` and `finalized`
308
+ */
309
+ type GetAssessmentProgressResponse = PowerPath100ProgressResponse | StandardProgressResponse
310
+
311
+ // ═══════════════════════════════════════════════════════════════════════════════
312
+ // GET NEXT QUESTION (getNextQuestion)
313
+ // ═══════════════════════════════════════════════════════════════════════════════
314
+
315
+ /**
316
+ * Result from getting the next question in a PowerPath 100 lesson.
317
+ */
318
+ interface GetNextQuestionResponse {
319
+ /** Current PowerPath score of the student in this lesson */
320
+ score: number
321
+ /** The next question to present */
322
+ question: PowerPathTestQuestion
323
+ }
324
+
325
+ // ═══════════════════════════════════════════════════════════════════════════════
326
+ // UPDATE STUDENT QUESTION RESPONSE (updateStudentQuestionResponse)
327
+ // ═══════════════════════════════════════════════════════════════════════════════
328
+
329
+ /**
330
+ * Response feedback for a student's answer.
331
+ */
332
+ interface ResponseResultFeedback {
333
+ identifier?: string
334
+ value?: string
335
+ }
336
+
337
+ /**
338
+ * Result of processing a student's response.
339
+ */
340
+ interface ResponseResult {
341
+ /** Whether the student's response is correct */
342
+ isCorrect: boolean
343
+ /** Score for this specific response (0 or 1) */
344
+ score: number
345
+ /** Optional feedback */
346
+ feedback?: ResponseResultFeedback
347
+ }
348
+
349
+ /**
350
+ * Result from updating a student's response in a PowerPath 100 lesson.
351
+ *
352
+ * Includes the updated PowerPath score, response correctness, and accuracy stats.
353
+ */
354
+ interface PowerPath100UpdateResponseResult {
355
+ lessonType: 'powerpath-100'
356
+ /** Updated PowerPath score */
357
+ powerpathScore: number
358
+ /** Result of processing the response */
359
+ responseResult: ResponseResult
360
+ /** Assessment result for the question (for debugging) */
361
+ questionResult?: unknown
362
+ /** Assessment result for the test (for debugging) */
363
+ testResult?: unknown
364
+ /** Accuracy of the student's attempted questions */
365
+ accuracy: number
366
+ /** Number of correct questions answered */
367
+ correctQuestions: number
368
+ /** Total number of questions */
369
+ totalQuestions: number
370
+ /** XP earned */
371
+ xp: number | null
372
+ /** XP multiplier */
373
+ multiplier: number | null
374
+ }
375
+
376
+ /**
377
+ * Result from updating a student's response in a quiz/test-out/placement/unit-test lesson.
378
+ *
379
+ * Minimal response — correctness is evaluated at finalization.
380
+ */
381
+ interface StandardUpdateResponseResult {
382
+ lessonType: 'quiz' | 'test-out' | 'placement' | 'unit-test'
383
+ /** Assessment result for the question (for debugging) */
384
+ questionResult?: unknown
385
+ }
386
+
387
+ /**
388
+ * Result from updating a student question response.
389
+ *
390
+ * Discriminated union on `lessonType`:
391
+ * - `'powerpath-100'` — includes score, accuracy, and response correctness
392
+ * - Other lesson types — minimal, evaluated at finalization
393
+ */
394
+ type UpdateStudentQuestionResponseResult =
395
+ | PowerPath100UpdateResponseResult
396
+ | StandardUpdateResponseResult
397
+
398
+ // ═══════════════════════════════════════════════════════════════════════════════
399
+ // FINALIZE ASSESSMENT (finalStudentAssessmentResponse)
400
+ // ═══════════════════════════════════════════════════════════════════════════════
401
+
402
+ /**
403
+ * Result from finalizing a test assessment.
404
+ *
405
+ * Returned after all questions have been answered and the lesson is
406
+ * evaluated. Not applicable to `powerpath-100` or external test lessons.
407
+ */
408
+ interface FinalizeAssessmentResponse {
409
+ /** Type of the lesson that was finalized */
410
+ lessonType: PowerPathLessonType
411
+ /** Whether the lesson has been finalized */
412
+ finalized: boolean
413
+ /** The attempt number */
414
+ attempt: number
415
+ }
416
+
417
+ // ═══════════════════════════════════════════════════════════════════════════════
418
+ // TEST OUT (testOut)
419
+ // ═══════════════════════════════════════════════════════════════════════════════
420
+
421
+ /**
422
+ * Result from getting the test-out lesson for a student/course.
423
+ *
424
+ * Returns the test-out lesson reference, finalization status,
425
+ * and optional external tool credentials.
426
+ */
427
+ interface TestOutResponse {
428
+ lessonType: 'test-out'
429
+ /** ID of the test-out lesson, or null if none exists */
430
+ lessonId: string | null
431
+ /** Whether the test-out has been finalized in the current attempt */
432
+ finalized: boolean
433
+ /** Tool provider for the test-out lesson, or null if internal */
434
+ toolProvider: string | null
435
+ /** Attempt number */
436
+ attempt?: number
437
+ /** Credentials for accessing the assigned test on external tool */
438
+ credentials?: {
439
+ email: string
440
+ password: string
441
+ }
442
+ /** Assignment ID on external tool for results retrieval */
443
+ assignmentId?: string
444
+ /** Class ID on external tool for results retrieval */
445
+ classId?: string
446
+ /** URL of the test on external tool */
447
+ testUrl?: string
448
+ /** ID of the test on external tool */
449
+ testId?: string
450
+ }
451
+
452
+ // ═══════════════════════════════════════════════════════════════════════════════
453
+ // IMPORT EXTERNAL RESULTS (importExternalTestAssignmentResults)
454
+ // ═══════════════════════════════════════════════════════════════════════════════
455
+
456
+ /**
457
+ * Result from importing external test assignment results.
458
+ *
459
+ * Response shape varies by tool provider. Contains at minimum a success indicator.
460
+ */
461
+ interface ImportExternalResultsResponse {
462
+ [key: string]: unknown
463
+ }
464
+
465
+ // ═══════════════════════════════════════════════════════════════════════════════
466
+ // PLACEMENT
467
+ // ═══════════════════════════════════════════════════════════════════════════════
468
+
469
+ /**
470
+ * Result from getting all placement tests.
471
+ */
472
+ interface GetAllPlacementTestsResponse {
473
+ placementTests: unknown[]
474
+ }
475
+
476
+ /**
477
+ * Result from getting current placement level.
478
+ */
479
+ interface GetCurrentLevelResponse {
480
+ gradeLevel?: unknown
481
+ onboarded?: boolean
482
+ availableTests: number
483
+ }
484
+
485
+ /**
486
+ * Result from getting the next placement test.
487
+ */
488
+ interface GetNextPlacementTestResponse {
489
+ availableTests: number
490
+ lesson: string
491
+ }
492
+
493
+ /**
494
+ * Result from getting subject progress.
495
+ */
496
+ interface GetSubjectProgressResponse {
497
+ progress: unknown[]
498
+ }
499
+
500
+ /**
501
+ * Result from resetting placement.
502
+ */
503
+ interface ResetPlacementResponse {
504
+ success: boolean
505
+ placementResultsDeleted: number
506
+ onboardingReset: boolean
507
+ }
508
+
509
+ // ═══════════════════════════════════════════════════════════════════════════════
510
+ // SCREENING
511
+ // ═══════════════════════════════════════════════════════════════════════════════
512
+
513
+ /**
514
+ * Result from screening getResults.
515
+ * Response shape depends on MAP integration configuration.
516
+ */
517
+ interface ScreeningResultsResponse {
518
+ [key: string]: unknown
519
+ }
520
+
521
+ /**
522
+ * Result from screening getSession.
523
+ * Response shape depends on MAP integration configuration.
524
+ */
525
+ interface ScreeningSessionResponse {
526
+ [key: string]: unknown
527
+ }
528
+
529
+ /**
530
+ * Result from resetting a screening session.
531
+ */
532
+ interface ScreeningResetSessionResponse {
533
+ success?: boolean
534
+ [key: string]: unknown
535
+ }
536
+
537
+ /**
538
+ * Result from assigning a screening test.
539
+ */
540
+ interface ScreeningAssignTestResponse {
541
+ success?: boolean
542
+ [key: string]: unknown
543
+ }
544
+
545
+ // ═══════════════════════════════════════════════════════════════════════════════
546
+ // LESSON PLANS
547
+ // ═══════════════════════════════════════════════════════════════════════════════
548
+
549
+ /**
550
+ * Result from creating a lesson plan.
551
+ */
552
+ interface LessonPlanCreateResponse {
553
+ lessonPlanId: string
554
+ }
555
+
556
+ /**
557
+ * A lesson plan operation record.
558
+ */
559
+ interface LessonPlanOperation {
560
+ id: string
561
+ type: string
562
+ payload?: unknown
563
+ reason?: string
564
+ createdAt: string
565
+ sequenceNumber: number
566
+ createdBy?: string
567
+ }
568
+
569
+ /**
570
+ * Response containing lesson plan operations.
571
+ */
572
+ interface LessonPlanOperationsResponse {
573
+ operations: LessonPlanOperation[]
574
+ }
575
+
576
+ /**
577
+ * Result from a single lesson plan operation.
578
+ */
579
+ interface LessonPlanOperationResult {
580
+ success: boolean
581
+ message?: string
582
+ operationId?: string
583
+ }
584
+
585
+ /**
586
+ * Result from syncing lesson plan operations.
587
+ */
588
+ interface LessonPlanSyncResult {
589
+ success: boolean
590
+ message?: string
591
+ operationCount: number
592
+ operationResults: Array<{ success: boolean; errors?: Array<{ message: string }> }>
593
+ }
594
+
595
+ /**
596
+ * Result from syncing a course.
597
+ */
598
+ interface LessonPlanCourseSyncResult {
599
+ lessonPlansAffected: string[]
600
+ }
601
+
602
+ /**
603
+ * Response containing a lesson plan.
604
+ */
605
+ interface LessonPlanResponse {
606
+ lessonPlan: Record<string, unknown>
607
+ }
608
+
609
+ /**
610
+ * Response containing course progress.
611
+ */
612
+ interface CourseProgressResponse {
613
+ lineItems: Record<string, unknown>[]
614
+ }
615
+
616
+ /**
617
+ * Result from updating student item response.
618
+ */
619
+ interface UpdateStudentItemResponseResult {
620
+ success?: boolean
621
+ [key: string]: unknown
622
+ }
623
+
624
+ // ═══════════════════════════════════════════════════════════════════════════════
625
+ // SYLLABUS
626
+ // ═══════════════════════════════════════════════════════════════════════════════
627
+
628
+ /**
629
+ * Response containing syllabus data.
630
+ */
631
+ interface SyllabusResponse {
632
+ syllabus?: unknown
633
+ }
634
+
635
+ type input<T> = T extends {
636
+ _zod: {
637
+ input: any;
638
+ };
639
+ } ? T["_zod"]["input"] : unknown;
640
+
641
+ /**
642
+ * PowerPath Schemas
643
+ *
644
+ * Zod schemas for the PowerPath adaptive learning API.
645
+ */
646
+
647
+
648
+
649
+ declare const ExternalTestOut = ExternalTestBase.extend({
650
+ lessonType: z.literal('test-out'),
651
+ xp: z.number(),
652
+ })
653
+
654
+ declare const ExternalPlacement = ExternalTestBase.extend({
655
+ lessonType: z.literal('placement'),
656
+ courseIdOnFail: NonEmptyString.optional(),
657
+ xp: z.number().optional(),
658
+ })
659
+
660
+ declare const PowerPathCreateExternalPlacementTestInput = ExternalPlacement
661
+
662
+ declare const PowerPathCreateExternalTestOutInput = ExternalTestOut
663
+
664
+ declare const PowerPathCreateInternalTestInput = z.union([
665
+ InternalTestBase.extend({
666
+ testType: z.literal('qti'),
667
+ qti: z.object({
668
+ url: z.url(),
669
+ title: NonEmptyString.optional(),
670
+ metadata: z.record(z.string(), z.unknown()).optional(),
671
+ }),
672
+ }),
673
+ InternalTestBase.extend({
674
+ testType: z.literal('assessment-bank'),
675
+ assessmentBank: z.object({
676
+ resources: z.array(
677
+ z.object({
678
+ url: z.url(),
679
+ title: NonEmptyString.optional(),
680
+ metadata: z.record(z.string(), z.unknown()).optional(),
681
+ }),
682
+ ),
683
+ }),
684
+ }),
685
+ ])
686
+
687
+ declare const PowerPathCreateNewAttemptInput = z.object({
688
+ student: NonEmptyString,
689
+ lesson: NonEmptyString,
690
+ })
691
+
692
+ declare const PowerPathFinalStudentAssessmentResponseInput = z.object({
693
+ student: NonEmptyString,
694
+ lesson: NonEmptyString,
695
+ })
696
+
697
+ declare const PowerPathLessonPlansCreateInput = z.object({
698
+ courseId: NonEmptyString,
699
+ userId: NonEmptyString,
700
+ classId: NonEmptyString.optional(),
701
+ })
702
+
703
+ declare const PowerPathLessonPlanOperationInput = z.union([
704
+ z.object({
705
+ type: z.literal('set-skipped'),
706
+ payload: z.object({
707
+ target: LessonPlanTarget,
708
+ value: z.boolean(),
709
+ }),
710
+ }),
711
+ z.object({
712
+ type: z.literal('add-custom-resource'),
713
+ payload: z.object({
714
+ resource_id: NonEmptyString,
715
+ parent_component_id: NonEmptyString,
716
+ skipped: z.boolean().optional(),
717
+ }),
718
+ }),
719
+ z.object({
720
+ type: z.literal('move-item-before'),
721
+ payload: z.object({
722
+ target: LessonPlanTarget,
723
+ reference_id: NonEmptyString,
724
+ }),
725
+ }),
726
+ z.object({
727
+ type: z.literal('move-item-after'),
728
+ payload: z.object({
729
+ target: LessonPlanTarget,
730
+ reference_id: NonEmptyString,
731
+ }),
732
+ }),
733
+ z.object({
734
+ type: z.literal('move-item-to-start'),
735
+ payload: z.object({
736
+ target: LessonPlanTarget,
737
+ }),
738
+ }),
739
+ z.object({
740
+ type: z.literal('move-item-to-end'),
741
+ payload: z.object({
742
+ target: LessonPlanTarget,
743
+ }),
744
+ }),
745
+ z.object({
746
+ type: z.literal('change-item-parent'),
747
+ payload: z.object({
748
+ target: LessonPlanTarget,
749
+ new_parent_id: NonEmptyString,
750
+ position: z.enum(['start', 'end']).optional(),
751
+ }),
752
+ }),
753
+ ])
754
+
755
+ declare const PowerPathLessonPlanOperationsInput = z.object({
756
+ operation: z.array(PowerPathLessonPlanOperationInput),
757
+ reason: NonEmptyString.optional(),
758
+ })
759
+
760
+ declare const PowerPathLessonPlanUpdateStudentItemResponseInput = z.object({
761
+ studentId: NonEmptyString,
762
+ componentResourceId: NonEmptyString,
763
+ result: z.object({
764
+ status: z.enum(['active', 'tobedeleted']),
765
+ metadata: z.record(z.string(), z.unknown()).optional(),
766
+ score: z.number().optional(),
767
+ textScore: NonEmptyString.optional(),
768
+ scoreDate: NonEmptyString,
769
+ scorePercentile: z.number().optional(),
770
+ scoreStatus: ScoreStatus,
771
+ comment: NonEmptyString.optional(),
772
+ learningObjectiveSet: z
773
+ .array(
774
+ z.object({
775
+ source: NonEmptyString,
776
+ learningObjectiveResults: z.array(
777
+ z.object({
778
+ learningObjectiveId: NonEmptyString,
779
+ score: z.number().optional(),
780
+ textScore: NonEmptyString.optional(),
781
+ }),
782
+ ),
783
+ }),
784
+ )
785
+ .optional(),
786
+ inProgress: NonEmptyString.optional(),
787
+ incomplete: NonEmptyString.optional(),
788
+ late: NonEmptyString.optional(),
789
+ missing: NonEmptyString.optional(),
790
+ }),
791
+ })
792
+
793
+ declare const PowerPathMakeExternalTestAssignmentInput = z.object({
794
+ student: NonEmptyString,
795
+ lesson: NonEmptyString,
796
+ applicationName: NonEmptyString.optional(),
797
+ testId: NonEmptyString.optional(),
798
+ skipCourseEnrollment: z.boolean().optional(),
799
+ })
800
+
801
+ declare const PowerPathPlacementResetUserPlacementInput = z.object({
802
+ student: NonEmptyString,
803
+ subject: TimebackSubject,
804
+ })
805
+
806
+ declare const PowerPathResetAttemptInput = z.object({
807
+ student: NonEmptyString,
808
+ lesson: NonEmptyString,
809
+ })
810
+
811
+ declare const PowerPathScreeningResetSessionInput = z.object({
812
+ userId: NonEmptyString,
813
+ })
814
+
815
+ declare const PowerPathScreeningAssignTestInput = z.object({
816
+ userId: NonEmptyString,
817
+ subject: z.enum(['Math', 'Reading', 'Language', 'Science']),
818
+ })
819
+
820
+ declare const PowerPathTestAssignmentsCreateInput = z.object({
821
+ student: NonEmptyString,
822
+ subject: TimebackSubject,
823
+ grade: TimebackGrade,
824
+ testName: NonEmptyString.optional(),
825
+ })
826
+
827
+ declare const PowerPathTestAssignmentsUpdateInput = z.object({
828
+ testName: NonEmptyString,
829
+ })
830
+
831
+ declare const PowerPathTestAssignmentsBulkInput = z.object({
832
+ items: z.array(PowerPathTestAssignmentItemInput),
833
+ })
834
+
835
+ declare const PowerPathTestAssignmentsImportInput = z.object({
836
+ spreadsheetUrl: z.url(),
837
+ sheet: NonEmptyString,
838
+ })
839
+
840
+ declare const PowerPathTestAssignmentsListParams = z.object({
841
+ student: NonEmptyString,
842
+ status: z
843
+ .enum(['assigned', 'in_progress', 'completed', 'failed', 'expired', 'cancelled'])
844
+ .optional(),
845
+ subject: NonEmptyString.optional(),
846
+ grade: TimebackGrade.optional(),
847
+ limit: z.number().int().positive().max(3000).optional(),
848
+ offset: z.number().int().nonnegative().optional(),
849
+ })
850
+
851
+ declare const PowerPathTestAssignmentsAdminParams = z.object({
852
+ student: NonEmptyString.optional(),
853
+ status: z
854
+ .enum(['assigned', 'in_progress', 'completed', 'failed', 'expired', 'cancelled'])
855
+ .optional(),
856
+ subject: NonEmptyString.optional(),
857
+ grade: TimebackGrade.optional(),
858
+ limit: z.number().int().positive().max(3000).optional(),
859
+ offset: z.number().int().nonnegative().optional(),
860
+ })
861
+
862
+ declare const PowerPathUpdateStudentQuestionResponseInput = z.object({
863
+ student: NonEmptyString,
864
+ question: NonEmptyString,
865
+ response: z.union([NonEmptyString, z.array(NonEmptyString)]).optional(),
866
+ responses: z.record(z.string(), z.union([NonEmptyString, z.array(NonEmptyString)])).optional(),
867
+ lesson: NonEmptyString,
868
+ })
869
+
870
+ declare const PowerPathGetAssessmentProgressParams = z.object({
871
+ student: NonEmptyString,
872
+ lesson: NonEmptyString,
873
+ attempt: z.number().int().positive().optional(),
874
+ })
875
+
876
+ declare const PowerPathGetNextQuestionParams = z.object({
877
+ student: NonEmptyString,
878
+ lesson: NonEmptyString,
879
+ })
880
+
881
+ declare const PowerPathGetAttemptsParams = z.object({
882
+ student: NonEmptyString,
883
+ lesson: NonEmptyString,
884
+ })
885
+
886
+ declare const PowerPathTestOutParams = z.object({
887
+ student: NonEmptyString,
888
+ lesson: NonEmptyString.optional(),
889
+ finalized: z.boolean().optional(),
890
+ toolProvider: NonEmptyString.optional(),
891
+ attempt: z.number().int().positive().optional(),
892
+ })
893
+
894
+ declare const PowerPathImportExternalTestAssignmentResultsParams = z.object({
895
+ student: NonEmptyString,
896
+ lesson: NonEmptyString,
897
+ applicationName: NonEmptyString.optional(),
898
+ })
899
+
900
+ declare const PowerPathPlacementQueryParams = z.object({
901
+ student: NonEmptyString,
902
+ subject: TimebackSubject,
903
+ })
904
+
905
+ declare const PowerPathSyllabusQueryParams = z.object({
906
+ status: z.enum(['active', 'tobedeleted']).optional(),
907
+ })
908
+
909
+ // ═══════════════════════════════════════════════════════════════════════════════
910
+ // TYPE EXPORTS (REQUEST INPUTS)
911
+ // ═══════════════════════════════════════════════════════════════════════════════
912
+
913
+ // Shorter type aliases (like OneRoster pattern: schema = OneRosterFoo, type = Foo)
914
+ type CreateExternalPlacementTestInput = input<
915
+ typeof PowerPathCreateExternalPlacementTestInput
916
+ >
917
+ type CreateExternalTestOutInput = input<typeof PowerPathCreateExternalTestOutInput>
918
+ type CreateInternalTestInput = input<typeof PowerPathCreateInternalTestInput>
919
+ type CreateNewAttemptInput = input<typeof PowerPathCreateNewAttemptInput>
920
+ type FinalStudentAssessmentResponseInput = input<
921
+ typeof PowerPathFinalStudentAssessmentResponseInput
922
+ >
923
+ type LessonPlansCreateInput = input<typeof PowerPathLessonPlansCreateInput>
924
+ type LessonPlanOperationInput = input<typeof PowerPathLessonPlanOperationInput>
925
+ type LessonPlanOperationsInput = input<typeof PowerPathLessonPlanOperationsInput>
926
+ type LessonPlanUpdateStudentItemResponseInput = input<
927
+ typeof PowerPathLessonPlanUpdateStudentItemResponseInput
928
+ >
929
+ type MakeExternalTestAssignmentInput = input<
930
+ typeof PowerPathMakeExternalTestAssignmentInput
931
+ >
932
+ type PlacementResetUserPlacementInput = input<
933
+ typeof PowerPathPlacementResetUserPlacementInput
934
+ >
935
+ type ResetAttemptInput = input<typeof PowerPathResetAttemptInput>
936
+ type ScreeningResetSessionInput = input<typeof PowerPathScreeningResetSessionInput>
937
+ type ScreeningAssignTestInput = input<typeof PowerPathScreeningAssignTestInput>
938
+ type TestAssignmentsCreateInput = input<typeof PowerPathTestAssignmentsCreateInput>
939
+ type TestAssignmentsUpdateInput = input<typeof PowerPathTestAssignmentsUpdateInput>
940
+ type TestAssignmentsBulkInput = input<typeof PowerPathTestAssignmentsBulkInput>
941
+ type TestAssignmentsImportInput = input<typeof PowerPathTestAssignmentsImportInput>
942
+ type TestAssignmentsListParams = input<typeof PowerPathTestAssignmentsListParams>
943
+ type TestAssignmentsAdminParams = input<typeof PowerPathTestAssignmentsAdminParams>
944
+ type UpdateStudentQuestionResponseInput = input<
945
+ typeof PowerPathUpdateStudentQuestionResponseInput
946
+ >
947
+ type GetAssessmentProgressParams = input<typeof PowerPathGetAssessmentProgressParams>
948
+ type GetNextQuestionParams = input<typeof PowerPathGetNextQuestionParams>
949
+ type GetAttemptsParams = input<typeof PowerPathGetAttemptsParams>
950
+ type TestOutParams = input<typeof PowerPathTestOutParams>
951
+ type ImportExternalTestAssignmentResultsParams = input<
952
+ typeof PowerPathImportExternalTestAssignmentResultsParams
953
+ >
954
+ type PlacementQueryParams = input<typeof PowerPathPlacementQueryParams>
955
+ type SyllabusQueryParams = input<typeof PowerPathSyllabusQueryParams>
956
+
957
+ export type { AssignmentResult, Attempt, BulkResult, CourseProgressResponse, CreateAttemptResponse, CreateExternalPlacementTestInput, CreateExternalTestOutInput, CreateInternalTestInput, CreateNewAttemptInput, ExternalTestCreateResponse, FinalStudentAssessmentResponseInput, FinalizeAssessmentResponse, GetAllPlacementTestsResponse, GetAssessmentProgressParams, GetAssessmentProgressResponse, GetAttemptsParams, GetAttemptsResponse, GetCurrentLevelResponse, GetNextPlacementTestResponse, GetNextQuestionParams, GetNextQuestionResponse, GetSubjectProgressResponse, ImportExternalResultsResponse, ImportExternalTestAssignmentResultsParams, LessonPlanCourseSyncResult, LessonPlanCreateResponse, LessonPlanOperation, LessonPlanOperationInput, LessonPlanOperationResult, LessonPlanOperationType, LessonPlanOperationsInput, LessonPlanOperationsResponse, LessonPlanResponse, LessonPlanSyncResult, LessonPlanUpdateStudentItemResponseInput, LessonPlansCreateInput, MakeExternalTestAssignmentInput, PaginationMeta, PlacementQueryParams, PlacementResetUserPlacementInput, PowerPath100ProgressResponse, PowerPath100UpdateResponseResult, PowerPathLessonType, PowerPathQuestionContent, PowerPathQuestionDifficulty, PowerPathQuestionResult, PowerPathTestQuestion, ResetAttemptInput, ResetAttemptResponse, ResetPlacementResponse, ResponseResult, ResponseResultFeedback, ScreeningAssignTestInput, ScreeningAssignTestResponse, ScreeningResetSessionInput, ScreeningResetSessionResponse, ScreeningResultsResponse, ScreeningSessionResponse, StandardProgressResponse, StandardUpdateResponseResult, SyllabusQueryParams, SyllabusResponse, TestAssignment, TestAssignmentStatus, TestAssignmentsAdminParams, TestAssignmentsBulkInput, TestAssignmentsCreateInput, TestAssignmentsImportInput, TestAssignmentsListParams, TestAssignmentsListResponse, TestAssignmentsUpdateInput, TestOutParams, TestOutResponse, UpdateStudentItemResponseResult, UpdateStudentQuestionResponseInput, UpdateStudentQuestionResponseResult };