@instructure/athena-api-client 3.43.0 → 3.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +1 -0
  2. package/dist/esm/models/ChatRequestMessageMetadata.d.ts +14 -1
  3. package/dist/esm/models/ChatRequestMessageMetadata.js +8 -0
  4. package/dist/esm/models/ChatRequestQuizSettings.d.ts +19 -0
  5. package/dist/esm/models/ChatRequestQuizSettings.js +10 -0
  6. package/dist/esm/models/Quiz.d.ts +7 -0
  7. package/dist/esm/models/Quiz.js +3 -0
  8. package/dist/esm/models/QuizBasisSnapshot.d.ts +76 -0
  9. package/dist/esm/models/QuizBasisSnapshot.js +77 -0
  10. package/dist/esm/models/QuizListItem.d.ts +7 -0
  11. package/dist/esm/models/QuizListItem.js +3 -0
  12. package/dist/esm/models/QuizWithQuestions.d.ts +7 -0
  13. package/dist/esm/models/QuizWithQuestions.js +3 -0
  14. package/dist/esm/models/StudyObjectiveAccess.d.ts +34 -2
  15. package/dist/esm/models/StudyObjectiveAccess.js +23 -0
  16. package/dist/esm/models/index.d.ts +1 -0
  17. package/dist/esm/models/index.js +1 -0
  18. package/dist/models/ChatRequestMessageMetadata.d.ts +14 -1
  19. package/dist/models/ChatRequestMessageMetadata.js +9 -0
  20. package/dist/models/ChatRequestQuizSettings.d.ts +19 -0
  21. package/dist/models/ChatRequestQuizSettings.js +11 -1
  22. package/dist/models/Quiz.d.ts +7 -0
  23. package/dist/models/Quiz.js +3 -0
  24. package/dist/models/QuizBasisSnapshot.d.ts +76 -0
  25. package/dist/models/QuizBasisSnapshot.js +85 -0
  26. package/dist/models/QuizListItem.d.ts +7 -0
  27. package/dist/models/QuizListItem.js +3 -0
  28. package/dist/models/QuizWithQuestions.d.ts +7 -0
  29. package/dist/models/QuizWithQuestions.js +3 -0
  30. package/dist/models/StudyObjectiveAccess.d.ts +34 -2
  31. package/dist/models/StudyObjectiveAccess.js +24 -1
  32. package/dist/models/index.d.ts +1 -0
  33. package/dist/models/index.js +1 -0
  34. package/package.json +1 -1
package/README.md CHANGED
@@ -329,6 +329,7 @@ All URIs are relative to *http://localhost:3000*
329
329
  - [PracticeQuizStatus](docs/PracticeQuizStatus.md)
330
330
  - [PracticeQuizStatusList](docs/PracticeQuizStatusList.md)
331
331
  - [Quiz](docs/Quiz.md)
332
+ - [QuizBasisSnapshot](docs/QuizBasisSnapshot.md)
332
333
  - [QuizConceptSummary](docs/QuizConceptSummary.md)
333
334
  - [QuizListItem](docs/QuizListItem.md)
334
335
  - [QuizQuestion](docs/QuizQuestion.md)
@@ -10,7 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  /**
13
- * Optional metadata attached to the user message. Used by learning session chats to bind an answer to its inline question (`inlineQuestionId` + `questionType` + `structuredAnswer`) and to mark client-auto-fired kickoff turns (`synthetic`). All fields are optional; callers supply whichever subset applies to the message being sent.
13
+ * Optional metadata attached to the user message. Used by learning session chats to bind an answer to its inline question (`inlineQuestionId` + `questionType` + `structuredAnswer`), to mark client-auto-fired kickoff turns (`synthetic`), and to mark a first turn the client wrote for the learner (`seeded`). All fields are optional; callers supply whichever subset applies to the message being sent.
14
14
  * @export
15
15
  * @interface ChatRequestMessageMetadata
16
16
  */
@@ -39,7 +39,20 @@ export interface ChatRequestMessageMetadata {
39
39
  * @memberof ChatRequestMessageMetadata
40
40
  */
41
41
  synthetic?: boolean;
42
+ /**
43
+ * Set when the client wrote this message for the learner and sent it as their first turn: 'objective-nudge' is the study-objective email nudge's opening query. The learner never typed it, so its words are never read as their account of what an assessment covers. Unlike `synthetic`, the message is shown in the transcript.
44
+ * @type {string}
45
+ * @memberof ChatRequestMessageMetadata
46
+ */
47
+ seeded?: ChatRequestMessageMetadataSeededEnum;
42
48
  }
49
+ /**
50
+ * @export
51
+ */
52
+ export declare const ChatRequestMessageMetadataSeededEnum: {
53
+ readonly ObjectiveNudge: "objective-nudge";
54
+ };
55
+ export type ChatRequestMessageMetadataSeededEnum = typeof ChatRequestMessageMetadataSeededEnum[keyof typeof ChatRequestMessageMetadataSeededEnum];
43
56
  /**
44
57
  * Check if a given object implements the ChatRequestMessageMetadata interface.
45
58
  */
@@ -11,6 +11,12 @@
11
11
  * https://openapi-generator.tech
12
12
  * Do not edit the class manually.
13
13
  */
14
+ /**
15
+ * @export
16
+ */
17
+ export const ChatRequestMessageMetadataSeededEnum = {
18
+ ObjectiveNudge: 'objective-nudge'
19
+ };
14
20
  /**
15
21
  * Check if a given object implements the ChatRequestMessageMetadata interface.
16
22
  */
@@ -29,6 +35,7 @@ export function ChatRequestMessageMetadataFromJSONTyped(json, ignoreDiscriminato
29
35
  'questionType': json['questionType'] == null ? undefined : json['questionType'],
30
36
  'structuredAnswer': json['structuredAnswer'] == null ? undefined : json['structuredAnswer'],
31
37
  'synthetic': json['synthetic'] == null ? undefined : json['synthetic'],
38
+ 'seeded': json['seeded'] == null ? undefined : json['seeded'],
32
39
  };
33
40
  }
34
41
  export function ChatRequestMessageMetadataToJSON(json) {
@@ -43,5 +50,6 @@ export function ChatRequestMessageMetadataToJSONTyped(value, ignoreDiscriminator
43
50
  'questionType': value['questionType'],
44
51
  'structuredAnswer': value['structuredAnswer'],
45
52
  'synthetic': value['synthetic'],
53
+ 'seeded': value['seeded'],
46
54
  };
47
55
  }
@@ -33,6 +33,18 @@ export interface ChatRequestQuizSettings {
33
33
  * @memberof ChatRequestQuizSettings
34
34
  */
35
35
  instructions?: string;
36
+ /**
37
+ * What the learner says the assessment covers, typed into the study panel's scope box (sent instead of `instructions` when the box asks what the assessment covers). The quiz is built on it, and on an objective chat it is kept as the learner's scope for that objective. An empty string means the learner cleared the box: their kept scope is cleared too.
38
+ * @type {string}
39
+ * @memberof ChatRequestQuizSettings
40
+ */
41
+ scope?: string;
42
+ /**
43
+ * `suggested` when `scope` is Athena's suggested topics (`StudyObjective.access.suggestedScope`) used unedited ("Use these topics"). Omit for anything the learner typed or edited: that scope is their own.
44
+ * @type {string}
45
+ * @memberof ChatRequestQuizSettings
46
+ */
47
+ scopeSource?: ChatRequestQuizSettingsScopeSourceEnum;
36
48
  }
37
49
  /**
38
50
  * @export
@@ -44,6 +56,13 @@ export declare const ChatRequestQuizSettingsQuestionTypesEnum: {
44
56
  readonly TeachBack: "teach-back";
45
57
  };
46
58
  export type ChatRequestQuizSettingsQuestionTypesEnum = typeof ChatRequestQuizSettingsQuestionTypesEnum[keyof typeof ChatRequestQuizSettingsQuestionTypesEnum];
59
+ /**
60
+ * @export
61
+ */
62
+ export declare const ChatRequestQuizSettingsScopeSourceEnum: {
63
+ readonly Suggested: "suggested";
64
+ };
65
+ export type ChatRequestQuizSettingsScopeSourceEnum = typeof ChatRequestQuizSettingsScopeSourceEnum[keyof typeof ChatRequestQuizSettingsScopeSourceEnum];
47
66
  /**
48
67
  * Check if a given object implements the ChatRequestQuizSettings interface.
49
68
  */
