@timeback/powerpath 0.2.2-beta.20260331190459 → 0.2.2-beta.20260331191116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/errors.d.ts +1 -144
- package/dist/index.d.ts +1004 -1349
- package/dist/index.js +25 -15
- package/dist/public-types.d.ts +1184 -2
- package/dist/public-types.js +0 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,1522 +1,1177 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export { CreateExternalPlacementTestInput, CreateExternalTestOutInput, CreateInternalTestInput, CreateNewAttemptInput, FinalStudentAssessmentResponseInput, GetAssessmentProgressParams, GetAttemptsParams, GetNextQuestionParams, ImportExternalTestAssignmentResultsParams, LessonPlanOperationInput, LessonPlanOperationsInput, LessonPlanUpdateStudentItemResponseInput, LessonPlansCreateInput, MakeExternalStudentTestOutAssignmentInput, MakeExternalTestAssignmentInput, PlacementQueryParams, PlacementResetUserPlacementInput, ResetAttemptInput, ScreeningAssignTestInput, ScreeningResetSessionInput, SyllabusQueryParams, TestAssignmentsAdminParams, TestAssignmentsBulkInput, TestAssignmentsCreateInput, TestAssignmentsImportInput, TestAssignmentsListParams, TestAssignmentsUpdateInput, TestOutParams, UpdateStudentQuestionResponseInput } from '@timeback/types/zod';
|
|
1
|
+
import * as _timeback_internal_client_infra from '@timeback/internal-client-infra';
|
|
2
|
+
import { PowerPathPaths, RequestOptions, PaginatedResponse, ClientConfig, TransportOnlyConfig, ProviderClientConfig, BaseTransportConfig, Paginator as Paginator$1, ListParams, ProviderRegistry, TimebackProvider, AuthCheckResult, BaseTransport } from '@timeback/internal-client-infra';
|
|
3
|
+
export { AuthCheckResult, EnvAuth, Environment, ExplicitAuth, ListParams, PageResult } from '@timeback/internal-client-infra';
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
6
|
+
* PowerPath Base Types
|
|
8
7
|
*
|
|
9
|
-
*
|
|
8
|
+
* Common types and enums for PowerPath API responses.
|
|
10
9
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* Returns a cached token if still valid, otherwise fetches a new one.
|
|
16
|
-
*
|
|
17
|
-
* @returns A valid access token string
|
|
18
|
-
* @throws {Error} If token acquisition fails
|
|
19
|
-
*/
|
|
20
|
-
getToken(): Promise<string>;
|
|
21
|
-
/**
|
|
22
|
-
* Invalidate the cached token.
|
|
23
|
-
*
|
|
24
|
-
* Forces the next getToken() call to fetch a fresh token.
|
|
25
|
-
* Should be called when a request fails with 401 Unauthorized.
|
|
26
|
-
*
|
|
27
|
-
* Optional - not all implementations may support invalidation.
|
|
28
|
-
*/
|
|
29
|
-
invalidate?(): void;
|
|
30
|
-
}
|
|
10
|
+
|
|
11
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
12
|
+
// ENUMS
|
|
13
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
31
14
|
|
|
32
15
|
/**
|
|
33
|
-
*
|
|
16
|
+
* Test assignment status values.
|
|
34
17
|
*/
|
|
35
|
-
|
|
18
|
+
type TestAssignmentStatus =
|
|
19
|
+
| 'assigned'
|
|
20
|
+
| 'in_progress'
|
|
21
|
+
| 'completed'
|
|
22
|
+
| 'failed'
|
|
23
|
+
| 'expired'
|
|
24
|
+
| 'cancelled'
|
|
36
25
|
|
|
37
26
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* Central type definitions used across all logger components.
|
|
41
|
-
* These types define the contract between the logger, formatters, and consumers.
|
|
27
|
+
* Lesson types for PowerPath assessments.
|
|
42
28
|
*/
|
|
29
|
+
type PowerPathLessonType =
|
|
30
|
+
| 'powerpath-100'
|
|
31
|
+
| 'quiz'
|
|
32
|
+
| 'test-out'
|
|
33
|
+
| 'placement'
|
|
34
|
+
| 'unit-test'
|
|
35
|
+
| 'alpha-read-article'
|
|
36
|
+
|
|
43
37
|
/**
|
|
44
|
-
*
|
|
38
|
+
* Lesson types that behave like quizzes (static tests with finalization).
|
|
45
39
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* - warn: Something unexpected but not breaking (deprecated API used)
|
|
49
|
-
* - error: Something failed (request failed, database connection lost)
|
|
40
|
+
* These types can be finalized via `finalStudentAssessmentResponse`,
|
|
41
|
+
* return score 0 while not finalized, and support both internal and external tests.
|
|
50
42
|
*/
|
|
51
|
-
type
|
|
43
|
+
type QuizLikeLessonType = 'quiz' | 'test-out' | 'placement' | 'unit-test'
|
|
44
|
+
|
|
52
45
|
/**
|
|
53
|
-
*
|
|
46
|
+
* Lesson types that support external test assignment via third-party tools.
|
|
54
47
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* - production: JSON lines for log aggregation (DataDog, CloudWatch, etc.)
|
|
58
|
-
* - browser: Browser console with CSS styling
|
|
59
|
-
* - test: Test environment with no output
|
|
48
|
+
* These types can use `makeExternalTestAssignment` and
|
|
49
|
+
* `importExternalTestAssignmentResults`.
|
|
60
50
|
*/
|
|
61
|
-
type
|
|
51
|
+
type ExternalTestCapableLessonType = 'test-out' | 'placement' | 'unit-test'
|
|
52
|
+
|
|
62
53
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* Context is merged into log output - in production it becomes top-level
|
|
66
|
-
* JSON fields, in terminal it's displayed as key=value pairs.
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* log.info('User created', { userId: 123, email: 'foo@bar.com' })
|
|
54
|
+
* Score status values for assessment attempts.
|
|
70
55
|
*/
|
|
71
|
-
type
|
|
56
|
+
type ScoreStatus =
|
|
57
|
+
| 'exempt'
|
|
58
|
+
| 'fully graded'
|
|
59
|
+
| 'not submitted'
|
|
60
|
+
| 'partially graded'
|
|
61
|
+
| 'submitted'
|
|
62
|
+
|
|
72
63
|
/**
|
|
73
|
-
*
|
|
64
|
+
* Question difficulty levels.
|
|
74
65
|
*/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
scope?: string;
|
|
81
|
-
/**
|
|
82
|
-
* Minimum log level to output.
|
|
83
|
-
* Logs below this level are silently ignored.
|
|
84
|
-
* @default 'info' (or 'debug' if DEBUG env var is set)
|
|
85
|
-
*/
|
|
86
|
-
minLevel?: LogLevel;
|
|
87
|
-
/**
|
|
88
|
-
* Override automatic environment detection.
|
|
89
|
-
* Useful for testing or forcing a specific format.
|
|
90
|
-
*/
|
|
91
|
-
environment?: Environment$2;
|
|
92
|
-
/**
|
|
93
|
-
* Default context added to every log entry from this logger.
|
|
94
|
-
* Useful for request IDs, user IDs, etc.
|
|
95
|
-
*/
|
|
96
|
-
defaultContext?: LogContext;
|
|
97
|
-
}
|
|
66
|
+
type PowerPathQuestionDifficulty = 'easy' | 'medium' | 'hard'
|
|
67
|
+
|
|
68
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
69
|
+
// PAGINATION
|
|
70
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
98
71
|
|
|
99
72
|
/**
|
|
100
|
-
*
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
* Usually you'd use createLogger() instead of new Logger().
|
|
120
|
-
*/
|
|
121
|
-
constructor(options?: LoggerOptions);
|
|
122
|
-
/**
|
|
123
|
-
* Create a child logger with an additional scope segment.
|
|
124
|
-
*
|
|
125
|
-
* Child loggers inherit minLevel and defaultContext from parent.
|
|
126
|
-
* Scope is appended with a colon separator.
|
|
127
|
-
*
|
|
128
|
-
* @param scope - Additional scope segment to append
|
|
129
|
-
* @returns New Logger instance with extended scope
|
|
130
|
-
*
|
|
131
|
-
* @example
|
|
132
|
-
* const api = createLogger({ scope: 'api' })
|
|
133
|
-
* const users = api.child('users')
|
|
134
|
-
* users.info('Created') // scope: "api:users"
|
|
135
|
-
*/
|
|
136
|
-
child(scope: string): Logger;
|
|
137
|
-
/**
|
|
138
|
-
* Create a logger with additional default context.
|
|
139
|
-
*
|
|
140
|
-
* The new context is merged with existing default context.
|
|
141
|
-
* Useful for adding request IDs, user IDs, etc.
|
|
142
|
-
*
|
|
143
|
-
* @param context - Additional context to include in all logs
|
|
144
|
-
* @returns New Logger instance with extended context
|
|
145
|
-
*
|
|
146
|
-
* @example
|
|
147
|
-
* const requestLog = log.withContext({ requestId: 'abc123' })
|
|
148
|
-
* requestLog.info('Processing') // requestId included automatically
|
|
149
|
-
*/
|
|
150
|
-
withContext(context: LogContext): Logger;
|
|
151
|
-
/**
|
|
152
|
-
* Log a debug message.
|
|
153
|
-
*
|
|
154
|
-
* Use for detailed diagnostic information useful during development.
|
|
155
|
-
* These are typically filtered out in production.
|
|
156
|
-
*
|
|
157
|
-
* @param message - The log message
|
|
158
|
-
* @param context - Optional key-value context to include with the log
|
|
159
|
-
*/
|
|
160
|
-
debug(message: string, context?: LogContext): void;
|
|
161
|
-
/**
|
|
162
|
-
* Log an info message.
|
|
163
|
-
*
|
|
164
|
-
* Use for general operational information.
|
|
165
|
-
* Examples: server started, request received, job completed.
|
|
166
|
-
*
|
|
167
|
-
* @param message - The log message
|
|
168
|
-
* @param context - Optional key-value context to include with the log
|
|
169
|
-
*/
|
|
170
|
-
info(message: string, context?: LogContext): void;
|
|
171
|
-
/**
|
|
172
|
-
* Log a warning message.
|
|
173
|
-
*
|
|
174
|
-
* Use for unexpected but non-breaking issues.
|
|
175
|
-
* Examples: deprecated API used, retrying operation, approaching limit.
|
|
176
|
-
*
|
|
177
|
-
* @param message - The log message
|
|
178
|
-
* @param context - Optional key-value context to include with the log
|
|
179
|
-
*/
|
|
180
|
-
warn(message: string, context?: LogContext): void;
|
|
181
|
-
/**
|
|
182
|
-
* Log an error message.
|
|
183
|
-
*
|
|
184
|
-
* Use for failures that need attention.
|
|
185
|
-
* Examples: request failed, database error, unhandled exception.
|
|
186
|
-
*
|
|
187
|
-
* @param message - The log message
|
|
188
|
-
* @param context - Optional key-value context to include with the log
|
|
189
|
-
*/
|
|
190
|
-
error(message: string, context?: LogContext): void;
|
|
191
|
-
/**
|
|
192
|
-
* Internal method that builds the log entry and passes it to the formatter.
|
|
193
|
-
*
|
|
194
|
-
* All public log methods (debug, info, warn, error) delegate here.
|
|
195
|
-
*
|
|
196
|
-
* @param level - The log level
|
|
197
|
-
* @param message - The log message
|
|
198
|
-
* @param context - Optional key-value context to include with the log
|
|
199
|
-
*/
|
|
200
|
-
private log;
|
|
73
|
+
* Pagination metadata from PowerPath list responses.
|
|
74
|
+
*/
|
|
75
|
+
interface PaginationMeta {
|
|
76
|
+
/** Total items across all pages */
|
|
77
|
+
totalCount: number
|
|
78
|
+
/** Total number of pages */
|
|
79
|
+
pageCount: number
|
|
80
|
+
/** Current page number (1-indexed) */
|
|
81
|
+
pageNumber: number
|
|
82
|
+
/**
|
|
83
|
+
* Offset for the next page of results.
|
|
84
|
+
*
|
|
85
|
+
* This API uses offset pagination: request `offset` is the number of items to skip.
|
|
86
|
+
* List responses also include an `offset` field; treat it as the server-provided
|
|
87
|
+
* next offset (and fall back to `currentOffset + limit` when implementing iterators).
|
|
88
|
+
*/
|
|
89
|
+
offset: number
|
|
90
|
+
/** Items per page (default 100, max 3000) */
|
|
91
|
+
limit: number
|
|
201
92
|
}
|
|
202
93
|
|
|
203
94
|
/**
|
|
204
|
-
*
|
|
95
|
+
* PowerPath Response Types
|
|
205
96
|
*
|
|
206
|
-
*
|
|
207
|
-
*/
|
|
208
|
-
/**
|
|
209
|
-
* Primitive value types that can be used in filters.
|
|
97
|
+
* Entity types returned by PowerPath API endpoints.
|
|
210
98
|
*/
|
|
211
|
-
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
103
|
+
// TEST ASSIGNMENTS
|
|
104
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
105
|
+
|
|
212
106
|
/**
|
|
213
|
-
*
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
gte?: T;
|
|
230
|
-
/** Less than */
|
|
231
|
-
lt?: T;
|
|
232
|
-
/** Less than or equal */
|
|
233
|
-
lte?: T;
|
|
234
|
-
/** Contains substring (strings only) */
|
|
235
|
-
contains?: T extends string ? string : never;
|
|
236
|
-
/** Match any of the values */
|
|
237
|
-
in?: T[];
|
|
238
|
-
/** Match none of the values */
|
|
239
|
-
notIn?: T[];
|
|
107
|
+
* A single test assignment entity.
|
|
108
|
+
*/
|
|
109
|
+
interface TestAssignment {
|
|
110
|
+
sourcedId: string
|
|
111
|
+
studentSourcedId: string
|
|
112
|
+
studentEmail: string
|
|
113
|
+
assignedByUserSourcedId: string | null
|
|
114
|
+
subject: string
|
|
115
|
+
grade: string
|
|
116
|
+
assignmentStatus: TestAssignmentStatus
|
|
117
|
+
testName?: string | null
|
|
118
|
+
assignedAt?: string | null
|
|
119
|
+
expiresAt?: string | null
|
|
120
|
+
completedAt?: string | null
|
|
121
|
+
resourceSourcedId?: string | null
|
|
122
|
+
componentResourceSourcedId?: string | null
|
|
240
123
|
}
|
|
124
|
+
|
|
241
125
|
/**
|
|
242
|
-
*
|
|
243
|
-
* - A direct value (implies equality)
|
|
244
|
-
* - An object with operators
|
|
245
|
-
*/
|
|
246
|
-
type FieldCondition<T> = T | FieldOperators<T>;
|
|
247
|
-
/**
|
|
248
|
-
* Map filter field types to field conditions.
|
|
249
|
-
*
|
|
250
|
-
* Each field in F becomes an optional filter condition.
|
|
251
|
-
*
|
|
252
|
-
* @typeParam F - Filter fields type (e.g., UserFilterFields)
|
|
253
|
-
*/
|
|
254
|
-
type FilterFields<F> = {
|
|
255
|
-
[K in keyof F]?: FieldCondition<F[K] & FilterValue>;
|
|
256
|
-
};
|
|
257
|
-
/**
|
|
258
|
-
* OR condition for combining multiple field conditions.
|
|
126
|
+
* List response for test assignments.
|
|
259
127
|
*/
|
|
260
|
-
interface
|
|
261
|
-
|
|
128
|
+
interface TestAssignmentsListResponse extends PaginationMeta {
|
|
129
|
+
testAssignments: TestAssignment[]
|
|
262
130
|
}
|
|
263
|
-
/**
|
|
264
|
-
* A where clause for filtering entities.
|
|
265
|
-
*
|
|
266
|
-
* The type parameter F should be a filter fields type that defines
|
|
267
|
-
* the available fields and their value types for filtering.
|
|
268
|
-
*
|
|
269
|
-
* Multiple fields at the same level are combined with AND.
|
|
270
|
-
* Use `OR` for explicit OR logic.
|
|
271
|
-
*
|
|
272
|
-
* @typeParam F - Filter fields type (e.g., UserFilterFields)
|
|
273
|
-
*
|
|
274
|
-
* @example
|
|
275
|
-
* ```typescript
|
|
276
|
-
* // Simple equality (implicit AND)
|
|
277
|
-
* { status: 'active', role: 'teacher' }
|
|
278
|
-
* // → status='active' AND role='teacher'
|
|
279
|
-
* ```
|
|
280
|
-
*
|
|
281
|
-
* @example
|
|
282
|
-
* ```typescript
|
|
283
|
-
* // With operators
|
|
284
|
-
* { status: { ne: 'deleted' }, score: { gte: 90 } }
|
|
285
|
-
* // → status!='deleted' AND score>=90
|
|
286
|
-
* ```
|
|
287
|
-
*
|
|
288
|
-
* @example
|
|
289
|
-
* ```typescript
|
|
290
|
-
* // OR condition
|
|
291
|
-
* { OR: [{ role: 'teacher' }, { role: 'aide' }] }
|
|
292
|
-
* // → role='teacher' OR role='aide'
|
|
293
|
-
* ```
|
|
294
|
-
*
|
|
295
|
-
* @example
|
|
296
|
-
* ```typescript
|
|
297
|
-
* // Match multiple values
|
|
298
|
-
* { role: { in: ['teacher', 'aide'] } }
|
|
299
|
-
* // → role='teacher' OR role='aide'
|
|
300
|
-
* ```
|
|
301
|
-
*/
|
|
302
|
-
type WhereClause<F> = FilterFields<F> | OrCondition<F>;
|
|
303
131
|
|
|
304
132
|
/**
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
* Common types for API client infrastructure.
|
|
133
|
+
* Result from creating a test assignment.
|
|
308
134
|
*/
|
|
135
|
+
interface AssignmentResult {
|
|
136
|
+
assignmentId: string
|
|
137
|
+
lessonId: string
|
|
138
|
+
resourceId: string
|
|
139
|
+
}
|
|
309
140
|
|
|
310
141
|
/**
|
|
311
|
-
*
|
|
312
|
-
* Avoids Bun-specific extensions on `typeof fetch`.
|
|
142
|
+
* Result from bulk operations.
|
|
313
143
|
*/
|
|
314
|
-
|
|
144
|
+
interface BulkResult {
|
|
145
|
+
success: boolean
|
|
146
|
+
results: AssignmentResult[]
|
|
147
|
+
errors: Array<{ row: number; message: string }>
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
151
|
+
// QUESTIONS
|
|
152
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
153
|
+
|
|
315
154
|
/**
|
|
316
|
-
*
|
|
155
|
+
* QTI content associated with a question.
|
|
317
156
|
*/
|
|
318
|
-
|
|
157
|
+
interface PowerPathQuestionContent {
|
|
158
|
+
/** The type of the question (e.g., choiceInteraction) */
|
|
159
|
+
type?: string
|
|
160
|
+
/** The raw XML question in QTI format */
|
|
161
|
+
rawXml: string
|
|
162
|
+
}
|
|
163
|
+
|
|
319
164
|
/**
|
|
320
|
-
*
|
|
165
|
+
* Result of evaluating a student's response to a question.
|
|
321
166
|
*/
|
|
322
|
-
|
|
167
|
+
interface PowerPathQuestionResult {
|
|
168
|
+
/** Score assigned considering the student's response */
|
|
169
|
+
score: number
|
|
170
|
+
/** Feedback — plain string from updateStudentQuestionResponse, structured object from progress/next-question responses */
|
|
171
|
+
feedback: string | { value: string; identifier: string }
|
|
172
|
+
/** Outcome variables from response processing (values may be strings or numbers) */
|
|
173
|
+
outcomes?: Record<string, string | number>
|
|
174
|
+
}
|
|
175
|
+
|
|
323
176
|
/**
|
|
324
|
-
*
|
|
325
|
-
*
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
177
|
+
* A question in a PowerPath test.
|
|
178
|
+
*
|
|
179
|
+
* Represents a question with its metadata, optional QTI content,
|
|
180
|
+
* and (when answered) the student's response and result.
|
|
181
|
+
*/
|
|
182
|
+
interface PowerPathTestQuestion {
|
|
183
|
+
/** ID that represents the question in the test */
|
|
184
|
+
id: string
|
|
185
|
+
/** Index of the question in the test */
|
|
186
|
+
index: number
|
|
187
|
+
/** Title of the question */
|
|
188
|
+
title: string
|
|
189
|
+
/** URL of the QTI question */
|
|
190
|
+
url: string
|
|
191
|
+
/** Difficulty of the question */
|
|
192
|
+
difficulty: PowerPathQuestionDifficulty
|
|
193
|
+
/** Whether the question has been approved by a human */
|
|
194
|
+
humanApproved?: boolean | null
|
|
195
|
+
/** QTI content of the question */
|
|
196
|
+
content?: PowerPathQuestionContent
|
|
197
|
+
/** Student's response (single value or array) */
|
|
198
|
+
response?: string | string[]
|
|
199
|
+
/** Student's responses keyed by response identifier */
|
|
200
|
+
responses?: Record<string, string | string[]>
|
|
201
|
+
/** Whether the student's response is correct */
|
|
202
|
+
correct?: boolean
|
|
203
|
+
/** Result of evaluating the response */
|
|
204
|
+
result?: PowerPathQuestionResult
|
|
205
|
+
/** sourcedId of the AssessmentResult for this question attempt */
|
|
206
|
+
resultId?: string
|
|
207
|
+
/** Learning objective IDs associated with the question */
|
|
208
|
+
learningObjectives?: string[]
|
|
330
209
|
}
|
|
210
|
+
|
|
211
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
212
|
+
// ASSESSMENTS
|
|
213
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
214
|
+
|
|
331
215
|
/**
|
|
332
|
-
*
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
*/
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
216
|
+
* Result from creating an external test (test-out or placement).
|
|
217
|
+
*/
|
|
218
|
+
interface ExternalTestCreateResponse {
|
|
219
|
+
/** Type of lesson created. */
|
|
220
|
+
lessonType: PowerPathLessonType
|
|
221
|
+
/** The sourcedId of the created lesson (ComponentResource). */
|
|
222
|
+
lessonId: string
|
|
223
|
+
/** The sourcedId of the component (unit) containing the test. */
|
|
224
|
+
courseComponentId: string
|
|
225
|
+
/** The sourcedId of the resource representing the external test. */
|
|
226
|
+
resourceId: string
|
|
227
|
+
/** URL to the external test system. */
|
|
228
|
+
launchUrl?: string
|
|
229
|
+
/** The tool provider identifier (e.g. 'edulastic', 'mastery-track'). */
|
|
230
|
+
toolProvider: string
|
|
231
|
+
/** The ID of the test in the vendor's system. */
|
|
232
|
+
vendorId?: string
|
|
233
|
+
/** The courseId to enroll the student in on failure (placement tests). */
|
|
234
|
+
courseIdOnFail?: string | null
|
|
235
|
+
/** Grade levels for the resource. */
|
|
236
|
+
grades?: Array<number | string>
|
|
340
237
|
}
|
|
238
|
+
|
|
341
239
|
/**
|
|
342
|
-
*
|
|
343
|
-
*/
|
|
344
|
-
interface
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
240
|
+
* Result from creating an internal test (QTI or assessment-bank).
|
|
241
|
+
*/
|
|
242
|
+
interface InternalTestCreateResponse {
|
|
243
|
+
/** Type of lesson created. */
|
|
244
|
+
lessonType: PowerPathLessonType
|
|
245
|
+
/** The internal test type. */
|
|
246
|
+
testType: 'qti' | 'assessment-bank'
|
|
247
|
+
/** The sourcedId of the created lesson (ComponentResource). */
|
|
248
|
+
lessonId: string
|
|
249
|
+
/** The sourcedId of the component (unit) containing the test. */
|
|
250
|
+
courseComponentId: string
|
|
251
|
+
/** The sourcedId of the main resource (parent for assessment-bank). */
|
|
252
|
+
resourceId: string
|
|
253
|
+
/** Child resource IDs (only for assessment-bank type). */
|
|
254
|
+
childResourceIds?: string[]
|
|
255
|
+
/** The courseId to enroll the student in on failure (placement tests). */
|
|
256
|
+
courseIdOnFail?: string | null
|
|
257
|
+
/** Grade levels for the resource. */
|
|
258
|
+
grades?: Array<number | string>
|
|
349
259
|
}
|
|
260
|
+
|
|
350
261
|
/**
|
|
351
|
-
*
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
262
|
+
* A single attempt record.
|
|
263
|
+
*
|
|
264
|
+
* Matches the backend `PowerPath100AttemptSchema` with full metadata
|
|
265
|
+
* including XP, timestamps, and typed score status.
|
|
266
|
+
*/
|
|
267
|
+
interface Attempt {
|
|
268
|
+
/** Attempt number, or null if not yet started. */
|
|
269
|
+
attempt: number | null
|
|
270
|
+
/** Current score for this attempt. */
|
|
271
|
+
score: number
|
|
272
|
+
/** Grading status of this attempt. */
|
|
273
|
+
scoreStatus: ScoreStatus
|
|
274
|
+
/** XP earned in this attempt. */
|
|
275
|
+
xp: number | null
|
|
276
|
+
/** When this attempt was started. */
|
|
277
|
+
startedAt: string | null
|
|
278
|
+
/** When this attempt was completed. */
|
|
279
|
+
completedAt: string | null
|
|
360
280
|
}
|
|
281
|
+
|
|
361
282
|
/**
|
|
362
|
-
*
|
|
283
|
+
* Result from creating a new attempt.
|
|
363
284
|
*/
|
|
364
|
-
interface
|
|
365
|
-
|
|
366
|
-
platform?: Platform$1;
|
|
367
|
-
/** Target environment - determines base URL */
|
|
368
|
-
env: Environment$1;
|
|
369
|
-
/** Shared token provider (from @timeback/auth) */
|
|
370
|
-
tokenProvider: TokenProvider;
|
|
285
|
+
interface CreateAttemptResponse {
|
|
286
|
+
attempt: Attempt
|
|
371
287
|
}
|
|
288
|
+
|
|
372
289
|
/**
|
|
373
|
-
*
|
|
374
|
-
* Supports both authenticated and public/no-auth services.
|
|
290
|
+
* Result from getting attempts for a lesson.
|
|
375
291
|
*/
|
|
376
|
-
interface
|
|
377
|
-
|
|
378
|
-
baseUrl: string;
|
|
379
|
-
/**
|
|
380
|
-
* OAuth2 token URL. Omit for public/no-auth services.
|
|
381
|
-
* Can also be provided via auth.authUrl (legacy format).
|
|
382
|
-
*/
|
|
383
|
-
authUrl?: string;
|
|
384
|
-
/**
|
|
385
|
-
* OAuth2 credentials. Required if authUrl is provided.
|
|
386
|
-
* Supports both ExplicitAuth (with authUrl) and ProviderAuth (without).
|
|
387
|
-
*/
|
|
388
|
-
auth?: ExplicitAuth$1 | ProviderAuth;
|
|
389
|
-
/**
|
|
390
|
-
* Use a built-in path profile by name.
|
|
391
|
-
* Defaults to 'BEYOND_AI' if neither pathProfile nor paths is specified.
|
|
392
|
-
*/
|
|
393
|
-
pathProfile?: Platform$1;
|
|
394
|
-
/** Custom path overrides (takes precedence over pathProfile) */
|
|
395
|
-
paths?: Partial<PlatformPaths>;
|
|
396
|
-
/** Not applicable to explicit config — use `EnvConfig` instead */
|
|
397
|
-
env?: never;
|
|
292
|
+
interface GetAttemptsResponse {
|
|
293
|
+
attempts: Attempt[]
|
|
398
294
|
}
|
|
295
|
+
|
|
399
296
|
/**
|
|
400
|
-
*
|
|
297
|
+
* Result from resetting an attempt.
|
|
401
298
|
*/
|
|
402
|
-
interface
|
|
403
|
-
|
|
404
|
-
|
|
299
|
+
interface ResetAttemptResponse {
|
|
300
|
+
success: boolean
|
|
301
|
+
score: number
|
|
405
302
|
}
|
|
303
|
+
|
|
304
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
305
|
+
// ASSESSMENT PROGRESS (getAssessmentProgress)
|
|
306
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
307
|
+
|
|
406
308
|
/**
|
|
407
|
-
*
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
309
|
+
* Progress for a PowerPath 100 lesson.
|
|
310
|
+
*
|
|
311
|
+
* Uses `seenQuestions` (not `questions`) and includes remaining question counts
|
|
312
|
+
* per difficulty level.
|
|
313
|
+
*/
|
|
314
|
+
interface PowerPath100ProgressResponse {
|
|
315
|
+
lessonType: 'powerpath-100'
|
|
316
|
+
/** Remaining question counts per difficulty level */
|
|
317
|
+
remainingQuestionsPerDifficulty: {
|
|
318
|
+
easy: number
|
|
319
|
+
medium: number
|
|
320
|
+
hard: number
|
|
321
|
+
}
|
|
322
|
+
/** Current score for this attempt */
|
|
323
|
+
score: number
|
|
324
|
+
/** Questions the student has seen */
|
|
325
|
+
seenQuestions: PowerPathTestQuestion[]
|
|
326
|
+
/** sourcedId of the parent test AssessmentResult */
|
|
327
|
+
testResultId?: string
|
|
328
|
+
/** Attempt number */
|
|
329
|
+
attempt: number
|
|
330
|
+
/** XP earned in the lesson */
|
|
331
|
+
xp: number | null
|
|
332
|
+
/** Multiplier for XP */
|
|
333
|
+
multiplier: number | null
|
|
334
|
+
/** Accuracy of the student's attempted questions */
|
|
335
|
+
accuracy: number
|
|
336
|
+
/** Number of correct questions answered */
|
|
337
|
+
correctQuestions: number
|
|
338
|
+
/** Total number of questions in the lesson */
|
|
339
|
+
totalQuestions: number
|
|
424
340
|
}
|
|
341
|
+
|
|
425
342
|
/**
|
|
426
|
-
*
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
343
|
+
* Progress for quiz, test-out, placement, or unit-test lessons.
|
|
344
|
+
*
|
|
345
|
+
* Uses `questions` (not `seenQuestions`). Includes `finalized` to indicate
|
|
346
|
+
* whether the lesson has been completed.
|
|
347
|
+
*/
|
|
348
|
+
interface StandardProgressResponse {
|
|
349
|
+
lessonType: 'quiz' | 'test-out' | 'placement' | 'unit-test'
|
|
350
|
+
/** Whether the lesson has been finalized in the current attempt */
|
|
351
|
+
finalized: boolean
|
|
352
|
+
/** Current score for this attempt */
|
|
353
|
+
score?: number
|
|
354
|
+
/** Questions in the test */
|
|
355
|
+
questions: PowerPathTestQuestion[]
|
|
356
|
+
/** Tool provider of the lesson if external */
|
|
357
|
+
toolProvider: string | null
|
|
358
|
+
/** Whether auto-enrollment failed (only for finalized external tests) */
|
|
359
|
+
enrollmentFailed?: boolean
|
|
360
|
+
/** sourcedId of the parent test AssessmentResult */
|
|
361
|
+
testResultId?: string
|
|
362
|
+
/** Attempt number */
|
|
363
|
+
attempt: number
|
|
364
|
+
/** XP earned in the lesson */
|
|
365
|
+
xp: number | null
|
|
366
|
+
/** Multiplier for XP */
|
|
367
|
+
multiplier: number | null
|
|
368
|
+
/** Accuracy of the student's attempted questions */
|
|
369
|
+
accuracy: number
|
|
370
|
+
/** Number of correct questions answered */
|
|
371
|
+
correctQuestions: number
|
|
372
|
+
/** Total number of questions in the lesson */
|
|
373
|
+
totalQuestions: number
|
|
433
374
|
}
|
|
375
|
+
|
|
434
376
|
/**
|
|
435
|
-
*
|
|
377
|
+
* Result from getting assessment progress.
|
|
436
378
|
*
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
* @template T - Transport type (defaults to TransportLike, clients should specify their full transport type)
|
|
379
|
+
* Discriminated union on `lessonType`:
|
|
380
|
+
* - `'powerpath-100'` — uses `seenQuestions` and `remainingQuestionsPerDifficulty`
|
|
381
|
+
* - `'quiz' | 'test-out' | 'placement' | 'unit-test'` — uses `questions` and `finalized`
|
|
441
382
|
*/
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
383
|
+
type GetAssessmentProgressResponse = PowerPath100ProgressResponse | StandardProgressResponse
|
|
384
|
+
|
|
385
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
386
|
+
// GET NEXT QUESTION (getNextQuestion)
|
|
387
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
388
|
+
|
|
446
389
|
/**
|
|
447
|
-
*
|
|
390
|
+
* Result from getting the next question in a PowerPath 100 lesson.
|
|
448
391
|
*/
|
|
449
|
-
|
|
450
|
-
/**
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
*
|
|
455
|
-
* @typeParam T - Entity type for type-safe `where` clause (defaults to unknown)
|
|
456
|
-
*
|
|
457
|
-
* @example
|
|
458
|
-
* ```typescript
|
|
459
|
-
* // Type-safe where
|
|
460
|
-
* client.users.list({
|
|
461
|
-
* where: { status: 'active', role: 'teacher' },
|
|
462
|
-
* sort: 'familyName',
|
|
463
|
-
* })
|
|
464
|
-
* ```
|
|
465
|
-
*/
|
|
466
|
-
interface ListParams<T = unknown> {
|
|
467
|
-
/**
|
|
468
|
-
* Maximum items per page.
|
|
469
|
-
* @default 100
|
|
470
|
-
*/
|
|
471
|
-
limit?: number;
|
|
472
|
-
/**
|
|
473
|
-
* Number of items to skip (for pagination).
|
|
474
|
-
* @default 0
|
|
475
|
-
*/
|
|
476
|
-
offset?: number;
|
|
477
|
-
/**
|
|
478
|
-
* Field name to sort results by.
|
|
479
|
-
*
|
|
480
|
-
* Type-safe: only valid field names for this resource are accepted.
|
|
481
|
-
*
|
|
482
|
-
* @example
|
|
483
|
-
* ```typescript
|
|
484
|
-
* sort: 'familyName'
|
|
485
|
-
* ```
|
|
486
|
-
*/
|
|
487
|
-
sort?: keyof T & string;
|
|
488
|
-
/**
|
|
489
|
-
* Sort direction.
|
|
490
|
-
* @default "asc"
|
|
491
|
-
*/
|
|
492
|
-
orderBy?: 'asc' | 'desc';
|
|
493
|
-
/**
|
|
494
|
-
* Type-safe filter using object syntax.
|
|
495
|
-
*
|
|
496
|
-
* Multiple fields are combined with AND. Use `OR` for OR logic.
|
|
497
|
-
*
|
|
498
|
-
* @example
|
|
499
|
-
* ```typescript
|
|
500
|
-
* // Simple equality
|
|
501
|
-
* where: { status: 'active' }
|
|
502
|
-
* ```
|
|
503
|
-
*
|
|
504
|
-
* @example
|
|
505
|
-
* ```typescript
|
|
506
|
-
* // Multiple fields (AND)
|
|
507
|
-
* where: { status: 'active', role: 'teacher' }
|
|
508
|
-
* ```
|
|
509
|
-
*
|
|
510
|
-
* @example
|
|
511
|
-
* ```typescript
|
|
512
|
-
* // With operators
|
|
513
|
-
* where: { score: { gte: 90 }, status: { ne: 'deleted' } }
|
|
514
|
-
* ```
|
|
515
|
-
*
|
|
516
|
-
* @example
|
|
517
|
-
* ```typescript
|
|
518
|
-
* // OR condition
|
|
519
|
-
* where: { role: { in: ['teacher', 'aide'] } }
|
|
520
|
-
* ```
|
|
521
|
-
*/
|
|
522
|
-
where?: WhereClause<T>;
|
|
523
|
-
/**
|
|
524
|
-
* Fields to include in the response.
|
|
525
|
-
* Reduces payload size by requesting only needed fields.
|
|
526
|
-
* @example ['sourcedId', 'givenName', 'familyName']
|
|
527
|
-
*/
|
|
528
|
-
fields?: string[];
|
|
529
|
-
/**
|
|
530
|
-
* Free-text search across multiple fields (proprietary extension).
|
|
531
|
-
* For users: searches givenName, familyName, email.
|
|
532
|
-
* @example "john@example.com"
|
|
533
|
-
*/
|
|
534
|
-
search?: string;
|
|
535
|
-
/**
|
|
536
|
-
* Maximum total items to return across all pages.
|
|
537
|
-
*
|
|
538
|
-
* Unlike `limit` (which sets page size), `max` caps the total number
|
|
539
|
-
* of items yielded by the paginator. Pagination stops once this many
|
|
540
|
-
* items have been returned.
|
|
541
|
-
*
|
|
542
|
-
* @example
|
|
543
|
-
* ```typescript
|
|
544
|
-
* // Get at most 50 users total
|
|
545
|
-
* client.users.list({ max: 50 })
|
|
546
|
-
* ```
|
|
547
|
-
*/
|
|
548
|
-
max?: number;
|
|
392
|
+
interface GetNextQuestionResponse {
|
|
393
|
+
/** Current PowerPath score of the student in this lesson */
|
|
394
|
+
score: number
|
|
395
|
+
/** The next question to present */
|
|
396
|
+
question: PowerPathTestQuestion
|
|
549
397
|
}
|
|
398
|
+
|
|
399
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
400
|
+
// UPDATE STUDENT QUESTION RESPONSE (updateStudentQuestionResponse)
|
|
401
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
402
|
+
|
|
550
403
|
/**
|
|
551
|
-
* Response
|
|
404
|
+
* Response feedback for a student's answer.
|
|
552
405
|
*/
|
|
553
|
-
interface
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
/** Whether more pages are available */
|
|
557
|
-
hasMore: boolean;
|
|
558
|
-
/** Total count of items (if provided by server) */
|
|
559
|
-
total?: number;
|
|
560
|
-
}
|
|
561
|
-
/**
|
|
562
|
-
* Result of fetching a single page of resources.
|
|
563
|
-
*
|
|
564
|
-
* @typeParam T - The type of items in the page
|
|
565
|
-
*/
|
|
566
|
-
interface PageResult<T> {
|
|
567
|
-
/** Array of items in this page */
|
|
568
|
-
data: T[];
|
|
569
|
-
/** Whether more pages are available */
|
|
570
|
-
hasMore: boolean;
|
|
571
|
-
/** Total count of items (if provided by server) */
|
|
572
|
-
total?: number;
|
|
573
|
-
/** Offset to use for fetching the next page */
|
|
574
|
-
nextOffset?: number;
|
|
406
|
+
interface ResponseResultFeedback {
|
|
407
|
+
identifier?: string
|
|
408
|
+
value?: string
|
|
575
409
|
}
|
|
410
|
+
|
|
576
411
|
/**
|
|
577
|
-
*
|
|
412
|
+
* Result of processing a student's response.
|
|
578
413
|
*/
|
|
579
|
-
interface
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
* @default 10_000
|
|
587
|
-
* @example Set to Infinity to disable (use with caution!)
|
|
588
|
-
*/
|
|
589
|
-
maxItems?: number;
|
|
414
|
+
interface ResponseResult {
|
|
415
|
+
/** Whether the student's response is correct */
|
|
416
|
+
isCorrect: boolean
|
|
417
|
+
/** Score for this specific response (0 or 1) */
|
|
418
|
+
score: number
|
|
419
|
+
/** Optional feedback */
|
|
420
|
+
feedback?: ResponseResultFeedback
|
|
590
421
|
}
|
|
422
|
+
|
|
591
423
|
/**
|
|
592
|
-
*
|
|
593
|
-
*
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
424
|
+
* Result from updating a student's response in a PowerPath 100 lesson.
|
|
425
|
+
*
|
|
426
|
+
* Includes the updated PowerPath score, response correctness, and accuracy stats.
|
|
427
|
+
*/
|
|
428
|
+
interface PowerPath100UpdateResponseResult {
|
|
429
|
+
lessonType: 'powerpath-100'
|
|
430
|
+
/** Updated PowerPath score */
|
|
431
|
+
powerpathScore: number
|
|
432
|
+
/** Result of processing the response */
|
|
433
|
+
responseResult: ResponseResult
|
|
434
|
+
/** Assessment result for the question (for debugging) */
|
|
435
|
+
questionResult?: unknown
|
|
436
|
+
/** Assessment result for the test (for debugging) */
|
|
437
|
+
testResult?: unknown
|
|
438
|
+
/** Accuracy of the student's attempted questions */
|
|
439
|
+
accuracy: number
|
|
440
|
+
/** Number of correct questions answered */
|
|
441
|
+
correctQuestions: number
|
|
442
|
+
/** Total number of questions */
|
|
443
|
+
totalQuestions: number
|
|
444
|
+
/** XP earned */
|
|
445
|
+
xp: number | null
|
|
446
|
+
/** XP multiplier */
|
|
447
|
+
multiplier: number | null
|
|
448
|
+
}
|
|
449
|
+
|
|
598
450
|
/**
|
|
599
|
-
*
|
|
451
|
+
* Result from updating a student's response in a quiz/test-out/placement/unit-test lesson.
|
|
600
452
|
*
|
|
601
|
-
*
|
|
602
|
-
* - `'page'`: Uses limit/page parameters (1-indexed, e.g., QTI)
|
|
603
|
-
*/
|
|
604
|
-
type PaginationStyle = 'offset' | 'page';
|
|
605
|
-
/**
|
|
606
|
-
* Options for creating a Paginator.
|
|
453
|
+
* Minimal response — correctness is evaluated at finalization.
|
|
607
454
|
*/
|
|
608
|
-
interface
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
path: string;
|
|
613
|
-
/** List parameters (filter, sort, limit, offset) */
|
|
614
|
-
params?: ListParams<F>;
|
|
615
|
-
/** Maximum total items to return across all pages (client-side cap) */
|
|
616
|
-
max?: number;
|
|
617
|
-
/** Response key containing the items array (e.g., "users") */
|
|
618
|
-
unwrapKey?: string;
|
|
619
|
-
/** Logger instance (defaults to client-common logger) */
|
|
620
|
-
logger?: Logger;
|
|
621
|
-
/** Optional transform function applied to each item before yielding */
|
|
622
|
-
transform?: (item: T) => T;
|
|
623
|
-
/**
|
|
624
|
-
* Pagination style to use for API requests.
|
|
625
|
-
*
|
|
626
|
-
* - `'offset'` (default): Sends `limit` and `offset` params
|
|
627
|
-
* - `'page'`: Sends `limit` and `page` params (1-indexed)
|
|
628
|
-
*
|
|
629
|
-
* @default 'offset'
|
|
630
|
-
*/
|
|
631
|
-
paginationStyle?: PaginationStyle;
|
|
632
|
-
}
|
|
633
|
-
/**
|
|
634
|
-
* Result of an auth check operation.
|
|
635
|
-
*/
|
|
636
|
-
interface AuthCheckResult$1 {
|
|
637
|
-
/** Whether auth succeeded */
|
|
638
|
-
ok: boolean;
|
|
639
|
-
/** Time taken to complete the check (ms) */
|
|
640
|
-
latencyMs: number;
|
|
641
|
-
/** Error message if failed */
|
|
642
|
-
error?: string;
|
|
643
|
-
/** Detailed check results */
|
|
644
|
-
checks: {
|
|
645
|
-
/** Token acquisition succeeded */
|
|
646
|
-
tokenAcquisition: boolean;
|
|
647
|
-
};
|
|
455
|
+
interface StandardUpdateResponseResult {
|
|
456
|
+
lessonType: 'quiz' | 'test-out' | 'placement' | 'unit-test'
|
|
457
|
+
/** Assessment result for the question (for debugging) */
|
|
458
|
+
questionResult?: unknown
|
|
648
459
|
}
|
|
649
460
|
|
|
650
461
|
/**
|
|
651
|
-
*
|
|
462
|
+
* Result from updating a student question response.
|
|
652
463
|
*
|
|
653
|
-
*
|
|
464
|
+
* Discriminated union on `lessonType`:
|
|
465
|
+
* - `'powerpath-100'` — includes score, accuracy, and response correctness
|
|
466
|
+
* - Other lesson types — minimal, evaluated at finalization
|
|
654
467
|
*/
|
|
468
|
+
type UpdateStudentQuestionResponseResult =
|
|
469
|
+
| PowerPath100UpdateResponseResult
|
|
470
|
+
| StandardUpdateResponseResult
|
|
471
|
+
|
|
472
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
473
|
+
// FINALIZE ASSESSMENT (finalStudentAssessmentResponse)
|
|
474
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
655
475
|
|
|
656
476
|
/**
|
|
657
|
-
*
|
|
658
|
-
*
|
|
477
|
+
* Result from finalizing a test assessment.
|
|
478
|
+
*
|
|
479
|
+
* Returned after all questions have been answered and the lesson is
|
|
480
|
+
* evaluated. Only applicable to quiz-like lesson types (quiz, test-out,
|
|
481
|
+
* placement, unit-test). Not applicable to `powerpath-100`.
|
|
659
482
|
*/
|
|
660
|
-
interface
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
/** Path template for getting single event (GET), use {id} placeholder */
|
|
668
|
-
get: string | null;
|
|
669
|
-
/** Path template for job status (GET), use {id} placeholder */
|
|
670
|
-
jobStatus: string | null;
|
|
483
|
+
interface FinalizeAssessmentResponse {
|
|
484
|
+
/** Type of the lesson that was finalized (quiz-like only). */
|
|
485
|
+
lessonType: QuizLikeLessonType
|
|
486
|
+
/** Whether the lesson has been finalized. */
|
|
487
|
+
finalized: boolean
|
|
488
|
+
/** The attempt number. */
|
|
489
|
+
attempt: number
|
|
671
490
|
}
|
|
491
|
+
|
|
492
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
493
|
+
// TEST OUT (testOut)
|
|
494
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
495
|
+
|
|
672
496
|
/**
|
|
673
|
-
*
|
|
674
|
-
*
|
|
675
|
-
*
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
webhookFilterDelete: string;
|
|
702
|
-
/** Path template for listing filters by webhook (GET), use {webhookId} placeholder */
|
|
703
|
-
webhookFiltersByWebhook: string;
|
|
497
|
+
* Result from getting the test-out lesson for a student/course.
|
|
498
|
+
*
|
|
499
|
+
* Returns the test-out lesson reference, finalization status,
|
|
500
|
+
* and optional external tool credentials.
|
|
501
|
+
*/
|
|
502
|
+
interface TestOutResponse {
|
|
503
|
+
lessonType: 'test-out'
|
|
504
|
+
/** ID of the test-out lesson, or null if none exists */
|
|
505
|
+
lessonId: string | null
|
|
506
|
+
/** Whether the test-out has been finalized in the current attempt */
|
|
507
|
+
finalized: boolean
|
|
508
|
+
/** Tool provider for the test-out lesson, or null if internal */
|
|
509
|
+
toolProvider: string | null
|
|
510
|
+
/** Attempt number */
|
|
511
|
+
attempt?: number
|
|
512
|
+
/** Credentials for accessing the assigned test on external tool */
|
|
513
|
+
credentials?: {
|
|
514
|
+
email: string
|
|
515
|
+
password: string
|
|
516
|
+
}
|
|
517
|
+
/** Assignment ID on external tool for results retrieval */
|
|
518
|
+
assignmentId?: string
|
|
519
|
+
/** Class ID on external tool for results retrieval */
|
|
520
|
+
classId?: string
|
|
521
|
+
/** URL of the test on external tool */
|
|
522
|
+
testUrl?: string
|
|
523
|
+
/** ID of the test on external tool */
|
|
524
|
+
testId?: string
|
|
704
525
|
}
|
|
526
|
+
|
|
527
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
528
|
+
// IMPORT EXTERNAL RESULTS (importExternalTestAssignmentResults)
|
|
529
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
530
|
+
|
|
705
531
|
/**
|
|
706
|
-
*
|
|
707
|
-
*
|
|
708
|
-
*
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
532
|
+
* Result from importing external test assignment results.
|
|
533
|
+
*
|
|
534
|
+
* Contains the lesson reference, finalization status, and optional
|
|
535
|
+
* external tool credentials/assignment data.
|
|
536
|
+
*/
|
|
537
|
+
interface ImportExternalResultsResponse {
|
|
538
|
+
/** Lesson type (external-capable types only). */
|
|
539
|
+
lessonType: ExternalTestCapableLessonType
|
|
540
|
+
/** The sourcedId of the lesson (ComponentResource). */
|
|
541
|
+
lessonId: string | null
|
|
542
|
+
/** The tool provider for the lesson. */
|
|
543
|
+
toolProvider: string | null
|
|
544
|
+
/** Whether the test has been finalized in the current attempt. */
|
|
545
|
+
finalized: boolean
|
|
546
|
+
/** Attempt number. */
|
|
547
|
+
attempt: number
|
|
548
|
+
/** Credentials for accessing the assigned test on external tool. */
|
|
549
|
+
credentials?: {
|
|
550
|
+
email: string
|
|
551
|
+
password: string
|
|
552
|
+
}
|
|
553
|
+
/** Assignment ID on external tool for results retrieval. */
|
|
554
|
+
assignmentId?: string
|
|
555
|
+
/** Class ID on external tool for results retrieval. */
|
|
556
|
+
classId?: string
|
|
557
|
+
/** URL of the test on external tool. */
|
|
558
|
+
testUrl?: string
|
|
559
|
+
/** ID of the test on external tool. */
|
|
560
|
+
testId?: string
|
|
721
561
|
}
|
|
562
|
+
|
|
563
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
564
|
+
// MAKE EXTERNAL TEST ASSIGNMENT (makeExternalTestAssignment)
|
|
565
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
566
|
+
|
|
722
567
|
/**
|
|
723
|
-
*
|
|
724
|
-
*
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
568
|
+
* Result from assigning an external test to a student.
|
|
569
|
+
*
|
|
570
|
+
* Contains the tool provider, lesson type, attempt number, and optional
|
|
571
|
+
* external tool credentials/assignment data.
|
|
572
|
+
*/
|
|
573
|
+
interface MakeExternalTestAssignmentResponse {
|
|
574
|
+
/** The tool provider (e.g. 'edulastic', 'mastery-track'). */
|
|
575
|
+
toolProvider: string
|
|
576
|
+
/** Lesson type (external-capable types only). */
|
|
577
|
+
lessonType: ExternalTestCapableLessonType
|
|
578
|
+
/** Attempt number. */
|
|
579
|
+
attempt: number
|
|
580
|
+
/** Credentials for accessing the assigned test on external tool. */
|
|
581
|
+
credentials?: {
|
|
582
|
+
email: string
|
|
583
|
+
password: string
|
|
584
|
+
}
|
|
585
|
+
/** Assignment ID on external tool for results retrieval. */
|
|
586
|
+
assignmentId?: string
|
|
587
|
+
/** Class ID on external tool for results retrieval. */
|
|
588
|
+
classId?: string
|
|
589
|
+
/** URL of the test on external tool. */
|
|
590
|
+
testUrl?: string
|
|
591
|
+
/** ID of the test on external tool. */
|
|
592
|
+
testId?: string
|
|
733
593
|
}
|
|
594
|
+
|
|
595
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
596
|
+
// PLACEMENT
|
|
597
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
598
|
+
|
|
734
599
|
/**
|
|
735
|
-
*
|
|
736
|
-
* Defines path prefixes for Edubridge operations.
|
|
600
|
+
* Result from getting all placement tests.
|
|
737
601
|
*/
|
|
738
|
-
interface
|
|
739
|
-
|
|
740
|
-
base: string;
|
|
602
|
+
interface GetAllPlacementTestsResponse {
|
|
603
|
+
placementTests: unknown[]
|
|
741
604
|
}
|
|
605
|
+
|
|
742
606
|
/**
|
|
743
|
-
*
|
|
744
|
-
* Defines path prefixes for PowerPath operations.
|
|
607
|
+
* Result from getting current placement level.
|
|
745
608
|
*/
|
|
746
|
-
interface
|
|
747
|
-
|
|
748
|
-
|
|
609
|
+
interface GetCurrentLevelResponse {
|
|
610
|
+
gradeLevel?: unknown
|
|
611
|
+
onboarded?: boolean
|
|
612
|
+
availableTests: number
|
|
749
613
|
}
|
|
614
|
+
|
|
750
615
|
/**
|
|
751
|
-
*
|
|
752
|
-
* Defines path prefix for CASE (Competency and Academic Standards Exchange) operations.
|
|
616
|
+
* Result from getting the next placement test.
|
|
753
617
|
*/
|
|
754
|
-
interface
|
|
755
|
-
|
|
756
|
-
|
|
618
|
+
interface GetNextPlacementTestResponse {
|
|
619
|
+
availableTests: number
|
|
620
|
+
lesson: string
|
|
757
621
|
}
|
|
622
|
+
|
|
758
623
|
/**
|
|
759
|
-
*
|
|
760
|
-
* Defines path prefixes for CLR (Comprehensive Learner Record) operations.
|
|
624
|
+
* Result from getting subject progress.
|
|
761
625
|
*/
|
|
762
|
-
interface
|
|
763
|
-
|
|
764
|
-
credentials: string;
|
|
765
|
-
/** Path for API discovery (GET) */
|
|
766
|
-
discovery: string;
|
|
626
|
+
interface GetSubjectProgressResponse {
|
|
627
|
+
progress: unknown[]
|
|
767
628
|
}
|
|
629
|
+
|
|
768
630
|
/**
|
|
769
|
-
*
|
|
770
|
-
* Use `null` to indicate a service is not supported on the platform.
|
|
771
|
-
*/
|
|
772
|
-
interface PlatformPaths {
|
|
773
|
-
caliper: CaliperPaths;
|
|
774
|
-
oneroster: OneRosterPaths;
|
|
775
|
-
webhooks: WebhookPaths | null;
|
|
776
|
-
reporting: ReportingPaths | null;
|
|
777
|
-
edubridge: EdubridgePaths | null;
|
|
778
|
-
powerpath: PowerPathPaths | null;
|
|
779
|
-
clr: ClrPaths | null;
|
|
780
|
-
case: CasePaths | null;
|
|
781
|
-
}
|
|
782
|
-
/**
|
|
783
|
-
* Services that have path configuration.
|
|
784
|
-
* Subset of ServiceName - excludes services without path profiles (e.g., 'qti').
|
|
785
|
-
*/
|
|
786
|
-
type PathEnabledService = keyof PlatformPaths;
|
|
787
|
-
/**
|
|
788
|
-
* Supported Timeback platform implementations.
|
|
789
|
-
*/
|
|
790
|
-
type Platform = (typeof PLATFORMS)[number];
|
|
791
|
-
/**
|
|
792
|
-
* Supported deployment environments.
|
|
793
|
-
*/
|
|
794
|
-
type Environment = 'staging' | 'production';
|
|
795
|
-
/**
|
|
796
|
-
* Supported service names.
|
|
797
|
-
*/
|
|
798
|
-
type ServiceName = 'oneroster' | 'caliper' | 'webhooks' | 'reporting' | 'edubridge' | 'qti' | 'powerpath' | 'clr' | 'case';
|
|
799
|
-
/**
|
|
800
|
-
* Resolved endpoint for a single service.
|
|
631
|
+
* Result from resetting placement.
|
|
801
632
|
*/
|
|
802
|
-
interface
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
authUrl?: string;
|
|
633
|
+
interface ResetPlacementResponse {
|
|
634
|
+
success: boolean
|
|
635
|
+
placementResultsDeleted: number
|
|
636
|
+
onboardingReset: boolean
|
|
807
637
|
}
|
|
638
|
+
|
|
639
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
640
|
+
// SCREENING
|
|
641
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
642
|
+
|
|
808
643
|
/**
|
|
809
|
-
*
|
|
644
|
+
* Result from screening getResults.
|
|
645
|
+
* Response shape depends on MAP integration configuration.
|
|
810
646
|
*/
|
|
811
|
-
interface
|
|
812
|
-
|
|
813
|
-
clientSecret: string;
|
|
814
|
-
}
|
|
815
|
-
/**
|
|
816
|
-
* Configuration for environment-based provider.
|
|
817
|
-
* Uses known Timeback platform endpoints.
|
|
818
|
-
*/
|
|
819
|
-
interface ProviderEnvConfig {
|
|
820
|
-
/** Timeback platform (defaults to 'BEYOND_AI') */
|
|
821
|
-
platform?: Platform;
|
|
822
|
-
/** Target environment */
|
|
823
|
-
env: Environment;
|
|
824
|
-
/** OAuth2 credentials */
|
|
825
|
-
auth: ProviderAuth;
|
|
826
|
-
/** Request timeout in milliseconds */
|
|
827
|
-
timeout?: number;
|
|
647
|
+
interface ScreeningResultsResponse {
|
|
648
|
+
[key: string]: unknown
|
|
828
649
|
}
|
|
650
|
+
|
|
829
651
|
/**
|
|
830
|
-
*
|
|
831
|
-
*
|
|
652
|
+
* Result from screening getSession.
|
|
653
|
+
* Response shape depends on MAP integration configuration.
|
|
832
654
|
*/
|
|
833
|
-
interface
|
|
834
|
-
|
|
835
|
-
baseUrl: string;
|
|
836
|
-
/** OAuth2 token URL. Omit for public/no-auth services. */
|
|
837
|
-
authUrl?: string;
|
|
838
|
-
/** OAuth2 credentials. Required if authUrl is provided. */
|
|
839
|
-
auth?: ProviderAuth;
|
|
840
|
-
/** Request timeout in milliseconds */
|
|
841
|
-
timeout?: number;
|
|
842
|
-
/**
|
|
843
|
-
* Use a built-in path profile by name.
|
|
844
|
-
* Defaults to 'BEYOND_AI' if neither pathProfile nor paths is specified.
|
|
845
|
-
*/
|
|
846
|
-
pathProfile?: Platform;
|
|
847
|
-
/** Custom path overrides (takes precedence over pathProfile) */
|
|
848
|
-
paths?: Partial<PlatformPaths>;
|
|
655
|
+
interface ScreeningSessionResponse {
|
|
656
|
+
[key: string]: unknown
|
|
849
657
|
}
|
|
658
|
+
|
|
850
659
|
/**
|
|
851
|
-
*
|
|
852
|
-
* Different URLs for different services.
|
|
853
|
-
*/
|
|
854
|
-
interface ProviderServicesConfig {
|
|
855
|
-
/** Per-service base URLs */
|
|
856
|
-
services: Partial<Record<ServiceName, string>>;
|
|
857
|
-
/** OAuth2 token URL. Omit for public/no-auth services. */
|
|
858
|
-
authUrl?: string;
|
|
859
|
-
/** OAuth2 credentials. Required if authUrl is provided. */
|
|
860
|
-
auth?: ProviderAuth;
|
|
861
|
-
/** Request timeout in milliseconds */
|
|
862
|
-
timeout?: number;
|
|
863
|
-
/**
|
|
864
|
-
* Use a built-in path profile by name.
|
|
865
|
-
* Defaults to 'BEYOND_AI' if neither pathProfile nor paths is specified.
|
|
866
|
-
*/
|
|
867
|
-
pathProfile?: Platform;
|
|
868
|
-
/** Custom path overrides (takes precedence over pathProfile) */
|
|
869
|
-
paths?: Partial<PlatformPaths>;
|
|
870
|
-
}
|
|
871
|
-
/**
|
|
872
|
-
* Union of all provider configuration types.
|
|
873
|
-
*/
|
|
874
|
-
type TimebackProviderConfig = ProviderEnvConfig | ProviderExplicitConfig | ProviderServicesConfig;
|
|
875
|
-
/**
|
|
876
|
-
* Provider template - endpoints without auth.
|
|
877
|
-
* Used internally to define available platform+env combinations.
|
|
660
|
+
* Result from resetting a screening session.
|
|
878
661
|
*/
|
|
879
|
-
interface
|
|
880
|
-
|
|
881
|
-
|
|
662
|
+
interface ScreeningResetSessionResponse {
|
|
663
|
+
success?: boolean
|
|
664
|
+
[key: string]: unknown
|
|
882
665
|
}
|
|
666
|
+
|
|
883
667
|
/**
|
|
884
|
-
*
|
|
885
|
-
*
|
|
886
|
-
* Use `satisfies ProviderRegistry` when defining a registry for type checking.
|
|
887
|
-
*
|
|
888
|
-
* @example
|
|
889
|
-
* const myRegistry = {
|
|
890
|
-
* defaultPlatform: 'MY_PLATFORM',
|
|
891
|
-
* templates: {
|
|
892
|
-
* MY_PLATFORM: {
|
|
893
|
-
* staging: { platform: 'BEYOND_AI', env: 'staging' },
|
|
894
|
-
* production: { platform: 'BEYOND_AI', env: 'production' },
|
|
895
|
-
* },
|
|
896
|
-
* },
|
|
897
|
-
* } satisfies ProviderRegistry
|
|
668
|
+
* Result from assigning a screening test.
|
|
898
669
|
*/
|
|
899
|
-
interface
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
/** Available templates indexed by platform → env */
|
|
903
|
-
templates: Record<string, Record<string, ProviderTemplate>>;
|
|
670
|
+
interface ScreeningAssignTestResponse {
|
|
671
|
+
success?: boolean
|
|
672
|
+
[key: string]: unknown
|
|
904
673
|
}
|
|
674
|
+
|
|
675
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
676
|
+
// LESSON PLANS
|
|
677
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
678
|
+
|
|
905
679
|
/**
|
|
906
|
-
*
|
|
680
|
+
* Result from creating a lesson plan.
|
|
907
681
|
*/
|
|
908
|
-
interface
|
|
909
|
-
|
|
910
|
-
provider: TimebackProvider;
|
|
682
|
+
interface LessonPlanCreateResponse {
|
|
683
|
+
lessonPlanId: string
|
|
911
684
|
}
|
|
912
685
|
|
|
913
686
|
/**
|
|
914
|
-
*
|
|
915
|
-
*
|
|
916
|
-
* Encapsulates platform connection configuration including endpoints and auth.
|
|
917
|
-
* Providers are complete "connection" objects that clients consume.
|
|
687
|
+
* A lesson plan operation record.
|
|
918
688
|
*/
|
|
689
|
+
interface LessonPlanOperation {
|
|
690
|
+
id: string
|
|
691
|
+
type: string
|
|
692
|
+
payload?: unknown
|
|
693
|
+
reason?: string
|
|
694
|
+
createdAt: string
|
|
695
|
+
sequenceNumber: number
|
|
696
|
+
createdBy?: string
|
|
697
|
+
}
|
|
919
698
|
|
|
920
699
|
/**
|
|
921
|
-
*
|
|
922
|
-
*
|
|
923
|
-
* A provider contains everything needed to connect to Timeback APIs:
|
|
924
|
-
* - Service endpoints (URLs)
|
|
925
|
-
* - Authentication credentials
|
|
926
|
-
* - Configuration options
|
|
927
|
-
*
|
|
928
|
-
* Providers can be created from:
|
|
929
|
-
* - Platform + environment (uses known Timeback endpoints)
|
|
930
|
-
* - Explicit base URL (single URL for all services)
|
|
931
|
-
* - Per-service URLs (different URLs for each service)
|
|
932
|
-
*
|
|
933
|
-
* @example
|
|
934
|
-
* ```typescript
|
|
935
|
-
* // Environment-based provider (Timeback hosted)
|
|
936
|
-
* const provider = new TimebackProvider({
|
|
937
|
-
* platform: 'BEYOND_AI',
|
|
938
|
-
* env: 'staging',
|
|
939
|
-
* auth: { clientId: '...', clientSecret: '...' },
|
|
940
|
-
* })
|
|
941
|
-
* ```
|
|
942
|
-
*
|
|
943
|
-
* @example
|
|
944
|
-
* ```typescript
|
|
945
|
-
* // Explicit URL provider (self-hosted)
|
|
946
|
-
* const provider = new TimebackProvider({
|
|
947
|
-
* baseUrl: 'https://api.myschool.edu',
|
|
948
|
-
* authUrl: 'https://auth.myschool.edu/oauth/token',
|
|
949
|
-
* auth: { clientId: '...', clientSecret: '...' },
|
|
950
|
-
* })
|
|
951
|
-
* ```
|
|
952
|
-
*
|
|
953
|
-
* @example
|
|
954
|
-
* ```typescript
|
|
955
|
-
* // Per-service URLs
|
|
956
|
-
* const provider = new TimebackProvider({
|
|
957
|
-
* services: {
|
|
958
|
-
* oneroster: 'https://roster.myschool.edu',
|
|
959
|
-
* caliper: 'https://analytics.myschool.edu',
|
|
960
|
-
* },
|
|
961
|
-
* authUrl: 'https://auth.myschool.edu/oauth/token',
|
|
962
|
-
* auth: { clientId: '...', clientSecret: '...' },
|
|
963
|
-
* })
|
|
964
|
-
* ```
|
|
700
|
+
* Response containing lesson plan operations.
|
|
965
701
|
*/
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
readonly platform?: Platform;
|
|
969
|
-
/** Environment (if using known platform) */
|
|
970
|
-
readonly env?: Environment;
|
|
971
|
-
/** OAuth2 credentials. Undefined for public/no-auth services. */
|
|
972
|
-
readonly auth?: ProviderAuth;
|
|
973
|
-
/** Request timeout in milliseconds */
|
|
974
|
-
readonly timeout: number;
|
|
975
|
-
/** Resolved endpoints for each service */
|
|
976
|
-
/** @internal */
|
|
977
|
-
readonly _endpoints: Partial<Record<ServiceName, ResolvedEndpoint>>;
|
|
978
|
-
/** Token URL for authentication. Undefined for public/no-auth services. */
|
|
979
|
-
/** @internal */
|
|
980
|
-
readonly _authUrl?: string;
|
|
981
|
-
/** OAuth2 scope to request with access tokens. */
|
|
982
|
-
/** @internal */
|
|
983
|
-
readonly _tokenScope?: string;
|
|
984
|
-
/** API path profiles for this platform */
|
|
985
|
-
/** @internal */
|
|
986
|
-
readonly _pathProfiles: PlatformPaths;
|
|
987
|
-
/** Cached TokenManagers by authUrl (for token sharing) */
|
|
988
|
-
/** @internal */
|
|
989
|
-
readonly _tokenManagers: Map<string, TokenProvider>;
|
|
990
|
-
/**
|
|
991
|
-
* Create a new TimebackProvider.
|
|
992
|
-
*
|
|
993
|
-
* @param config - Provider configuration (env-based, explicit URL, or per-service)
|
|
994
|
-
* @throws {Error} If configuration is invalid or missing required fields
|
|
995
|
-
*/
|
|
996
|
-
constructor(config: TimebackProviderConfig);
|
|
997
|
-
/**
|
|
998
|
-
* Get the resolved endpoint for a specific service.
|
|
999
|
-
*
|
|
1000
|
-
* @param service - Service name (oneroster, caliper, edubridge, qti, powerpath)
|
|
1001
|
-
* @returns Resolved endpoint with baseUrl and authUrl
|
|
1002
|
-
* @throws If the service is not configured in this provider
|
|
1003
|
-
*/
|
|
1004
|
-
getEndpoint(service: ServiceName): ResolvedEndpoint;
|
|
1005
|
-
/**
|
|
1006
|
-
* Check if a service is available in this provider.
|
|
1007
|
-
*
|
|
1008
|
-
* @param service - Service name to check
|
|
1009
|
-
* @returns True if the service is configured
|
|
1010
|
-
*/
|
|
1011
|
-
hasService(service: ServiceName): boolean;
|
|
1012
|
-
/**
|
|
1013
|
-
* Get all configured service names.
|
|
1014
|
-
*
|
|
1015
|
-
* @returns Array of service names available in this provider
|
|
1016
|
-
*/
|
|
1017
|
-
getAvailableServices(): ServiceName[];
|
|
1018
|
-
/**
|
|
1019
|
-
* Get the token URL for this provider.
|
|
1020
|
-
* @returns The token URL for authentication
|
|
1021
|
-
*/
|
|
1022
|
-
getTokenUrl(): string | undefined;
|
|
1023
|
-
/**
|
|
1024
|
-
* Get endpoint with paths for a service that has path configuration.
|
|
1025
|
-
*
|
|
1026
|
-
* @param service - Service name that has paths in PlatformPaths
|
|
1027
|
-
* @returns Resolved endpoint with baseUrl, authUrl, and paths
|
|
1028
|
-
* @throws If service is not configured or not supported on this platform
|
|
1029
|
-
*/
|
|
1030
|
-
getEndpointWithPaths<S extends PathEnabledService>(service: S & ServiceName): ResolvedEndpoint & {
|
|
1031
|
-
paths: NonNullable<PlatformPaths[S]>;
|
|
1032
|
-
};
|
|
1033
|
-
/**
|
|
1034
|
-
* Get all path profiles for this provider (raw, may contain nulls).
|
|
1035
|
-
*
|
|
1036
|
-
* @returns Platform path profiles
|
|
1037
|
-
*/
|
|
1038
|
-
getPaths(): PlatformPaths;
|
|
1039
|
-
/**
|
|
1040
|
-
* Get paths for a specific service.
|
|
1041
|
-
*
|
|
1042
|
-
* @param service - Service name
|
|
1043
|
-
* @returns Path configuration for the service
|
|
1044
|
-
* @throws If the service is not supported on this platform
|
|
1045
|
-
*/
|
|
1046
|
-
getServicePaths<S extends PathEnabledService>(service: S): NonNullable<PlatformPaths[S]>;
|
|
1047
|
-
/**
|
|
1048
|
-
* Check if a service is supported on this platform.
|
|
1049
|
-
*
|
|
1050
|
-
* @param service - Service name
|
|
1051
|
-
* @returns true if the service has path configuration
|
|
1052
|
-
*/
|
|
1053
|
-
hasServiceSupport(service: PathEnabledService): boolean;
|
|
1054
|
-
/**
|
|
1055
|
-
* Get a TokenProvider for a specific service.
|
|
1056
|
-
*
|
|
1057
|
-
* TokenProviders are cached by authUrl, so services sharing the same
|
|
1058
|
-
* token endpoint will share the same cached OAuth tokens.
|
|
1059
|
-
*
|
|
1060
|
-
* @param service - Service name (oneroster, caliper, edubridge, qti, powerpath)
|
|
1061
|
-
* @returns Cached TokenProvider for the service's token endpoint, or undefined for public/no-auth services
|
|
1062
|
-
* @throws If the service is not configured in this provider
|
|
1063
|
-
* @throws If auth is required but not configured
|
|
1064
|
-
*/
|
|
1065
|
-
getTokenProvider(service: ServiceName): TokenProvider | undefined;
|
|
1066
|
-
/**
|
|
1067
|
-
* Verify that OAuth authentication is working.
|
|
1068
|
-
*
|
|
1069
|
-
* Attempts to acquire a token using the provider's credentials.
|
|
1070
|
-
* Returns a health check result with success/failure and latency info.
|
|
1071
|
-
*
|
|
1072
|
-
* @returns Auth check result
|
|
1073
|
-
* @throws {Error} If no auth is configured on this provider
|
|
1074
|
-
*/
|
|
1075
|
-
checkAuth(): Promise<AuthCheckResult$1>;
|
|
1076
|
-
/**
|
|
1077
|
-
* Invalidate all cached OAuth tokens.
|
|
1078
|
-
*
|
|
1079
|
-
* Call this when closing the client or when tokens need to be refreshed.
|
|
1080
|
-
* New tokens will be acquired on the next API call.
|
|
1081
|
-
*/
|
|
1082
|
-
invalidateTokens(): void;
|
|
702
|
+
interface LessonPlanOperationsResponse {
|
|
703
|
+
operations: LessonPlanOperation[]
|
|
1083
704
|
}
|
|
1084
705
|
|
|
1085
706
|
/**
|
|
1086
|
-
*
|
|
1087
|
-
*
|
|
1088
|
-
* Types for HTTP transport layer.
|
|
707
|
+
* Result from a single lesson plan operation.
|
|
1089
708
|
*/
|
|
709
|
+
interface LessonPlanOperationResult {
|
|
710
|
+
success: boolean
|
|
711
|
+
message?: string
|
|
712
|
+
operationId?: string
|
|
713
|
+
}
|
|
1090
714
|
|
|
1091
715
|
/**
|
|
1092
|
-
*
|
|
1093
|
-
* Avoids Bun-specific extensions on `typeof fetch`.
|
|
716
|
+
* Result from syncing lesson plan operations.
|
|
1094
717
|
*/
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
/** HTTP method */
|
|
1101
|
-
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
1102
|
-
/** Query parameters to append to the URL */
|
|
1103
|
-
params?: Record<string, string | number | boolean | undefined>;
|
|
1104
|
-
/** Request body (will be JSON-serialized) */
|
|
1105
|
-
body?: unknown;
|
|
1106
|
-
/** Additional headers to include */
|
|
1107
|
-
headers?: Record<string, string>;
|
|
1108
|
-
/**
|
|
1109
|
-
* Unique identifier for this request.
|
|
1110
|
-
* Used for log correlation and debugging.
|
|
1111
|
-
* Auto-generated if not provided.
|
|
1112
|
-
*/
|
|
1113
|
-
requestId?: string;
|
|
718
|
+
interface LessonPlanSyncResult {
|
|
719
|
+
success: boolean
|
|
720
|
+
message?: string
|
|
721
|
+
operationCount: number
|
|
722
|
+
operationResults: Array<{ success: boolean; errors?: Array<{ message: string }> }>
|
|
1114
723
|
}
|
|
724
|
+
|
|
1115
725
|
/**
|
|
1116
|
-
*
|
|
1117
|
-
* Token URL is derived automatically from environment.
|
|
726
|
+
* Result from syncing a course.
|
|
1118
727
|
*/
|
|
1119
|
-
interface
|
|
1120
|
-
|
|
1121
|
-
clientSecret: string;
|
|
728
|
+
interface LessonPlanCourseSyncResult {
|
|
729
|
+
lessonPlansAffected: string[]
|
|
1122
730
|
}
|
|
731
|
+
|
|
1123
732
|
/**
|
|
1124
|
-
*
|
|
1125
|
-
* Requires explicit authUrl for custom APIs.
|
|
733
|
+
* Response containing a lesson plan.
|
|
1126
734
|
*/
|
|
1127
|
-
interface
|
|
1128
|
-
|
|
1129
|
-
clientSecret: string;
|
|
1130
|
-
authUrl: string;
|
|
735
|
+
interface LessonPlanResponse {
|
|
736
|
+
lessonPlan: Record<string, unknown>
|
|
1131
737
|
}
|
|
738
|
+
|
|
1132
739
|
/**
|
|
1133
|
-
*
|
|
740
|
+
* Response containing course progress.
|
|
1134
741
|
*/
|
|
1135
|
-
interface
|
|
1136
|
-
|
|
1137
|
-
timeout?: number;
|
|
1138
|
-
/** Custom fetch implementation */
|
|
1139
|
-
fetch?: FetchFn;
|
|
742
|
+
interface CourseProgressResponse {
|
|
743
|
+
lineItems: Record<string, unknown>[]
|
|
1140
744
|
}
|
|
745
|
+
|
|
1141
746
|
/**
|
|
1142
|
-
*
|
|
747
|
+
* Result from updating student item response.
|
|
1143
748
|
*/
|
|
1144
|
-
interface
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
/** Request timeout in milliseconds */
|
|
1148
|
-
timeout: number;
|
|
1149
|
-
/** Fetch implementation */
|
|
1150
|
-
fetch: FetchFn;
|
|
1151
|
-
/** Token provider for authentication. Undefined for public/no-auth services. */
|
|
1152
|
-
tokenProvider?: TokenProvider;
|
|
749
|
+
interface UpdateStudentItemResponseResult {
|
|
750
|
+
success?: boolean
|
|
751
|
+
[key: string]: unknown
|
|
1153
752
|
}
|
|
753
|
+
|
|
754
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
755
|
+
// TEST OUT (self-elected)
|
|
756
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
757
|
+
|
|
1154
758
|
/**
|
|
1155
|
-
*
|
|
759
|
+
* Result from checking test-out eligibility for a student/subject.
|
|
1156
760
|
*/
|
|
1157
|
-
interface
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
tokenProvider?: never;
|
|
761
|
+
interface GetTestOutEligibilityResponse {
|
|
762
|
+
eligible: boolean
|
|
763
|
+
reason?: string
|
|
1161
764
|
}
|
|
765
|
+
|
|
1162
766
|
/**
|
|
1163
|
-
*
|
|
767
|
+
* Result from creating a self-elected test-out assignment.
|
|
1164
768
|
*/
|
|
1165
|
-
interface
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
auth?: never;
|
|
769
|
+
interface MakeExternalStudentTestOutAssignmentResponse {
|
|
770
|
+
success: boolean
|
|
771
|
+
data?: Record<string, unknown>
|
|
1169
772
|
}
|
|
773
|
+
|
|
774
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
775
|
+
// RENDER CONFIG
|
|
776
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
777
|
+
|
|
1170
778
|
/**
|
|
1171
|
-
*
|
|
779
|
+
* Result from upserting render configs for one or more courses.
|
|
1172
780
|
*/
|
|
1173
|
-
interface
|
|
1174
|
-
|
|
1175
|
-
auth?: never;
|
|
1176
|
-
tokenProvider?: never;
|
|
781
|
+
interface RenderConfigUpsertResponse {
|
|
782
|
+
updated: string[]
|
|
1177
783
|
}
|
|
784
|
+
|
|
1178
785
|
/**
|
|
1179
|
-
*
|
|
1180
|
-
*/
|
|
1181
|
-
type BaseTransportConfig = TransportConfigWithAuth | TransportConfigWithTokenProvider | TransportConfigNoAuth;
|
|
1182
|
-
/**
|
|
1183
|
-
* Options for creating a BaseTransport.
|
|
786
|
+
* Render config for a single course.
|
|
1184
787
|
*/
|
|
1185
|
-
interface
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
* Result of an auth check operation.
|
|
1193
|
-
*/
|
|
1194
|
-
interface AuthCheckResult {
|
|
1195
|
-
/** Whether auth succeeded */
|
|
1196
|
-
ok: boolean;
|
|
1197
|
-
/** Time taken to complete the check (ms) */
|
|
1198
|
-
latencyMs: number;
|
|
1199
|
-
/** Error message if failed */
|
|
1200
|
-
error?: string;
|
|
1201
|
-
/** Detailed check results */
|
|
1202
|
-
checks: {
|
|
1203
|
-
/** Token acquisition succeeded */
|
|
1204
|
-
tokenAcquisition: boolean;
|
|
1205
|
-
};
|
|
788
|
+
interface RenderConfigGetResponse {
|
|
789
|
+
courseId: string
|
|
790
|
+
rendererId: string
|
|
791
|
+
rendererUrl: string
|
|
792
|
+
rendererVersion?: string | null
|
|
793
|
+
suppressFeedback: boolean
|
|
794
|
+
suppressCorrectResponse: boolean
|
|
1206
795
|
}
|
|
1207
796
|
|
|
1208
797
|
/**
|
|
1209
|
-
*
|
|
1210
|
-
*
|
|
1211
|
-
* HTTP transport with OAuth2 authentication, retries, and error handling.
|
|
1212
|
-
* Clients can extend this for protocol-specific features.
|
|
1213
|
-
*
|
|
798
|
+
* Result from deleting a render config.
|
|
1214
799
|
*/
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
*
|
|
1218
|
-
* Handles OAuth2 authentication, request/response lifecycle,
|
|
1219
|
-
* and automatic retries for transient failures.
|
|
1220
|
-
*
|
|
1221
|
-
* Clients can extend this class to add protocol-specific features
|
|
1222
|
-
* like custom error parsing or pagination.
|
|
1223
|
-
*/
|
|
1224
|
-
declare class BaseTransport {
|
|
1225
|
-
protected readonly config: ResolvedTransportConfig;
|
|
1226
|
-
protected readonly log: Logger;
|
|
1227
|
-
/**
|
|
1228
|
-
* Create a new BaseTransport instance.
|
|
1229
|
-
*
|
|
1230
|
-
* @param options - Transport options with config and logger
|
|
1231
|
-
*/
|
|
1232
|
-
constructor(options: BaseTransportOptions);
|
|
1233
|
-
/**
|
|
1234
|
-
* The base URL for API requests.
|
|
1235
|
-
* @returns The base URL
|
|
1236
|
-
*/
|
|
1237
|
-
get baseUrl(): string;
|
|
1238
|
-
/**
|
|
1239
|
-
* Make an authenticated request to the API.
|
|
1240
|
-
*
|
|
1241
|
-
* Automatically retries on transient failures (429, 503).
|
|
1242
|
-
*
|
|
1243
|
-
* @template T - Expected response type
|
|
1244
|
-
* @param path - API endpoint path
|
|
1245
|
-
* @param options - Request options including method, params, body
|
|
1246
|
-
* @returns Parsed JSON response
|
|
1247
|
-
* @throws {ApiError} On API errors (4xx/5xx responses)
|
|
1248
|
-
*/
|
|
1249
|
-
request<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
1250
|
-
/**
|
|
1251
|
-
* Check whether a resource exists at the given path.
|
|
1252
|
-
*
|
|
1253
|
-
* Returns `true` for successful 2xx responses, `false` only for 404 Not Found,
|
|
1254
|
-
* and rethrows all other errors.
|
|
1255
|
-
*
|
|
1256
|
-
* @param path - API endpoint path
|
|
1257
|
-
* @param options - Request options including method, params, body
|
|
1258
|
-
* @returns Promise resolving to whether the resource exists
|
|
1259
|
-
*/
|
|
1260
|
-
exists(path: string, options?: RequestOptions): Promise<boolean>;
|
|
1261
|
-
/**
|
|
1262
|
-
* Make a raw request, returning the Response object.
|
|
1263
|
-
*
|
|
1264
|
-
* ## Retry Behavior
|
|
1265
|
-
* Automatically retries on transient failures (429, 503) with exponential
|
|
1266
|
-
* backoff. Respects Retry-After header when present.
|
|
1267
|
-
*
|
|
1268
|
-
* ## Timeout Behavior
|
|
1269
|
-
* Uses an operation-level timeout that spans ALL retry attempts.
|
|
1270
|
-
* If configured timeout is 30s, the entire operation (including retries
|
|
1271
|
-
* and backoff delays) must complete within 30s total.
|
|
1272
|
-
*
|
|
1273
|
-
* ## Flow
|
|
1274
|
-
* 1. Build URL from path and query params
|
|
1275
|
-
* 2. Start operation timer
|
|
1276
|
-
* 3. Loop up to MAX_RETRIES times:
|
|
1277
|
-
* a. Check if we've exceeded the operation deadline
|
|
1278
|
-
* b. Get OAuth token (may be cached)
|
|
1279
|
-
* c. Make the HTTP request with per-request timeout
|
|
1280
|
-
* d. If 429/503 and not last attempt → calculate backoff and retry
|
|
1281
|
-
* e. If other error → throw appropriate ApiError subclass
|
|
1282
|
-
* f. If success → return response
|
|
1283
|
-
* 4. If all retries exhausted → throw "Max retries exceeded"
|
|
1284
|
-
*
|
|
1285
|
-
* @param path - API endpoint path (relative to baseUrl)
|
|
1286
|
-
* @param options - Request options (method, params, body, headers)
|
|
1287
|
-
* @returns Raw fetch Response for custom handling
|
|
1288
|
-
* @throws {ApiError} On timeout, non-retryable errors, or max retries exceeded
|
|
1289
|
-
*/
|
|
1290
|
-
requestRaw(path: string, options?: RequestOptions): Promise<Response>;
|
|
1291
|
-
/**
|
|
1292
|
-
* Get a valid OAuth2 access token.
|
|
1293
|
-
* @returns Promise resolving to access token or undefined
|
|
1294
|
-
*/
|
|
1295
|
-
protected getAccessToken(): Promise<string | undefined>;
|
|
1296
|
-
/**
|
|
1297
|
-
* Construct full URL with query parameters.
|
|
1298
|
-
*
|
|
1299
|
-
* @param path - The relative path or absolute URL
|
|
1300
|
-
* @param params - Query parameters
|
|
1301
|
-
* @returns Full URL string
|
|
1302
|
-
* @throws {Error} If path is an absolute URL (security protection)
|
|
1303
|
-
*/
|
|
1304
|
-
protected buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string;
|
|
1305
|
-
/**
|
|
1306
|
-
* Parse successful response or delegate to error handler.
|
|
1307
|
-
* @param response - The fetch Response
|
|
1308
|
-
* @returns Parsed response as type T
|
|
1309
|
-
*/
|
|
1310
|
-
protected handleResponse<T>(response: Response): Promise<T>;
|
|
1311
|
-
/**
|
|
1312
|
-
* Parse JSON response with context-preserving error handling.
|
|
1313
|
-
*
|
|
1314
|
-
* Unlike raw `response.json()`, this method:
|
|
1315
|
-
* - Logs structured error context (URL, status, content-type, body preview)
|
|
1316
|
-
* - Throws `ApiError` with `parseError` and `body` in the response object
|
|
1317
|
-
* - Aids debugging when upstream services return malformed JSON
|
|
1318
|
-
*
|
|
1319
|
-
* @template T - Expected shape of the parsed response
|
|
1320
|
-
* @param response - The fetch Response to parse
|
|
1321
|
-
* @returns Parsed JSON as type T
|
|
1322
|
-
* @throws {ApiError} When JSON parsing fails, with status code and body preview
|
|
1323
|
-
*/
|
|
1324
|
-
protected parseJsonResponse<T>(response: Response): Promise<T>;
|
|
1325
|
-
/**
|
|
1326
|
-
* Parse error response and throw appropriate ApiError subclass.
|
|
1327
|
-
*
|
|
1328
|
-
* Handles both JSON and non-JSON error responses gracefully.
|
|
1329
|
-
* Clients can override this to add protocol-specific error parsing.
|
|
1330
|
-
*
|
|
1331
|
-
* @param response - The error Response (status >= 400)
|
|
1332
|
-
* @param requestId - Request ID for log correlation
|
|
1333
|
-
* @throws {UnauthorizedError} For 401 responses (also invalidates token)
|
|
1334
|
-
* @throws {ForbiddenError} For 403 responses
|
|
1335
|
-
* @throws {NotFoundError} For 404 responses
|
|
1336
|
-
* @throws {ValidationError} For 422 responses
|
|
1337
|
-
* @throws {ApiError} For all other error status codes
|
|
1338
|
-
*/
|
|
1339
|
-
protected handleErrorResponse(response: Response, requestId?: string): Promise<never>;
|
|
1340
|
-
/**
|
|
1341
|
-
* Extract error message from response body.
|
|
1342
|
-
*
|
|
1343
|
-
* Checks common error formats:
|
|
1344
|
-
* - `message` (most APIs)
|
|
1345
|
-
* - `error` (some APIs)
|
|
1346
|
-
* - `imsx_description` (IMS Global: OneRoster, Caliper, QTI)
|
|
1347
|
-
*
|
|
1348
|
-
* Override in client transports for API-specific error formats
|
|
1349
|
-
* not covered here (e.g., Edubridge's `errors[]` array format).
|
|
1350
|
-
*
|
|
1351
|
-
* @param body - The error response body
|
|
1352
|
-
* @param fallback - Fallback message if none found
|
|
1353
|
-
* @returns Extracted error message
|
|
1354
|
-
*/
|
|
1355
|
-
protected extractErrorMessage(body: unknown, fallback: string): string;
|
|
1356
|
-
/**
|
|
1357
|
-
* Delay execution for retry backoff.
|
|
1358
|
-
*
|
|
1359
|
-
* @param ms - Number of milliseconds to delay
|
|
1360
|
-
* @returns Promise that resolves after delay
|
|
1361
|
-
*/
|
|
1362
|
-
protected sleep(ms: number): Promise<void>;
|
|
1363
|
-
/**
|
|
1364
|
-
* Parse Retry-After header value.
|
|
1365
|
-
*
|
|
1366
|
-
* Handles both formats per RFC 7231:
|
|
1367
|
-
* - Numeric seconds: "120"
|
|
1368
|
-
* - HTTP-date: "Wed, 21 Oct 2025 07:28:00 GMT"
|
|
1369
|
-
*
|
|
1370
|
-
* @param retryAfter - Retry-After header value
|
|
1371
|
-
* @param attempt - Current attempt number (0-based)
|
|
1372
|
-
* @returns Delay in milliseconds
|
|
1373
|
-
*/
|
|
1374
|
-
protected parseRetryAfter(retryAfter: string | null, attempt: number): number;
|
|
800
|
+
interface RenderConfigDeleteResponse {
|
|
801
|
+
deleted: string
|
|
1375
802
|
}
|
|
1376
803
|
|
|
804
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
805
|
+
// SYLLABUS
|
|
806
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
807
|
+
|
|
1377
808
|
/**
|
|
1378
|
-
*
|
|
1379
|
-
*
|
|
1380
|
-
* Helpers for iterating over paginated API responses.
|
|
809
|
+
* Response containing syllabus data.
|
|
1381
810
|
*/
|
|
811
|
+
interface SyllabusResponse {
|
|
812
|
+
syllabus?: unknown
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
type input<T> = T extends {
|
|
816
|
+
_zod: {
|
|
817
|
+
input: any;
|
|
818
|
+
};
|
|
819
|
+
} ? T["_zod"]["input"] : unknown;
|
|
1382
820
|
|
|
1383
821
|
/**
|
|
1384
|
-
*
|
|
1385
|
-
*
|
|
1386
|
-
* Automatically fetches subsequent pages as you iterate, making it easy
|
|
1387
|
-
* to process large datasets without manual pagination handling.
|
|
1388
|
-
*
|
|
1389
|
-
* @typeParam T - The type of items being paginated
|
|
1390
|
-
*
|
|
1391
|
-
* @example
|
|
1392
|
-
* ```typescript
|
|
1393
|
-
* // Iterate over all items
|
|
1394
|
-
* for await (const user of paginator) {
|
|
1395
|
-
* console.log(user.name)
|
|
1396
|
-
* }
|
|
1397
|
-
* ```
|
|
1398
|
-
*
|
|
1399
|
-
* @example
|
|
1400
|
-
* ```typescript
|
|
1401
|
-
* // Collect all items into an array
|
|
1402
|
-
* const allUsers = await paginator.toArray()
|
|
1403
|
-
* ```
|
|
822
|
+
* PowerPath Schemas
|
|
1404
823
|
*
|
|
1405
|
-
*
|
|
1406
|
-
* ```typescript
|
|
1407
|
-
* // Get just the first page
|
|
1408
|
-
* const page = await paginator.firstPage()
|
|
1409
|
-
* console.log(`Got ${page.data.length} of ${page.total} users`)
|
|
1410
|
-
* ```
|
|
824
|
+
* Zod schemas for the PowerPath adaptive learning API.
|
|
1411
825
|
*/
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
}
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
declare const ExternalTestOut = ExternalTestBase.extend({
|
|
830
|
+
lessonType: z.literal('test-out'),
|
|
831
|
+
xp: z.number(),
|
|
832
|
+
})
|
|
833
|
+
|
|
834
|
+
declare const ExternalPlacement = ExternalTestBase.extend({
|
|
835
|
+
lessonType: z.literal('placement'),
|
|
836
|
+
courseIdOnFail: NonEmptyString.nullable().optional(),
|
|
837
|
+
xp: z.number().optional(),
|
|
838
|
+
})
|
|
839
|
+
|
|
840
|
+
declare const PowerPathCreateExternalPlacementTestInput = ExternalPlacement
|
|
841
|
+
|
|
842
|
+
declare const PowerPathCreateExternalTestOutInput = ExternalTestOut
|
|
843
|
+
|
|
844
|
+
declare const PowerPathCreateInternalTestInput = z.discriminatedUnion('testType', [
|
|
845
|
+
InternalTestBase.extend({
|
|
846
|
+
testType: z.literal('qti'),
|
|
847
|
+
qti: z.object({
|
|
848
|
+
url: z.url(),
|
|
849
|
+
title: NonEmptyString.optional(),
|
|
850
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
851
|
+
}),
|
|
852
|
+
}),
|
|
853
|
+
InternalTestBase.extend({
|
|
854
|
+
testType: z.literal('assessment-bank'),
|
|
855
|
+
assessmentBank: z.object({
|
|
856
|
+
resources: z
|
|
857
|
+
.array(
|
|
858
|
+
z.object({
|
|
859
|
+
url: z.url(),
|
|
860
|
+
title: NonEmptyString.optional(),
|
|
861
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
862
|
+
}),
|
|
863
|
+
)
|
|
864
|
+
.min(1),
|
|
865
|
+
}),
|
|
866
|
+
}),
|
|
867
|
+
])
|
|
868
|
+
|
|
869
|
+
declare const PowerPathCreateNewAttemptInput = z.object({
|
|
870
|
+
student: NonEmptyString,
|
|
871
|
+
lesson: NonEmptyString,
|
|
872
|
+
})
|
|
873
|
+
|
|
874
|
+
declare const PowerPathFinalStudentAssessmentResponseInput = z.object({
|
|
875
|
+
student: NonEmptyString,
|
|
876
|
+
lesson: NonEmptyString,
|
|
877
|
+
})
|
|
878
|
+
|
|
879
|
+
declare const PowerPathLessonPlansCreateInput = z.object({
|
|
880
|
+
courseId: NonEmptyString,
|
|
881
|
+
userId: NonEmptyString,
|
|
882
|
+
classId: NonEmptyString.optional(),
|
|
883
|
+
})
|
|
884
|
+
|
|
885
|
+
declare const PowerPathLessonPlanOperationInput = z.union([
|
|
886
|
+
z.object({
|
|
887
|
+
type: z.literal('set-skipped'),
|
|
888
|
+
payload: z.object({
|
|
889
|
+
target: LessonPlanTarget,
|
|
890
|
+
value: z.boolean(),
|
|
891
|
+
}),
|
|
892
|
+
}),
|
|
893
|
+
z.object({
|
|
894
|
+
type: z.literal('add-custom-resource'),
|
|
895
|
+
payload: z.object({
|
|
896
|
+
resource_id: NonEmptyString,
|
|
897
|
+
parent_component_id: NonEmptyString,
|
|
898
|
+
skipped: z.boolean().optional(),
|
|
899
|
+
}),
|
|
900
|
+
}),
|
|
901
|
+
z.object({
|
|
902
|
+
type: z.literal('move-item-before'),
|
|
903
|
+
payload: z.object({
|
|
904
|
+
target: LessonPlanTarget,
|
|
905
|
+
reference_id: NonEmptyString,
|
|
906
|
+
}),
|
|
907
|
+
}),
|
|
908
|
+
z.object({
|
|
909
|
+
type: z.literal('move-item-after'),
|
|
910
|
+
payload: z.object({
|
|
911
|
+
target: LessonPlanTarget,
|
|
912
|
+
reference_id: NonEmptyString,
|
|
913
|
+
}),
|
|
914
|
+
}),
|
|
915
|
+
z.object({
|
|
916
|
+
type: z.literal('move-item-to-start'),
|
|
917
|
+
payload: z.object({
|
|
918
|
+
target: LessonPlanTarget,
|
|
919
|
+
}),
|
|
920
|
+
}),
|
|
921
|
+
z.object({
|
|
922
|
+
type: z.literal('move-item-to-end'),
|
|
923
|
+
payload: z.object({
|
|
924
|
+
target: LessonPlanTarget,
|
|
925
|
+
}),
|
|
926
|
+
}),
|
|
927
|
+
z.object({
|
|
928
|
+
type: z.literal('change-item-parent'),
|
|
929
|
+
payload: z.object({
|
|
930
|
+
target: LessonPlanTarget,
|
|
931
|
+
new_parent_id: NonEmptyString,
|
|
932
|
+
position: z.enum(['start', 'end']).optional(),
|
|
933
|
+
}),
|
|
934
|
+
}),
|
|
935
|
+
])
|
|
936
|
+
|
|
937
|
+
declare const PowerPathLessonPlanOperationsInput = z.object({
|
|
938
|
+
operation: PowerPathLessonPlanOperationInput,
|
|
939
|
+
reason: NonEmptyString.optional(),
|
|
940
|
+
})
|
|
941
|
+
|
|
942
|
+
declare const PowerPathLessonPlanUpdateStudentItemResponseInput = z.object({
|
|
943
|
+
studentId: NonEmptyString,
|
|
944
|
+
componentResourceId: NonEmptyString,
|
|
945
|
+
result: z.object({
|
|
946
|
+
status: z.enum(['active', 'tobedeleted']),
|
|
947
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
948
|
+
score: z.number().optional(),
|
|
949
|
+
textScore: NonEmptyString.optional(),
|
|
950
|
+
scoreDate: z.string().datetime(),
|
|
951
|
+
scorePercentile: z.number().optional(),
|
|
952
|
+
scoreStatus: ScoreStatus,
|
|
953
|
+
comment: NonEmptyString.optional(),
|
|
954
|
+
learningObjectiveSet: z
|
|
955
|
+
.array(
|
|
956
|
+
z.object({
|
|
957
|
+
source: NonEmptyString,
|
|
958
|
+
learningObjectiveResults: z.array(
|
|
959
|
+
z.object({
|
|
960
|
+
learningObjectiveId: NonEmptyString,
|
|
961
|
+
score: z.number().optional(),
|
|
962
|
+
textScore: NonEmptyString.optional(),
|
|
963
|
+
}),
|
|
964
|
+
),
|
|
965
|
+
}),
|
|
966
|
+
)
|
|
967
|
+
.optional(),
|
|
968
|
+
inProgress: NonEmptyString.optional(),
|
|
969
|
+
incomplete: NonEmptyString.optional(),
|
|
970
|
+
late: NonEmptyString.optional(),
|
|
971
|
+
missing: NonEmptyString.optional(),
|
|
972
|
+
}),
|
|
973
|
+
})
|
|
974
|
+
|
|
975
|
+
declare const PowerPathMakeExternalTestAssignmentInput = z.object({
|
|
976
|
+
student: NonEmptyString,
|
|
977
|
+
lesson: NonEmptyString,
|
|
978
|
+
applicationName: NonEmptyString.optional(),
|
|
979
|
+
testId: NonEmptyString.optional(),
|
|
980
|
+
skipCourseEnrollment: z.boolean().optional(),
|
|
981
|
+
})
|
|
982
|
+
|
|
983
|
+
declare const PowerPathPlacementResetUserPlacementInput = z.object({
|
|
984
|
+
student: NonEmptyString,
|
|
985
|
+
subject: TimebackSubject,
|
|
986
|
+
})
|
|
987
|
+
|
|
988
|
+
declare const PowerPathResetAttemptInput = z.object({
|
|
989
|
+
student: NonEmptyString,
|
|
990
|
+
lesson: NonEmptyString,
|
|
991
|
+
})
|
|
992
|
+
|
|
993
|
+
declare const PowerPathScreeningResetSessionInput = z.object({
|
|
994
|
+
userId: NonEmptyString,
|
|
995
|
+
})
|
|
996
|
+
|
|
997
|
+
declare const PowerPathScreeningAssignTestInput = z.object({
|
|
998
|
+
userId: NonEmptyString,
|
|
999
|
+
subject: z.enum(['Math', 'Reading', 'Language', 'Science']),
|
|
1000
|
+
})
|
|
1001
|
+
|
|
1002
|
+
declare const PowerPathTestAssignmentsCreateInput = z.object({
|
|
1003
|
+
student: NonEmptyString,
|
|
1004
|
+
subject: TimebackSubject,
|
|
1005
|
+
grade: TimebackGrade,
|
|
1006
|
+
testName: NonEmptyString.optional(),
|
|
1007
|
+
})
|
|
1008
|
+
|
|
1009
|
+
declare const PowerPathTestAssignmentsUpdateInput = z.object({
|
|
1010
|
+
testName: NonEmptyString,
|
|
1011
|
+
})
|
|
1012
|
+
|
|
1013
|
+
declare const PowerPathTestAssignmentsBulkInput = z.object({
|
|
1014
|
+
items: z.array(PowerPathTestAssignmentItemInput),
|
|
1015
|
+
})
|
|
1016
|
+
|
|
1017
|
+
declare const PowerPathTestAssignmentsImportInput = z.object({
|
|
1018
|
+
spreadsheetUrl: z.url(),
|
|
1019
|
+
sheet: NonEmptyString,
|
|
1020
|
+
})
|
|
1021
|
+
|
|
1022
|
+
declare const PowerPathTestAssignmentsListParams = z.object({
|
|
1023
|
+
student: NonEmptyString,
|
|
1024
|
+
status: z
|
|
1025
|
+
.enum(['assigned', 'in_progress', 'completed', 'failed', 'expired', 'cancelled'])
|
|
1026
|
+
.optional(),
|
|
1027
|
+
subject: NonEmptyString.optional(),
|
|
1028
|
+
grade: TimebackGrade.optional(),
|
|
1029
|
+
limit: z.number().int().positive().max(3000).optional(),
|
|
1030
|
+
offset: z.number().int().nonnegative().optional(),
|
|
1031
|
+
})
|
|
1032
|
+
|
|
1033
|
+
declare const PowerPathTestAssignmentsAdminParams = z.object({
|
|
1034
|
+
student: NonEmptyString.optional(),
|
|
1035
|
+
status: z
|
|
1036
|
+
.enum(['assigned', 'in_progress', 'completed', 'failed', 'expired', 'cancelled'])
|
|
1037
|
+
.optional(),
|
|
1038
|
+
subject: NonEmptyString.optional(),
|
|
1039
|
+
grade: TimebackGrade.optional(),
|
|
1040
|
+
limit: z.number().int().positive().max(3000).optional(),
|
|
1041
|
+
offset: z.number().int().nonnegative().optional(),
|
|
1042
|
+
})
|
|
1043
|
+
|
|
1044
|
+
declare const PowerPathUpdateStudentQuestionResponseInput = z
|
|
1045
|
+
.object({
|
|
1046
|
+
student: NonEmptyString,
|
|
1047
|
+
question: NonEmptyString,
|
|
1048
|
+
response: z.union([NonEmptyString, z.array(NonEmptyString)]).optional(),
|
|
1049
|
+
responses: z
|
|
1050
|
+
.record(z.string(), z.union([NonEmptyString, z.array(NonEmptyString)]))
|
|
1051
|
+
.optional(),
|
|
1052
|
+
lesson: NonEmptyString,
|
|
1053
|
+
rendererOutcomes: z
|
|
1054
|
+
.object({
|
|
1055
|
+
score: z.number(),
|
|
1056
|
+
maxScore: z.number().min(0),
|
|
1057
|
+
isCorrect: z.boolean(),
|
|
1058
|
+
})
|
|
1059
|
+
.optional(),
|
|
1060
|
+
playerState: z.string().optional(),
|
|
1061
|
+
})
|
|
1062
|
+
.refine(data => data.response !== undefined || data.responses !== undefined, {
|
|
1063
|
+
message: "Either 'response' or 'responses' must be provided",
|
|
1064
|
+
path: ['response', 'responses'],
|
|
1065
|
+
})
|
|
1066
|
+
.transform(data => {
|
|
1067
|
+
if (data.response !== undefined && data.responses === undefined) {
|
|
1068
|
+
return { ...data, responses: { RESPONSE: data.response } }
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
return data
|
|
1072
|
+
})
|
|
1073
|
+
|
|
1074
|
+
declare const PowerPathGetAssessmentProgressParams = z.object({
|
|
1075
|
+
student: NonEmptyString,
|
|
1076
|
+
lesson: NonEmptyString,
|
|
1077
|
+
attempt: z.number().int().positive().optional(),
|
|
1078
|
+
})
|
|
1079
|
+
|
|
1080
|
+
declare const PowerPathGetNextQuestionParams = z.object({
|
|
1081
|
+
student: NonEmptyString,
|
|
1082
|
+
lesson: NonEmptyString,
|
|
1083
|
+
})
|
|
1084
|
+
|
|
1085
|
+
declare const PowerPathGetAttemptsParams = z.object({
|
|
1086
|
+
student: NonEmptyString,
|
|
1087
|
+
lesson: NonEmptyString,
|
|
1088
|
+
})
|
|
1089
|
+
|
|
1090
|
+
declare const PowerPathTestOutParams = z.object({
|
|
1091
|
+
student: NonEmptyString,
|
|
1092
|
+
course: NonEmptyString,
|
|
1093
|
+
})
|
|
1094
|
+
|
|
1095
|
+
declare const PowerPathImportExternalTestAssignmentResultsParams = z.object({
|
|
1096
|
+
student: NonEmptyString,
|
|
1097
|
+
lesson: NonEmptyString,
|
|
1098
|
+
applicationName: NonEmptyString.optional(),
|
|
1099
|
+
})
|
|
1100
|
+
|
|
1101
|
+
declare const PowerPathPlacementQueryParams = z.object({
|
|
1102
|
+
student: NonEmptyString,
|
|
1103
|
+
subject: TimebackSubject,
|
|
1104
|
+
})
|
|
1105
|
+
|
|
1106
|
+
declare const PowerPathMakeExternalStudentTestOutAssignmentInput = z.object({
|
|
1107
|
+
oneRosterSourcedId: NonEmptyString,
|
|
1108
|
+
subject: NonEmptyString,
|
|
1109
|
+
})
|
|
1110
|
+
|
|
1111
|
+
declare const PowerPathRenderConfigUpsertInput = z.object({
|
|
1112
|
+
courseIds: z.array(NonEmptyString).min(1),
|
|
1113
|
+
rendererId: NonEmptyString,
|
|
1114
|
+
rendererUrl: z.url(),
|
|
1115
|
+
rendererVersion: NonEmptyString.optional(),
|
|
1116
|
+
suppressFeedback: z.boolean().optional(),
|
|
1117
|
+
suppressCorrectResponse: z.boolean().optional(),
|
|
1118
|
+
})
|
|
1119
|
+
|
|
1120
|
+
declare const PowerPathSyllabusQueryParams = z.object({
|
|
1121
|
+
status: z.enum(['active', 'tobedeleted']).optional(),
|
|
1122
|
+
})
|
|
1123
|
+
|
|
1124
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
1125
|
+
// TYPE EXPORTS (REQUEST INPUTS)
|
|
1126
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
1127
|
+
|
|
1128
|
+
// Shorter type aliases (like OneRoster pattern: schema = OneRosterFoo, type = Foo)
|
|
1129
|
+
type CreateExternalPlacementTestInput = input<
|
|
1130
|
+
typeof PowerPathCreateExternalPlacementTestInput
|
|
1131
|
+
>
|
|
1132
|
+
type CreateExternalTestOutInput = input<typeof PowerPathCreateExternalTestOutInput>
|
|
1133
|
+
type CreateInternalTestInput = input<typeof PowerPathCreateInternalTestInput>
|
|
1134
|
+
type CreateNewAttemptInput = input<typeof PowerPathCreateNewAttemptInput>
|
|
1135
|
+
type FinalStudentAssessmentResponseInput = input<
|
|
1136
|
+
typeof PowerPathFinalStudentAssessmentResponseInput
|
|
1137
|
+
>
|
|
1138
|
+
type LessonPlansCreateInput = input<typeof PowerPathLessonPlansCreateInput>
|
|
1139
|
+
type LessonPlanOperationInput = input<typeof PowerPathLessonPlanOperationInput>
|
|
1140
|
+
type LessonPlanOperationsInput = input<typeof PowerPathLessonPlanOperationsInput>
|
|
1141
|
+
type LessonPlanUpdateStudentItemResponseInput = input<
|
|
1142
|
+
typeof PowerPathLessonPlanUpdateStudentItemResponseInput
|
|
1143
|
+
>
|
|
1144
|
+
type MakeExternalTestAssignmentInput = input<
|
|
1145
|
+
typeof PowerPathMakeExternalTestAssignmentInput
|
|
1146
|
+
>
|
|
1147
|
+
type PlacementResetUserPlacementInput = input<
|
|
1148
|
+
typeof PowerPathPlacementResetUserPlacementInput
|
|
1149
|
+
>
|
|
1150
|
+
type ResetAttemptInput = input<typeof PowerPathResetAttemptInput>
|
|
1151
|
+
type ScreeningResetSessionInput = input<typeof PowerPathScreeningResetSessionInput>
|
|
1152
|
+
type ScreeningAssignTestInput = input<typeof PowerPathScreeningAssignTestInput>
|
|
1153
|
+
type TestAssignmentsCreateInput = input<typeof PowerPathTestAssignmentsCreateInput>
|
|
1154
|
+
type TestAssignmentsUpdateInput = input<typeof PowerPathTestAssignmentsUpdateInput>
|
|
1155
|
+
type TestAssignmentsBulkInput = input<typeof PowerPathTestAssignmentsBulkInput>
|
|
1156
|
+
type TestAssignmentsImportInput = input<typeof PowerPathTestAssignmentsImportInput>
|
|
1157
|
+
type TestAssignmentsListParams = input<typeof PowerPathTestAssignmentsListParams>
|
|
1158
|
+
type TestAssignmentsAdminParams = input<typeof PowerPathTestAssignmentsAdminParams>
|
|
1159
|
+
type UpdateStudentQuestionResponseInput = input<
|
|
1160
|
+
typeof PowerPathUpdateStudentQuestionResponseInput
|
|
1161
|
+
>
|
|
1162
|
+
type GetAssessmentProgressParams = input<typeof PowerPathGetAssessmentProgressParams>
|
|
1163
|
+
type GetNextQuestionParams = input<typeof PowerPathGetNextQuestionParams>
|
|
1164
|
+
type GetAttemptsParams = input<typeof PowerPathGetAttemptsParams>
|
|
1165
|
+
type TestOutParams = input<typeof PowerPathTestOutParams>
|
|
1166
|
+
type ImportExternalTestAssignmentResultsParams = input<
|
|
1167
|
+
typeof PowerPathImportExternalTestAssignmentResultsParams
|
|
1168
|
+
>
|
|
1169
|
+
type MakeExternalStudentTestOutAssignmentInput = input<
|
|
1170
|
+
typeof PowerPathMakeExternalStudentTestOutAssignmentInput
|
|
1171
|
+
>
|
|
1172
|
+
type PlacementQueryParams = input<typeof PowerPathPlacementQueryParams>
|
|
1173
|
+
type RenderConfigUpsertInput = input<typeof PowerPathRenderConfigUpsertInput>
|
|
1174
|
+
type SyllabusQueryParams = input<typeof PowerPathSyllabusQueryParams>
|
|
1520
1175
|
|
|
1521
1176
|
/**
|
|
1522
1177
|
* Transport interface for PowerPath client.
|
|
@@ -1870,7 +1525,7 @@ declare class TestOutResource {
|
|
|
1870
1525
|
declare const PowerPathClient: {
|
|
1871
1526
|
new (config?: PowerPathClientConfig): {
|
|
1872
1527
|
readonly transport: PowerPathTransportLike;
|
|
1873
|
-
readonly _provider?: TimebackProvider | undefined;
|
|
1528
|
+
readonly _provider?: _timeback_internal_client_infra.TimebackProvider | undefined;
|
|
1874
1529
|
readonly assessments: AssessmentResource;
|
|
1875
1530
|
readonly lessonPlans: LessonPlansResource;
|
|
1876
1531
|
readonly placement: PlacementResource;
|
|
@@ -1880,7 +1535,7 @@ declare const PowerPathClient: {
|
|
|
1880
1535
|
readonly testAssignments: TestAssignmentsResource;
|
|
1881
1536
|
readonly testOut: TestOutResource;
|
|
1882
1537
|
getTransport(): PowerPathTransportLike;
|
|
1883
|
-
checkAuth(): Promise<AuthCheckResult>;
|
|
1538
|
+
checkAuth(): Promise<_timeback_internal_client_infra.AuthCheckResult>;
|
|
1884
1539
|
};
|
|
1885
1540
|
};
|
|
1886
1541
|
|
|
@@ -1967,4 +1622,4 @@ declare class Transport extends BaseTransport {
|
|
|
1967
1622
|
}
|
|
1968
1623
|
|
|
1969
1624
|
export { Paginator, PowerPathClient, Transport, createPowerPathClient };
|
|
1970
|
-
export type {
|
|
1625
|
+
export type { AssignmentResult, Attempt, BulkResult, CourseProgressResponse, CreateAttemptResponse, CreateExternalPlacementTestInput, CreateExternalTestOutInput, CreateInternalTestInput, CreateNewAttemptInput, ExternalTestCapableLessonType, ExternalTestCreateResponse, FinalStudentAssessmentResponseInput, FinalizeAssessmentResponse, GetAllPlacementTestsResponse, GetAssessmentProgressParams, GetAssessmentProgressResponse, GetAttemptsParams, GetAttemptsResponse, GetCurrentLevelResponse, GetNextPlacementTestResponse, GetNextQuestionParams, GetNextQuestionResponse, GetSubjectProgressResponse, GetTestOutEligibilityResponse, ImportExternalResultsResponse, ImportExternalTestAssignmentResultsParams, InternalTestCreateResponse, LessonPlanCourseSyncResult, LessonPlanCreateResponse, LessonPlanOperation, LessonPlanOperationInput, LessonPlanOperationResult, LessonPlanOperationsInput, LessonPlanOperationsResponse, LessonPlanResponse, LessonPlanSyncResult, LessonPlanUpdateStudentItemResponseInput, LessonPlansCreateInput, MakeExternalStudentTestOutAssignmentInput, MakeExternalStudentTestOutAssignmentResponse, MakeExternalTestAssignmentInput, MakeExternalTestAssignmentResponse, PaginationMeta, PlacementQueryParams, PlacementResetUserPlacementInput, PowerPath100ProgressResponse, PowerPath100UpdateResponseResult, PowerPathClientConfig, PowerPathClientInstance, PowerPathLessonType, PowerPathQuestionContent, PowerPathQuestionDifficulty, PowerPathQuestionResult, PowerPathTestQuestion, QuizLikeLessonType, ResetAttemptInput, ResetAttemptResponse, ResetPlacementResponse, ResponseResult, ResponseResultFeedback, ScoreStatus, ScreeningAssignTestInput, ScreeningAssignTestResponse, ScreeningResetSessionInput, ScreeningResetSessionResponse, ScreeningResultsResponse, ScreeningSessionResponse, StandardProgressResponse, StandardUpdateResponseResult, SyllabusQueryParams, SyllabusResponse, TestAssignment, TestAssignmentStatus, TestAssignmentsAdminParams, TestAssignmentsBulkInput, TestAssignmentsCreateInput, TestAssignmentsImportInput, TestAssignmentsListParams, TestAssignmentsListResponse, TestAssignmentsUpdateInput, TestOutParams, TestOutResponse, UpdateStudentItemResponseResult, UpdateStudentQuestionResponseInput, UpdateStudentQuestionResponseResult };
|