canvas-lms-mcp 1.22.0 → 1.24.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 +67 -15
- package/dist/canvas/accounts.d.ts +2 -1
- package/dist/canvas/accounts.d.ts.map +1 -1
- package/dist/canvas/analytics.d.ts +3 -1
- package/dist/canvas/analytics.d.ts.map +1 -1
- package/dist/canvas/appointment-groups.d.ts +40 -0
- package/dist/canvas/appointment-groups.d.ts.map +1 -0
- package/dist/canvas/assignments.d.ts +3 -1
- package/dist/canvas/assignments.d.ts.map +1 -1
- package/dist/canvas/content-exports.d.ts +19 -0
- package/dist/canvas/content-exports.d.ts.map +1 -0
- package/dist/canvas/content-migrations.d.ts +19 -0
- package/dist/canvas/content-migrations.d.ts.map +1 -0
- package/dist/canvas/courses.d.ts.map +1 -1
- package/dist/canvas/files.d.ts.map +1 -1
- package/dist/canvas/grading-standards.d.ts +19 -0
- package/dist/canvas/grading-standards.d.ts.map +1 -0
- package/dist/canvas/index.cjs +3 -3
- package/dist/canvas/index.d.ts +10 -0
- package/dist/canvas/index.d.ts.map +1 -1
- package/dist/canvas/index.js +2 -2
- package/dist/canvas/late-policy.d.ts +16 -0
- package/dist/canvas/late-policy.d.ts.map +1 -0
- package/dist/canvas/modules.d.ts +9 -0
- package/dist/canvas/modules.d.ts.map +1 -1
- package/dist/canvas/new-quizzes.d.ts +5 -2
- package/dist/canvas/new-quizzes.d.ts.map +1 -1
- package/dist/canvas/pages.d.ts +8 -0
- package/dist/canvas/pages.d.ts.map +1 -1
- package/dist/canvas/quizzes.d.ts +10 -1
- package/dist/canvas/quizzes.d.ts.map +1 -1
- package/dist/canvas/submissions.d.ts +11 -1
- package/dist/canvas/submissions.d.ts.map +1 -1
- package/dist/canvas/types.d.ts +209 -1
- package/dist/canvas/types.d.ts.map +1 -1
- package/dist/canvas/users.d.ts +1 -0
- package/dist/canvas/users.d.ts.map +1 -1
- package/dist/chunk-46PS7BZ5.js +33 -0
- package/dist/chunk-46PS7BZ5.js.map +1 -0
- package/dist/{chunk-22DWAWDC.cjs → chunk-4GMSSKK6.cjs} +326 -8
- package/dist/chunk-4GMSSKK6.cjs.map +1 -0
- package/dist/chunk-5ZWXPFMW.js +8185 -0
- package/dist/chunk-5ZWXPFMW.js.map +1 -0
- package/dist/{chunk-ICLQ42RW.js → chunk-6II3HREL.js} +325 -7
- package/dist/chunk-6II3HREL.js.map +1 -0
- package/dist/{chunk-NJOPOZP7.cjs → chunk-7VJLBXZD.cjs} +2 -2
- package/dist/chunk-7VJLBXZD.cjs.map +1 -0
- package/dist/chunk-AI4XQHKN.cjs +8185 -0
- package/dist/chunk-AI4XQHKN.cjs.map +1 -0
- package/dist/{chunk-BDB7U4WG.js → chunk-LKR72KFD.js} +2 -2
- package/dist/chunk-LKR72KFD.js.map +1 -0
- package/dist/{chunk-POJH4U3S.js → chunk-LXCGNGPX.js} +22 -2
- package/dist/chunk-LXCGNGPX.js.map +1 -0
- package/dist/chunk-OOP4MJA7.cjs +33 -0
- package/dist/chunk-OOP4MJA7.cjs.map +1 -0
- package/dist/{chunk-7VYG7YHR.cjs → chunk-VTBFXAVX.cjs} +23 -3
- package/dist/chunk-VTBFXAVX.cjs.map +1 -0
- package/dist/cli.cjs +3 -2
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/discovery/catalog.d.ts.map +1 -1
- package/dist/http.cjs +24 -9
- package/dist/http.cjs.map +1 -1
- package/dist/http.d.ts +2 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +22 -7
- package/dist/http.js.map +1 -1
- package/dist/init/argv.d.ts +7 -0
- package/dist/init/argv.d.ts.map +1 -1
- package/dist/init/clients.d.ts.map +1 -1
- package/dist/init/wizard.d.ts.map +1 -1
- package/dist/init.cjs +49 -9
- package/dist/init.cjs.map +1 -1
- package/dist/init.js +47 -7
- package/dist/init.js.map +1 -1
- package/dist/mcp-apps.d.ts +17 -0
- package/dist/mcp-apps.d.ts.map +1 -0
- package/dist/pseudonym/coverage.d.ts.map +1 -1
- package/dist/pseudonym/pseudonymizer.d.ts +10 -1
- package/dist/pseudonym/pseudonymizer.d.ts.map +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/ui-account-notifications.d.ts +3 -0
- package/dist/resources/ui-account-notifications.d.ts.map +1 -0
- package/dist/server.cjs +5 -4
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -3
- package/dist/stdio.cjs +9 -7
- package/dist/stdio.cjs.map +1 -1
- package/dist/stdio.js +7 -5
- package/dist/stdio.js.map +1 -1
- package/dist/tools/accessibility-audit.d.ts +4 -0
- package/dist/tools/accessibility-audit.d.ts.map +1 -0
- package/dist/tools/accounts.d.ts.map +1 -1
- package/dist/tools/analytics.d.ts.map +1 -1
- package/dist/tools/appointment-groups.d.ts +5 -0
- package/dist/tools/appointment-groups.d.ts.map +1 -0
- package/dist/tools/assignment-overrides.d.ts +4 -0
- package/dist/tools/assignment-overrides.d.ts.map +1 -0
- package/dist/tools/assignments.d.ts.map +1 -1
- package/dist/tools/attention.d.ts +5 -0
- package/dist/tools/attention.d.ts.map +1 -0
- package/dist/tools/catalog.d.ts.map +1 -1
- package/dist/tools/content-exports.d.ts +4 -0
- package/dist/tools/content-exports.d.ts.map +1 -0
- package/dist/tools/content-migrations.d.ts +4 -0
- package/dist/tools/content-migrations.d.ts.map +1 -0
- package/dist/tools/course-setup.d.ts +4 -0
- package/dist/tools/course-setup.d.ts.map +1 -0
- package/dist/tools/courses.d.ts.map +1 -1
- package/dist/tools/dashboard.d.ts.map +1 -1
- package/dist/tools/discussions.d.ts.map +1 -1
- package/dist/tools/enrollments.d.ts.map +1 -1
- package/dist/tools/fan-out.d.ts +71 -0
- package/dist/tools/fan-out.d.ts.map +1 -0
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/grade-engine.d.ts +78 -0
- package/dist/tools/grade-engine.d.ts.map +1 -0
- package/dist/tools/grade-explanation.d.ts +5 -0
- package/dist/tools/grade-explanation.d.ts.map +1 -0
- package/dist/tools/grade-projection.d.ts +5 -0
- package/dist/tools/grade-projection.d.ts.map +1 -0
- package/dist/tools/grading-policy.d.ts +4 -0
- package/dist/tools/grading-policy.d.ts.map +1 -0
- package/dist/tools/grading-standards.d.ts +4 -0
- package/dist/tools/grading-standards.d.ts.map +1 -0
- package/dist/tools/index.d.ts +9 -3
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/link-audit.d.ts +4 -0
- package/dist/tools/link-audit.d.ts.map +1 -0
- package/dist/tools/modules.d.ts.map +1 -1
- package/dist/tools/new-quiz-accommodations.d.ts +4 -0
- package/dist/tools/new-quiz-accommodations.d.ts.map +1 -0
- package/dist/tools/outcomes.d.ts.map +1 -1
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/peer-reviews.d.ts.map +1 -1
- package/dist/tools/pseudonym.d.ts.map +1 -1
- package/dist/tools/quiz-accommodations.d.ts +4 -0
- package/dist/tools/quiz-accommodations.d.ts.map +1 -0
- package/dist/tools/quiz-question-responses.d.ts +5 -0
- package/dist/tools/quiz-question-responses.d.ts.map +1 -0
- package/dist/tools/quizzes.d.ts.map +1 -1
- package/dist/tools/roles.d.ts +34 -0
- package/dist/tools/roles.d.ts.map +1 -0
- package/dist/tools/student-search.d.ts +5 -0
- package/dist/tools/student-search.d.ts.map +1 -0
- package/dist/tools/student.d.ts +2 -1
- package/dist/tools/student.d.ts.map +1 -1
- package/dist/tools/submission-files.d.ts +10 -0
- package/dist/tools/submission-files.d.ts.map +1 -0
- package/dist/tools/submissions-awaiting-grading.d.ts +5 -0
- package/dist/tools/submissions-awaiting-grading.d.ts.map +1 -0
- package/dist/tools/types.d.ts +17 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/ui/account-notifications-sanitizer.d.ts +15 -0
- package/dist/ui/account-notifications-sanitizer.d.ts.map +1 -0
- package/dist/ui/account-notifications.html.d.ts +2 -0
- package/dist/ui/account-notifications.html.d.ts.map +1 -0
- package/package.json +19 -16
- package/dist/chunk-22DWAWDC.cjs.map +0 -1
- package/dist/chunk-7VYG7YHR.cjs.map +0 -1
- package/dist/chunk-BDB7U4WG.js.map +0 -1
- package/dist/chunk-ICLQ42RW.js.map +0 -1
- package/dist/chunk-NJOPOZP7.cjs.map +0 -1
- package/dist/chunk-POJH4U3S.js.map +0 -1
- package/dist/chunk-U4JFO6GQ.cjs +0 -4019
- package/dist/chunk-U4JFO6GQ.cjs.map +0 -1
- package/dist/chunk-ZUQWZ2YH.js +0 -4019
- package/dist/chunk-ZUQWZ2YH.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
MCP server for [Canvas LMS](https://www.instructure.com/canvas). Read courses, assignments, submissions, rubrics, quizzes; grade, comment, manage course content, and handle Canvas admin workflows from any AI agent.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
163 tools across Canvas courses, assignments, submissions, gradebook history, rubrics, quizzes, New Quizzes (LTI), files, users, groups, enrollments, discussions, modules, pages, calendar, conversations, peer reviews, accounts, analytics, outcomes, grading standards, grade projection, link audit, accessibility audit, content exports, content migrations, quiz accommodations, appointment groups, student workflows, student search, dashboard, instructor attention workflows, and health checks. Three deployment modes: stdio, HTTP, and library import.
|
|
15
15
|
|
|
16
16
|
## One-click install (Claude Desktop)
|
|
17
17
|
|
|
@@ -28,7 +28,7 @@ Prefer the terminal? Use the [Quick Start](#quick-start) below.
|
|
|
28
28
|
| | canvas-lms-mcp | [vishalsachdev/canvas-mcp](https://github.com/vishalsachdev/canvas-mcp) | [DMontgomery40/mcp-canvas-lms](https://github.com/DMontgomery40/mcp-canvas-lms) |
|
|
29
29
|
|---|---|---|---|
|
|
30
30
|
| Language | TypeScript | Python | TypeScript |
|
|
31
|
-
| Tools |
|
|
31
|
+
| Tools | 163 | 80+ | 54 |
|
|
32
32
|
| License | [](https://github.com/bruchris/canvas-lms-mcp/blob/main/LICENSE) | [](https://github.com/vishalsachdev/canvas-mcp/blob/main/LICENSE) | [](https://github.com/DMontgomery40/mcp-canvas-lms/blob/main/LICENSE) |
|
|
33
33
|
| Last commit | [](https://github.com/bruchris/canvas-lms-mcp) | [](https://github.com/vishalsachdev/canvas-mcp) | [](https://github.com/DMontgomery40/mcp-canvas-lms) |
|
|
34
34
|
|
|
@@ -85,36 +85,53 @@ Once configured, try these prompts with your AI client:
|
|
|
85
85
|
|
|
86
86
|
## Tool Inventory
|
|
87
87
|
|
|
88
|
-
### All Registered Tools (
|
|
88
|
+
### All Registered Tools (163)
|
|
89
89
|
|
|
90
90
|
| Category | Tools |
|
|
91
91
|
|----------|-------|
|
|
92
92
|
| Health | `health_check` |
|
|
93
93
|
| Courses | `list_courses`, `get_course`, `get_syllabus`, `create_course`, `update_course` |
|
|
94
94
|
| Assignments | `list_assignments`, `get_assignment`, `list_assignment_groups`, `create_assignment`, `update_assignment`, `delete_assignment` |
|
|
95
|
+
| Assignment Overrides | `list_assignment_overrides`, `create_assignment_override`, `set_student_assignment_dates` |
|
|
95
96
|
| Submissions | `list_submissions`, `get_submission`, `grade_submission`, `comment_on_submission` |
|
|
96
|
-
|
|
|
97
|
-
|
|
|
97
|
+
| Submissions Awaiting Grading | `list_submissions_awaiting_grading` |
|
|
98
|
+
| Submission Files | `list_course_submission_files` |
|
|
99
|
+
| Rubrics | `list_rubrics`, `get_rubric`, `get_rubric_assessment`, `submit_rubric_assessment`, `create_rubric` |
|
|
100
|
+
| Quizzes | `list_quizzes`, `get_quiz`, `list_quiz_submissions`, `list_quiz_questions`, `get_quiz_submission_answers`, `score_quiz_question`, `get_quiz_submission_events` |
|
|
101
|
+
| Quiz Question Responses | `get_quiz_question_responses` |
|
|
102
|
+
| Quiz Accommodations | `list_student_quiz_accommodations`, `set_student_quiz_accommodation` |
|
|
98
103
|
| New Quizzes (LTI) | `create_new_quiz`, `update_new_quiz`, `delete_new_quiz`, `list_new_quiz_items`, `get_new_quiz_item`, `create_new_quiz_item`, `update_new_quiz_item`, `delete_new_quiz_item` |
|
|
99
|
-
|
|
|
104
|
+
| New Quiz Accommodations | `list_student_new_quiz_accommodations`, `set_student_new_quiz_accommodation` |
|
|
105
|
+
| Files | `list_files`, `list_folders`, `get_file`, `upload_file`, `download_file`, `delete_file`, `find_duplicate_files` |
|
|
100
106
|
| Gradebook History | `list_gradebook_history_days`, `get_gradebook_history_day`, `list_gradebook_history_submissions`, `get_gradebook_history_feed` |
|
|
107
|
+
| Grade Explanation | `explain_grade` |
|
|
108
|
+
| Grading Policy | `explain_grading_policy` |
|
|
109
|
+
| Grade Projection | `project_grade` |
|
|
110
|
+
| Grading Standards | `list_grading_standards`, `create_grading_standard`, `apply_grading_standard_to_course` |
|
|
101
111
|
| Users | `list_students`, `get_user`, `get_profile`, `search_users`, `list_course_users` |
|
|
102
112
|
| Groups | `list_groups`, `list_group_members` |
|
|
103
|
-
| Enrollments | `list_enrollments`, `enroll_user`, `remove_enrollment` |
|
|
113
|
+
| Enrollments | `list_enrollments`, `list_course_enrollments`, `enroll_user`, `remove_enrollment` |
|
|
104
114
|
| Discussions | `list_discussions`, `get_discussion`, `list_announcements`, `post_discussion_entry`, `create_discussion`, `update_discussion`, `delete_discussion` |
|
|
105
115
|
| Modules | `list_modules`, `get_module`, `list_module_items`, `get_course_structure`, `view_course_structure`, `create_module`, `update_module`, `create_module_item` |
|
|
106
116
|
| Pages | `list_pages`, `get_page`, `create_page`, `update_page`, `delete_page` |
|
|
107
117
|
| Calendar | `list_calendar_events`, `create_calendar_event`, `update_calendar_event` |
|
|
108
118
|
| Conversations | `list_conversations`, `get_conversation`, `get_conversation_unread_count`, `send_conversation` |
|
|
109
119
|
| Peer Reviews | `list_peer_reviews`, `get_submission_peer_reviews`, `create_peer_review`, `delete_peer_review` |
|
|
110
|
-
| Accounts | `get_account`, `list_accounts`, `list_sub_accounts`, `list_account_courses`, `list_account_users`, `get_account_reports` |
|
|
111
|
-
| Analytics | `search_course_content`, `get_course_analytics`, `get_student_analytics`, `get_course_activity_stream` |
|
|
120
|
+
| Accounts | `get_account`, `list_accounts`, `list_sub_accounts`, `list_account_courses`, `list_account_users`, `get_account_reports`, `list_account_notifications`, `view_account_notifications` |
|
|
121
|
+
| Analytics | `search_course_content`, `get_course_analytics`, `get_student_analytics`, `get_course_activity_stream`, `get_assignment_analytics` |
|
|
112
122
|
| Outcomes | `get_root_outcome_group`, `list_outcome_groups`, `list_outcome_group_links`, `get_outcome_group`, `list_outcome_group_outcomes`, `list_outcome_group_subgroups`, `get_outcome`, `get_outcome_alignments`, `get_outcome_results`, `get_outcome_rollups`, `get_outcome_contributing_scores`, `get_outcome_mastery_distribution` |
|
|
113
|
-
|
|
|
123
|
+
| Content Exports | `list_content_exports`, `get_content_export`, `create_content_export` |
|
|
124
|
+
| Course Setup | `check_course_setup` |
|
|
125
|
+
| Link Audit | `audit_course_links` |
|
|
126
|
+
| Accessibility Audit | `audit_course_accessibility` |
|
|
127
|
+
| Appointment Groups | `list_appointment_groups`, `get_appointment_group`, `create_appointment_group`, `update_appointment_group`, `delete_appointment_group`, `list_appointment_group_users`, `list_appointment_group_groups`, `next_appointment` |
|
|
128
|
+
| Student | `get_my_courses`, `get_my_grades`, `get_my_submissions`, `get_my_upcoming_assignments`, `get_my_submission_feedback` |
|
|
129
|
+
| Student Search | `find_student_across_courses` |
|
|
114
130
|
| Dashboard | `get_dashboard_cards`, `get_todo_items`, `get_upcoming_events`, `get_missing_submissions` |
|
|
131
|
+
| Attention | `list_submission_comments_needing_attention`, `list_students_needing_attention` |
|
|
115
132
|
| FERPA (conditional) | `resolve_pseudonym` — registered only when `CANVAS_PSEUDONYMIZE_STUDENTS=true` |
|
|
116
133
|
|
|
117
|
-
|
|
134
|
+
117 tools are read-only and 46 tools perform Canvas write operations. When FERPA mode is enabled, `resolve_pseudonym` is registered as the 164th tool overall (118th read tool).
|
|
118
135
|
|
|
119
136
|
All write tools require appropriate Canvas permissions. Canvas enforces its own permission model -- the MCP server does not bypass it.
|
|
120
137
|
|
|
@@ -219,6 +236,7 @@ const courses = await canvas.courses.list()
|
|
|
219
236
|
| `serve` | -- | stdio mode | Switch to HTTP mode |
|
|
220
237
|
| `--port` | -- | `3001` | HTTP server port |
|
|
221
238
|
| `--allowed-origin` | `CANVAS_ALLOWED_ORIGIN` | `http://localhost:3000` | CORS allowed origin |
|
|
239
|
+
| `--role` | `CANVAS_ROLE` | (all tools) | Filter tools by Canvas role: `student`, `teacher`, or `admin` (see [Role-based tool filtering](#role-based-tool-filtering)) |
|
|
222
240
|
|
|
223
241
|
## Environment Variables
|
|
224
242
|
|
|
@@ -227,6 +245,7 @@ const courses = await canvas.courses.list()
|
|
|
227
245
|
| `CANVAS_API_TOKEN` | Yes | Canvas personal access token |
|
|
228
246
|
| `CANVAS_BASE_URL` | Yes | Canvas instance URL (e.g., `https://school.instructure.com`) |
|
|
229
247
|
| `CANVAS_ALLOWED_ORIGIN` | No | CORS origin for HTTP mode (default: `http://localhost:3000`) |
|
|
248
|
+
| `CANVAS_ROLE` | No | Filter the tool list by role: `student`, `teacher`, or `admin` (see [Role-based tool filtering](#role-based-tool-filtering)) |
|
|
230
249
|
| `CANVAS_PSEUDONYMIZE_STUDENTS` | No | Set to `true` to enable [FERPA mode](#ferpa-mode-student-pseudonymization) |
|
|
231
250
|
| `CANVAS_PSEUDONYMIZE_REVERSE_LOOKUP` | No | Set to `true` (with `CANVAS_PSEUDONYMIZE_STUDENTS=true`) to register the `resolve_pseudonym` audit tool |
|
|
232
251
|
| `CANVAS_PSEUDONYM_DIR` | No | Absolute path that overrides the default pseudonym map directory |
|
|
@@ -261,6 +280,36 @@ Optional `resolve_pseudonym` reverse-lookup tool: register it only by also setti
|
|
|
261
280
|
|
|
262
281
|
Threat model and design rationale in [docs/superpowers/specs/2026-05-25-ferpa-pseudonymization.md](docs/superpowers/specs/2026-05-25-ferpa-pseudonymization.md).
|
|
263
282
|
|
|
283
|
+
## Role-based tool filtering
|
|
284
|
+
|
|
285
|
+
Optionally narrow the tool list to a single Canvas role so an agent sees only the tools relevant to its user. This is a **client-side UX / context-reduction filter only** — Canvas still enforces real permissions server-side. Setting `CANVAS_ROLE=admin` does **not** grant admin powers; a 403 still comes from Canvas if the token lacks the scope.
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
# stdio: env var or --role flag (flag wins)
|
|
289
|
+
CANVAS_ROLE=student canvas-lms-mcp --base-url https://school.instructure.com
|
|
290
|
+
canvas-lms-mcp --base-url https://school.instructure.com --role teacher
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Three roles, plus the default of "unset = every tool":
|
|
294
|
+
|
|
295
|
+
| `CANVAS_ROLE` | Tools exposed | Typical use |
|
|
296
|
+
|---------------|---------------|-------------|
|
|
297
|
+
| _(unset)_ | all (~163) | default; backwards-compatible |
|
|
298
|
+
| `student` | ~57 | a student's own courses, grades, submissions, and read-only course content |
|
|
299
|
+
| `teacher` | ~138 | grading, roster, content authoring, analytics |
|
|
300
|
+
| `admin` | ~150 | everything `teacher` sees plus account-level tools (`enroll_user`, `list_account_users`, …) |
|
|
301
|
+
|
|
302
|
+
Notes:
|
|
303
|
+
|
|
304
|
+
- **Equivalent to `CANVAS_ROLE` in [vishalsachdev/canvas-mcp](https://github.com/vishalsachdev/canvas-mcp)** — set the same value to migrate.
|
|
305
|
+
- Role values are **case-insensitive**; `all` is accepted as an explicit "no filter". An unrecognised value logs a warning to stderr and registers all tools (a config typo never stops the server).
|
|
306
|
+
- `teacher` / `admin` do **not** see the student-only `get_my_*` tools in v1 — they should use `list_submissions` / `get_submission` etc. instead.
|
|
307
|
+
- The FERPA `resolve_pseudonym` tool is `teacher`/`admin`-only and is never exposed to `student`, even when reverse lookup is enabled.
|
|
308
|
+
- **HTTP transport:** the role is read per request from the `X-Canvas-Role` header, falling back to `CANVAS_ROLE` from the server config. A valid header (or `all`) overrides the configured default; an invalid header is ignored with a warning.
|
|
309
|
+
- Tool counts above are a snapshot and grow as tools are added — the authoritative guarantee is that every tool resolves to exactly one audience (enforced by `tests/tools/audience-coverage.test.ts`).
|
|
310
|
+
|
|
311
|
+
Design rationale in [BRU-1530](https://github.com/bruchris/canvas-lms-mcp) (role taxonomy, why three roles, auto-detect deferred to v2).
|
|
312
|
+
|
|
264
313
|
## Development
|
|
265
314
|
|
|
266
315
|
```bash
|
|
@@ -275,10 +324,13 @@ pnpm typecheck # TypeScript strict type check
|
|
|
275
324
|
|
|
276
325
|
### Dependency audit
|
|
277
326
|
|
|
278
|
-
The `pnpm.overrides.hono` entry pins `hono` to
|
|
279
|
-
`@modelcontextprotocol/sdk@1.
|
|
280
|
-
|
|
281
|
-
|
|
327
|
+
The `pnpm.overrides.hono` entry pins `hono` to `^4.12.27` as a
|
|
328
|
+
belt-and-suspenders guard. `@modelcontextprotocol/sdk@1.30.0` pulls in
|
|
329
|
+
`@hono/node-server@2.0.11`, which already declares
|
|
330
|
+
`peerDependencies: { hono: "^4.12.27" }` — a floor above the
|
|
331
|
+
vulnerability threshold (4.12.14). The override is therefore redundant
|
|
332
|
+
but harmless and can be removed once you have confirmed your resolved
|
|
333
|
+
`hono` version is ≥ 4.12.27.
|
|
282
334
|
|
|
283
335
|
### Architecture
|
|
284
336
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CanvasHttpClient } from './client';
|
|
2
|
-
import type { CanvasAccount, CanvasAccountReport, CanvasCourse, CanvasUser } from './types';
|
|
2
|
+
import type { CanvasAccount, CanvasAccountNotification, CanvasAccountReport, CanvasCourse, CanvasUser } from './types';
|
|
3
3
|
export declare class AccountsModule {
|
|
4
4
|
private client;
|
|
5
5
|
constructor(client: CanvasHttpClient);
|
|
@@ -13,5 +13,6 @@ export declare class AccountsModule {
|
|
|
13
13
|
search_term?: string;
|
|
14
14
|
}): Promise<CanvasUser[]>;
|
|
15
15
|
getReports(accountId: number): Promise<CanvasAccountReport[]>;
|
|
16
|
+
listNotifications(accountId: string): Promise<CanvasAccountNotification[]>;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=accounts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/canvas/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/canvas/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EACV,aAAa,EACb,yBAAyB,EACzB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACX,MAAM,SAAS,CAAA;AAEhB,qBAAa,cAAc;IACb,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAI9C,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAIhC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAI5D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAS1F,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAStF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAI7D,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;CAKjF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CanvasHttpClient } from './client';
|
|
2
|
-
import type { CanvasCourseActivitySummary, CanvasStudentActivitySummary, CanvasActivityStreamItem, CourseSearchResult } from './types';
|
|
2
|
+
import type { CanvasAssignmentAnalytics, CanvasCourseActivitySummary, CanvasStudentActivitySummary, CanvasActivityStreamItem, CanvasStudentSummary, CourseSearchResult } from './types';
|
|
3
3
|
export declare const SEARCH_CONTENT_TYPES: readonly ["pages", "discussions", "assignments", "announcements"];
|
|
4
4
|
export type SearchContentType = (typeof SEARCH_CONTENT_TYPES)[number];
|
|
5
5
|
export declare class AnalyticsModule {
|
|
@@ -9,5 +9,7 @@ export declare class AnalyticsModule {
|
|
|
9
9
|
getCourseActivity(courseId: number): Promise<CanvasCourseActivitySummary[]>;
|
|
10
10
|
getStudentActivity(courseId: number, studentId: number): Promise<CanvasStudentActivitySummary>;
|
|
11
11
|
getCourseActivityStream(courseId: number): Promise<CanvasActivityStreamItem[]>;
|
|
12
|
+
getStudentSummaries(courseId: number): Promise<CanvasStudentSummary[]>;
|
|
13
|
+
getAssignmentAnalytics(courseId: number): Promise<CanvasAssignmentAnalytics[]>;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/canvas/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,oBAAoB,mEAKvB,CAAA;AACV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA0D1B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAM3E,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,4BAA4B,CAAC;IAMlC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;CAKrF"}
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/canvas/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EACV,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,oBAAoB,mEAKvB,CAAA;AACV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA0D1B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAM3E,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,4BAA4B,CAAC;IAMlC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAM9E,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAMtE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;CAKrF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { CanvasHttpClient } from './client';
|
|
2
|
+
import type { CanvasAppointmentGroup, CanvasCalendarEvent, CanvasGroup, CanvasUser } from './types';
|
|
3
|
+
export type AppointmentGroupInclude = 'appointments' | 'child_events' | 'participant_count';
|
|
4
|
+
export declare class AppointmentGroupsModule {
|
|
5
|
+
private client;
|
|
6
|
+
constructor(client: CanvasHttpClient);
|
|
7
|
+
list(params?: {
|
|
8
|
+
scope?: 'reservable' | 'manageable';
|
|
9
|
+
include?: ReadonlyArray<AppointmentGroupInclude>;
|
|
10
|
+
context_codes?: string[];
|
|
11
|
+
}): Promise<CanvasAppointmentGroup[]>;
|
|
12
|
+
get(id: number, include?: ReadonlyArray<AppointmentGroupInclude>): Promise<CanvasAppointmentGroup>;
|
|
13
|
+
create(params: {
|
|
14
|
+
context_codes: string[];
|
|
15
|
+
title: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
location_name?: string;
|
|
18
|
+
location_address?: string;
|
|
19
|
+
publish?: boolean;
|
|
20
|
+
participant_type?: 'User' | 'Group';
|
|
21
|
+
max_appointments_per_participant?: number;
|
|
22
|
+
min_appointments_per_participant?: number;
|
|
23
|
+
new_appointments?: Array<[string, string]>;
|
|
24
|
+
participant_visibility?: 'private' | 'protected';
|
|
25
|
+
}): Promise<CanvasAppointmentGroup>;
|
|
26
|
+
update(id: number, params: {
|
|
27
|
+
context_codes?: string[];
|
|
28
|
+
title?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
location_name?: string;
|
|
31
|
+
location_address?: string;
|
|
32
|
+
publish?: boolean;
|
|
33
|
+
new_appointments?: Array<[string, string]>;
|
|
34
|
+
}): Promise<CanvasAppointmentGroup>;
|
|
35
|
+
delete(id: number, cancelReason?: string): Promise<void>;
|
|
36
|
+
listUsers(id: number): Promise<CanvasUser[]>;
|
|
37
|
+
listGroups(id: number): Promise<CanvasGroup[]>;
|
|
38
|
+
nextAppointment(appointmentGroupIds?: number[]): Promise<CanvasCalendarEvent[]>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=appointment-groups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appointment-groups.d.ts","sourceRoot":"","sources":["../../src/canvas/appointment-groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEnG,MAAM,MAAM,uBAAuB,GAAG,cAAc,GAAG,cAAc,GAAG,mBAAmB,CAAA;AAE3F,qBAAa,uBAAuB;IACtB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,MAAM,CAAC,EAAE;QAClB,KAAK,CAAC,EAAE,YAAY,GAAG,YAAY,CAAA;QACnC,OAAO,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAA;QAChD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KACzB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAQ/B,GAAG,CACP,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAC/C,OAAO,CAAC,sBAAsB,CAAC;IAQ5B,MAAM,CAAC,MAAM,EAAE;QACnB,aAAa,EAAE,MAAM,EAAE,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;QACnC,gCAAgC,CAAC,EAAE,MAAM,CAAA;QACzC,gCAAgC,CAAC,EAAE,MAAM,CAAA;QACzC,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC1C,sBAAsB,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;KACjD,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAO7B,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;QACN,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;QACxB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAC3C,GACA,OAAO,CAAC,sBAAsB,CAAC;IAO5B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI5C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI9C,eAAe,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAQtF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CanvasHttpClient } from './client';
|
|
2
|
-
import type { CanvasAssignment, CanvasAssignmentGroup, CreateAssignmentParams, UpdateAssignmentParams } from './types';
|
|
2
|
+
import type { CanvasAssignment, CanvasAssignmentGroup, CanvasAssignmentOverride, CreateAssignmentOverrideParams, CreateAssignmentParams, UpdateAssignmentParams } from './types';
|
|
3
3
|
export type AssignmentListInclude = 'submission' | 'assignment_visibility' | 'all_dates' | 'overrides' | 'observed_users' | 'can_edit' | 'score_statistics';
|
|
4
4
|
export type AssignmentGetInclude = 'submission' | 'assignment_visibility' | 'overrides' | 'observed_users' | 'can_edit' | 'score_statistics' | 'all_dates';
|
|
5
5
|
export type AssignmentBucket = 'past' | 'overdue' | 'undated' | 'ungraded' | 'unsubmitted' | 'upcoming' | 'future';
|
|
@@ -38,5 +38,7 @@ export declare class AssignmentsModule {
|
|
|
38
38
|
create(courseId: number, params: CreateAssignmentParams): Promise<CanvasAssignment>;
|
|
39
39
|
update(courseId: number, assignmentId: number, params: UpdateAssignmentParams): Promise<CanvasAssignment>;
|
|
40
40
|
delete(courseId: number, assignmentId: number): Promise<void>;
|
|
41
|
+
listOverrides(courseId: number, assignmentId: number): Promise<CanvasAssignmentOverride[]>;
|
|
42
|
+
createOverride(courseId: number, assignmentId: number, params: CreateAssignmentOverrideParams): Promise<CanvasAssignmentOverride>;
|
|
41
43
|
}
|
|
42
44
|
//# sourceMappingURL=assignments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assignments.d.ts","sourceRoot":"","sources":["../../src/canvas/assignments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,qBAAqB,GAC7B,YAAY,GACZ,uBAAuB,GACvB,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,UAAU,GACV,kBAAkB,CAAA;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,YAAY,GACZ,uBAAuB,GACvB,WAAW,GACX,gBAAgB,GAChB,UAAU,GACV,kBAAkB,GAClB,WAAW,CAAA;AAEf,MAAM,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"assignments.d.ts","sourceRoot":"","sources":["../../src/canvas/assignments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CanvasHttpClient } from './client';
|
|
2
|
+
import type { CanvasContentExport, ContentExportType } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Canvas `content_exports` API — exports a course (or its assessments) as a
|
|
5
|
+
* Common Cartridge / QTI / zip package. Exports are asynchronous: `create`
|
|
6
|
+
* starts the job and returns immediately; `get` polls until the package is ready
|
|
7
|
+
* and surfaces a time-limited `attachment.url` download link.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ContentExportsModule {
|
|
10
|
+
private client;
|
|
11
|
+
constructor(client: CanvasHttpClient);
|
|
12
|
+
/** Start a content export. Returns the export in its initial `created` state. */
|
|
13
|
+
create(courseId: number, exportType: ContentExportType): Promise<CanvasContentExport>;
|
|
14
|
+
/** Poll a single export's status; `attachment` is populated only once `exported`. */
|
|
15
|
+
get(courseId: number, exportId: number): Promise<CanvasContentExport>;
|
|
16
|
+
/** List all content exports for a course (most recent first, per Canvas). */
|
|
17
|
+
list(courseId: number): Promise<CanvasContentExport[]>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=content-exports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-exports.d.ts","sourceRoot":"","sources":["../../src/canvas/content-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAErE;;;;;GAKG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAE5C,iFAAiF;IAC3E,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQ3F,qFAAqF;IAC/E,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM3E,6EAA6E;IACvE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAG7D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CanvasHttpClient } from './client';
|
|
2
|
+
import type { CanvasContentMigration, CanvasContentMigrator, CanvasMigrationIssue } from './types';
|
|
3
|
+
export declare class ContentMigrationsModule {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: CanvasHttpClient);
|
|
6
|
+
list(courseId: number): Promise<CanvasContentMigration[]>;
|
|
7
|
+
get(courseId: number, migrationId: number): Promise<CanvasContentMigration>;
|
|
8
|
+
listMigrators(courseId: number): Promise<CanvasContentMigrator[]>;
|
|
9
|
+
getSelectiveData(courseId: number, migrationId: number, type?: string): Promise<unknown[]>;
|
|
10
|
+
getAssetIdMapping(courseId: number, migrationId: number): Promise<Record<string, unknown>>;
|
|
11
|
+
listMigrationIssues(courseId: number, migrationId: number): Promise<CanvasMigrationIssue[]>;
|
|
12
|
+
create(courseId: number, params: {
|
|
13
|
+
migration_type: string;
|
|
14
|
+
settings?: Record<string, unknown>;
|
|
15
|
+
date_shift_options?: Record<string, unknown>;
|
|
16
|
+
selective_import?: boolean;
|
|
17
|
+
}): Promise<CanvasContentMigration>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=content-migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-migrations.d.ts","sourceRoot":"","sources":["../../src/canvas/content-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAElG,qBAAa,uBAAuB;IACtB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAMzD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM3E,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAMjE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAK1F,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAM1F,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAM5B,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAC3B,GACA,OAAO,CAAC,sBAAsB,CAAC;CASnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"courses.d.ts","sourceRoot":"","sources":["../../src/canvas/courses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEnF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,oBAAoB,GAAG,WAAW,CAAA;AAEjF,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAA;AAEvF,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,GACrB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,+BAA+B,GAC/B,iBAAiB,GACjB,MAAM,GACN,SAAS,GACT,iBAAiB,GACjB,UAAU,GACV,uBAAuB,GACvB,gBAAgB,GAChB,iBAAiB,GACjB,WAAW,GACX,UAAU,GACV,gBAAgB,GAChB,MAAM,GACN,cAAc,GACd,cAAc,GACd,WAAW,GACX,gBAAgB,GAChB,eAAe,CAAA;AAEnB,MAAM,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"courses.d.ts","sourceRoot":"","sources":["../../src/canvas/courses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEnF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,oBAAoB,GAAG,WAAW,CAAA;AAEjF,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAA;AAEvF,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,GACrB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,+BAA+B,GAC/B,iBAAiB,GACjB,MAAM,GACN,SAAS,GACT,iBAAiB,GACjB,UAAU,GACV,uBAAuB,GACvB,gBAAgB,GAChB,iBAAiB,GACjB,WAAW,GACX,UAAU,GACV,gBAAgB,GAChB,MAAM,GACN,cAAc,GACd,cAAc,GACd,WAAW,GACX,gBAAgB,GAChB,eAAe,CAAA;AAEnB,MAAM,MAAM,gBAAgB,GAC1B,iBAAiB,GAAG,aAAa,GAAG,aAAa,GAAG,oBAAoB,CAAA;AAE1E,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;IACxC,KAAK,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAC1C,yBAAyB,CAAC,EAAE,OAAO,CAAA;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;IACzC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAKD,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAY5D,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAOzE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOrD,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAQzD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;CAMlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/canvas/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAwB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAgB7F,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAItD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1D,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/canvas/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAwB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAgB7F,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAItD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1D,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC;IAkGhB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAyDpE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAGlD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CanvasHttpClient } from './client';
|
|
2
|
+
import type { CanvasGradingSchemeEntry, CanvasGradingStandard } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Canvas grading standards (letter-to-percentage grading schemes).
|
|
5
|
+
*
|
|
6
|
+
* Canvas API asymmetry: the GET/response key is `grading_scheme` (plural),
|
|
7
|
+
* while the POST body key is `grading_scheme_entry` (singular). The POST body
|
|
8
|
+
* is flat — there is no `grading_standard:` wrapper. List endpoints return a
|
|
9
|
+
* plain JSON array, so we use `client.paginate` (not `paginateEnvelope`).
|
|
10
|
+
*/
|
|
11
|
+
export declare class GradingStandardsModule {
|
|
12
|
+
private client;
|
|
13
|
+
constructor(client: CanvasHttpClient);
|
|
14
|
+
listForCourse(courseId: number): Promise<CanvasGradingStandard[]>;
|
|
15
|
+
listForAccount(accountId: number): Promise<CanvasGradingStandard[]>;
|
|
16
|
+
createForCourse(courseId: number, title: string, schemeEntries: CanvasGradingSchemeEntry[]): Promise<CanvasGradingStandard>;
|
|
17
|
+
createForAccount(accountId: number, title: string, schemeEntries: CanvasGradingSchemeEntry[]): Promise<CanvasGradingStandard>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=grading-standards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grading-standards.d.ts","sourceRoot":"","sources":["../../src/canvas/grading-standards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE9E;;;;;;;GAOG;AACH,qBAAa,sBAAsB;IACrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAMjE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAMnE,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,wBAAwB,EAAE,GACxC,OAAO,CAAC,qBAAqB,CAAC;IAW3B,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,wBAAwB,EAAE,GACxC,OAAO,CAAC,qBAAqB,CAAC;CAUlC"}
|
package/dist/canvas/index.cjs
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk4GMSSKK6cjs = require('../chunk-4GMSSKK6.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunk7VJLBXZDcjs = require('../chunk-7VJLBXZD.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
exports.CanvasApiError =
|
|
16
|
+
exports.CanvasApiError = _chunk7VJLBXZDcjs.CanvasApiError; exports.CanvasClient = _chunk4GMSSKK6cjs.CanvasClient; exports.CanvasHttpClient = _chunk7VJLBXZDcjs.CanvasHttpClient; exports.appendCanvasQuery = _chunk7VJLBXZDcjs.appendCanvasQuery; exports.toCanvasQuery = _chunk7VJLBXZDcjs.toCanvasQuery;
|
|
17
17
|
//# sourceMappingURL=index.cjs.map
|
package/dist/canvas/index.d.ts
CHANGED
|
@@ -20,6 +20,11 @@ import { DashboardModule } from './dashboard';
|
|
|
20
20
|
import { OutcomesModule } from './outcomes';
|
|
21
21
|
import { GradebookHistoryModule } from './gradebook-history';
|
|
22
22
|
import { NewQuizzesModule } from './new-quizzes';
|
|
23
|
+
import { ContentExportsModule } from './content-exports';
|
|
24
|
+
import { ContentMigrationsModule } from './content-migrations';
|
|
25
|
+
import { GradingStandardsModule } from './grading-standards';
|
|
26
|
+
import { LatePolicyModule } from './late-policy';
|
|
27
|
+
import { AppointmentGroupsModule } from './appointment-groups';
|
|
23
28
|
/**
|
|
24
29
|
* Standalone Canvas REST API client. Composed of modular per-domain classes
|
|
25
30
|
* sharing a `CanvasHttpClient`. Throws `CanvasApiError` on Canvas-side failures.
|
|
@@ -55,6 +60,11 @@ export declare class CanvasClient {
|
|
|
55
60
|
outcomes: OutcomesModule;
|
|
56
61
|
gradebookHistory: GradebookHistoryModule;
|
|
57
62
|
newQuizzes: NewQuizzesModule;
|
|
63
|
+
contentExports: ContentExportsModule;
|
|
64
|
+
contentMigrations: ContentMigrationsModule;
|
|
65
|
+
gradingStandards: GradingStandardsModule;
|
|
66
|
+
latePolicy: LatePolicyModule;
|
|
67
|
+
appointmentGroups: AppointmentGroupsModule;
|
|
58
68
|
constructor(config: CanvasClientConfig);
|
|
59
69
|
}
|
|
60
70
|
export { CanvasHttpClient, CanvasApiError } from './client';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/canvas/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/canvas/index.ts"],"names":[],"mappings":"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"}
|
package/dist/canvas/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CanvasClient
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-6II3HREL.js";
|
|
4
4
|
import {
|
|
5
5
|
CanvasApiError,
|
|
6
6
|
CanvasHttpClient,
|
|
7
7
|
appendCanvasQuery,
|
|
8
8
|
toCanvasQuery
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-LKR72KFD.js";
|
|
10
10
|
export {
|
|
11
11
|
CanvasApiError,
|
|
12
12
|
CanvasClient,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CanvasHttpClient } from './client';
|
|
2
|
+
import type { CanvasLatePolicy } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Canvas late/missing submission policy for a course.
|
|
5
|
+
*
|
|
6
|
+
* The response is an envelope — `{ "late_policy": { ... } }` — so `get` unwraps
|
|
7
|
+
* the inner object before returning it. Throws `CanvasApiError` on failure
|
|
8
|
+
* (notably 403 for student tokens and 404 when no policy row exists yet); the
|
|
9
|
+
* caller decides how to handle those statuses.
|
|
10
|
+
*/
|
|
11
|
+
export declare class LatePolicyModule {
|
|
12
|
+
private client;
|
|
13
|
+
constructor(client: CanvasHttpClient);
|
|
14
|
+
get(courseId: number): Promise<CanvasLatePolicy>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=late-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"late-policy.d.ts","sourceRoot":"","sources":["../../src/canvas/late-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAMvD"}
|
package/dist/canvas/modules.d.ts
CHANGED
|
@@ -4,6 +4,15 @@ export declare class ModulesModule {
|
|
|
4
4
|
private client;
|
|
5
5
|
constructor(client: CanvasHttpClient);
|
|
6
6
|
list(courseId: number): Promise<CanvasModule[]>;
|
|
7
|
+
/**
|
|
8
|
+
* List a course's modules with each module's items inlined via `include[]=items`.
|
|
9
|
+
* Unlike `getCourseStructure`, this returns the raw Canvas shapes (including the
|
|
10
|
+
* `published` state on every module and item, even unpublished ones), which the
|
|
11
|
+
* course-setup health check needs to detect unpublished content.
|
|
12
|
+
*/
|
|
13
|
+
listWithItems(courseId: number): Promise<(CanvasModule & {
|
|
14
|
+
items?: CanvasModuleItem[];
|
|
15
|
+
})[]>;
|
|
7
16
|
get(courseId: number, moduleId: number): Promise<CanvasModule>;
|
|
8
17
|
listItems(courseId: number, moduleId: number): Promise<CanvasModuleItem[]>;
|
|
9
18
|
create(courseId: number, params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/canvas/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpF,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/canvas/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpF,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrD;;;;;OAKG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,YAAY,GAAG;QAAE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC,EAAE,CAAC;IAOvD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9D,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM1E,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;KACnC,GACA,OAAO,CAAC,YAAY,CAAC;IAOlB,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAChE,OAAO,CAAC,YAAY,CAAC;IAOlB,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACA,OAAO,CAAC,gBAAgB,CAAC;IAUtB,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAO,GAC7E,OAAO,CAAC,qBAAqB,CAAC;CAkDlC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { CanvasNewQuiz, CanvasNewQuizItem } from './types';
|
|
1
|
+
import { type CanvasHttpClient } from './client';
|
|
2
|
+
import type { CanvasNewQuiz, CanvasNewQuizAccommodation, CanvasNewQuizItem } from './types';
|
|
3
3
|
export interface NewQuizPayload {
|
|
4
4
|
title?: string;
|
|
5
5
|
instructions?: string | null;
|
|
@@ -80,6 +80,9 @@ export declare class NewQuizzesModule {
|
|
|
80
80
|
createItem(courseId: number, assignmentId: number, input: NewQuizItemCreatePayload): Promise<CanvasNewQuizItem>;
|
|
81
81
|
updateItem(courseId: number, assignmentId: number, itemId: string, patch: NewQuizItemUpdatePayload): Promise<CanvasNewQuizItem>;
|
|
82
82
|
deleteItem(courseId: number, assignmentId: number, itemId: string): Promise<void>;
|
|
83
|
+
setAccommodation(courseId: number, userId: number, timeMultiplier?: number, extraAttempts?: number): Promise<CanvasNewQuizAccommodation>;
|
|
84
|
+
setQuizAccommodation(courseId: number, assignmentId: number, userId: number, timeMultiplier?: number, extraAttempts?: number): Promise<CanvasNewQuizAccommodation>;
|
|
85
|
+
getAccommodation(courseId: number, userId: number): Promise<CanvasNewQuizAccommodation | null>;
|
|
83
86
|
private toWireItem;
|
|
84
87
|
private choiceToWire;
|
|
85
88
|
private trueFalseToWire;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-quizzes.d.ts","sourceRoot":"","sources":["../../src/canvas/new-quizzes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"new-quizzes.d.ts","sourceRoot":"","sources":["../../src/canvas/new-quizzes.ts"],"names":[],"mappings":"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"}
|
package/dist/canvas/pages.d.ts
CHANGED
|
@@ -5,6 +5,14 @@ export declare class PagesModule {
|
|
|
5
5
|
constructor(client: CanvasHttpClient);
|
|
6
6
|
list(courseId: number): Promise<CanvasPage[]>;
|
|
7
7
|
get(courseId: number, pageUrl: string): Promise<CanvasPage>;
|
|
8
|
+
/**
|
|
9
|
+
* List every page in a course with its full HTML `body`. The paginated list
|
|
10
|
+
* endpoint returns page stubs without `body`, so this fans out a `get()` per
|
|
11
|
+
* page (mirroring the `listWithItems` pattern in `modules.ts`). Used by the
|
|
12
|
+
* link-audit tool to scan page content. `CanvasApiError` from either the list
|
|
13
|
+
* or any individual fetch propagates unchanged.
|
|
14
|
+
*/
|
|
15
|
+
listWithBodies(courseId: number): Promise<CanvasPage[]>;
|
|
8
16
|
create(courseId: number, params: {
|
|
9
17
|
title: string;
|
|
10
18
|
body?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/canvas/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7C,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/canvas/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7C,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMjE;;;;;;OAMG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKvD,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACpF,OAAO,CAAC,UAAU,CAAC;IAOhB,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACrF,OAAO,CAAC,UAAU,CAAC;IAUhB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM/D"}
|
package/dist/canvas/quizzes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CanvasHttpClient } from './client';
|
|
2
|
-
import type { CanvasQuiz, CanvasQuizSubmission, CanvasQuizQuestion, CanvasQuizSubmissionQuestion } from './types';
|
|
2
|
+
import type { CanvasQuiz, CanvasQuizSubmission, CanvasQuizQuestion, CanvasQuizSubmissionQuestion, CanvasQuizSubmissionEvent, CanvasQuizExtension } from './types';
|
|
3
3
|
export declare class QuizzesModule {
|
|
4
4
|
private client;
|
|
5
5
|
constructor(client: CanvasHttpClient);
|
|
@@ -9,5 +9,14 @@ export declare class QuizzesModule {
|
|
|
9
9
|
listQuestions(courseId: number, quizId: number): Promise<CanvasQuizQuestion[]>;
|
|
10
10
|
getSubmissionAnswers(quizSubmissionId: number): Promise<CanvasQuizSubmissionQuestion[]>;
|
|
11
11
|
scoreQuestion(courseId: number, quizId: number, submissionId: number, questionId: number, score: number, comment?: string, attempt?: number): Promise<void>;
|
|
12
|
+
getSubmissionEvents(courseId: number, quizId: number, submissionId: number, attempt?: number): Promise<CanvasQuizSubmissionEvent[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Apply a quiz extension (extra time / extra attempts) for one student on one
|
|
15
|
+
* Classic Quiz via `POST /courses/:id/quizzes/:id/extensions`. Canvas accepts a
|
|
16
|
+
* batch (`quiz_extensions` array), but callers operate per-student-per-quiz, so
|
|
17
|
+
* the array always holds a single element. Omitted fields are left out of the
|
|
18
|
+
* body — never pass `extra_time: 0` (Canvas rejects zero/negative extensions).
|
|
19
|
+
*/
|
|
20
|
+
setExtension(courseId: number, quizId: number, userId: number, extra_time?: number, extra_attempts?: number): Promise<CanvasQuizExtension[]>;
|
|
12
21
|
}
|
|
13
22
|
//# sourceMappingURL=quizzes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quizzes.d.ts","sourceRoot":"","sources":["../../src/canvas/quizzes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"quizzes.d.ts","sourceRoot":"","sources":["../../src/canvas/quizzes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EAEzB,mBAAmB,EACpB,MAAM,SAAS,CAAA;AAEhB,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7C,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAOlF,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAM9E,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,EAAE,CAAC;IAQvF,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAqBV,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAcvC;;;;;;OAMG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAalC"}
|