@@ -20,6 +20,12 @@ export const ChatRequestQuizSettingsQuestionTypesEnum = {
20
20
  SpotError: 'spot-error',
21
21
  TeachBack: 'teach-back'
22
22
  };
23
+ /**
24
+ * @export
25
+ */
26
+ export const ChatRequestQuizSettingsScopeSourceEnum = {
27
+ Suggested: 'suggested'
28
+ };
23
29
  /**
24
30
  * Check if a given object implements the ChatRequestQuizSettings interface.
25
31
  */
@@ -37,6 +43,8 @@ export function ChatRequestQuizSettingsFromJSONTyped(json, ignoreDiscriminator)
37
43
  'questionTypes': json['questionTypes'] == null ? undefined : json['questionTypes'],
38
44
  'questionCount': json['questionCount'] == null ? undefined : json['questionCount'],
39
45
  'instructions': json['instructions'] == null ? undefined : json['instructions'],
46
+ 'scope': json['scope'] == null ? undefined : json['scope'],
47
+ 'scopeSource': json['scopeSource'] == null ? undefined : json['scopeSource'],
40
48
  };
41
49
  }
42
50
  export function ChatRequestQuizSettingsToJSON(json) {
@@ -50,5 +58,7 @@ export function ChatRequestQuizSettingsToJSONTyped(value, ignoreDiscriminator =
50
58
  'questionTypes': value['questionTypes'],
51
59
  'questionCount': value['questionCount'],
52
60
  'instructions': value['instructions'],
61
+ 'scope': value['scope'],
62
+ 'scopeSource': value['scopeSource'],
53
63
  };
54
64
  }
@@ -9,6 +9,7 @@
9
9
  * https://openapi-generator.tech
10
10
  * Do not edit the class manually.
11
11
  */
12
+ import type { QuizBasisSnapshot } from './QuizBasisSnapshot';
12
13
  /**
13
14
  *
14
15
  * @export
@@ -63,6 +64,12 @@ export interface Quiz {
63
64
  * @memberof Quiz
64
65
  */
65
66
  expectedQuestionCount: number | null;
67
+ /**
68
+ * What this quiz was built from, recorded once with the quiz so a reload or a retake reads the same. Null for quizzes generated before it was recorded.
69
+ * @type {QuizBasisSnapshot}
70
+ * @memberof Quiz
71
+ */
72
+ basisSnapshot?: QuizBasisSnapshot | null;
66
73
  /**
67
74
  *
68
75
  * @type {Date}
@@ -11,6 +11,7 @@
11
11
  * https://openapi-generator.tech
12
12
  * Do not edit the class manually.
13
13
  */
14
+ import { QuizBasisSnapshotFromJSON, QuizBasisSnapshotToJSON, } from './QuizBasisSnapshot';
14
15
  /**
15
16
  * @export
16
17
  */
@@ -66,6 +67,7 @@ export function QuizFromJSONTyped(json, ignoreDiscriminator) {
66
67
  'mode': json['mode'],
67
68
  'generationStatus': json['generationStatus'],
68
69
  'expectedQuestionCount': json['expectedQuestionCount'],
70
+ 'basisSnapshot': json['basisSnapshot'] == null ? undefined : QuizBasisSnapshotFromJSON(json['basisSnapshot']),
69
71
  'createdAt': (new Date(json['createdAt'])),
70
72
  };
71
73
  }
@@ -85,6 +87,7 @@ export function QuizToJSONTyped(value, ignoreDiscriminator = false) {
85
87
  'mode': value['mode'],
86
88
  'generationStatus': value['generationStatus'],
87
89
  'expectedQuestionCount': value['expectedQuestionCount'],
90
+ 'basisSnapshot': QuizBasisSnapshotToJSON(value['basisSnapshot']),
88
91
  'createdAt': value['createdAt'].toISOString(),
89
92
  };
90
93
  }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Athena API
