@instructure/athena-api-client 4.10.10 → 4.11.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.
package/README.md CHANGED
@@ -366,6 +366,7 @@ All URIs are relative to *http://localhost:3000*
366
366
  - [DailyQuizStatus](docs/DailyQuizStatus.md)
367
367
  - [DeleteCurrentUserResponse](docs/DeleteCurrentUserResponse.md)
368
368
  - [EnrollmentTaxonomy](docs/EnrollmentTaxonomy.md)
369
+ - [ExamPageAttachment](docs/ExamPageAttachment.md)
369
370
  - [FeatureEntity](docs/FeatureEntity.md)
370
371
  - [FeatureOverrideEntity](docs/FeatureOverrideEntity.md)
371
372
  - [HealthCheck](docs/HealthCheck.md)
@@ -0,0 +1,54 @@
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 ExamPageAttachment
16
+ */
17
+ export interface ExamPageAttachment {
18
+ /**
19
+ * Whether the exam-information pages built this Canvas item's concept list.
20
+ * @type {boolean}
21
+ * @memberof ExamPageAttachment
22
+ */
23
+ builtList: boolean;
24
+ /**
25
+ * Titles of the exam-information pages that built the list, ordered by their Canvas locator. Empty when the list was built from other course information.
26
+ * @type {Array<string>}
27
+ * @memberof ExamPageAttachment
28
+ */
29
+ titles: Array<string>;
30
+ /**
31
+ * A note about the exam-information page step: a source says its topic list is not complete, the pages could not be read, their coverage could not be reconciled, or their coverage conflicts with the assessment details. Null when there is no note.
32
+ * @type {string}
33
+ * @memberof ExamPageAttachment
34
+ */
35
+ note: ExamPageAttachmentNoteEnum | null;
36
+ }
37
+ /**
38
+ * @export
39
+ */
40
+ export declare const ExamPageAttachmentNoteEnum: {
41
+ readonly NotExhaustive: "not-exhaustive";
42
+ readonly Unread: "unread";
43
+ readonly Unresolved: "unresolved";
44
+ readonly Conflict: "conflict";
45
+ };
46
+ export type ExamPageAttachmentNoteEnum = typeof ExamPageAttachmentNoteEnum[keyof typeof ExamPageAttachmentNoteEnum];
47
+ /**
48
+ * Check if a given object implements the ExamPageAttachment interface.
49
+ */
50
+ export declare function instanceOfExamPageAttachment(value: object): value is ExamPageAttachment;
51
+ export declare function ExamPageAttachmentFromJSON(json: any): ExamPageAttachment;
52
+ export declare function ExamPageAttachmentFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExamPageAttachment;
53
+ export declare function ExamPageAttachmentToJSON(json: any): ExamPageAttachment;
54
+ export declare function ExamPageAttachmentToJSONTyped(value?: ExamPageAttachment | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,60 @@
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 ExamPageAttachmentNoteEnum = {
18
+ NotExhaustive: 'not-exhaustive',
19
+ Unread: 'unread',
20
+ Unresolved: 'unresolved',
21
+ Conflict: 'conflict'
22
+ };
23
+ /**
24
+ * Check if a given object implements the ExamPageAttachment interface.
25
+ */
26
+ export function instanceOfExamPageAttachment(value) {
27
+ if (!('builtList' in value) || value['builtList'] === undefined)
28
+ return false;
29
+ if (!('titles' in value) || value['titles'] === undefined)
30
+ return false;
31
+ if (!('note' in value) || value['note'] === undefined)
32
+ return false;
33
+ return true;
34
+ }
35
+ export function ExamPageAttachmentFromJSON(json) {
36
+ return ExamPageAttachmentFromJSONTyped(json, false);
37
+ }
38
+ export function ExamPageAttachmentFromJSONTyped(json, ignoreDiscriminator) {
39
+ if (json == null) {
40
+ return json;
41
+ }
42
+ return {
43
+ 'builtList': json['builtList'],
44
+ 'titles': json['titles'],
45
+ 'note': json['note'],
46
+ };
47
+ }
48
+ export function ExamPageAttachmentToJSON(json) {
49
+ return ExamPageAttachmentToJSONTyped(json, false);
50
+ }
51
+ export function ExamPageAttachmentToJSONTyped(value, ignoreDiscriminator = false) {
52
+ if (value == null) {
53
+ return value;
54
+ }
55
+ return {
56
+ 'builtList': value['builtList'],
57
+ 'titles': value['titles'],
58
+ 'note': value['note'],
59
+ };
60
+ }
@@ -16,25 +16,25 @@
16
16
  */
17
17
  export interface StudyObjectiveAccess {
18
18
  /**
19
- * What the Canvas item's course gives Athena to go on: 'grounded' (the course has material: a syllabus, the item's own text, readable course files, or, when Canvas refused the course files list, files it publishes through Modules, locked for this learner or not), 'unknown' (Athena can't tell; see unknownReason), 'unreadable' (nothing readable, but locked files or external-tool items exist that Athena cannot open), or 'thin' (the item's title and dates only).
19
+ * What the Canvas item's course gives Athena to go on: 'grounded' (the course has material: a syllabus, the item's own text, readable course files, or, when Canvas refused the course files list, files it publishes through Modules, locked for this learner or not; always, too, when the item's topic list was built from its exam information page), 'unknown' (Athena can't tell; see unknownReason), 'unreadable' (nothing readable, but locked files or external-tool items exist that Athena cannot open), or 'thin' (the item's title and dates only).
20
20
  * @type {string}
21
21
  * @memberof StudyObjectiveAccess
22
22
  */
23
23
  state: StudyObjectiveAccessStateEnum;
24
24
  /**
25
- * Why state is 'unknown'; null otherwise. 'pages-only': the course's only candidate material is module pages, which Athena counts but does not open. 'listing-denied': Canvas refused the files or modules listing (for example a hidden Files tab) and nothing else grounds the course, so it can't say what that listing holds.
25
+ * Why state is 'unknown'; null otherwise. 'pages-only': the course's only candidate material is module pages, which Athena counts but does not open as course material (an exam information page it reads for one item builds that item's list instead; see rosterSource 'page'). 'listing-denied': Canvas refused the files or modules listing (for example a hidden Files tab) and nothing else grounds the course, so it can't say what that listing holds.
26
26
  * @type {string}
27
27
  * @memberof StudyObjectiveAccess
28
28
  */
29
29
  unknownReason: StudyObjectiveAccessUnknownReasonEnum | null;
30
30
  /**
31
- * Whether anything says what this item covers, for this learner: the item's own text (description or page body), or topics this learner's syllabus analysis found for the assessment with the same title. A syllabus that only names the item does not count.
31
+ * Whether anything says what this item covers, for this learner: the item's own text (description or page body), topics this learner's syllabus analysis found for the assessment with the same title, or the exam information page whose stated coverage built the item's topic list. A syllabus that only names the item does not count.
32
32
  * @type {boolean}
33
33
  * @memberof StudyObjectiveAccess
34
34
  */
35
35
  scopeKnown: boolean;
36
36
  /**
37
- * Why scopeKnown is true; null when it is false. 'item-text', 'syllabus-topics', or 'syllabus-legacy' (the paired syllabus assessment was analysed before topic counts were stored, so its scope is presumed known).
37
+ * Why scopeKnown is true; null when it is false. 'item-text', 'syllabus-topics', 'syllabus-legacy' (the paired syllabus assessment was analysed before topic counts were stored, so its scope is presumed known), or 'exam-page' (the item's topic list was built from an exam information page beside it that names this assessment and states what it covers).
38
38
  * @type {string}
39
39
  * @memberof StudyObjectiveAccess
40
40
  */
@@ -118,7 +118,7 @@ export interface StudyObjectiveAccess {
118
118
  */
119
119
  suggestedScope: Array<string> | null;
120
120
  /**
121
- * What built this item's topic list, decided from the text its extraction was given: 'text' (the item's own text, long enough to count as material), 'module' (no item text that says what it covers, so the list was suggested from the name of the course module the item sits in and the names of the other items there), 'syllabus' (neither, so the list was inferred from the course syllabus) or 'title' (the course and item names, with no syllabus, subject-naming module or item text long enough to count). Files never feed the list, so a 'grounded' course can still have a 'title' list. Label an inferred list with its source: a 'title' list as Athena's best guess from the item's title, a 'module' list as Athena's best guess from its module, a 'syllabus' list as suggested from the syllabus; key that label on this field, not on `state`. A 'module' list never makes the scope known: only a syllabus assessment whose title pairs exactly (or nearly) with the item's can. Recorded when the list is extracted; for a list extracted before that record existed it is read from these facts by the same rule (item text means 'text', else a syllabus means 'syllabus', else 'title'), which can read as built from text a course gained after its list was built. A 'text' recorded before 'syllabus' existed is read the same way when these facts show a syllabus and no item text.
121
+ * What built this item's topic list, decided from the text its extraction was given: 'text' (the item's own text, long enough to count as material), 'page' (an exam information page beside the item that names this assessment and states its coverage: the list is that stated scope, and the attachment's examPage names the page or pages), 'module' (no item text that says what it covers, so the list was suggested from the name of the course module the item sits in and the names of the other items there), 'syllabus' (neither, so the list was inferred from the course syllabus) or 'title' (the course and item names, with no syllabus, subject-naming module or item text long enough to count). Files never feed the list, so a 'grounded' course can still have a 'title' list. Label an inferred list with its source: a 'title' list as Athena's best guess from the item's title, a 'module' list as Athena's best guess from its module, a 'syllabus' list as suggested from the syllabus; key that label on this field, not on `state`. A 'module' list never makes the scope known: only a syllabus assessment whose title pairs exactly (or nearly) with the item's, or a 'page' list, can. Recorded when the list is extracted; for a list extracted before that record existed it is read from these facts by the same rule (item text means 'text', else a syllabus means 'syllabus', else 'title'), which can read as built from text a course gained after its list was built. A 'text' recorded before 'syllabus' existed is read the same way when these facts show a syllabus and no item text.
122
122
  * @type {string}
123
123
  * @memberof StudyObjectiveAccess
124
124
  */
@@ -155,6 +155,7 @@ export declare const StudyObjectiveAccessScopeKnownReasonEnum: {
155
155
  readonly ItemText: "item-text";
156
156
  readonly SyllabusTopics: "syllabus-topics";
157
157
  readonly SyllabusLegacy: "syllabus-legacy";
158
+ readonly ExamPage: "exam-page";
158
159
  };
159
160
  export type StudyObjectiveAccessScopeKnownReasonEnum = typeof StudyObjectiveAccessScopeKnownReasonEnum[keyof typeof StudyObjectiveAccessScopeKnownReasonEnum];
160
161
  /**
@@ -175,6 +176,7 @@ export declare const StudyObjectiveAccessRosterSourceEnum: {
175
176
  readonly Text: "text";
176
177
  readonly Syllabus: "syllabus";
177
178
  readonly Module: "module";
179
+ readonly Page: "page";
178
180
  };
179
181
  export type StudyObjectiveAccessRosterSourceEnum = typeof StudyObjectiveAccessRosterSourceEnum[keyof typeof StudyObjectiveAccessRosterSourceEnum];
180
182
  /**
@@ -33,7 +33,8 @@ export const StudyObjectiveAccessUnknownReasonEnum = {
33
33
  export const StudyObjectiveAccessScopeKnownReasonEnum = {
34
34
  ItemText: 'item-text',
35
35
  SyllabusTopics: 'syllabus-topics',
36
- SyllabusLegacy: 'syllabus-legacy'
36
+ SyllabusLegacy: 'syllabus-legacy',
37
+ ExamPage: 'exam-page'
37
38
  };
38
39
  /**
39
40
  * @export
@@ -51,7 +52,8 @@ export const StudyObjectiveAccessRosterSourceEnum = {
51
52
  Title: 'title',
52
53
  Text: 'text',
53
54
  Syllabus: 'syllabus',
54
- Module: 'module'
55
+ Module: 'module',
56
+ Page: 'page'
55
57
  };
56
58
  /**
57
59
  * Check if a given object implements the StudyObjectiveAccess interface.
@@ -9,6 +9,7 @@
9
9
  * https://openapi-generator.tech
10
10
  * Do not edit the class manually.
11
11
  */
12
+ import type { ExamPageAttachment } from './ExamPageAttachment';
12
13
  import type { StudyObjectiveConceptSummary } from './StudyObjectiveConceptSummary';
13
14
  /**
14
15
  *
@@ -46,6 +47,12 @@ export interface StudyObjectiveConceptAttachment {
46
47
  * @memberof StudyObjectiveConceptAttachment
47
48
  */
48
49
  emptyReason: StudyObjectiveConceptAttachmentEmptyReasonEnum | null;
50
+ /**
51
+ * The exam-information pages that built this Canvas item's list and any note about that step. Null when no page built the list and there is no note, and for custom objectives.
52
+ * @type {ExamPageAttachment}
53
+ * @memberof StudyObjectiveConceptAttachment
54
+ */
55
+ examPage: ExamPageAttachment | null;
49
56
  /**
50
57
  * When a Canvas read made with a learner's own token last stored this Canvas item's facts: the access read a routine trigger runs (a Study Space visit, or staff refreshing a course for that learner). Null for an item never read and for custom objectives. Operational metadata about the Canvas item, returned to any authorized caller; learner surfaces omit it in athena-poc (`attachmentOf`). The item's row is shared by every learner on it, so a read for any of them moves it.
51
58
  * @type {Date}
@@ -11,6 +11,7 @@
11
11
  * https://openapi-generator.tech
12
12
  * Do not edit the class manually.
13
13
  */
14
+ import { ExamPageAttachmentFromJSON, ExamPageAttachmentToJSON, } from './ExamPageAttachment';
14
15
  import { StudyObjectiveConceptSummaryFromJSON, StudyObjectiveConceptSummaryToJSON, } from './StudyObjectiveConceptSummary';
15
16
  /**
16
17
  * @export
@@ -50,6 +51,8 @@ export function instanceOfStudyObjectiveConceptAttachment(value) {
50
51
  return false;
51
52
  if (!('emptyReason' in value) || value['emptyReason'] === undefined)
52
53
  return false;
54
+ if (!('examPage' in value) || value['examPage'] === undefined)
55
+ return false;
53
56
  if (!('accessReadAt' in value) || value['accessReadAt'] === undefined)
54
57
  return false;
55
58
  if (!('structureReaderVersion' in value) || value['structureReaderVersion'] === undefined)
@@ -71,6 +74,7 @@ export function StudyObjectiveConceptAttachmentFromJSONTyped(json, ignoreDiscrim
71
74
  'status': json['status'],
72
75
  'lastError': json['lastError'],
73
76
  'emptyReason': json['emptyReason'],
77
+ 'examPage': ExamPageAttachmentFromJSON(json['examPage']),
74
78
  'accessReadAt': (json['accessReadAt'] == null ? null : new Date(json['accessReadAt'])),
75
79
  'structureReaderVersion': json['structureReaderVersion'],
76
80
  'concepts': (json['concepts'].map(StudyObjectiveConceptSummaryFromJSON)),
@@ -89,6 +93,7 @@ export function StudyObjectiveConceptAttachmentToJSONTyped(value, ignoreDiscrimi
89
93
  'status': value['status'],
90
94
  'lastError': value['lastError'],
91
95
  'emptyReason': value['emptyReason'],
96
+ 'examPage': ExamPageAttachmentToJSON(value['examPage']),
92
97
  'accessReadAt': value['accessReadAt'] == null ? value['accessReadAt'] : value['accessReadAt'].toISOString(),
93
98
  'structureReaderVersion': value['structureReaderVersion'],
94
99
  'concepts': (value['concepts'].map(StudyObjectiveConceptSummaryToJSON)),
@@ -29,6 +29,12 @@ export interface TriggerStudyObjectiveConceptExtractionRequest {
29
29
  syllabusHtmlByCanvasCourseId?: {
30
30
  [key: string]: string;
31
31
  };
32
+ /**
33
+ * Retry the exam-information page read of an objective whose list could not be built because that read failed; sent only from the card's Refresh in that state
34
+ * @type {boolean}
35
+ * @memberof TriggerStudyObjectiveConceptExtractionRequest
36
+ */
37
+ retryExamPage?: boolean;
32
38
  /**
33
39
  * When true, re-extract canvas-sourced objectives whose concepts are already active (bypassing the failed-only/arrival-only re-pend guard). No effect on custom objectives or in-flight extractions.
34
40
  * @type {boolean}
@@ -29,6 +29,7 @@ export function TriggerStudyObjectiveConceptExtractionRequestFromJSONTyped(json,
29
29
  return {
30
30
  'studyObjectiveIds': json['studyObjectiveIds'],
31
31
  'syllabusHtmlByCanvasCourseId': json['syllabusHtmlByCanvasCourseId'] == null ? undefined : json['syllabusHtmlByCanvasCourseId'],
32
+ 'retryExamPage': json['retryExamPage'] == null ? undefined : json['retryExamPage'],
32
33
  'forceReextract': json['forceReextract'] == null ? undefined : json['forceReextract'],
33
34
  };
34
35
  }
@@ -42,6 +43,7 @@ export function TriggerStudyObjectiveConceptExtractionRequestToJSONTyped(value,
42
43
  return {
43
44
  'studyObjectiveIds': value['studyObjectiveIds'],
44
45
  'syllabusHtmlByCanvasCourseId': value['syllabusHtmlByCanvasCourseId'],
46
+ 'retryExamPage': value['retryExamPage'],
45
47
  'forceReextract': value['forceReextract'],
46
48
  };
47
49
  }
@@ -132,6 +132,7 @@ export * from './CreateTokenResponse';
132
132
  export * from './DailyQuizStatus';
133
133
  export * from './DeleteCurrentUserResponse';
134
134
  export * from './EnrollmentTaxonomy';
135
+ export * from './ExamPageAttachment';
135
136
  export * from './FeatureEntity';
136
137
  export * from './FeatureOverrideEntity';
137
138
  export * from './HealthCheck';
@@ -134,6 +134,7 @@ export * from './CreateTokenResponse';
134
134
  export * from './DailyQuizStatus';
135
135
  export * from './DeleteCurrentUserResponse';
136
136
  export * from './EnrollmentTaxonomy';
137
+ export * from './ExamPageAttachment';
137
138
  export * from './FeatureEntity';
138
139
  export * from './FeatureOverrideEntity';
139
140
  export * from './HealthCheck';
@@ -0,0 +1,54 @@
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 ExamPageAttachment
16
+ */
17
+ export interface ExamPageAttachment {
18
+ /**
19
+ * Whether the exam-information pages built this Canvas item's concept list.
20
+ * @type {boolean}
21
+ * @memberof ExamPageAttachment
22
+ */
23
+ builtList: boolean;
24
+ /**
25
+ * Titles of the exam-information pages that built the list, ordered by their Canvas locator. Empty when the list was built from other course information.
26
+ * @type {Array<string>}
27
+ * @memberof ExamPageAttachment
28
+ */
29
+ titles: Array<string>;
30
+ /**
31
+ * A note about the exam-information page step: a source says its topic list is not complete, the pages could not be read, their coverage could not be reconciled, or their coverage conflicts with the assessment details. Null when there is no note.
32
+ * @type {string}
33
+ * @memberof ExamPageAttachment
34
+ */
35
+ note: ExamPageAttachmentNoteEnum | null;
36
+ }
37
+ /**
38
+ * @export
39
+ */
40
+ export declare const ExamPageAttachmentNoteEnum: {
41
+ readonly NotExhaustive: "not-exhaustive";
42
+ readonly Unread: "unread";
43
+ readonly Unresolved: "unresolved";
44
+ readonly Conflict: "conflict";
45
+ };
46
+ export type ExamPageAttachmentNoteEnum = typeof ExamPageAttachmentNoteEnum[keyof typeof ExamPageAttachmentNoteEnum];
47
+ /**
48
+ * Check if a given object implements the ExamPageAttachment interface.
49
+ */
50
+ export declare function instanceOfExamPageAttachment(value: object): value is ExamPageAttachment;
51
+ export declare function ExamPageAttachmentFromJSON(json: any): ExamPageAttachment;
52
+ export declare function ExamPageAttachmentFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExamPageAttachment;
53
+ export declare function ExamPageAttachmentToJSON(json: any): ExamPageAttachment;
54
+ export declare function ExamPageAttachmentToJSONTyped(value?: ExamPageAttachment | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,68 @@
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.ExamPageAttachmentNoteEnum = void 0;
17
+ exports.instanceOfExamPageAttachment = instanceOfExamPageAttachment;
18
+ exports.ExamPageAttachmentFromJSON = ExamPageAttachmentFromJSON;
19
+ exports.ExamPageAttachmentFromJSONTyped = ExamPageAttachmentFromJSONTyped;
20
+ exports.ExamPageAttachmentToJSON = ExamPageAttachmentToJSON;
21
+ exports.ExamPageAttachmentToJSONTyped = ExamPageAttachmentToJSONTyped;
22
+ /**
23
+ * @export
24
+ */
25
+ exports.ExamPageAttachmentNoteEnum = {
26
+ NotExhaustive: 'not-exhaustive',
27
+ Unread: 'unread',
28
+ Unresolved: 'unresolved',
29
+ Conflict: 'conflict'
30
+ };
31
+ /**
32
+ * Check if a given object implements the ExamPageAttachment interface.
33
+ */
34
+ function instanceOfExamPageAttachment(value) {
35
+ if (!('builtList' in value) || value['builtList'] === undefined)
36
+ return false;
37
+ if (!('titles' in value) || value['titles'] === undefined)
38
+ return false;
39
+ if (!('note' in value) || value['note'] === undefined)
40
+ return false;
41
+ return true;
42
+ }
43
+ function ExamPageAttachmentFromJSON(json) {
44
+ return ExamPageAttachmentFromJSONTyped(json, false);
45
+ }
46
+ function ExamPageAttachmentFromJSONTyped(json, ignoreDiscriminator) {
47
+ if (json == null) {
48
+ return json;
49
+ }
50
+ return {
51
+ 'builtList': json['builtList'],
52
+ 'titles': json['titles'],
53
+ 'note': json['note'],
54
+ };
55
+ }
56
+ function ExamPageAttachmentToJSON(json) {
57
+ return ExamPageAttachmentToJSONTyped(json, false);
58
+ }
59
+ function ExamPageAttachmentToJSONTyped(value, ignoreDiscriminator = false) {
60
+ if (value == null) {
61
+ return value;
62
+ }
63
+ return {
64
+ 'builtList': value['builtList'],
65
+ 'titles': value['titles'],
66
+ 'note': value['note'],
67
+ };
68
+ }
@@ -16,25 +16,25 @@
16
16
  */
17
17
  export interface StudyObjectiveAccess {
18
18
  /**
19
- * What the Canvas item's course gives Athena to go on: 'grounded' (the course has material: a syllabus, the item's own text, readable course files, or, when Canvas refused the course files list, files it publishes through Modules, locked for this learner or not), 'unknown' (Athena can't tell; see unknownReason), 'unreadable' (nothing readable, but locked files or external-tool items exist that Athena cannot open), or 'thin' (the item's title and dates only).
19
+ * What the Canvas item's course gives Athena to go on: 'grounded' (the course has material: a syllabus, the item's own text, readable course files, or, when Canvas refused the course files list, files it publishes through Modules, locked for this learner or not; always, too, when the item's topic list was built from its exam information page), 'unknown' (Athena can't tell; see unknownReason), 'unreadable' (nothing readable, but locked files or external-tool items exist that Athena cannot open), or 'thin' (the item's title and dates only).
20
20
  * @type {string}
21
21
  * @memberof StudyObjectiveAccess
22
22
  */
23
23
  state: StudyObjectiveAccessStateEnum;
24
24
  /**
25
- * Why state is 'unknown'; null otherwise. 'pages-only': the course's only candidate material is module pages, which Athena counts but does not open. 'listing-denied': Canvas refused the files or modules listing (for example a hidden Files tab) and nothing else grounds the course, so it can't say what that listing holds.
25
+ * Why state is 'unknown'; null otherwise. 'pages-only': the course's only candidate material is module pages, which Athena counts but does not open as course material (an exam information page it reads for one item builds that item's list instead; see rosterSource 'page'). 'listing-denied': Canvas refused the files or modules listing (for example a hidden Files tab) and nothing else grounds the course, so it can't say what that listing holds.
26
26
  * @type {string}
27
27
  * @memberof StudyObjectiveAccess
28
28
  */
29
29
  unknownReason: StudyObjectiveAccessUnknownReasonEnum | null;
30
30
  /**
31
- * Whether anything says what this item covers, for this learner: the item's own text (description or page body), or topics this learner's syllabus analysis found for the assessment with the same title. A syllabus that only names the item does not count.
31
+ * Whether anything says what this item covers, for this learner: the item's own text (description or page body), topics this learner's syllabus analysis found for the assessment with the same title, or the exam information page whose stated coverage built the item's topic list. A syllabus that only names the item does not count.
32
32
  * @type {boolean}
33
33
  * @memberof StudyObjectiveAccess
34
34
  */
35
35
  scopeKnown: boolean;
36
36
  /**
37
- * Why scopeKnown is true; null when it is false. 'item-text', 'syllabus-topics', or 'syllabus-legacy' (the paired syllabus assessment was analysed before topic counts were stored, so its scope is presumed known).
37
+ * Why scopeKnown is true; null when it is false. 'item-text', 'syllabus-topics', 'syllabus-legacy' (the paired syllabus assessment was analysed before topic counts were stored, so its scope is presumed known), or 'exam-page' (the item's topic list was built from an exam information page beside it that names this assessment and states what it covers).
38
38
  * @type {string}
39
39
  * @memberof StudyObjectiveAccess
40
40
  */
@@ -118,7 +118,7 @@ export interface StudyObjectiveAccess {
118
118
  */
119
119
  suggestedScope: Array<string> | null;
120
120
  /**
121
- * What built this item's topic list, decided from the text its extraction was given: 'text' (the item's own text, long enough to count as material), 'module' (no item text that says what it covers, so the list was suggested from the name of the course module the item sits in and the names of the other items there), 'syllabus' (neither, so the list was inferred from the course syllabus) or 'title' (the course and item names, with no syllabus, subject-naming module or item text long enough to count). Files never feed the list, so a 'grounded' course can still have a 'title' list. Label an inferred list with its source: a 'title' list as Athena's best guess from the item's title, a 'module' list as Athena's best guess from its module, a 'syllabus' list as suggested from the syllabus; key that label on this field, not on `state`. A 'module' list never makes the scope known: only a syllabus assessment whose title pairs exactly (or nearly) with the item's can. Recorded when the list is extracted; for a list extracted before that record existed it is read from these facts by the same rule (item text means 'text', else a syllabus means 'syllabus', else 'title'), which can read as built from text a course gained after its list was built. A 'text' recorded before 'syllabus' existed is read the same way when these facts show a syllabus and no item text.
121
+ * What built this item's topic list, decided from the text its extraction was given: 'text' (the item's own text, long enough to count as material), 'page' (an exam information page beside the item that names this assessment and states its coverage: the list is that stated scope, and the attachment's examPage names the page or pages), 'module' (no item text that says what it covers, so the list was suggested from the name of the course module the item sits in and the names of the other items there), 'syllabus' (neither, so the list was inferred from the course syllabus) or 'title' (the course and item names, with no syllabus, subject-naming module or item text long enough to count). Files never feed the list, so a 'grounded' course can still have a 'title' list. Label an inferred list with its source: a 'title' list as Athena's best guess from the item's title, a 'module' list as Athena's best guess from its module, a 'syllabus' list as suggested from the syllabus; key that label on this field, not on `state`. A 'module' list never makes the scope known: only a syllabus assessment whose title pairs exactly (or nearly) with the item's, or a 'page' list, can. Recorded when the list is extracted; for a list extracted before that record existed it is read from these facts by the same rule (item text means 'text', else a syllabus means 'syllabus', else 'title'), which can read as built from text a course gained after its list was built. A 'text' recorded before 'syllabus' existed is read the same way when these facts show a syllabus and no item text.
122
122
  * @type {string}
123
123
  * @memberof StudyObjectiveAccess
124
124
  */
@@ -155,6 +155,7 @@ export declare const StudyObjectiveAccessScopeKnownReasonEnum: {
155
155
  readonly ItemText: "item-text";
156
156
  readonly SyllabusTopics: "syllabus-topics";
157
157
  readonly SyllabusLegacy: "syllabus-legacy";
158
+ readonly ExamPage: "exam-page";
158
159
  };
159
160
  export type StudyObjectiveAccessScopeKnownReasonEnum = typeof StudyObjectiveAccessScopeKnownReasonEnum[keyof typeof StudyObjectiveAccessScopeKnownReasonEnum];
160
161
  /**
@@ -175,6 +176,7 @@ export declare const StudyObjectiveAccessRosterSourceEnum: {
175
176
  readonly Text: "text";
176
177
  readonly Syllabus: "syllabus";
177
178
  readonly Module: "module";
179
+ readonly Page: "page";
178
180
  };
179
181
  export type StudyObjectiveAccessRosterSourceEnum = typeof StudyObjectiveAccessRosterSourceEnum[keyof typeof StudyObjectiveAccessRosterSourceEnum];
180
182
  /**
@@ -41,7 +41,8 @@ exports.StudyObjectiveAccessUnknownReasonEnum = {
41
41
  exports.StudyObjectiveAccessScopeKnownReasonEnum = {
42
42
  ItemText: 'item-text',
43
43
  SyllabusTopics: 'syllabus-topics',
44
- SyllabusLegacy: 'syllabus-legacy'
44
+ SyllabusLegacy: 'syllabus-legacy',
45
+ ExamPage: 'exam-page'
45
46
  };
46
47
  /**
47
48
  * @export
@@ -59,7 +60,8 @@ exports.StudyObjectiveAccessRosterSourceEnum = {
59
60
  Title: 'title',
60
61
  Text: 'text',
61
62
  Syllabus: 'syllabus',
62
- Module: 'module'
63
+ Module: 'module',
64
+ Page: 'page'
63
65
  };
64
66
  /**
65
67
  * Check if a given object implements the StudyObjectiveAccess interface.
@@ -9,6 +9,7 @@
9
9
  * https://openapi-generator.tech
10
10
  * Do not edit the class manually.
11
11
  */
12
+ import type { ExamPageAttachment } from './ExamPageAttachment';
12
13
  import type { StudyObjectiveConceptSummary } from './StudyObjectiveConceptSummary';
13
14
  /**
14
15
  *
@@ -46,6 +47,12 @@ export interface StudyObjectiveConceptAttachment {
46
47
  * @memberof StudyObjectiveConceptAttachment
47
48
  */
48
49
  emptyReason: StudyObjectiveConceptAttachmentEmptyReasonEnum | null;
50
+ /**
51
+ * The exam-information pages that built this Canvas item's list and any note about that step. Null when no page built the list and there is no note, and for custom objectives.
52
+ * @type {ExamPageAttachment}
53
+ * @memberof StudyObjectiveConceptAttachment
54
+ */
55
+ examPage: ExamPageAttachment | null;
49
56
  /**
50
57
  * When a Canvas read made with a learner's own token last stored this Canvas item's facts: the access read a routine trigger runs (a Study Space visit, or staff refreshing a course for that learner). Null for an item never read and for custom objectives. Operational metadata about the Canvas item, returned to any authorized caller; learner surfaces omit it in athena-poc (`attachmentOf`). The item's row is shared by every learner on it, so a read for any of them moves it.
51
58
  * @type {Date}
@@ -19,6 +19,7 @@ exports.StudyObjectiveConceptAttachmentFromJSON = StudyObjectiveConceptAttachmen
19
19
  exports.StudyObjectiveConceptAttachmentFromJSONTyped = StudyObjectiveConceptAttachmentFromJSONTyped;
20
20
  exports.StudyObjectiveConceptAttachmentToJSON = StudyObjectiveConceptAttachmentToJSON;
21
21
  exports.StudyObjectiveConceptAttachmentToJSONTyped = StudyObjectiveConceptAttachmentToJSONTyped;
22
+ const ExamPageAttachment_1 = require("./ExamPageAttachment");
22
23
  const StudyObjectiveConceptSummary_1 = require("./StudyObjectiveConceptSummary");
23
24
  /**
24
25
  * @export
@@ -58,6 +59,8 @@ function instanceOfStudyObjectiveConceptAttachment(value) {
58
59
  return false;
59
60
  if (!('emptyReason' in value) || value['emptyReason'] === undefined)
60
61
  return false;
62
+ if (!('examPage' in value) || value['examPage'] === undefined)
63
+ return false;
61
64
  if (!('accessReadAt' in value) || value['accessReadAt'] === undefined)
62
65
  return false;
63
66
  if (!('structureReaderVersion' in value) || value['structureReaderVersion'] === undefined)
@@ -79,6 +82,7 @@ function StudyObjectiveConceptAttachmentFromJSONTyped(json, ignoreDiscriminator)
79
82
  'status': json['status'],
80
83
  'lastError': json['lastError'],
81
84
  'emptyReason': json['emptyReason'],
85
+ 'examPage': (0, ExamPageAttachment_1.ExamPageAttachmentFromJSON)(json['examPage']),
82
86
  'accessReadAt': (json['accessReadAt'] == null ? null : new Date(json['accessReadAt'])),
83
87
  'structureReaderVersion': json['structureReaderVersion'],
84
88
  'concepts': (json['concepts'].map(StudyObjectiveConceptSummary_1.StudyObjectiveConceptSummaryFromJSON)),
@@ -97,6 +101,7 @@ function StudyObjectiveConceptAttachmentToJSONTyped(value, ignoreDiscriminator =
97
101
  'status': value['status'],
98
102
  'lastError': value['lastError'],
99
103
  'emptyReason': value['emptyReason'],
104
+ 'examPage': (0, ExamPageAttachment_1.ExamPageAttachmentToJSON)(value['examPage']),
100
105
  'accessReadAt': value['accessReadAt'] == null ? value['accessReadAt'] : value['accessReadAt'].toISOString(),
101
106
  'structureReaderVersion': value['structureReaderVersion'],
102
107
  'concepts': (value['concepts'].map(StudyObjectiveConceptSummary_1.StudyObjectiveConceptSummaryToJSON)),
@@ -29,6 +29,12 @@ export interface TriggerStudyObjectiveConceptExtractionRequest {
29
29
  syllabusHtmlByCanvasCourseId?: {
30
30
  [key: string]: string;
31
31
  };
32
+ /**
33
+ * Retry the exam-information page read of an objective whose list could not be built because that read failed; sent only from the card's Refresh in that state
34
+ * @type {boolean}
35
+ * @memberof TriggerStudyObjectiveConceptExtractionRequest
36
+ */
37
+ retryExamPage?: boolean;
32
38
  /**
33
39
  * When true, re-extract canvas-sourced objectives whose concepts are already active (bypassing the failed-only/arrival-only re-pend guard). No effect on custom objectives or in-flight extractions.
34
40
  * @type {boolean}
@@ -36,6 +36,7 @@ function TriggerStudyObjectiveConceptExtractionRequestFromJSONTyped(json, ignore
36
36
  return {
37
37
  'studyObjectiveIds': json['studyObjectiveIds'],
38
38
  'syllabusHtmlByCanvasCourseId': json['syllabusHtmlByCanvasCourseId'] == null ? undefined : json['syllabusHtmlByCanvasCourseId'],
39
+ 'retryExamPage': json['retryExamPage'] == null ? undefined : json['retryExamPage'],
39
40
  'forceReextract': json['forceReextract'] == null ? undefined : json['forceReextract'],
40
41
  };
41
42
  }
@@ -49,6 +50,7 @@ function TriggerStudyObjectiveConceptExtractionRequestToJSONTyped(value, ignoreD
49
50
  return {
50
51
  'studyObjectiveIds': value['studyObjectiveIds'],
51
52
  'syllabusHtmlByCanvasCourseId': value['syllabusHtmlByCanvasCourseId'],
53
+ 'retryExamPage': value['retryExamPage'],
52
54
  'forceReextract': value['forceReextract'],
53
55
  };
54
56
  }
@@ -132,6 +132,7 @@ export * from './CreateTokenResponse';
132
132
  export * from './DailyQuizStatus';
133
133
  export * from './DeleteCurrentUserResponse';
134
134
  export * from './EnrollmentTaxonomy';
135
+ export * from './ExamPageAttachment';
135
136
  export * from './FeatureEntity';
136
137
  export * from './FeatureOverrideEntity';
137
138
  export * from './HealthCheck';
@@ -150,6 +150,7 @@ __exportStar(require("./CreateTokenResponse"), exports);
150
150
  __exportStar(require("./DailyQuizStatus"), exports);
151
151
  __exportStar(require("./DeleteCurrentUserResponse"), exports);
152
152
  __exportStar(require("./EnrollmentTaxonomy"), exports);
153
+ __exportStar(require("./ExamPageAttachment"), exports);
153
154
  __exportStar(require("./FeatureEntity"), exports);
154
155
  __exportStar(require("./FeatureOverrideEntity"), exports);
155
156
  __exportStar(require("./HealthCheck"), exports);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@instructure/athena-api-client",
3
3
  "private": false,
4
- "version": "4.10.10",
4
+ "version": "4.11.0",
5
5
  "description": "OpenAPI client for the Athena API",
6
6
  "author": "Instructure",
7
7
  "repository": {