3
+ * REST API for the Athena system
4
+ *
5
+ * The version of the OpenAPI document: 1.0.0
6
+ *
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ /**
13
+ *
14
+ * @export
15
+ * @interface QuizBasisSnapshot
16
+ */
17
+ export interface QuizBasisSnapshot {
18
+ /**
19
+ * What the questions were actually built from: 'learner-materials' (the learner's own files, which the generator reports using), 'course-material' (course files read from Canvas, same test), 'learner-scope' (what the learner said the assessment covers), or 'general' (practice on the subject).
20
+ * @type {string}
21
+ * @memberof QuizBasisSnapshot
22
+ */
23
+ basis: QuizBasisSnapshotBasisEnum;
24
+ /**
25
+ * A learner file was in play but never reached the generator (it could not be read, or generation retried without it).
26
+ * @type {boolean}
27
+ * @memberof QuizBasisSnapshot
28
+ */
29
+ droppedFile: boolean;
30
+ /**
31
+ * Whether anything said what the assessment covers when the quiz was generated.
32
+ * @type {boolean}
33
+ * @memberof QuizBasisSnapshot
34
+ */
35
+ scopeKnown: boolean;
36
+ /**
37
+ * The course's access state at generation time; null when none was read.
38
+ * @type {string}
39
+ * @memberof QuizBasisSnapshot
40
+ */
41
+ accessState: QuizBasisSnapshotAccessStateEnum | null;
42
+ /**
43
+ * The access rule version behind accessState; null with it.
44
+ * @type {number}
45
+ * @memberof QuizBasisSnapshot
46
+ */
47
+ ruleVersion: number | null;
48
+ }
49
+ /**
50
+ * @export
51
+ */
52
+ export declare const QuizBasisSnapshotBasisEnum: {
53
+ readonly CourseMaterial: "course-material";
54
+ readonly LearnerMaterials: "learner-materials";
55
+ readonly LearnerScope: "learner-scope";
56
+ readonly General: "general";
57
+ };
58
+ export type QuizBasisSnapshotBasisEnum = typeof QuizBasisSnapshotBasisEnum[keyof typeof QuizBasisSnapshotBasisEnum];
59
+ /**
60
+ * @export
61
+ */
62
+ export declare const QuizBasisSnapshotAccessStateEnum: {
63
+ readonly Grounded: "grounded";
64
+ readonly Thin: "thin";
65
+ readonly Unreadable: "unreadable";
66
+ readonly Unknown: "unknown";
67
+ };
68
+ export type QuizBasisSnapshotAccessStateEnum = typeof QuizBasisSnapshotAccessStateEnum[keyof typeof QuizBasisSnapshotAccessStateEnum];
69
+ /**
70
+ * Check if a given object implements the QuizBasisSnapshot interface.
71
+ */
72
+ export declare function instanceOfQuizBasisSnapshot(value: object): value is QuizBasisSnapshot;
73
+ export declare function QuizBasisSnapshotFromJSON(json: any): QuizBasisSnapshot;
74
+ export declare function QuizBasisSnapshotFromJSONTyped(json: any, ignoreDiscriminator: boolean): QuizBasisSnapshot;
75
+ export declare function QuizBasisSnapshotToJSON(json: any): QuizBasisSnapshot;
76
+ export declare function QuizBasisSnapshotToJSONTyped(value?: QuizBasisSnapshot | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,77 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Athena API
5
+ * REST API for the Athena system
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+ /**
15
+ * @export
16
+ */
17
+ export const QuizBasisSnapshotBasisEnum = {
18
+ CourseMaterial: 'course-material',
19
+ LearnerMaterials: 'learner-materials',
20
+ LearnerScope: 'learner-scope',
21
+ General: 'general'
22
+ };
23
+ /**
24
+ * @export
25
+ */
26
+ export const QuizBasisSnapshotAccessStateEnum = {
27
+ Grounded: 'grounded',
28
+ Thin: 'thin',
29
+ Unreadable: 'unreadable',
30
+ Unknown: 'unknown'
31
+ };
32
+ /**
33
+ * Check if a given object implements the QuizBasisSnapshot interface.
34
+ */
35
+ export function instanceOfQuizBasisSnapshot(value) {
36
+ if (!('basis' in value) || value['basis'] === undefined)
37
+ return false;
38
+ if (!('droppedFile' in value) || value['droppedFile'] === undefined)
39
+ return false;
40
+ if (!('scopeKnown' in value) || value['scopeKnown'] === undefined)
41
+ return false;
42
+ if (!('accessState' in value) || value['accessState'] === undefined)
43
+ return false;
44
+ if (!('ruleVersion' in value) || value['ruleVersion'] === undefined)
45
+ return false;
46
+ return true;
47
+ }
48
+ export function QuizBasisSnapshotFromJSON(json) {
49
+ return QuizBasisSnapshotFromJSONTyped(json, false);
50
+ }
51
+ export function QuizBasisSnapshotFromJSONTyped(json, ignoreDiscriminator) {
52
+ if (json == null) {
53
+ return json;
54
+ }
55
+ return {
56
+ 'basis': json['basis'],
57
+ 'droppedFile': json['droppedFile'],
58
+ 'scopeKnown': json['scopeKnown'],
59
+ 'accessState': json['accessState'],
60
+ 'ruleVersion': json['ruleVersion'],
61
+ };
62
+ }
63
+ export function QuizBasisSnapshotToJSON(json) {
64
+ return QuizBasisSnapshotToJSONTyped(json, false);
65
+ }
66
+ export function QuizBasisSnapshotToJSONTyped(value, ignoreDiscriminator = false) {
67
+ if (value == null) {
68
+ return value;
69
+ }
70
+ return {
71
+ 'basis': value['basis'],
72
+ 'droppedFile': value['droppedFile'],
73
+ 'scopeKnown': value['scopeKnown'],
74
+ 'accessState': value['accessState'],
75
+ 'ruleVersion': value['ruleVersion'],
76
+ };
77
+ }
@@ -9,6 +9,7 @@
9
9
  * https://openapi-generator.tech
10
10
  * Do not edit the class manually.
11
11
  */
12
+ import type { QuizBasisSnapshot } from './QuizBasisSnapshot';
12
13
  /**
13
14
  *
14
15
  * @export
@@ -63,6 +64,12 @@ export interface QuizListItem {
63
64
  * @memberof QuizListItem
64
65
  */
65
66
  expectedQuestionCount: number | null;
67
+ /**
68
+ * What this quiz was built from, recorded once with the quiz so a reload or a retake reads the same. Null for quizzes generated before it was recorded.
69
+ * @type {QuizBasisSnapshot}
70
+ * @memberof QuizListItem
71
+ */
72
+ basisSnapshot?: QuizBasisSnapshot | null;
66
73
  /**
67
74
  *
68
75
  * @type {Date}
@@ -11,6 +11,7 @@
11
11
  * https://openapi-generator.tech
12
12
  * Do not edit the class manually.
13
13
  */
14
+ import { QuizBasisSnapshotFromJSON, QuizBasisSnapshotToJSON, } from './QuizBasisSnapshot';
14
15
  /**
15
16
  * @export
16
17
  */
@@ -68,6 +69,7 @@ export function QuizListItemFromJSONTyped(json, ignoreDiscriminator) {
68
69
  'mode': json['mode'],
69
70
  'generationStatus': json['generationStatus'],
70
71
  'expectedQuestionCount': json['expectedQuestionCount'],
72
+ 'basisSnapshot': json['basisSnapshot'] == null ? undefined : QuizBasisSnapshotFromJSON(json['basisSnapshot']),
71
73
  'createdAt': (new Date(json['createdAt'])),
72
74
  'questionCount': json['questionCount'],
73
75
  };
@@ -88,6 +90,7 @@ export function QuizListItemToJSONTyped(value, ignoreDiscriminator = false) {
88
90
  'mode': value['mode'],
89
91
  'generationStatus': value['generationStatus'],
90
92
  'expectedQuestionCount': value['expectedQuestionCount'],
93
+ 'basisSnapshot': QuizBasisSnapshotToJSON(value['basisSnapshot']),
91
94
  'createdAt': value['createdAt'].toISOString(),
92
95
  'questionCount': value['questionCount'],
93
96
  };
@@ -10,6 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import type { QuizQuestion } from './QuizQuestion';
13
+ import type { QuizBasisSnapshot } from './QuizBasisSnapshot';
13
14
  /**
14
15
  *
15
16
  * @export
@@ -64,6 +65,12 @@ export interface QuizWithQuestions {
64
65
  * @memberof QuizWithQuestions
65
66
  */
66
67
  expectedQuestionCount: number | null;
68
+ /**
69
+ * What this quiz was built from, recorded once with the quiz so a reload or a retake reads the same. Null for quizzes generated before it was recorded.
70
+ * @type {QuizBasisSnapshot}
71
+ * @memberof QuizWithQuestions
72
+ */
73
+ basisSnapshot?: QuizBasisSnapshot | null;
67
74
  /**
68
75
  *
69
76
  * @type {Date}
@@ -12,6 +12,7 @@
12
12
  * Do not edit the class manually.
13
13
  */
14
14
  import { QuizQuestionFromJSON, QuizQuestionToJSON, } from './QuizQuestion';
15
+ import { QuizBasisSnapshotFromJSON, QuizBasisSnapshotToJSON, } from './QuizBasisSnapshot';
15
16
  /**
16
17
  * @export
17
18
  */
@@ -69,6 +70,7 @@ export function QuizWithQuestionsFromJSONTyped(json, ignoreDiscriminator) {
69
70
  'mode': json['mode'],
70
71
  'generationStatus': json['generationStatus'],
71
72
  'expectedQuestionCount': json['expectedQuestionCount'],
73
+ 'basisSnapshot': json['basisSnapshot'] == null ? undefined : QuizBasisSnapshotFromJSON(json['basisSnapshot']),
72
74
  'createdAt': (new Date(json['createdAt'])),
73
75
  'questions': (json['questions'].map(QuizQuestionFromJSON)),
74
76
  };
@@ -89,6 +91,7 @@ export function QuizWithQuestionsToJSONTyped(value, ignoreDiscriminator = false)
89
91
  'mode': value['mode'],
90
92
  'generationStatus': value['generationStatus'],
91
93
  'expectedQuestionCount': value['expectedQuestionCount'],
94
+ 'basisSnapshot': QuizBasisSnapshotToJSON(value['basisSnapshot']),
92
95
  'createdAt': value['createdAt'].toISOString(),
93
96
  'questions': (value['questions'].map(QuizQuestionToJSON)),
94
97
  };
@@ -70,7 +70,7 @@ export interface StudyObjectiveAccess {
70
70
  */
71
71
  externalToolItemCount: number | null;
72
72
  /**
73
- * Readable files in the module that holds this item (a quiz or assignment), checked against the course files list. Null when the item is in no module, is another kind of item, or either listing could not be read.
73
+ * Readable files in the module that holds this item (a quiz or assignment): checked against the course files list, or, when Canvas refused that list (rule 4 on), counted from the module's own File items. Null when the item is in no module, is another kind of item, or modules could not be listed.
74
74
  * @type {number}
75
75
  * @memberof StudyObjectiveAccess
76
76
  */
@@ -82,7 +82,19 @@ export interface StudyObjectiveAccess {
82
82
  */
83
83
  moduleSiblingPageCount: number | null;
84
84
  /**
85
- * Version of the rule that produced `state`, for joining client analytics to the rule that was live.
85
+ * Readable files the course publishes through Modules (File items of a supported type, not locked for the learner; one per file). The file count to name only when readableFileCount is null (Canvas refused the course files list, e.g. a hidden Files tab); never add it to readableFileCount, since module links point at listed files. Null when modules could not be listed, and on facts read before rule 4.
86
+ * @type {number}
87
+ * @memberof StudyObjectiveAccess
88
+ */
89
+ moduleReadableFileCount: number | null;
90
+ /**
91
+ * Files of a supported type published through Modules that Canvas reported locked for the learner whose read stored these facts (one per file). For analytics only: a module lock follows each learner's progress, so it never decides `state` and copy never names it. Null when modules could not be listed, and on facts read before rule 4.
92
+ * @type {number}
93
+ * @memberof StudyObjectiveAccess
94
+ */
95
+ moduleLockedFileCount: number | null;
96
+ /**
97
+ * Version of the rule that stored these facts, for joining client analytics to the rule that was live. A course stored as 'unreadable' on module File locks alone (rule 4) is returned as 'unknown' / 'listing-denied', as rule 5 reads it, with its stored version.
86
98
  * @type {number}
87
99
  * @memberof StudyObjectiveAccess
88
100
  */
@@ -93,6 +105,18 @@ export interface StudyObjectiveAccess {
93
105
  * @memberof StudyObjectiveAccess
94
106
  */
95
107
  readAt: Date;
108
+ /**
109
+ * Topics the learner's syllabus schedule suggests this item covers, inferred by syllabus analysis, for the scope box to offer as Athena's best guess. Null while `scopeKnown` is true, when the learner has given a scope of their own, or when their syllabus suggests nothing. A suggestion is not evidence: it never sets `scopeKnown`.
110
+ * @type {Array<string>}
111
+ * @memberof StudyObjectiveAccess
112
+ */
113
+ suggestedScope: Array<string> | null;
114
+ /**
115
+ * What built this item's topic list: 'text' (the course syllabus or the item's own text, long enough to count as material) or 'title' (the course and item names, with no syllabus or item text long enough to count). Files never feed the list, so a 'grounded' course can still have a 'title' list. Label a 'title' list as suggested from the course name; key that label on this field, not on `state`. Recorded when the list is extracted; for a list extracted before that record existed it is read from these facts (no syllabus counted and no item text means 'title'), which can read 'text' for a course that gained text after its list was built.
116
+ * @type {string}
117
+ * @memberof StudyObjectiveAccess
118
+ */
119
+ rosterSource: StudyObjectiveAccessRosterSourceEnum;
96
120
  }
97
121
  /**
98
122
  * @export
@@ -131,6 +155,14 @@ export declare const StudyObjectiveAccessSyllabusSourceEnum: {
131
155
  readonly None: "none";
132
156
  };
133
157
  export type StudyObjectiveAccessSyllabusSourceEnum = typeof StudyObjectiveAccessSyllabusSourceEnum[keyof typeof StudyObjectiveAccessSyllabusSourceEnum];
158
+ /**
159
+ * @export
160
+ */
161
+ export declare const StudyObjectiveAccessRosterSourceEnum: {
162
+ readonly Title: "title";
163
+ readonly Text: "text";
164
+ };
165
+ export type StudyObjectiveAccessRosterSourceEnum = typeof StudyObjectiveAccessRosterSourceEnum[keyof typeof StudyObjectiveAccessRosterSourceEnum];
134
166
  /**
135
167
  * Check if a given object implements the StudyObjectiveAccess interface.
136
168
  */
@@ -44,6 +44,13 @@ export const StudyObjectiveAccessSyllabusSourceEnum = {
44
44
  Native: 'native',
45
45
  None: 'none'
46
46
  };
47
+ /**
48
+ * @export
49
+ */
50
+ export const StudyObjectiveAccessRosterSourceEnum = {
51
+ Title: 'title',
52
+ Text: 'text'
53
+ };
47
54
  /**
48
55
  * Check if a given object implements the StudyObjectiveAccess interface.
49
56
  */
@@ -70,10 +77,18 @@ export function instanceOfStudyObjectiveAccess(value) {
70
77
  return false;
71
78
  if (!('moduleSiblingPageCount' in value) || value['moduleSiblingPageCount'] === undefined)
72
79
  return false;
80
+ if (!('moduleReadableFileCount' in value) || value['moduleReadableFileCount'] === undefined)
81
+ return false;
82
+ if (!('moduleLockedFileCount' in value) || value['moduleLockedFileCount'] === undefined)
83
+ return false;
73
84
  if (!('ruleVersion' in value) || value['ruleVersion'] === undefined)
74
85
  return false;
75
86
  if (!('readAt' in value) || value['readAt'] === undefined)
76
87
  return false;
88
+ if (!('suggestedScope' in value) || value['suggestedScope'] === undefined)
89
+ return false;
90
+ if (!('rosterSource' in value) || value['rosterSource'] === undefined)
91
+ return false;
77
92
  return true;
78
93
  }
79
94
  export function StudyObjectiveAccessFromJSON(json) {
@@ -95,8 +110,12 @@ export function StudyObjectiveAccessFromJSONTyped(json, ignoreDiscriminator) {
95
110
  'externalToolItemCount': json['externalToolItemCount'],
96
111
  'moduleSiblingFileCount': json['moduleSiblingFileCount'],
97
112
  'moduleSiblingPageCount': json['moduleSiblingPageCount'],
113
+ 'moduleReadableFileCount': json['moduleReadableFileCount'],
114
+ 'moduleLockedFileCount': json['moduleLockedFileCount'],
98
115
  'ruleVersion': json['ruleVersion'],
99
116
  'readAt': (new Date(json['readAt'])),
117
+ 'suggestedScope': json['suggestedScope'] == null ? null : json['suggestedScope'],
118
+ 'rosterSource': json['rosterSource'],
100
119
  };
101
120
  }
102
121
  export function StudyObjectiveAccessToJSON(json) {
@@ -118,7 +137,11 @@ export function StudyObjectiveAccessToJSONTyped(value, ignoreDiscriminator = fal
118
137
  'externalToolItemCount': value['externalToolItemCount'],
119
138
  'moduleSiblingFileCount': value['moduleSiblingFileCount'],
120
139
  'moduleSiblingPageCount': value['moduleSiblingPageCount'],
140
+ 'moduleReadableFileCount': value['moduleReadableFileCount'],
141
+ 'moduleLockedFileCount': value['moduleLockedFileCount'],
121
142
  'ruleVersion': value['ruleVersion'],
122
143
  'readAt': value['readAt'].toISOString(),
144
+ 'suggestedScope': value['suggestedScope'],
145
+ 'rosterSource': value['rosterSource'],
123
146
  };
124
147
  }
@@ -128,6 +128,7 @@ export * from './PracticeQuiz';
128
128
  export * from './PracticeQuizStatus';
129
129
  export * from './PracticeQuizStatusList';
130
130
  export * from './Quiz';
131
+ export * from './QuizBasisSnapshot';
131
132
  export * from './QuizConceptSummary';
132
133
  export * from './QuizListItem';
133
134
  export * from './QuizQuestion';
@@ -130,6 +130,7 @@ export * from './PracticeQuiz';
130
130
  export * from './PracticeQuizStatus';
131
131
  export * from './PracticeQuizStatusList';
132
132
  export * from './Quiz';
133
+ export * from './QuizBasisSnapshot';
133
134
  export * from './QuizConceptSummary';
134
135
  export * from './QuizListItem';
135
136
  export * from './QuizQuestion';
@@ -10,7 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  /**
13
- * Optional metadata attached to the user message. Used by learning session chats to bind an answer to its inline question (`inlineQuestionId` + `questionType` + `structuredAnswer`) and to mark client-auto-fired kickoff turns (`synthetic`). All fields are optional; callers supply whichever subset applies to the message being sent.
13
+ * Optional metadata attached to the user message. Used by learning session chats to bind an answer to its inline question (`inlineQuestionId` + `questionType` + `structuredAnswer`), to mark client-auto-fired kickoff turns (`synthetic`), and to mark a first turn the client wrote for the learner (`seeded`). All fields are optional; callers supply whichever subset applies to the message being sent.
14
14
  * @export
15
15
  * @interface ChatRequestMessageMetadata
16
16
  */
@@ -39,7 +39,20 @@ export interface ChatRequestMessageMetadata {
39
39
  * @memberof ChatRequestMessageMetadata
40
40
  */
41
41
  synthetic?: boolean;
42
+ /**
43
+ * Set when the client wrote this message for the learner and sent it as their first turn: 'objective-nudge' is the study-objective email nudge's opening query. The learner never typed it, so its words are never read as their account of what an assessment covers. Unlike `synthetic`, the message is shown in the transcript.
44
+ * @type {string}
45
+ * @memberof ChatRequestMessageMetadata
46
+ */
47
+ seeded?: ChatRequestMessageMetadataSeededEnum;
42
48
  }
49
+ /**
50
+ * @export
51
+ */
52
+ export declare const ChatRequestMessageMetadataSeededEnum: {
53
+ readonly ObjectiveNudge: "objective-nudge";
54
+ };
55
+ export type ChatRequestMessageMetadataSeededEnum = typeof ChatRequestMessageMetadataSeededEnum[keyof typeof ChatRequestMessageMetadataSeededEnum];
43
56
  /**
44
57
  * Check if a given object implements the ChatRequestMessageMetadata interface.
45
58
  */
@@ -13,11 +13,18 @@
13
13
  * Do not edit the class manually.
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ChatRequestMessageMetadataSeededEnum = void 0;
16
17
  exports.instanceOfChatRequestMessageMetadata = instanceOfChatRequestMessageMetadata;
17
18
  exports.ChatRequestMessageMetadataFromJSON = ChatRequestMessageMetadataFromJSON;
18
19
  exports.ChatRequestMessageMetadataFromJSONTyped = ChatRequestMessageMetadataFromJSONTyped;
19
20
  exports.ChatRequestMessageMetadataToJSON = ChatRequestMessageMetadataToJSON;
20
21
  exports.ChatRequestMessageMetadataToJSONTyped = ChatRequestMessageMetadataToJSONTyped;
22
+ /**
23
+ * @export
24
+ */
25
+ exports.ChatRequestMessageMetadataSeededEnum = {
26
+ ObjectiveNudge: 'objective-nudge'
27
+ };
21
28
  /**
22
29
  * Check if a given object implements the ChatRequestMessageMetadata interface.
23
30
  */
@@ -36,6 +43,7 @@ function ChatRequestMessageMetadataFromJSONTyped(json, ignoreDiscriminator) {
36
43
  'questionType': json['questionType'] == null ? undefined : json['questionType'],
37
44
  'structuredAnswer': json['structuredAnswer'] == null ? undefined : json['structuredAnswer'],
38
45
  'synthetic': json['synthetic'] == null ? undefined : json['synthetic'],
46
+ 'seeded': json['seeded'] == null ? undefined : json['seeded'],
39
47
  };
40
48
  }
41
49
  function ChatRequestMessageMetadataToJSON(json) {
@@ -50,5 +58,6 @@ function ChatRequestMessageMetadataToJSONTyped(value, ignoreDiscriminator = fals
50
58
  'questionType': value['questionType'],
51
59
  'structuredAnswer': value['structuredAnswer'],
52
60
  'synthetic': value['synthetic'],
61
+ 'seeded': value['seeded'],
53
62
  };
54
63
  }
@@ -33,6 +33,18 @@ export interface ChatRequestQuizSettings {
33
33
  * @memberof ChatRequestQuizSettings
34
34
  */
35
35
  instructions?: string;
36
+ /**
37
+ * What the learner says the assessment covers, typed into the study panel's scope box (sent instead of `instructions` when the box asks what the assessment covers). The quiz is built on it, and on an objective chat it is kept as the learner's scope for that objective. An empty string means the learner cleared the box: their kept scope is cleared too.
38
+ * @type {string}
39
+ * @memberof ChatRequestQuizSettings
40
+ */
41
+ scope?: string;
42
+ /**
43
+ * `suggested` when `scope` is Athena's suggested topics (`StudyObjective.access.suggestedScope`) used unedited ("Use these topics"). Omit for anything the learner typed or edited: that scope is their own.
44
+ * @type {string}
45
+ * @memberof ChatRequestQuizSettings
46
+ */
47
+ scopeSource?: ChatRequestQuizSettingsScopeSourceEnum;
36
48
  }
37
49
  /**
38
50
  * @export
@@ -44,6 +56,13 @@ export declare const ChatRequestQuizSettingsQuestionTypesEnum: {
44
56
  readonly TeachBack: "teach-back";
45
57
  };
46
58
  export type ChatRequestQuizSettingsQuestionTypesEnum = typeof ChatRequestQuizSettingsQuestionTypesEnum[keyof typeof ChatRequestQuizSettingsQuestionTypesEnum];
59
+ /**
60
+ * @export
61
+ */
62
+ export declare const ChatRequestQuizSettingsScopeSourceEnum: {
63
+ readonly Suggested: "suggested";
64
+ };
65
+ export type ChatRequestQuizSettingsScopeSourceEnum = typeof ChatRequestQuizSettingsScopeSourceEnum[keyof typeof ChatRequestQuizSettingsScopeSourceEnum];
47
66
  /**
48
67
  * Check if a given object implements the ChatRequestQuizSettings interface.
49
68
  */
@@ -13,7 +13,7 @@
13
13
  * Do not edit the class manually.
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.ChatRequestQuizSettingsQuestionTypesEnum = void 0;
16
+ exports.ChatRequestQuizSettingsScopeSourceEnum = exports.ChatRequestQuizSettingsQuestionTypesEnum = void 0;
17
17
  exports.instanceOfChatRequestQuizSettings = instanceOfChatRequestQuizSettings;
18
18
  exports.ChatRequestQuizSettingsFromJSON = ChatRequestQuizSettingsFromJSON;
19
19
  exports.ChatRequestQuizSettingsFromJSONTyped = ChatRequestQuizSettingsFromJSONTyped;
@@ -28,6 +28,12 @@ exports.ChatRequestQuizSettingsQuestionTypesEnum = {
28
28
  SpotError: 'spot-error',
29
29
  TeachBack: 'teach-back'
30
30
  };
31
+ /**
32
+ * @export
33
+ */
34
+ exports.ChatRequestQuizSettingsScopeSourceEnum = {
35
+ Suggested: 'suggested'
36
+ };
31
37
  /**
32
38
  * Check if a given object implements the ChatRequestQuizSettings interface.
33
39
  */
@@ -45,6 +51,8 @@ function ChatRequestQuizSettingsFromJSONTyped(json, ignoreDiscriminator) {
45
51
  'questionTypes': json['questionTypes'] == null ? undefined : json['questionTypes'],
46
52
  'questionCount': json['questionCount'] == null ? undefined : json['questionCount'],
47
53
  'instructions': json['instructions'] == null ? undefined : json['instructions'],
54
+ 'scope': json['scope'] == null ? undefined : json['scope'],
55
+ 'scopeSource': json['scopeSource'] == null ? undefined : json['scopeSource'],
48
56
  };
49
57
  }
50
58
  function ChatRequestQuizSettingsToJSON(json) {
@@ -58,5 +66,7 @@ function ChatRequestQuizSettingsToJSONTyped(value, ignoreDiscriminator = false)
58
66
  'questionTypes': value['questionTypes'],
59
67
  'questionCount': value['questionCount'],
60
68
  'instructions': value['instructions'],
69
+ 'scope': value['scope'],
70
+ 'scopeSource': value['scopeSource'],
61
71
  };
62
72
  }
@@ -9,6 +9,7 @@
9
9
  * https://openapi-generator.tech
10
10
  * Do not edit the class manually.
11
11
  */
12
+ import type { QuizBasisSnapshot } from './QuizBasisSnapshot';
12
13
  /**
13
14
  *
14
15
  * @export
@@ -63,6 +64,12 @@ export interface Quiz {
63
64
  * @memberof Quiz
64
65
  */
65
66
  expectedQuestionCount: number | null;
67
+ /**
68
+ * What this quiz was built from, recorded once with the quiz so a reload or a retake reads the same. Null for quizzes generated before it was recorded.
69
+ * @type {QuizBasisSnapshot}
70
+ * @memberof Quiz
71
+ */
72
+ basisSnapshot?: QuizBasisSnapshot | null;
66
73
  /**
67
74
  *
68
75
  * @type {Date}
@@ -19,6 +19,7 @@ exports.QuizFromJSON = QuizFromJSON;
19
19
  exports.QuizFromJSONTyped = QuizFromJSONTyped;
20
20
  exports.QuizToJSON = QuizToJSON;
21
21
  exports.QuizToJSONTyped = QuizToJSONTyped;
22
+ const QuizBasisSnapshot_1 = require("./QuizBasisSnapshot");
22
23
  /**
23
24
  * @export
24
25
  */
@@ -74,6 +75,7 @@ function QuizFromJSONTyped(json, ignoreDiscriminator) {
74
75
  'mode': json['mode'],
75
76
  'generationStatus': json['generationStatus'],
76
77
  'expectedQuestionCount': json['expectedQuestionCount'],
78
+ 'basisSnapshot': json['basisSnapshot'] == null ? undefined : (0, QuizBasisSnapshot_1.QuizBasisSnapshotFromJSON)(json['basisSnapshot']),
77
79
  'createdAt': (new Date(json['createdAt'])),
78
80
  };
79
81
  }
@@ -93,6 +95,7 @@ function QuizToJSONTyped(value, ignoreDiscriminator = false) {
93
95
  'mode': value['mode'],
94
96
  'generationStatus': value['generationStatus'],
95
97
  'expectedQuestionCount': value['expectedQuestionCount'],
98
+ 'basisSnapshot': (0, QuizBasisSnapshot_1.QuizBasisSnapshotToJSON)(value['basisSnapshot']),
96
99
  'createdAt': value['createdAt'].toISOString(),
97
100
  };
98
101
  }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Athena API
3
+ * REST API for the Athena system
4
+ *
5
+ * The version of the OpenAPI document: 1.0.0
6
+ *
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ /**
13
+ *
14
+ * @export
15
+ * @interface QuizBasisSnapshot
16
+ */
17
+ export interface QuizBasisSnapshot {
18
+ /**
19
+ * What the questions were actually built from: 'learner-materials' (the learner's own files, which the generator reports using), 'course-material' (course files read from Canvas, same test), 'learner-scope' (what the learner said the assessment covers), or 'general' (practice on the subject).
20
+ * @type {string}
21
+ * @memberof QuizBasisSnapshot
22
+ */
23
+ basis: QuizBasisSnapshotBasisEnum;
24
+ /**
25
+ * A learner file was in play but never reached the generator (it could not be read, or generation retried without it).
26
+ * @type {boolean}
27
+ * @memberof QuizBasisSnapshot
28
+ */
29
+ droppedFile: boolean;
30
+ /**
31
+ * Whether anything said what the assessment covers when the quiz was generated.
32
+ * @type {boolean}
33
+ * @memberof QuizBasisSnapshot
34
+ */
35
+ scopeKnown: boolean;
36
+ /**
37
+ * The course's access state at generation time; null when none was read.
38
+ * @type {string}
39
+ * @memberof QuizBasisSnapshot
40
+ */
41
+ accessState: QuizBasisSnapshotAccessStateEnum | null;
42
+ /**
43
+ * The access rule version behind accessState; null with it.
44
+ * @type {number}
45
+ * @memberof QuizBasisSnapshot
46
+ */
47
+ ruleVersion: number | null;
48
+ }
49
+ /**
50
+ * @export
51
+ */
52
+ export declare const QuizBasisSnapshotBasisEnum: {
53
+ readonly CourseMaterial: "course-material";
54
+ readonly LearnerMaterials: "learner-materials";
55
+ readonly LearnerScope: "learner-scope";
56
+ readonly General: "general";
57
+ };
58
+ export type QuizBasisSnapshotBasisEnum = typeof QuizBasisSnapshotBasisEnum[keyof typeof QuizBasisSnapshotBasisEnum];
59
+ /**
60
+ * @export
61
+ */
62
+ export declare const QuizBasisSnapshotAccessStateEnum: {
63
+ readonly Grounded: "grounded";
64
+ readonly Thin: "thin";
65
+ readonly Unreadable: "unreadable";
66
+ readonly Unknown: "unknown";
67
+ };
68
+ export type QuizBasisSnapshotAccessStateEnum = typeof QuizBasisSnapshotAccessStateEnum[keyof typeof QuizBasisSnapshotAccessStateEnum];
69
+ /**
70
+ * Check if a given object implements the QuizBasisSnapshot interface.
71
+ */
72
+ export declare function instanceOfQuizBasisSnapshot(value: object): value is QuizBasisSnapshot;
73
+ export declare function QuizBasisSnapshotFromJSON(json: any): QuizBasisSnapshot;
74
+ export declare function QuizBasisSnapshotFromJSONTyped(json: any, ignoreDiscriminator: boolean): QuizBasisSnapshot;
75
+ export declare function QuizBasisSnapshotToJSON(json: any): QuizBasisSnapshot;
76
+ export declare function QuizBasisSnapshotToJSONTyped(value?: QuizBasisSnapshot | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ /**
5
+ * Athena API
6
+ * REST API for the Athena system
7
+ *
8
+ * The version of the OpenAPI document: 1.0.0
9
+ *
10
+ *
11
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
12
+ * https://openapi-generator.tech
13
+ * Do not edit the class manually.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.QuizBasisSnapshotAccessStateEnum = exports.QuizBasisSnapshotBasisEnum = void 0;
17
+ exports.instanceOfQuizBasisSnapshot = instanceOfQuizBasisSnapshot;
18
+ exports.QuizBasisSnapshotFromJSON = QuizBasisSnapshotFromJSON;
19
+ exports.QuizBasisSnapshotFromJSONTyped = QuizBasisSnapshotFromJSONTyped;
20
+ exports.QuizBasisSnapshotToJSON = QuizBasisSnapshotToJSON;
21
+ exports.QuizBasisSnapshotToJSONTyped = QuizBasisSnapshotToJSONTyped;
22
+ /**
23
+ * @export
24
+ */
25
+ exports.QuizBasisSnapshotBasisEnum = {
26
+ CourseMaterial: 'course-material',
27
+ LearnerMaterials: 'learner-materials',
28
+ LearnerScope: 'learner-scope',
29
+ General: 'general'
30
+ };
31
+ /**
32
+ * @export
33
+ */
34
+ exports.QuizBasisSnapshotAccessStateEnum = {
35
+ Grounded: 'grounded',
36
+ Thin: 'thin',
37
+ Unreadable: 'unreadable',
38
+ Unknown: 'unknown'
39
+ };
40
+ /**
41
+ * Check if a given object implements the QuizBasisSnapshot interface.
42
+ */
43
+ function instanceOfQuizBasisSnapshot(value) {
44
+ if (!('basis' in value) || value['basis'] === undefined)
45
+ return false;
46
+ if (!('droppedFile' in value) || value['droppedFile'] === undefined)
47
+ return false;
48
+ if (!('scopeKnown' in value) || value['scopeKnown'] === undefined)
49
+ return false;
50
+ if (!('accessState' in value) || value['accessState'] === undefined)
51
+ return false;
52
+ if (!('ruleVersion' in value) || value['ruleVersion'] === undefined)
53
+ return false;
54
+ return true;
55
+ }
56
+ function QuizBasisSnapshotFromJSON(json) {
57
+ return QuizBasisSnapshotFromJSONTyped(json, false);
58
+ }
59
+ function QuizBasisSnapshotFromJSONTyped(json, ignoreDiscriminator) {
60
+ if (json == null) {
61
+ return json;
62
+ }
63
+ return {
64
+ 'basis': json['basis'],
65
+ 'droppedFile': json['droppedFile'],
66
+ 'scopeKnown': json['scopeKnown'],
67
+ 'accessState': json['accessState'],
68
+ 'ruleVersion': json['ruleVersion'],
69
+ };
70
+ }
71
+ function QuizBasisSnapshotToJSON(json) {
72
+ return QuizBasisSnapshotToJSONTyped(json, false);
73
+ }
74
+ function QuizBasisSnapshotToJSONTyped(value, ignoreDiscriminator = false) {
75
+ if (value == null) {
76
+ return value;
77
+ }
78
+ return {
79
+ 'basis': value['basis'],
80
+ 'droppedFile': value['droppedFile'],
81
+ 'scopeKnown': value['scopeKnown'],
82
+ 'accessState': value['accessState'],
83
+ 'ruleVersion': value['ruleVersion'],
84
+ };
85
+ }
@@ -9,6 +9,7 @@
9
9
  * https://openapi-generator.tech
10
10
  * Do not edit the class manually.
11
11
  */
12
+ import type { QuizBasisSnapshot } from './QuizBasisSnapshot';
12
13
  /**
13
14
  *
14
15
  * @export
@@ -63,6 +64,12 @@ export interface QuizListItem {
63
64
  * @memberof QuizListItem
64
65
  */
65
66
  expectedQuestionCount: number | null;
67
+ /**
68
+ * What this quiz was built from, recorded once with the quiz so a reload or a retake reads the same. Null for quizzes generated before it was recorded.
69
+ * @type {QuizBasisSnapshot}
70
+ * @memberof QuizListItem
71
+ */
72
+ basisSnapshot?: QuizBasisSnapshot | null;
66
73
  /**
67
74
  *
68
75
  * @type {Date}
@@ -19,6 +19,7 @@ exports.QuizListItemFromJSON = QuizListItemFromJSON;
19
19
  exports.QuizListItemFromJSONTyped = QuizListItemFromJSONTyped;
20
20
  exports.QuizListItemToJSON = QuizListItemToJSON;
21
21
  exports.QuizListItemToJSONTyped = QuizListItemToJSONTyped;
22
+ const QuizBasisSnapshot_1 = require("./QuizBasisSnapshot");
22
23
  /**
23
24
  * @export
24
25
  */
@@ -76,6 +77,7 @@ function QuizListItemFromJSONTyped(json, ignoreDiscriminator) {
76
77
  'mode': json['mode'],
77
78
  'generationStatus': json['generationStatus'],
78
79
  'expectedQuestionCount': json['expectedQuestionCount'],
80
+ 'basisSnapshot': json['basisSnapshot'] == null ? undefined : (0, QuizBasisSnapshot_1.QuizBasisSnapshotFromJSON)(json['basisSnapshot']),
79
81
  'createdAt': (new Date(json['createdAt'])),
80
82
  'questionCount': json['questionCount'],
81
83
  };
@@ -96,6 +98,7 @@ function QuizListItemToJSONTyped(value, ignoreDiscriminator = false) {
96
98
  'mode': value['mode'],
97
99
  'generationStatus': value['generationStatus'],
98
100
  'expectedQuestionCount': value['expectedQuestionCount'],
101
+ 'basisSnapshot': (0, QuizBasisSnapshot_1.QuizBasisSnapshotToJSON)(value['basisSnapshot']),
99
102
  'createdAt': value['createdAt'].toISOString(),
100
103
  'questionCount': value['questionCount'],
101
104
  };
@@ -10,6 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import type { QuizQuestion } from './QuizQuestion';
13
+ import type { QuizBasisSnapshot } from './QuizBasisSnapshot';
13
14
  /**
14
15
  *
15
16
  * @export
@@ -64,6 +65,12 @@ export interface QuizWithQuestions {
64
65
  * @memberof QuizWithQuestions
65
66
  */
66
67
  expectedQuestionCount: number | null;
68
+ /**
69
+ * What this quiz was built from, recorded once with the quiz so a reload or a retake reads the same. Null for quizzes generated before it was recorded.
70
+ * @type {QuizBasisSnapshot}
71
+ * @memberof QuizWithQuestions
72
+ */
73
+ basisSnapshot?: QuizBasisSnapshot | null;
67
74
  /**
68
75
  *
69
76
  * @type {Date}
@@ -20,6 +20,7 @@ exports.QuizWithQuestionsFromJSONTyped = QuizWithQuestionsFromJSONTyped;
20
20
  exports.QuizWithQuestionsToJSON = QuizWithQuestionsToJSON;
21
21
  exports.QuizWithQuestionsToJSONTyped = QuizWithQuestionsToJSONTyped;
22
22
  const QuizQuestion_1 = require("./QuizQuestion");
23
+ const QuizBasisSnapshot_1 = require("./QuizBasisSnapshot");
23
24
  /**
24
25
  * @export
25
26
  */
@@ -77,6 +78,7 @@ function QuizWithQuestionsFromJSONTyped(json, ignoreDiscriminator) {
77
78
  'mode': json['mode'],
78
79
  'generationStatus': json['generationStatus'],
79
80
  'expectedQuestionCount': json['expectedQuestionCount'],
81
+ 'basisSnapshot': json['basisSnapshot'] == null ? undefined : (0, QuizBasisSnapshot_1.QuizBasisSnapshotFromJSON)(json['basisSnapshot']),
80
82
  'createdAt': (new Date(json['createdAt'])),
81
83
  'questions': (json['questions'].map(QuizQuestion_1.QuizQuestionFromJSON)),
82
84
  };
@@ -97,6 +99,7 @@ function QuizWithQuestionsToJSONTyped(value, ignoreDiscriminator = false) {
97
99
  'mode': value['mode'],
98
100
  'generationStatus': value['generationStatus'],
99
101
  'expectedQuestionCount': value['expectedQuestionCount'],
102
+ 'basisSnapshot': (0, QuizBasisSnapshot_1.QuizBasisSnapshotToJSON)(value['basisSnapshot']),
100
103
  'createdAt': value['createdAt'].toISOString(),
101
104
  'questions': (value['questions'].map(QuizQuestion_1.QuizQuestionToJSON)),
102
105
  };
@@ -70,7 +70,7 @@ export interface StudyObjectiveAccess {
70
70
  */
71
71
  externalToolItemCount: number | null;
72
72
  /**
73
- * Readable files in the module that holds this item (a quiz or assignment), checked against the course files list. Null when the item is in no module, is another kind of item, or either listing could not be read.
73
+ * Readable files in the module that holds this item (a quiz or assignment): checked against the course files list, or, when Canvas refused that list (rule 4 on), counted from the module's own File items. Null when the item is in no module, is another kind of item, or modules could not be listed.
74
74
  * @type {number}
75
75
  * @memberof StudyObjectiveAccess
76
76
  */
@@ -82,7 +82,19 @@ export interface StudyObjectiveAccess {
82
82
  */
83
83
  moduleSiblingPageCount: number | null;
84
84
  /**
85
- * Version of the rule that produced `state`, for joining client analytics to the rule that was live.
85
+ * Readable files the course publishes through Modules (File items of a supported type, not locked for the learner; one per file). The file count to name only when readableFileCount is null (Canvas refused the course files list, e.g. a hidden Files tab); never add it to readableFileCount, since module links point at listed files. Null when modules could not be listed, and on facts read before rule 4.
86
+ * @type {number}
87
+ * @memberof StudyObjectiveAccess
88
+ */
89
+ moduleReadableFileCount: number | null;
90
+ /**
91
+ * Files of a supported type published through Modules that Canvas reported locked for the learner whose read stored these facts (one per file). For analytics only: a module lock follows each learner's progress, so it never decides `state` and copy never names it. Null when modules could not be listed, and on facts read before rule 4.
92
+ * @type {number}
93
+ * @memberof StudyObjectiveAccess
94
+ */
95
+ moduleLockedFileCount: number | null;
96
+ /**
97
+ * Version of the rule that stored these facts, for joining client analytics to the rule that was live. A course stored as 'unreadable' on module File locks alone (rule 4) is returned as 'unknown' / 'listing-denied', as rule 5 reads it, with its stored version.
86
98
  * @type {number}
87
99
  * @memberof StudyObjectiveAccess
88
100
  */
@@ -93,6 +105,18 @@ export interface StudyObjectiveAccess {
93
105
  * @memberof StudyObjectiveAccess
94
106
  */
95
107
  readAt: Date;
108
+ /**
109
+ * Topics the learner's syllabus schedule suggests this item covers, inferred by syllabus analysis, for the scope box to offer as Athena's best guess. Null while `scopeKnown` is true, when the learner has given a scope of their own, or when their syllabus suggests nothing. A suggestion is not evidence: it never sets `scopeKnown`.
110
+ * @type {Array<string>}
111
+ * @memberof StudyObjectiveAccess
112
+ */
113
+ suggestedScope: Array<string> | null;
114
+ /**
115
+ * What built this item's topic list: 'text' (the course syllabus or the item's own text, long enough to count as material) or 'title' (the course and item names, with no syllabus or item text long enough to count). Files never feed the list, so a 'grounded' course can still have a 'title' list. Label a 'title' list as suggested from the course name; key that label on this field, not on `state`. Recorded when the list is extracted; for a list extracted before that record existed it is read from these facts (no syllabus counted and no item text means 'title'), which can read 'text' for a course that gained text after its list was built.
116
+ * @type {string}
117
+ * @memberof StudyObjectiveAccess
118
+ */
119
+ rosterSource: StudyObjectiveAccessRosterSourceEnum;
96
120
  }
97
121
  /**
98
122
  * @export
@@ -131,6 +155,14 @@ export declare const StudyObjectiveAccessSyllabusSourceEnum: {
131
155
  readonly None: "none";
132
156
  };
133
157
  export type StudyObjectiveAccessSyllabusSourceEnum = typeof StudyObjectiveAccessSyllabusSourceEnum[keyof typeof StudyObjectiveAccessSyllabusSourceEnum];
158
+ /**
159
+ * @export
160
+ */
161
+ export declare const StudyObjectiveAccessRosterSourceEnum: {
162
+ readonly Title: "title";
163
+ readonly Text: "text";
164
+ };
165
+ export type StudyObjectiveAccessRosterSourceEnum = typeof StudyObjectiveAccessRosterSourceEnum[keyof typeof StudyObjectiveAccessRosterSourceEnum];
134
166
  /**
135
167
  * Check if a given object implements the StudyObjectiveAccess interface.
136
168
  */
@@ -13,7 +13,7 @@
13
13
  * Do not edit the class manually.
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.StudyObjectiveAccessSyllabusSourceEnum = exports.StudyObjectiveAccessScopeKnownReasonEnum = exports.StudyObjectiveAccessUnknownReasonEnum = exports.StudyObjectiveAccessStateEnum = void 0;
16
+ exports.StudyObjectiveAccessRosterSourceEnum = exports.StudyObjectiveAccessSyllabusSourceEnum = exports.StudyObjectiveAccessScopeKnownReasonEnum = exports.StudyObjectiveAccessUnknownReasonEnum = exports.StudyObjectiveAccessStateEnum = void 0;
17
17
  exports.instanceOfStudyObjectiveAccess = instanceOfStudyObjectiveAccess;
18
18
  exports.StudyObjectiveAccessFromJSON = StudyObjectiveAccessFromJSON;
19
19
  exports.StudyObjectiveAccessFromJSONTyped = StudyObjectiveAccessFromJSONTyped;
@@ -52,6 +52,13 @@ exports.StudyObjectiveAccessSyllabusSourceEnum = {
52
52
  Native: 'native',
53
53
  None: 'none'
54
54
  };
55
+ /**
56
+ * @export
57
+ */
58
+ exports.StudyObjectiveAccessRosterSourceEnum = {
59
+ Title: 'title',
60
+ Text: 'text'
61
+ };
55
62
  /**
56
63
  * Check if a given object implements the StudyObjectiveAccess interface.
57
64
  */
@@ -78,10 +85,18 @@ function instanceOfStudyObjectiveAccess(value) {
78
85
  return false;
79
86
  if (!('moduleSiblingPageCount' in value) || value['moduleSiblingPageCount'] === undefined)
80
87
  return false;
88
+ if (!('moduleReadableFileCount' in value) || value['moduleReadableFileCount'] === undefined)
89
+ return false;
90
+ if (!('moduleLockedFileCount' in value) || value['moduleLockedFileCount'] === undefined)
91
+ return false;
81
92
  if (!('ruleVersion' in value) || value['ruleVersion'] === undefined)
82
93
  return false;
83
94
  if (!('readAt' in value) || value['readAt'] === undefined)
84
95
  return false;
96
+ if (!('suggestedScope' in value) || value['suggestedScope'] === undefined)
97
+ return false;
98
+ if (!('rosterSource' in value) || value['rosterSource'] === undefined)
99
+ return false;
85
100
  return true;
86
101
  }
87
102
  function StudyObjectiveAccessFromJSON(json) {
@@ -103,8 +118,12 @@ function StudyObjectiveAccessFromJSONTyped(json, ignoreDiscriminator) {
103
118
  'externalToolItemCount': json['externalToolItemCount'],
104
119
  'moduleSiblingFileCount': json['moduleSiblingFileCount'],
105
120
  'moduleSiblingPageCount': json['moduleSiblingPageCount'],
121
+ 'moduleReadableFileCount': json['moduleReadableFileCount'],
122
+ 'moduleLockedFileCount': json['moduleLockedFileCount'],
106
123
  'ruleVersion': json['ruleVersion'],
107
124
  'readAt': (new Date(json['readAt'])),
125
+ 'suggestedScope': json['suggestedScope'] == null ? null : json['suggestedScope'],
126
+ 'rosterSource': json['rosterSource'],
108
127
  };
109
128
  }
110
129
  function StudyObjectiveAccessToJSON(json) {
@@ -126,7 +145,11 @@ function StudyObjectiveAccessToJSONTyped(value, ignoreDiscriminator = false) {
126
145
  'externalToolItemCount': value['externalToolItemCount'],
127
146
  'moduleSiblingFileCount': value['moduleSiblingFileCount'],
128
147
  'moduleSiblingPageCount': value['moduleSiblingPageCount'],
148
+ 'moduleReadableFileCount': value['moduleReadableFileCount'],
149
+ 'moduleLockedFileCount': value['moduleLockedFileCount'],
129
150
  'ruleVersion': value['ruleVersion'],
130
151
  'readAt': value['readAt'].toISOString(),
152
+ 'suggestedScope': value['suggestedScope'],
153
+ 'rosterSource': value['rosterSource'],
131
154
  };
132
155
  }
@@ -128,6 +128,7 @@ export * from './PracticeQuiz';
128
128
  export * from './PracticeQuizStatus';
129
129
  export * from './PracticeQuizStatusList';
130
130
  export * from './Quiz';
131
+ export * from './QuizBasisSnapshot';
131
132
  export * from './QuizConceptSummary';
132
133
  export * from './QuizListItem';
133
134
  export * from './QuizQuestion';
@@ -146,6 +146,7 @@ __exportStar(require("./PracticeQuiz"), exports);
146
146
  __exportStar(require("./PracticeQuizStatus"), exports);
147
147
  __exportStar(require("./PracticeQuizStatusList"), exports);
148
148
  __exportStar(require("./Quiz"), exports);
149
+ __exportStar(require("./QuizBasisSnapshot"), exports);
149
150
  __exportStar(require("./QuizConceptSummary"), exports);
150
151
  __exportStar(require("./QuizListItem"), exports);
151
152
  __exportStar(require("./QuizQuestion"), exports);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@instructure/athena-api-client",
3
3
  "private": false,
4
- "version": "3.43.0",
4
+ "version": "3.45.0",
5
5
  "description": "OpenAPI client for the Athena API",
6
6
  "author": "Instructure",
7
7
  "repository": {