canvas-lms-mcp 1.9.0 → 1.10.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.
@@ -1,5 +1,5 @@
1
1
  import type { CanvasHttpClient } from './client';
2
- import type { CanvasFile, CanvasFolder } from './types';
2
+ import type { CanvasFile, CanvasFolder, DownloadedFile } from './types';
3
3
  export declare class FilesModule {
4
4
  private client;
5
5
  constructor(client: CanvasHttpClient);
@@ -7,6 +7,7 @@ export declare class FilesModule {
7
7
  listFolders(courseId: number): Promise<CanvasFolder[]>;
8
8
  get(courseId: number, fileId: number): Promise<CanvasFile>;
9
9
  upload(courseId: number, name: string, contentBase64: string, contentType: string, parentFolderPath?: string): Promise<CanvasFile>;
10
+ download(fileId: number, courseId?: number): Promise<DownloadedFile>;
10
11
  delete(fileId: number): Promise<CanvasFile>;
11
12
  }
12
13
  //# sourceMappingURL=files.d.ts.map
@@ -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,MAAM,SAAS,CAAA;AAE7E,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;IA4FhB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAGlD"}
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;IA4FhB,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"}
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var _chunk3JL6Z5IDcjs = require('../chunk-3JL6Z5ID.cjs');
8
+ var _chunkFP5O3WZJcjs = require('../chunk-FP5O3WZJ.cjs');
9
9
 
10
10
 
11
11
 
@@ -13,5 +13,5 @@ var _chunk3JL6Z5IDcjs = require('../chunk-3JL6Z5ID.cjs');
13
13
 
14
14
 
15
15
 
16
- exports.CanvasApiError = _chunk3JL6Z5IDcjs.CanvasApiError; exports.CanvasClient = _chunk3JL6Z5IDcjs.CanvasClient; exports.CanvasHttpClient = _chunk3JL6Z5IDcjs.CanvasHttpClient; exports.GeneratedUsersModule = _chunk3JL6Z5IDcjs.GeneratedUsersModule; exports.appendCanvasQuery = _chunk3JL6Z5IDcjs.appendCanvasQuery; exports.toCanvasQuery = _chunk3JL6Z5IDcjs.toCanvasQuery;
16
+ exports.CanvasApiError = _chunkFP5O3WZJcjs.CanvasApiError; exports.CanvasClient = _chunkFP5O3WZJcjs.CanvasClient; exports.CanvasHttpClient = _chunkFP5O3WZJcjs.CanvasHttpClient; exports.GeneratedUsersModule = _chunkFP5O3WZJcjs.GeneratedUsersModule; exports.appendCanvasQuery = _chunkFP5O3WZJcjs.appendCanvasQuery; exports.toCanvasQuery = _chunkFP5O3WZJcjs.toCanvasQuery;
17
17
  //# sourceMappingURL=index.cjs.map
@@ -5,7 +5,7 @@ import {
5
5
  GeneratedUsersModule,
6
6
  appendCanvasQuery,
7
7
  toCanvasQuery
8
- } from "../chunk-A6YFE3W7.js";
8
+ } from "../chunk-DS6QDF2G.js";
9
9
  export {
10
10
  CanvasApiError,
11
11
  CanvasClient,
@@ -416,6 +416,14 @@ export interface CanvasFileUploadInfo {
416
416
  upload_url: string;
417
417
  upload_params: Record<string, string>;
418
418
  }
419
+ export interface DownloadedFile {
420
+ type: 'text' | 'resource';
421
+ filename: string;
422
+ contentType: string;
423
+ size: number;
424
+ text?: string;
425
+ base64?: string;
426
+ }
419
427
  export interface CanvasUser {
420
428
  id: number;
421
429
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/canvas/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/canvas/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "1.9.0";
2
+ var version = "1.10.0";
3
3
 
4
4
  // src/canvas/query.ts
5
5
  function appendCanvasQuery(target, params) {
@@ -406,6 +406,17 @@ var QuizzesModule = class {
406
406
  };
407
407
 
408
408
  // src/canvas/files.ts
409
+ var MAX_DOWNLOAD_BYTES = 10 * 1024 * 1024;
410
+ var TEXT_CONTENT_TYPES = /* @__PURE__ */ new Set([
411
+ "application/json",
412
+ "application/xml",
413
+ "application/javascript",
414
+ "application/x-javascript"
415
+ ]);
416
+ function isTextContentType(contentType) {
417
+ const base = (contentType.split(";")[0] ?? "").trim().toLowerCase();
418
+ return base.startsWith("text/") || TEXT_CONTENT_TYPES.has(base);
419
+ }
409
420
  var FilesModule = class {
410
421
  constructor(client) {
411
422
  this.client = client;
@@ -500,6 +511,52 @@ var FilesModule = class {
500
511
  }
501
512
  return parsed;
502
513
  }
514
+ async download(fileId, courseId) {
515
+ const endpoint = courseId != null ? `/api/v1/courses/${courseId}/files/${fileId}` : `/api/v1/files/${fileId}`;
516
+ const meta = await this.client.request(endpoint);
517
+ if (meta.size > MAX_DOWNLOAD_BYTES) {
518
+ throw new Error(
519
+ `File too large to download (${meta.size.toLocaleString()} bytes; limit is 10 MB)`
520
+ );
521
+ }
522
+ const response = await fetch(meta.url);
523
+ if (!response.ok) {
524
+ throw new Error(`Failed to download file content (HTTP ${response.status})`);
525
+ }
526
+ const contentLengthHeader = response.headers.get("content-length");
527
+ if (contentLengthHeader != null) {
528
+ const declared = parseInt(contentLengthHeader, 10);
529
+ if (!isNaN(declared) && declared > MAX_DOWNLOAD_BYTES) {
530
+ throw new Error(
531
+ `File too large to download (${declared.toLocaleString()} bytes declared; limit is 10 MB)`
532
+ );
533
+ }
534
+ }
535
+ const contentType = ((response.headers.get("content-type") ?? meta.content_type).split(";")[0] ?? "").trim();
536
+ const filename = meta.display_name ?? meta.filename ?? `file-${fileId}`;
537
+ const buffer = await response.arrayBuffer();
538
+ if (buffer.byteLength > MAX_DOWNLOAD_BYTES) {
539
+ throw new Error(
540
+ `File too large to download (${buffer.byteLength.toLocaleString()} bytes; limit is 10 MB)`
541
+ );
542
+ }
543
+ if (isTextContentType(contentType)) {
544
+ return {
545
+ type: "text",
546
+ filename,
547
+ contentType,
548
+ size: buffer.byteLength,
549
+ text: Buffer.from(buffer).toString("utf-8")
550
+ };
551
+ }
552
+ return {
553
+ type: "resource",
554
+ filename,
555
+ contentType,
556
+ size: buffer.byteLength,
557
+ base64: Buffer.from(buffer).toString("base64")
558
+ };
559
+ }
503
560
  async delete(fileId) {
504
561
  return this.client.request(`/api/v1/files/${fileId}`, { method: "DELETE" });
505
562
  }
@@ -1383,4 +1440,4 @@ export {
1383
1440
  OUTCOME_EXCLUDE_OPTIONS,
1384
1441
  CanvasClient
1385
1442
  };
1386
- //# sourceMappingURL=chunk-A6YFE3W7.js.map
1443
+ //# sourceMappingURL=chunk-DS6QDF2G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../package.json","../src/canvas/query.ts","../src/canvas/client.ts","../src/canvas/courses.ts","../src/canvas/assignments.ts","../src/canvas/submissions.ts","../src/canvas/rubrics.ts","../src/canvas/quizzes.ts","../src/canvas/files.ts","../src/canvas/users.ts","../src/canvas/generated/users-client.ts","../src/canvas/groups.ts","../src/canvas/enrollments.ts","../src/canvas/discussions.ts","../src/canvas/modules.ts","../src/canvas/pages.ts","../src/canvas/calendar.ts","../src/canvas/conversations.ts","../src/canvas/peer-reviews.ts","../src/canvas/accounts.ts","../src/canvas/analytics.ts","../src/canvas/dashboard.ts","../src/canvas/outcomes.ts","../src/canvas/gradebook-history.ts","../src/canvas/index.ts"],"sourcesContent":["{\n \"name\": \"canvas-lms-mcp\",\n \"version\": \"1.10.0\",\n \"mcpName\": \"io.github.bruchris/canvas-lms-mcp\",\n \"description\": \"TypeScript MCP 1.x server for Canvas LMS — 104 tools across Canvas courses, assignments, grades, gradebook history, quizzes, outcomes, discussions, admin workflows, and more.\",\n \"type\": \"module\",\n \"types\": \"./dist/server.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/server.d.ts\",\n \"import\": \"./dist/server.js\",\n \"require\": \"./dist/server.cjs\"\n },\n \"./stdio\": {\n \"types\": \"./dist/stdio.d.ts\",\n \"import\": \"./dist/stdio.js\",\n \"require\": \"./dist/stdio.cjs\"\n },\n \"./http\": {\n \"types\": \"./dist/http.d.ts\",\n \"import\": \"./dist/http.js\",\n \"require\": \"./dist/http.cjs\"\n },\n \"./canvas\": {\n \"types\": \"./dist/canvas/index.d.ts\",\n \"import\": \"./dist/canvas/index.js\",\n \"require\": \"./dist/canvas/index.cjs\"\n }\n },\n \"bin\": {\n \"canvas-lms-mcp\": \"bin/canvas-lms-mcp.js\"\n },\n \"files\": [\n \"bin/\",\n \"dist/\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && tsc -p tsconfig.build.json\",\n \"generate:manifests\": \"tsx scripts/generate-manifests.ts\",\n \"canvas:spec:generate\": \"tsx scripts/canvas-spec/generate.ts\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"lint\": \"eslint src/ tests/ && prettier --check src/ tests/\",\n \"lint:fix\": \"eslint src/ tests/ --fix && prettier --write src/ tests/\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"keywords\": [\n \"canvas\",\n \"canvas-lms\",\n \"lms\",\n \"mcp\",\n \"model-context-protocol\",\n \"education\",\n \"grading\",\n \"ai-agent\",\n \"ai-tools\",\n \"claude-desktop\",\n \"cursor\",\n \"vscode\",\n \"instructure\",\n \"education-technology\",\n \"edtech\",\n \"teacher\",\n \"student\",\n \"grading-automation\",\n \"typescript\"\n ],\n \"author\": \"Christian Bru\",\n \"license\": \"MIT\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/bruchris/canvas-lms-mcp.git\"\n },\n \"engines\": {\n \"node\": \">=22\"\n },\n \"packageManager\": \"pnpm@10.11.0\",\n \"pnpm\": {\n \"overrides\": {\n \"hono\": \"4.12.14\"\n }\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.29.0\",\n \"openapi-fetch\": \"^0.17.0\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@types/node\": \"^25.6.0\",\n \"@typescript-eslint/eslint-plugin\": \"^8.59.0\",\n \"@typescript-eslint/parser\": \"^8.59.0\",\n \"@vitest/coverage-v8\": \"^4.1.5\",\n \"eslint\": \"^10.2.1\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-prettier\": \"^5.5.5\",\n \"openapi-typescript\": \"^7.13.0\",\n \"prettier\": \"^3.8.3\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.59.0\",\n \"vitest\": \"^4.1.5\",\n \"yaml\": \"^2.8.3\"\n }\n}\n","export type CanvasQueryPrimitive = string | number | boolean\n\nexport type CanvasQueryValue = CanvasQueryPrimitive | ReadonlyArray<CanvasQueryPrimitive>\n\nexport type CanvasQueryParams = Record<string, CanvasQueryValue | undefined | null>\n\nexport function appendCanvasQuery(target: URLSearchParams, params?: CanvasQueryParams): void {\n if (!params) return\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null) continue\n if (Array.isArray(value)) {\n if (value.length === 0) continue\n const arrayKey = key.endsWith('[]') ? key : `${key}[]`\n for (const item of value) {\n if (item === undefined || item === null) continue\n target.append(arrayKey, String(item))\n }\n } else {\n target.set(key, String(value))\n }\n }\n}\n\nexport function toCanvasQuery(params?: CanvasQueryParams): URLSearchParams {\n const search = new URLSearchParams()\n appendCanvasQuery(search, params)\n return search\n}\n","import { version } from '../../package.json'\nimport { appendCanvasQuery, type CanvasQueryParams } from './query'\nimport type { CanvasClientConfig, CanvasErrorResponse } from './types'\n\nexport class CanvasApiError extends Error {\n status: number\n endpoint: string\n\n constructor(message: string, status: number, endpoint: string) {\n super(message)\n this.name = 'CanvasApiError'\n this.status = status\n this.endpoint = endpoint\n }\n}\n\nconst DEFAULT_MAX_PAGINATION_PAGES = 1000\nconst USER_AGENT = `canvas-lms-mcp/${version}`\n\nexport interface CanvasRequestOptions extends RequestInit {\n /**\n * Query params to append to the endpoint URL. Arrays produce repeated\n * `key[]=v1&key[]=v2` entries (the convention Canvas uses for `include[]`).\n * Preserves any query string already present on the endpoint.\n */\n query?: CanvasQueryParams\n}\n\nexport class CanvasHttpClient {\n private token: string\n private _baseUrl: string\n private maxPaginationPages: number\n\n constructor(config: CanvasClientConfig) {\n this.token = config.token\n this._baseUrl = config.baseUrl.replace(/\\/+$/, '')\n this.maxPaginationPages = config.maxPaginationPages ?? DEFAULT_MAX_PAGINATION_PAGES\n }\n\n get baseUrl(): string {\n return this._baseUrl\n }\n\n /**\n * Makes a single authenticated request to the Canvas API.\n * Returns `undefined` (typed as `T`) when Canvas responds with 204 No Content,\n * which is the expected response for DELETE operations.\n */\n async request<T>(endpoint: string, options: CanvasRequestOptions = {}): Promise<T> {\n const { query, ...init } = options\n let url = endpoint.startsWith('http') ? endpoint : `${this._baseUrl}${endpoint}`\n if (query) {\n const parsed = new URL(url)\n appendCanvasQuery(parsed.searchParams, query)\n url = parsed.toString()\n }\n\n const method = (init.method ?? 'GET').toUpperCase()\n if (init.body != null && (method === 'GET' || method === 'HEAD')) {\n throw new Error(\n `GET requests must not include a body (Canvas CloudFront CDN rejects them with 403): ${endpoint}`,\n )\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.token}`,\n 'User-Agent': USER_AGENT,\n }\n if (init.body) {\n headers['Content-Type'] = 'application/json'\n }\n\n const response = await fetch(url, {\n ...init,\n headers: {\n ...headers,\n ...init.headers,\n },\n })\n\n if (!response.ok) {\n const body = (await response.json().catch(() => ({}))) as CanvasErrorResponse\n const message =\n body.errors?.[0]?.message ?? body.message ?? `Canvas API error: ${response.status}`\n throw new CanvasApiError(message, response.status, endpoint)\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n return response.json() as Promise<T>\n }\n\n async paginate<T>(endpoint: string, params?: CanvasQueryParams): Promise<T[]> {\n const url = new URL(`${this._baseUrl}${endpoint}`)\n if (!url.searchParams.has('per_page')) {\n url.searchParams.set('per_page', '100')\n }\n appendCanvasQuery(url.searchParams, params)\n\n const results: T[] = []\n let nextUrl: string | null = url.toString()\n let pages = 0\n\n while (nextUrl && pages < this.maxPaginationPages) {\n const response = await fetch(nextUrl, {\n headers: {\n Authorization: `Bearer ${this.token}`,\n 'User-Agent': USER_AGENT,\n },\n })\n\n if (!response.ok) {\n const body = (await response.json().catch(() => ({}))) as CanvasErrorResponse\n const message =\n body.errors?.[0]?.message ?? body.message ?? `Canvas API error: ${response.status}`\n throw new CanvasApiError(message, response.status, endpoint)\n }\n\n const data = (await response.json()) as T[]\n results.push(...data)\n pages++\n\n nextUrl = this.parseNextLink(response.headers.get('Link'))\n }\n\n return results\n }\n\n async paginateEnvelope<T>(\n endpoint: string,\n envelopeKey: string,\n params?: CanvasQueryParams,\n ): Promise<T[]> {\n const url = new URL(`${this._baseUrl}${endpoint}`)\n if (!url.searchParams.has('per_page')) {\n url.searchParams.set('per_page', '100')\n }\n appendCanvasQuery(url.searchParams, params)\n\n const results: T[] = []\n let nextUrl: string | null = url.toString()\n let pages = 0\n\n while (nextUrl && pages < this.maxPaginationPages) {\n const response = await fetch(nextUrl, {\n headers: {\n Authorization: `Bearer ${this.token}`,\n 'User-Agent': USER_AGENT,\n },\n })\n\n if (!response.ok) {\n const body = (await response.json().catch(() => ({}))) as CanvasErrorResponse\n const message =\n body.errors?.[0]?.message ?? body.message ?? `Canvas API error: ${response.status}`\n throw new CanvasApiError(message, response.status, endpoint)\n }\n\n const body = (await response.json()) as Record<string, T[]>\n const data = body[envelopeKey] ?? []\n results.push(...data)\n pages++\n\n nextUrl = this.parseNextLink(response.headers.get('Link'))\n }\n\n return results\n }\n\n private parseNextLink(linkHeader: string | null): string | null {\n if (!linkHeader) return null\n const match = linkHeader.match(/<([^>]+)>;\\s*rel=\"next\"/)\n return match?.[1] ?? null\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasQueryParams } from './query'\nimport type { CanvasCourse, CreateCourseParams, UpdateCourseParams } from './types'\n\nexport type CourseEnrollmentState = 'active' | 'invited_or_pending' | 'completed'\n\nexport type CourseWorkflowState = 'unpublished' | 'available' | 'completed' | 'deleted'\n\nexport type CourseListInclude =\n | 'needs_grading_count'\n | 'syllabus_body'\n | 'public_description'\n | 'total_scores'\n | 'current_grading_period_scores'\n | 'grading_periods'\n | 'term'\n | 'account'\n | 'course_progress'\n | 'sections'\n | 'storage_quota_used_mb'\n | 'total_students'\n | 'passback_status'\n | 'favorites'\n | 'teachers'\n | 'observed_users'\n | 'tabs'\n | 'course_image'\n | 'banner_image'\n | 'concluded'\n | 'lti_context_id'\n | 'post_manually'\n\nexport type CourseGetInclude =\n | CourseListInclude\n | 'all_courses'\n | 'permissions'\n | 'public_description'\n\nexport interface ListCoursesOptions {\n enrollment_state?: CourseEnrollmentState\n state?: ReadonlyArray<CourseWorkflowState>\n enrollment_role_id?: number\n include?: ReadonlyArray<CourseListInclude>\n exclude_blueprint_courses?: boolean\n}\n\nexport interface GetCourseOptions {\n include?: ReadonlyArray<CourseGetInclude>\n teacher_limit?: number\n}\n\nconst DEFAULT_LIST_INCLUDE: ReadonlyArray<CourseListInclude> = ['term']\nconst DEFAULT_GET_INCLUDE: ReadonlyArray<CourseGetInclude> = ['term', 'total_students']\n\nexport class CoursesModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(opts: ListCoursesOptions = {}): Promise<CanvasCourse[]> {\n const params: CanvasQueryParams = {}\n params.include = opts.include && opts.include.length > 0 ? opts.include : DEFAULT_LIST_INCLUDE\n if (opts.enrollment_state) params.enrollment_state = opts.enrollment_state\n if (opts.state && opts.state.length > 0) params.state = opts.state\n if (opts.enrollment_role_id !== undefined) params.enrollment_role_id = opts.enrollment_role_id\n if (opts.exclude_blueprint_courses !== undefined) {\n params.exclude_blueprint_courses = opts.exclude_blueprint_courses\n }\n return this.client.paginate<CanvasCourse>('/api/v1/courses', params)\n }\n\n async get(courseId: number, opts: GetCourseOptions = {}): Promise<CanvasCourse> {\n const include = opts.include && opts.include.length > 0 ? opts.include : DEFAULT_GET_INCLUDE\n const query: CanvasQueryParams = { include }\n if (opts.teacher_limit !== undefined) query.teacher_limit = opts.teacher_limit\n return this.client.request<CanvasCourse>(`/api/v1/courses/${courseId}`, { query })\n }\n\n async getSyllabus(courseId: number): Promise<string | null> {\n const course = await this.client.request<CanvasCourse>(`/api/v1/courses/${courseId}`, {\n query: { include: ['syllabus_body'] },\n })\n return course.syllabus_body ?? null\n }\n\n async create(params: CreateCourseParams): Promise<CanvasCourse> {\n const { account_id, ...courseFields } = params\n return this.client.request<CanvasCourse>(`/api/v1/accounts/${account_id}/courses`, {\n method: 'POST',\n body: JSON.stringify({ course: courseFields }),\n })\n }\n\n async update(courseId: number, params: UpdateCourseParams): Promise<CanvasCourse> {\n return this.client.request<CanvasCourse>(`/api/v1/courses/${courseId}`, {\n method: 'PUT',\n body: JSON.stringify({ course: params }),\n })\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasQueryParams } from './query'\nimport type {\n CanvasAssignment,\n CanvasAssignmentGroup,\n CreateAssignmentParams,\n UpdateAssignmentParams,\n} from './types'\n\nexport type AssignmentListInclude =\n | 'submission'\n | 'assignment_visibility'\n | 'all_dates'\n | 'overrides'\n | 'observed_users'\n | 'can_edit'\n | 'score_statistics'\n\nexport type AssignmentGetInclude =\n | 'submission'\n | 'assignment_visibility'\n | 'overrides'\n | 'observed_users'\n | 'can_edit'\n | 'score_statistics'\n | 'all_dates'\n\nexport type AssignmentBucket =\n | 'past'\n | 'overdue'\n | 'undated'\n | 'ungraded'\n | 'unsubmitted'\n | 'upcoming'\n | 'future'\n\nexport type AssignmentOrderBy = 'position' | 'name' | 'due_at'\n\nexport type AssignmentGroupInclude =\n | 'assignments'\n | 'discussion_topic'\n | 'all_dates'\n | 'assignment_visibility'\n | 'overrides'\n | 'submission'\n | 'observed_users'\n | 'can_edit'\n | 'score_statistics'\n\nexport interface ListAssignmentsOptions {\n include?: ReadonlyArray<AssignmentListInclude>\n search_term?: string\n override_assignment_dates?: boolean\n needs_grading_count_by_section?: boolean\n bucket?: AssignmentBucket\n assignment_ids?: ReadonlyArray<number>\n order_by?: AssignmentOrderBy\n post_to_sis?: boolean\n}\n\nexport interface GetAssignmentOptions {\n include?: ReadonlyArray<AssignmentGetInclude>\n override_assignment_dates?: boolean\n needs_grading_count_by_section?: boolean\n all_dates?: boolean\n}\n\nexport interface ListAssignmentGroupsOptions {\n include?: ReadonlyArray<AssignmentGroupInclude>\n assignment_ids?: ReadonlyArray<number>\n exclude_assignment_submission_types?: ReadonlyArray<string>\n override_assignment_dates?: boolean\n grading_period_id?: number\n scope_assignments_to_student?: boolean\n}\n\nfunction toQuery(opts: object): CanvasQueryParams {\n const params: CanvasQueryParams = {}\n for (const [key, value] of Object.entries(opts)) {\n if (value === undefined || value === null) continue\n if (Array.isArray(value)) {\n if (value.length === 0) continue\n params[key] = value as ReadonlyArray<string | number | boolean>\n } else if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n params[key] = value\n }\n }\n return params\n}\n\nexport class AssignmentsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number, opts: ListAssignmentsOptions = {}): Promise<CanvasAssignment[]> {\n return this.client.paginate<CanvasAssignment>(\n `/api/v1/courses/${courseId}/assignments`,\n toQuery(opts),\n )\n }\n\n async get(\n courseId: number,\n assignmentId: number,\n opts: GetAssignmentOptions = {},\n ): Promise<CanvasAssignment> {\n return this.client.request<CanvasAssignment>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}`,\n { query: toQuery(opts) },\n )\n }\n\n async listGroups(\n courseId: number,\n opts: ListAssignmentGroupsOptions = {},\n ): Promise<CanvasAssignmentGroup[]> {\n return this.client.paginate<CanvasAssignmentGroup>(\n `/api/v1/courses/${courseId}/assignment_groups`,\n toQuery(opts),\n )\n }\n\n async create(courseId: number, params: CreateAssignmentParams): Promise<CanvasAssignment> {\n return this.client.request<CanvasAssignment>(`/api/v1/courses/${courseId}/assignments`, {\n method: 'POST',\n body: JSON.stringify({ assignment: params }),\n })\n }\n\n async update(\n courseId: number,\n assignmentId: number,\n params: UpdateAssignmentParams,\n ): Promise<CanvasAssignment> {\n return this.client.request<CanvasAssignment>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}`,\n {\n method: 'PUT',\n body: JSON.stringify({ assignment: params }),\n },\n )\n }\n\n async delete(courseId: number, assignmentId: number): Promise<void> {\n await this.client.request<void>(`/api/v1/courses/${courseId}/assignments/${assignmentId}`, {\n method: 'DELETE',\n })\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasQueryParams } from './query'\nimport type { CanvasSubmission } from './types'\n\nexport type SubmissionListInclude =\n | 'submission_history'\n | 'submission_comments'\n | 'rubric_assessment'\n | 'assignment'\n | 'visibility'\n | 'course'\n | 'user'\n | 'group'\n | 'read_status'\n | 'sub_assignment_submissions'\n\nexport type SubmissionGetInclude =\n | 'submission_history'\n | 'submission_comments'\n | 'rubric_assessment'\n | 'visibility'\n | 'course'\n | 'user'\n | 'read_status'\n\nexport type SubmissionWorkflowState = 'submitted' | 'unsubmitted' | 'graded' | 'pending_review'\n\nexport interface ListSubmissionsOptions {\n include?: ReadonlyArray<SubmissionListInclude>\n student_ids?: ReadonlyArray<number | string>\n assignment_ids?: ReadonlyArray<number>\n section_ids?: ReadonlyArray<number>\n grouped?: boolean\n workflow_state?: SubmissionWorkflowState\n grading_period_id?: number\n post_to_sis?: boolean\n submitted_since?: string\n graded_since?: string\n}\n\nexport interface GetSubmissionOptions {\n include?: ReadonlyArray<SubmissionGetInclude>\n}\n\nconst DEFAULT_LIST_INCLUDE: ReadonlyArray<SubmissionListInclude> = ['submission_comments']\nconst DEFAULT_GET_INCLUDE: ReadonlyArray<SubmissionGetInclude> = ['submission_comments']\n\nfunction buildListParams(opts: ListSubmissionsOptions): CanvasQueryParams {\n const params: CanvasQueryParams = {}\n params.include = opts.include && opts.include.length > 0 ? opts.include : DEFAULT_LIST_INCLUDE\n if (opts.student_ids && opts.student_ids.length > 0) params.student_ids = opts.student_ids\n if (opts.assignment_ids && opts.assignment_ids.length > 0)\n params.assignment_ids = opts.assignment_ids\n if (opts.section_ids && opts.section_ids.length > 0) params.section_ids = opts.section_ids\n if (opts.grouped !== undefined) params.grouped = opts.grouped\n if (opts.workflow_state) params.workflow_state = opts.workflow_state\n if (opts.grading_period_id !== undefined) params.grading_period_id = opts.grading_period_id\n if (opts.post_to_sis !== undefined) params.post_to_sis = opts.post_to_sis\n if (opts.submitted_since) params.submitted_since = opts.submitted_since\n if (opts.graded_since) params.graded_since = opts.graded_since\n return params\n}\n\nexport class SubmissionsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(\n courseId: number,\n assignmentId: number,\n opts: ListSubmissionsOptions = {},\n ): Promise<CanvasSubmission[]> {\n return this.client.paginate<CanvasSubmission>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions`,\n buildListParams(opts),\n )\n }\n\n async get(\n courseId: number,\n assignmentId: number,\n userId: number,\n opts: GetSubmissionOptions = {},\n ): Promise<CanvasSubmission> {\n const include = opts.include && opts.include.length > 0 ? opts.include : DEFAULT_GET_INCLUDE\n return this.client.request<CanvasSubmission>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions/${userId}`,\n { query: { include } },\n )\n }\n\n async grade(\n courseId: number,\n assignmentId: number,\n userId: number,\n grade: string,\n ): Promise<CanvasSubmission> {\n return this.client.request<CanvasSubmission>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions/${userId}`,\n {\n method: 'PUT',\n body: JSON.stringify({ submission: { posted_grade: grade } }),\n },\n )\n }\n\n async comment(\n courseId: number,\n assignmentId: number,\n userId: number,\n comment: string,\n ): Promise<CanvasSubmission> {\n return this.client.request<CanvasSubmission>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions/${userId}`,\n {\n method: 'PUT',\n body: JSON.stringify({\n comment: { text_comment: comment },\n }),\n },\n )\n }\n\n async listMy(courseId: number): Promise<CanvasSubmission[]> {\n return this.client.paginate<CanvasSubmission>(\n `/api/v1/courses/${courseId}/students/submissions`,\n { student_ids: ['self'] },\n )\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasRubric, CanvasRubricAssessment, CanvasSubmission } from './types'\n\nexport class RubricsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasRubric[]> {\n return this.client.paginate<CanvasRubric>(`/api/v1/courses/${courseId}/rubrics`)\n }\n\n async get(courseId: number, rubricId: number): Promise<CanvasRubric> {\n return this.client.request<CanvasRubric>(`/api/v1/courses/${courseId}/rubrics/${rubricId}`)\n }\n\n async getAssessment(\n courseId: number,\n assignmentId: number,\n userId: number,\n ): Promise<CanvasSubmission> {\n return this.client.request<CanvasSubmission>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions/${userId}?include[]=rubric_assessment`,\n )\n }\n\n async submitAssessment(\n courseId: number,\n associationId: number,\n data: CanvasRubricAssessment['data'],\n ): Promise<CanvasRubricAssessment> {\n return this.client.request<CanvasRubricAssessment>(\n `/api/v1/courses/${courseId}/rubric_associations/${associationId}/rubric_assessments`,\n {\n method: 'POST',\n body: JSON.stringify({ rubric_assessment: { data } }),\n },\n )\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type {\n CanvasQuiz,\n CanvasQuizSubmission,\n CanvasQuizQuestion,\n CanvasQuizSubmissionQuestion,\n} from './types'\n\nexport class QuizzesModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasQuiz[]> {\n return this.client.paginate<CanvasQuiz>(`/api/v1/courses/${courseId}/quizzes`)\n }\n\n async get(courseId: number, quizId: number): Promise<CanvasQuiz> {\n return this.client.request<CanvasQuiz>(`/api/v1/courses/${courseId}/quizzes/${quizId}`)\n }\n\n async listSubmissions(courseId: number, quizId: number): Promise<CanvasQuizSubmission[]> {\n return this.client.paginateEnvelope<CanvasQuizSubmission>(\n `/api/v1/courses/${courseId}/quizzes/${quizId}/submissions`,\n 'quiz_submissions',\n )\n }\n\n async listQuestions(courseId: number, quizId: number): Promise<CanvasQuizQuestion[]> {\n return this.client.paginate<CanvasQuizQuestion>(\n `/api/v1/courses/${courseId}/quizzes/${quizId}/questions`,\n )\n }\n\n async getSubmissionAnswers(quizSubmissionId: number): Promise<CanvasQuizSubmissionQuestion[]> {\n return this.client.paginateEnvelope<CanvasQuizSubmissionQuestion>(\n `/api/v1/quiz_submissions/${quizSubmissionId}/questions`,\n 'quiz_submission_questions',\n { 'include[]': 'quiz_question' },\n )\n }\n\n async scoreQuestion(\n courseId: number,\n quizId: number,\n submissionId: number,\n questionId: number,\n score: number,\n comment?: string,\n attempt?: number,\n ): Promise<void> {\n const submission: Record<string, unknown> = {\n questions: {\n [questionId]: { score, comment },\n },\n }\n if (attempt !== undefined) {\n submission.attempt = attempt\n }\n const body: Record<string, unknown> = {\n quiz_submissions: [submission],\n }\n await this.client.request(\n `/api/v1/courses/${courseId}/quizzes/${quizId}/submissions/${submissionId}`,\n {\n method: 'PUT',\n body: JSON.stringify(body),\n },\n )\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasFile, CanvasFileUploadInfo, CanvasFolder, DownloadedFile } from './types'\n\nconst MAX_DOWNLOAD_BYTES = 10 * 1024 * 1024 // 10 MB\n\nconst TEXT_CONTENT_TYPES = new Set([\n 'application/json',\n 'application/xml',\n 'application/javascript',\n 'application/x-javascript',\n])\n\nfunction isTextContentType(contentType: string): boolean {\n const base = (contentType.split(';')[0] ?? '').trim().toLowerCase()\n return base.startsWith('text/') || TEXT_CONTENT_TYPES.has(base)\n}\n\nexport class FilesModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasFile[]> {\n return this.client.paginate<CanvasFile>(`/api/v1/courses/${courseId}/files`)\n }\n\n async listFolders(courseId: number): Promise<CanvasFolder[]> {\n return this.client.paginate<CanvasFolder>(`/api/v1/courses/${courseId}/folders`)\n }\n\n async get(courseId: number, fileId: number): Promise<CanvasFile> {\n return this.client.request<CanvasFile>(`/api/v1/courses/${courseId}/files/${fileId}`)\n }\n\n async upload(\n courseId: number,\n name: string,\n contentBase64: string,\n contentType: string,\n parentFolderPath?: string,\n ): Promise<CanvasFile> {\n const content = Buffer.from(contentBase64, 'base64')\n if (content.toString('base64') !== contentBase64) {\n throw new Error('Invalid base64 content: string is not valid base64 encoding')\n }\n\n // Step 1: Notify Canvas of the pending upload\n const uploadBody: Record<string, string> = {\n name,\n content_type: contentType,\n size: String(content.length),\n }\n if (parentFolderPath) {\n uploadBody.parent_folder_path = parentFolderPath\n }\n\n const uploadInfo = await this.client.request<CanvasFileUploadInfo>(\n `/api/v1/courses/${courseId}/files`,\n { method: 'POST', body: JSON.stringify(uploadBody) },\n )\n\n // Step 2: POST file to upload_url (may be S3 — must NOT add Authorization header)\n const form = new FormData()\n for (const [key, value] of Object.entries(uploadInfo.upload_params)) {\n form.append(key, value)\n }\n form.append('file', new Blob([content], { type: contentType }), name)\n\n // Use redirect: 'manual' so we can handle the 303 → Canvas confirm step ourselves\n let s3Response: Response\n try {\n s3Response = await fetch(uploadInfo.upload_url, {\n method: 'POST',\n body: form,\n redirect: 'manual',\n })\n } catch (networkErr) {\n let hostname: string\n try {\n hostname = new URL(uploadInfo.upload_url).hostname\n } catch {\n hostname = uploadInfo.upload_url\n }\n throw new Error(`Unable to reach file storage (${hostname})`, { cause: networkErr })\n }\n\n // Step 3: If S3 returned a redirect, POST to Canvas confirm URL\n if (s3Response.status >= 300 && s3Response.status < 400) {\n const confirmUrl = s3Response.headers.get('location')\n if (!confirmUrl) {\n throw new Error(`File upload redirect missing Location header (HTTP ${s3Response.status})`)\n }\n let confirmHostname: string\n try {\n confirmHostname = new URL(confirmUrl).hostname\n } catch {\n confirmHostname = ''\n }\n const canvasHostname = new URL(this.client.baseUrl).hostname\n if (confirmHostname !== canvasHostname) {\n throw new Error(\n `File upload redirect points to unexpected host (${confirmHostname}); expected Canvas host (${canvasHostname})`,\n )\n }\n return this.client.request<CanvasFile>(confirmUrl, { method: 'POST' })\n }\n\n if (!s3Response.ok) {\n const body = await s3Response.text()\n throw new Error(\n `File upload to storage failed (HTTP ${s3Response.status}): ${body.slice(0, 500)}`,\n )\n }\n\n const responseText = await s3Response.text()\n let parsed: unknown\n try {\n parsed = JSON.parse(responseText)\n } catch (parseErr) {\n throw new Error(\n `File upload response is not valid JSON (${parseErr instanceof Error ? parseErr.message : String(parseErr)}): ${responseText.slice(0, 500)}`,\n { cause: parseErr },\n )\n }\n if (typeof parsed !== 'object' || parsed === null || !('id' in parsed)) {\n throw new Error(\n `File upload returned unexpected response (no file ID): ${responseText.slice(0, 500)}`,\n )\n }\n return parsed as CanvasFile\n }\n\n async download(fileId: number, courseId?: number): Promise<DownloadedFile> {\n const endpoint =\n courseId != null ? `/api/v1/courses/${courseId}/files/${fileId}` : `/api/v1/files/${fileId}`\n const meta = await this.client.request<CanvasFile>(endpoint)\n\n if (meta.size > MAX_DOWNLOAD_BYTES) {\n throw new Error(\n `File too large to download (${meta.size.toLocaleString()} bytes; limit is 10 MB)`,\n )\n }\n\n const response = await fetch(meta.url)\n if (!response.ok) {\n throw new Error(`Failed to download file content (HTTP ${response.status})`)\n }\n\n const contentLengthHeader = response.headers.get('content-length')\n if (contentLengthHeader != null) {\n const declared = parseInt(contentLengthHeader, 10)\n if (!isNaN(declared) && declared > MAX_DOWNLOAD_BYTES) {\n throw new Error(\n `File too large to download (${declared.toLocaleString()} bytes declared; limit is 10 MB)`,\n )\n }\n }\n\n const contentType = (\n (response.headers.get('content-type') ?? meta.content_type).split(';')[0] ?? ''\n ).trim()\n const filename = meta.display_name ?? meta.filename ?? `file-${fileId}`\n const buffer = await response.arrayBuffer()\n\n if (buffer.byteLength > MAX_DOWNLOAD_BYTES) {\n throw new Error(\n `File too large to download (${buffer.byteLength.toLocaleString()} bytes; limit is 10 MB)`,\n )\n }\n\n if (isTextContentType(contentType)) {\n return {\n type: 'text',\n filename,\n contentType,\n size: buffer.byteLength,\n text: Buffer.from(buffer).toString('utf-8'),\n }\n }\n\n return {\n type: 'resource',\n filename,\n contentType,\n size: buffer.byteLength,\n base64: Buffer.from(buffer).toString('base64'),\n }\n }\n\n async delete(fileId: number): Promise<CanvasFile> {\n return this.client.request<CanvasFile>(`/api/v1/files/${fileId}`, { method: 'DELETE' })\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasQueryParams } from './query'\nimport type { CanvasUpcomingEvent, CanvasUser, CanvasUserProfile } from './types'\n\nexport type CourseUserEnrollmentType = 'student' | 'teacher' | 'ta' | 'observer' | 'designer'\n\nexport type CourseUserEnrollmentState = 'active' | 'invited' | 'rejected' | 'completed' | 'inactive'\n\nexport type CourseUserInclude =\n | 'email'\n | 'enrollments'\n | 'locked'\n | 'avatar_url'\n | 'test_student'\n | 'bio'\n | 'custom_links'\n | 'current_grading_period_scores'\n | 'uuid'\n\nexport type UserSort = 'username' | 'email' | 'sis_id' | 'integration_id' | 'last_login'\n\nexport type SearchUserInclude = 'email' | 'last_login' | 'avatar_url' | 'time_zone' | 'uuid'\n\nexport interface ListCourseUsersOptions {\n enrollment_type?: CourseUserEnrollmentType | ReadonlyArray<CourseUserEnrollmentType>\n enrollment_state?: ReadonlyArray<CourseUserEnrollmentState>\n enrollment_role_id?: number\n include?: ReadonlyArray<CourseUserInclude>\n user_ids?: ReadonlyArray<number | string>\n user_id?: number | string\n search_term?: string\n sort?: UserSort\n order?: 'asc' | 'desc'\n}\n\nexport interface SearchUsersOptions {\n sort?: UserSort\n order?: 'asc' | 'desc'\n include?: ReadonlyArray<SearchUserInclude>\n}\n\n/**\n * Public interface for the users module. Lets `CanvasClient` swap between\n * the hand-written `UsersModule` and the prototype generated-client\n * implementation (see GitHub issue #78) without tool callers caring.\n */\nexport interface UsersModuleApi {\n listStudents(courseId: number): Promise<CanvasUser[]>\n get(userId: number): Promise<CanvasUser>\n getProfile(): Promise<CanvasUserProfile>\n searchUsers(\n accountId: number,\n searchTerm: string,\n opts?: SearchUsersOptions,\n ): Promise<CanvasUser[]>\n listCourseUsers(courseId: number, opts?: ListCourseUsersOptions): Promise<CanvasUser[]>\n getUpcomingAssignments(): Promise<CanvasUpcomingEvent[]>\n}\n\nexport class UsersModule implements UsersModuleApi {\n constructor(private client: CanvasHttpClient) {}\n\n async listStudents(courseId: number): Promise<CanvasUser[]> {\n return this.client.paginate<CanvasUser>(`/api/v1/courses/${courseId}/users`, {\n enrollment_type: ['student'],\n })\n }\n\n async get(userId: number): Promise<CanvasUser> {\n return this.client.request<CanvasUser>(`/api/v1/users/${userId}`)\n }\n\n async getProfile(): Promise<CanvasUserProfile> {\n return this.client.request<CanvasUserProfile>('/api/v1/users/self/profile')\n }\n\n async searchUsers(\n accountId: number,\n searchTerm: string,\n opts: SearchUsersOptions = {},\n ): Promise<CanvasUser[]> {\n const params: CanvasQueryParams = { search_term: searchTerm }\n if (opts.sort) params.sort = opts.sort\n if (opts.order) params.order = opts.order\n if (opts.include && opts.include.length > 0) params.include = opts.include\n return this.client.paginate<CanvasUser>(`/api/v1/accounts/${accountId}/users`, params)\n }\n\n async listCourseUsers(\n courseId: number,\n opts: ListCourseUsersOptions = {},\n ): Promise<CanvasUser[]> {\n const params: CanvasQueryParams = {}\n if (opts.enrollment_type !== undefined) {\n params.enrollment_type = Array.isArray(opts.enrollment_type)\n ? opts.enrollment_type\n : [opts.enrollment_type]\n }\n if (opts.enrollment_state && opts.enrollment_state.length > 0) {\n params.enrollment_state = opts.enrollment_state\n }\n if (opts.enrollment_role_id !== undefined) params.enrollment_role_id = opts.enrollment_role_id\n if (opts.include && opts.include.length > 0) params.include = opts.include\n if (opts.user_ids && opts.user_ids.length > 0) params.user_ids = opts.user_ids\n if (opts.user_id !== undefined) params.user_id = opts.user_id\n if (opts.search_term) params.search_term = opts.search_term\n if (opts.sort) params.sort = opts.sort\n if (opts.order) params.order = opts.order\n return this.client.paginate<CanvasUser>(`/api/v1/courses/${courseId}/users`, params)\n }\n\n async getUpcomingAssignments(): Promise<CanvasUpcomingEvent[]> {\n return this.client.request<CanvasUpcomingEvent[]>(\n '/api/v1/users/self/upcoming_events?type=Assignment',\n )\n }\n}\n","/**\n * Generated-client users module (prototype for GitHub issue #78).\n *\n * Demonstrates swapping the hand-written `UsersModule` with a thin layer\n * on top of `openapi-fetch` + generated types. The public shape matches\n * `UsersModule` exactly so that `CanvasClient` can select either\n * implementation behind a feature flag without downstream tools knowing.\n *\n * Two things that cannot live in the OpenAPI spec (per issue #78) are\n * handled here:\n *\n * 1. Bearer auth injection -- a one-line openapi-fetch middleware.\n * 2. Link-header pagination -- a small manual loop. openapi-fetch drives\n * the first request with full type-checking; subsequent pages are\n * fetched directly since Canvas returns absolute URLs in the Link\n * header that don't fit openapi-fetch's path-templated API surface.\n */\nimport createClient, { type Middleware } from 'openapi-fetch'\nimport { CanvasApiError } from '../client'\nimport type {\n CanvasClientConfig,\n CanvasErrorResponse,\n CanvasUpcomingEvent,\n CanvasUser,\n CanvasUserProfile,\n} from '../types'\nimport type {\n CourseUserEnrollmentType,\n CourseUserEnrollmentState,\n CourseUserInclude,\n ListCourseUsersOptions,\n SearchUserInclude,\n SearchUsersOptions,\n UserSort,\n UsersModuleApi,\n} from '../users'\nimport type { paths } from './types'\n\nconst DEFAULT_MAX_PAGINATION_PAGES = 1000\nconst USER_AGENT = 'canvas-lms-mcp/1.0'\nconst DEFAULT_PER_PAGE = 100\n\ntype OpenApiClient = ReturnType<typeof createClient<paths>>\n\nexport class GeneratedUsersModule implements UsersModuleApi {\n private client: OpenApiClient\n private token: string\n private baseUrl: string\n private maxPaginationPages: number\n\n constructor(config: CanvasClientConfig) {\n this.token = config.token\n this.baseUrl = config.baseUrl.replace(/\\/+$/, '')\n this.maxPaginationPages = config.maxPaginationPages ?? DEFAULT_MAX_PAGINATION_PAGES\n\n const token = this.token\n const authMiddleware: Middleware = {\n onRequest({ request }) {\n request.headers.set('Authorization', `Bearer ${token}`)\n request.headers.set('User-Agent', USER_AGENT)\n return request\n },\n }\n\n this.client = createClient<paths>({ baseUrl: this.baseUrl })\n this.client.use(authMiddleware)\n }\n\n async listStudents(courseId: number): Promise<CanvasUser[]> {\n return this.paginate<CanvasUser>(`/api/v1/courses/${courseId}/users`, {\n 'enrollment_type[]': ['student'],\n })\n }\n\n async get(userId: number): Promise<CanvasUser> {\n const endpoint = `/api/v1/users/${userId}`\n const { data, error, response } = await this.client.GET('/api/v1/users/{id}', {\n params: { path: { id: userId } },\n })\n if (error || !response.ok) {\n throw await toCanvasError(response, endpoint, error)\n }\n return data as CanvasUser\n }\n\n async getProfile(): Promise<CanvasUserProfile> {\n const endpoint = '/api/v1/users/self/profile'\n const { data, error, response } = await this.client.GET('/api/v1/users/self/profile')\n if (error || !response.ok) {\n throw await toCanvasError(response, endpoint, error)\n }\n return data as CanvasUserProfile\n }\n\n async searchUsers(\n accountId: number,\n searchTerm: string,\n opts: SearchUsersOptions = {},\n ): Promise<CanvasUser[]> {\n const query: Record<string, unknown> = { search_term: searchTerm }\n if (opts.sort) query.sort = opts.sort\n if (opts.order) query.order = opts.order\n if (opts.include && opts.include.length > 0) query['include[]'] = opts.include\n return this.paginate<CanvasUser>(`/api/v1/accounts/${accountId}/users`, query)\n }\n\n async listCourseUsers(\n courseId: number,\n opts: ListCourseUsersOptions = {},\n ): Promise<CanvasUser[]> {\n const query: Record<string, unknown> = {}\n if (opts.enrollment_type !== undefined) {\n query['enrollment_type[]'] = Array.isArray(opts.enrollment_type)\n ? opts.enrollment_type\n : [opts.enrollment_type]\n }\n if (opts.enrollment_state && opts.enrollment_state.length > 0) {\n query['enrollment_state[]'] = opts.enrollment_state\n }\n if (opts.include && opts.include.length > 0) query['include[]'] = opts.include\n if (opts.user_ids && opts.user_ids.length > 0) query['user_ids[]'] = opts.user_ids\n if (opts.enrollment_role_id !== undefined) query.enrollment_role_id = opts.enrollment_role_id\n if (opts.user_id !== undefined) query.user_id = opts.user_id\n if (opts.search_term) query.search_term = opts.search_term\n if (opts.sort) query.sort = opts.sort\n if (opts.order) query.order = opts.order\n return this.paginate<CanvasUser>(`/api/v1/courses/${courseId}/users`, query)\n }\n\n async getUpcomingAssignments(): Promise<CanvasUpcomingEvent[]> {\n const endpoint = '/api/v1/users/self/upcoming_events'\n const { data, error, response } = await this.client.GET('/api/v1/users/self/upcoming_events', {\n params: { query: { type: 'Assignment' } },\n })\n if (error || !response.ok) {\n throw await toCanvasError(response, endpoint, error)\n }\n return (data as CanvasUpcomingEvent[]) ?? []\n }\n\n /**\n * Paginated GET with manual Link-header handling. The first page uses\n * openapi-fetch's typed surface; subsequent pages use raw fetch since\n * Canvas returns absolute URLs in the Link header that don't map onto\n * path templates.\n */\n private async paginate<T>(endpoint: string, query: Record<string, unknown>): Promise<T[]> {\n const firstUrl = buildUrl(this.baseUrl, endpoint, query)\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.token}`,\n 'User-Agent': USER_AGENT,\n }\n\n const results: T[] = []\n let nextUrl: string | null = firstUrl\n let pages = 0\n\n while (nextUrl && pages < this.maxPaginationPages) {\n const response = await fetch(nextUrl, { headers })\n if (!response.ok) {\n throw await toCanvasError(response, endpoint, undefined)\n }\n const page = (await response.json()) as T[]\n results.push(...page)\n pages++\n nextUrl = parseNextLink(response.headers.get('Link'))\n }\n return results\n }\n}\n\nfunction buildUrl(baseUrl: string, endpoint: string, query: Record<string, unknown>): string {\n const url = new URL(`${baseUrl}${endpoint}`)\n if (!url.searchParams.has('per_page')) {\n url.searchParams.set('per_page', String(DEFAULT_PER_PAGE))\n }\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item === undefined || item === null) continue\n url.searchParams.append(key, String(item))\n }\n } else {\n url.searchParams.set(key, String(value))\n }\n }\n return url.toString()\n}\n\nfunction parseNextLink(linkHeader: string | null): string | null {\n if (!linkHeader) return null\n const match = linkHeader.match(/<([^>]+)>;\\s*rel=\"next\"/)\n return match?.[1] ?? null\n}\n\nasync function toCanvasError(\n response: Response,\n endpoint: string,\n openapiError: unknown,\n): Promise<CanvasApiError> {\n let body: CanvasErrorResponse = {}\n if (openapiError && typeof openapiError === 'object') {\n body = openapiError as CanvasErrorResponse\n } else if (!response.bodyUsed) {\n try {\n body = (await response.clone().json()) as CanvasErrorResponse\n } catch {\n body = {}\n }\n }\n const message =\n body.errors?.[0]?.message ?? body.message ?? `Canvas API error: ${response.status}`\n return new CanvasApiError(message, response.status, endpoint)\n}\n\n// Re-export the types already defined in src/canvas/users.ts so that\n// consumers of the generated module get an identical surface.\nexport type {\n CourseUserEnrollmentType,\n CourseUserEnrollmentState,\n CourseUserInclude,\n ListCourseUsersOptions,\n SearchUserInclude,\n SearchUsersOptions,\n UserSort,\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasGroup, CanvasUser } from './types'\n\nexport class GroupsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasGroup[]> {\n return this.client.paginate<CanvasGroup>(`/api/v1/courses/${courseId}/groups`)\n }\n\n async listMembers(groupId: number): Promise<CanvasUser[]> {\n return this.client.paginate<CanvasUser>(`/api/v1/groups/${groupId}/users`)\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasQueryParams } from './query'\nimport type { CanvasEnrollment } from './types'\n\nexport type EnrollmentType =\n | 'StudentEnrollment'\n | 'TeacherEnrollment'\n | 'TaEnrollment'\n | 'DesignerEnrollment'\n | 'ObserverEnrollment'\n\nexport type EnrollmentState =\n | 'active'\n | 'invited'\n | 'creation_pending'\n | 'deleted'\n | 'rejected'\n | 'completed'\n | 'inactive'\n | 'current_and_invited'\n | 'current_and_future'\n | 'current_and_concluded'\n\nexport type EnrollmentInclude =\n | 'avatar_url'\n | 'group_ids'\n | 'locked'\n | 'observed_users'\n | 'can_be_removed'\n | 'uuid'\n | 'current_points'\n | 'grades'\n\nexport interface ListCourseEnrollmentsOptions {\n type?: ReadonlyArray<EnrollmentType>\n role?: ReadonlyArray<string>\n state?: ReadonlyArray<EnrollmentState>\n include?: ReadonlyArray<EnrollmentInclude>\n user_id?: number | string\n grading_period_id?: number\n enrollment_term_id?: number\n sis_account_id?: ReadonlyArray<string>\n sis_course_id?: ReadonlyArray<string>\n sis_section_id?: ReadonlyArray<string>\n sis_user_id?: ReadonlyArray<string>\n created_for_sis_id?: ReadonlyArray<boolean>\n}\n\nexport interface ListUserEnrollmentsOptions {\n type?: ReadonlyArray<EnrollmentType>\n role?: ReadonlyArray<string>\n state?: ReadonlyArray<EnrollmentState>\n include?: ReadonlyArray<EnrollmentInclude>\n grading_period_id?: number\n enrollment_term_id?: number\n}\n\nfunction buildParams(opts: object): CanvasQueryParams {\n const params: CanvasQueryParams = {}\n for (const [key, value] of Object.entries(opts)) {\n if (value === undefined || value === null) continue\n if (Array.isArray(value)) {\n if (value.length === 0) continue\n params[key] = value as ReadonlyArray<string | number | boolean>\n } else if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n params[key] = value\n }\n }\n return params\n}\n\nexport class EnrollmentsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(opts: ListUserEnrollmentsOptions = {}): Promise<CanvasEnrollment[]> {\n return this.client.paginate<CanvasEnrollment>(\n '/api/v1/users/self/enrollments',\n buildParams(opts),\n )\n }\n\n async listForCourse(\n courseId: number,\n opts: ListCourseEnrollmentsOptions = {},\n ): Promise<CanvasEnrollment[]> {\n return this.client.paginate<CanvasEnrollment>(\n `/api/v1/courses/${courseId}/enrollments`,\n buildParams(opts),\n )\n }\n\n async enroll(\n courseId: number,\n userId: number,\n type: string,\n enrollmentState?: string,\n ): Promise<CanvasEnrollment> {\n const body: Record<string, unknown> = {\n enrollment: {\n user_id: userId,\n type,\n ...(enrollmentState ? { enrollment_state: enrollmentState } : {}),\n },\n }\n return this.client.request<CanvasEnrollment>(`/api/v1/courses/${courseId}/enrollments`, {\n method: 'POST',\n body: JSON.stringify(body),\n })\n }\n\n async remove(courseId: number, enrollmentId: number, task: string): Promise<CanvasEnrollment> {\n return this.client.request<CanvasEnrollment>(\n `/api/v1/courses/${courseId}/enrollments/${enrollmentId}?task=${encodeURIComponent(task)}`,\n { method: 'DELETE' },\n )\n }\n\n async listMyGrades(courseId?: number): Promise<CanvasEnrollment[]> {\n if (courseId !== undefined) {\n return this.client.paginate<CanvasEnrollment>(`/api/v1/courses/${courseId}/enrollments`, {\n user_id: 'self',\n include: ['grades'],\n })\n }\n return this.client.paginate<CanvasEnrollment>('/api/v1/users/self/enrollments', {\n include: ['grades'],\n })\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type {\n CanvasDiscussionTopic,\n CanvasDiscussionEntry,\n CanvasAnnouncement,\n CreateDiscussionParams,\n UpdateDiscussionParams,\n} from './types'\n\nexport class DiscussionsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasDiscussionTopic[]> {\n return this.client.paginate<CanvasDiscussionTopic>(\n `/api/v1/courses/${courseId}/discussion_topics`,\n )\n }\n\n async get(courseId: number, topicId: number): Promise<CanvasDiscussionTopic> {\n return this.client.request<CanvasDiscussionTopic>(\n `/api/v1/courses/${courseId}/discussion_topics/${topicId}?include[]=all_dates`,\n )\n }\n\n async listAnnouncements(courseId: number): Promise<CanvasAnnouncement[]> {\n return this.client.paginate<CanvasAnnouncement>(\n `/api/v1/courses/${courseId}/discussion_topics`,\n { only_announcements: 'true' },\n )\n }\n\n async postEntry(\n courseId: number,\n topicId: number,\n message: string,\n ): Promise<CanvasDiscussionEntry> {\n return this.client.request<CanvasDiscussionEntry>(\n `/api/v1/courses/${courseId}/discussion_topics/${topicId}/entries`,\n {\n method: 'POST',\n body: JSON.stringify({ message }),\n },\n )\n }\n\n async create(courseId: number, params: CreateDiscussionParams): Promise<CanvasDiscussionTopic> {\n return this.client.request<CanvasDiscussionTopic>(\n `/api/v1/courses/${courseId}/discussion_topics`,\n {\n method: 'POST',\n body: JSON.stringify(params),\n },\n )\n }\n\n async update(\n courseId: number,\n topicId: number,\n params: UpdateDiscussionParams,\n ): Promise<CanvasDiscussionTopic> {\n return this.client.request<CanvasDiscussionTopic>(\n `/api/v1/courses/${courseId}/discussion_topics/${topicId}`,\n {\n method: 'PUT',\n body: JSON.stringify(params),\n },\n )\n }\n\n async delete(courseId: number, topicId: number): Promise<void> {\n await this.client.request<void>(`/api/v1/courses/${courseId}/discussion_topics/${topicId}`, {\n method: 'DELETE',\n })\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasModule, CanvasModuleItem } from './types'\n\nexport class ModulesModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasModule[]> {\n return this.client.paginate<CanvasModule>(`/api/v1/courses/${courseId}/modules`)\n }\n\n async get(courseId: number, moduleId: number): Promise<CanvasModule> {\n return this.client.request<CanvasModule>(`/api/v1/courses/${courseId}/modules/${moduleId}`)\n }\n\n async listItems(courseId: number, moduleId: number): Promise<CanvasModuleItem[]> {\n return this.client.paginate<CanvasModuleItem>(\n `/api/v1/courses/${courseId}/modules/${moduleId}/items`,\n )\n }\n\n async create(\n courseId: number,\n params: {\n name: string\n position?: number\n unlock_at?: string\n prerequisite_module_ids?: number[]\n },\n ): Promise<CanvasModule> {\n return this.client.request<CanvasModule>(`/api/v1/courses/${courseId}/modules`, {\n method: 'POST',\n body: JSON.stringify({ module: params }),\n })\n }\n\n async update(\n courseId: number,\n moduleId: number,\n params: { name?: string; position?: number; published?: boolean },\n ): Promise<CanvasModule> {\n return this.client.request<CanvasModule>(`/api/v1/courses/${courseId}/modules/${moduleId}`, {\n method: 'PUT',\n body: JSON.stringify({ module: params }),\n })\n }\n\n async createItem(\n courseId: number,\n moduleId: number,\n params: {\n title: string\n type: string\n content_id?: number\n external_url?: string\n position?: number\n },\n ): Promise<CanvasModuleItem> {\n return this.client.request<CanvasModuleItem>(\n `/api/v1/courses/${courseId}/modules/${moduleId}/items`,\n {\n method: 'POST',\n body: JSON.stringify({ module_item: params }),\n },\n )\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasPage } from './types'\n\nexport class PagesModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasPage[]> {\n return this.client.paginate<CanvasPage>(`/api/v1/courses/${courseId}/pages`)\n }\n\n async get(courseId: number, pageUrl: string): Promise<CanvasPage> {\n return this.client.request<CanvasPage>(\n `/api/v1/courses/${courseId}/pages/${encodeURIComponent(pageUrl)}`,\n )\n }\n\n async create(\n courseId: number,\n params: { title: string; body?: string; published?: boolean; editing_roles?: string },\n ): Promise<CanvasPage> {\n return this.client.request<CanvasPage>(`/api/v1/courses/${courseId}/pages`, {\n method: 'POST',\n body: JSON.stringify({ wiki_page: params }),\n })\n }\n\n async update(\n courseId: number,\n pageUrl: string,\n params: { title?: string; body?: string; published?: boolean; editing_roles?: string },\n ): Promise<CanvasPage> {\n return this.client.request<CanvasPage>(\n `/api/v1/courses/${courseId}/pages/${encodeURIComponent(pageUrl)}`,\n {\n method: 'PUT',\n body: JSON.stringify({ wiki_page: params }),\n },\n )\n }\n\n async delete(courseId: number, pageUrl: string): Promise<void> {\n await this.client.request<void>(\n `/api/v1/courses/${courseId}/pages/${encodeURIComponent(pageUrl)}`,\n { method: 'DELETE' },\n )\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasCalendarEvent } from './types'\n\nexport class CalendarModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(courseId: number): Promise<CanvasCalendarEvent[]> {\n return this.client.paginate<CanvasCalendarEvent>('/api/v1/calendar_events', {\n 'context_codes[]': `course_${courseId}`,\n })\n }\n\n async createEvent(params: {\n context_code: string\n title: string\n start_at: string\n end_at?: string\n description?: string\n location_name?: string\n }): Promise<CanvasCalendarEvent> {\n return this.client.request<CanvasCalendarEvent>('/api/v1/calendar_events', {\n method: 'POST',\n body: JSON.stringify({ calendar_event: params }),\n })\n }\n\n async updateEvent(\n eventId: number,\n params: {\n title?: string\n start_at?: string\n end_at?: string\n description?: string\n location_name?: string\n },\n ): Promise<CanvasCalendarEvent> {\n return this.client.request<CanvasCalendarEvent>(`/api/v1/calendar_events/${eventId}`, {\n method: 'PUT',\n body: JSON.stringify({ calendar_event: params }),\n })\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type {\n CanvasConversation,\n CanvasConversationDetail,\n CanvasConversationUnreadCount,\n} from './types'\n\nexport class ConversationsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async list(): Promise<CanvasConversation[]> {\n return this.client.paginate<CanvasConversation>('/api/v1/conversations')\n }\n\n async get(conversationId: number): Promise<CanvasConversationDetail> {\n return this.client.request<CanvasConversationDetail>(`/api/v1/conversations/${conversationId}`)\n }\n\n async getUnreadCount(): Promise<CanvasConversationUnreadCount> {\n const raw = await this.client.request<{ unread_count: string }>(\n '/api/v1/conversations/unread_count',\n )\n const count = parseInt(raw.unread_count, 10)\n if (Number.isNaN(count)) {\n throw new Error(\n `Canvas returned unexpected unread_count value: ${JSON.stringify(raw.unread_count)}`,\n )\n }\n return { unread_count: count }\n }\n\n async send(recipients: string[], subject: string, body: string): Promise<CanvasConversation[]> {\n return this.client.request<CanvasConversation[]>('/api/v1/conversations', {\n method: 'POST',\n body: JSON.stringify({\n recipients,\n subject,\n body,\n }),\n })\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasPeerReview } from './types'\n\nexport class PeerReviewsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async listForAssignment(courseId: number, assignmentId: number): Promise<CanvasPeerReview[]> {\n return this.client.paginate<CanvasPeerReview>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/peer_reviews`,\n )\n }\n\n async listForSubmission(\n courseId: number,\n assignmentId: number,\n submissionId: number,\n ): Promise<CanvasPeerReview[]> {\n return this.client.paginate<CanvasPeerReview>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions/${submissionId}/peer_reviews`,\n )\n }\n\n async create(\n courseId: number,\n assignmentId: number,\n submissionId: number,\n userId: number,\n ): Promise<CanvasPeerReview> {\n return this.client.request<CanvasPeerReview>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions/${submissionId}/peer_reviews`,\n {\n method: 'POST',\n body: JSON.stringify({ user_id: userId }),\n },\n )\n }\n\n async delete(\n courseId: number,\n assignmentId: number,\n submissionId: number,\n userId: number,\n ): Promise<void> {\n await this.client.request<void>(\n `/api/v1/courses/${courseId}/assignments/${assignmentId}/submissions/${submissionId}/peer_reviews?user_id=${userId}`,\n { method: 'DELETE' },\n )\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type { CanvasAccount, CanvasAccountReport, CanvasCourse, CanvasUser } from './types'\n\nexport class AccountsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async get(accountId: number): Promise<CanvasAccount> {\n return this.client.request<CanvasAccount>(`/api/v1/accounts/${accountId}`)\n }\n\n async list(): Promise<CanvasAccount[]> {\n return this.client.paginate<CanvasAccount>('/api/v1/accounts')\n }\n\n async listSubAccounts(accountId: number): Promise<CanvasAccount[]> {\n return this.client.paginate<CanvasAccount>(`/api/v1/accounts/${accountId}/sub_accounts`)\n }\n\n async listCourses(accountId: number, params?: { search_term?: string }): Promise<CanvasCourse[]> {\n const query: Record<string, string> = {}\n if (params?.search_term) query.search_term = params.search_term\n return this.client.paginate<CanvasCourse>(\n `/api/v1/accounts/${accountId}/courses`,\n Object.keys(query).length ? query : undefined,\n )\n }\n\n async listUsers(accountId: number, params?: { search_term?: string }): Promise<CanvasUser[]> {\n const query: Record<string, string> = {}\n if (params?.search_term) query.search_term = params.search_term\n return this.client.paginate<CanvasUser>(\n `/api/v1/accounts/${accountId}/users`,\n Object.keys(query).length ? query : undefined,\n )\n }\n\n async getReports(accountId: number): Promise<CanvasAccountReport[]> {\n return this.client.request<CanvasAccountReport[]>(`/api/v1/accounts/${accountId}/reports`)\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type {\n CanvasCourseActivitySummary,\n CanvasStudentActivitySummary,\n CanvasActivityStreamItem,\n CourseSearchResult,\n} from './types'\n\nexport const SEARCH_CONTENT_TYPES = [\n 'pages',\n 'discussions',\n 'assignments',\n 'announcements',\n] as const\nexport type SearchContentType = (typeof SEARCH_CONTENT_TYPES)[number]\n\nexport class AnalyticsModule {\n constructor(private client: CanvasHttpClient) {}\n\n async searchContentType(\n courseId: number,\n searchTerm: string,\n type: SearchContentType,\n ): Promise<CourseSearchResult[]> {\n switch (type) {\n case 'pages': {\n const pages = await this.client.paginate<{ page_id: number; title: string; url: string }>(\n `/api/v1/courses/${courseId}/pages`,\n { search_term: searchTerm },\n )\n return pages.map((p) => ({\n id: p.page_id,\n title: p.title,\n type: 'page' as const,\n url: p.url,\n course_id: courseId,\n }))\n }\n case 'assignments': {\n const assignments = await this.client.paginate<{ id: number; name: string }>(\n `/api/v1/courses/${courseId}/assignments`,\n { search_term: searchTerm },\n )\n return assignments.map((a) => ({\n id: a.id,\n title: a.name,\n type: 'assignment' as const,\n course_id: courseId,\n }))\n }\n case 'discussions': {\n const discussions = await this.client.paginate<{ id: number; title: string }>(\n `/api/v1/courses/${courseId}/discussion_topics`,\n { search_term: searchTerm },\n )\n return discussions.map((d) => ({\n id: d.id,\n title: d.title,\n type: 'discussion' as const,\n course_id: courseId,\n }))\n }\n case 'announcements': {\n const announcements = await this.client.paginate<{ id: number; title: string }>(\n `/api/v1/courses/${courseId}/discussion_topics`,\n { search_term: searchTerm, only_announcements: 'true' },\n )\n return announcements.map((a) => ({\n id: a.id,\n title: a.title,\n type: 'announcement' as const,\n course_id: courseId,\n }))\n }\n default: {\n const _exhaustive: never = type\n throw new Error(`Unknown content type: ${_exhaustive}`)\n }\n }\n }\n\n async getCourseActivity(courseId: number): Promise<CanvasCourseActivitySummary[]> {\n return this.client.request<CanvasCourseActivitySummary[]>(\n `/api/v1/courses/${courseId}/analytics/activity`,\n )\n }\n\n async getStudentActivity(\n courseId: number,\n studentId: number,\n ): Promise<CanvasStudentActivitySummary> {\n return this.client.request<CanvasStudentActivitySummary>(\n `/api/v1/courses/${courseId}/analytics/users/${studentId}/activity`,\n )\n }\n\n async getCourseActivityStream(courseId: number): Promise<CanvasActivityStreamItem[]> {\n return this.client.request<CanvasActivityStreamItem[]>(\n `/api/v1/courses/${courseId}/activity_stream/summary`,\n )\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type {\n CanvasDashboardCard,\n CanvasTodoItem,\n CanvasUpcomingEvent,\n CanvasMissingSubmission,\n} from './types'\n\nexport class DashboardModule {\n constructor(private client: CanvasHttpClient) {}\n\n async getDashboardCards(): Promise<CanvasDashboardCard[]> {\n return this.client.request<CanvasDashboardCard[]>('/api/v1/dashboard/dashboard_cards')\n }\n\n async getTodoItems(): Promise<CanvasTodoItem[]> {\n return this.client.paginate<CanvasTodoItem>('/api/v1/users/self/todo')\n }\n\n async getUpcomingEvents(): Promise<CanvasUpcomingEvent[]> {\n return this.client.request<CanvasUpcomingEvent[]>('/api/v1/users/self/upcoming_events')\n }\n\n async getMissingSubmissions(): Promise<CanvasMissingSubmission[]> {\n return this.client.paginate<CanvasMissingSubmission>('/api/v1/users/self/missing_submissions')\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type {\n CanvasOutcomeContextType,\n CanvasOutcome,\n CanvasOutcomeAlignment,\n CanvasOutcomeContributingScoresResponse,\n CanvasOutcomeGroup,\n CanvasOutcomeLink,\n CanvasOutcomeMasteryDistributionResponse,\n CanvasOutcomeResultsResponse,\n CanvasOutcomeRollupsResponse,\n} from './types'\n\nexport const OUTCOME_CONTEXT_TYPES = ['account', 'course'] as const\nexport const OUTCOME_DETAIL_LEVELS = ['abbrev', 'full'] as const\nexport const OUTCOME_ROLLUP_AGGREGATE_STATS = ['mean', 'median'] as const\nexport const OUTCOME_ROLLUP_SORT_BY = ['student', 'outcome'] as const\nexport const OUTCOME_SORT_ORDER = ['asc', 'desc'] as const\nexport const OUTCOME_EXCLUDE_OPTIONS = ['missing_user_rollups', 'missing_outcome_results'] as const\n\ntype ContextPathSuffix = 'outcome_groups' | 'outcome_group_links' | 'root_outcome_group'\n\nexport class OutcomesModule {\n constructor(private client: CanvasHttpClient) {}\n\n async getRootOutcomeGroup(\n contextType: CanvasOutcomeContextType,\n contextId: number,\n ): Promise<CanvasOutcomeGroup> {\n return this.client.request<CanvasOutcomeGroup>(this.buildContextPath(contextType, contextId))\n }\n\n async listOutcomeGroups(\n contextType: CanvasOutcomeContextType,\n contextId: number,\n ): Promise<CanvasOutcomeGroup[]> {\n return this.client.paginate<CanvasOutcomeGroup>(\n this.buildContextPath(contextType, contextId, 'outcome_groups'),\n )\n }\n\n async listOutcomeGroupLinks(\n contextType: CanvasOutcomeContextType,\n contextId: number,\n options?: { outcome_style?: 'abbrev' | 'full'; outcome_group_style?: 'abbrev' | 'full' },\n ): Promise<CanvasOutcomeLink[]> {\n return this.client.paginate<CanvasOutcomeLink>(\n this.withQuery(this.buildContextPath(contextType, contextId, 'outcome_group_links'), {\n outcome_style: options?.outcome_style,\n outcome_group_style: options?.outcome_group_style,\n }),\n )\n }\n\n async getOutcomeGroup(\n contextType: CanvasOutcomeContextType,\n contextId: number,\n groupId: number,\n ): Promise<CanvasOutcomeGroup> {\n return this.client.request<CanvasOutcomeGroup>(\n `${this.buildContextPath(contextType, contextId, 'outcome_groups')}/${groupId}`,\n )\n }\n\n async listGroupOutcomes(\n contextType: CanvasOutcomeContextType,\n contextId: number,\n groupId: number,\n options?: { outcome_style?: 'abbrev' | 'full' },\n ): Promise<CanvasOutcomeLink[]> {\n return this.client.paginate<CanvasOutcomeLink>(\n this.withQuery(\n `${this.buildContextPath(contextType, contextId, 'outcome_groups')}/${groupId}/outcomes`,\n { outcome_style: options?.outcome_style },\n ),\n )\n }\n\n async listGroupSubgroups(\n contextType: CanvasOutcomeContextType,\n contextId: number,\n groupId: number,\n ): Promise<CanvasOutcomeGroup[]> {\n return this.client.paginate<CanvasOutcomeGroup>(\n `${this.buildContextPath(contextType, contextId, 'outcome_groups')}/${groupId}/subgroups`,\n )\n }\n\n async getOutcome(\n outcomeId: number,\n options?: { add_defaults?: boolean },\n ): Promise<CanvasOutcome> {\n return this.client.request<CanvasOutcome>(\n this.withQuery(`/api/v1/outcomes/${outcomeId}`, {\n add_defaults: options?.add_defaults,\n }),\n )\n }\n\n async getOutcomeAlignments(\n courseId: number,\n options?: { student_id?: number; assignment_id?: number },\n ): Promise<CanvasOutcomeAlignment[]> {\n return this.client.request<CanvasOutcomeAlignment[]>(\n this.withQuery(`/api/v1/courses/${courseId}/outcome_alignments`, {\n student_id: options?.student_id,\n assignment_id: options?.assignment_id,\n }),\n )\n }\n\n async getOutcomeResults(\n courseId: number,\n options?: {\n user_ids?: Array<number | string>\n outcome_ids?: number[]\n include_alignments?: boolean\n include_hidden?: boolean\n },\n ): Promise<CanvasOutcomeResultsResponse> {\n return this.client.request<CanvasOutcomeResultsResponse>(\n this.withQuery(`/api/v1/courses/${courseId}/outcome_results`, {\n 'user_ids[]': options?.user_ids,\n 'outcome_ids[]': options?.outcome_ids,\n 'include[]': options?.include_alignments ? ['alignments'] : undefined,\n include_hidden: options?.include_hidden,\n }),\n )\n }\n\n async getOutcomeRollups(\n courseId: number,\n options?: {\n aggregate?: 'course'\n aggregate_stat?: 'mean' | 'median'\n user_ids?: Array<number | string>\n outcome_ids?: number[]\n include_courses?: boolean\n exclude?: Array<'missing_user_rollups' | 'missing_outcome_results'>\n sort_by?: 'student' | 'outcome'\n sort_outcome_id?: number\n sort_order?: 'asc' | 'desc'\n add_defaults?: boolean\n },\n ): Promise<CanvasOutcomeRollupsResponse> {\n return this.client.request<CanvasOutcomeRollupsResponse>(\n this.withQuery(`/api/v1/courses/${courseId}/outcome_rollups`, {\n aggregate: options?.aggregate,\n aggregate_stat: options?.aggregate_stat,\n 'user_ids[]': options?.user_ids,\n 'outcome_ids[]': options?.outcome_ids,\n 'include[]': options?.include_courses ? ['courses'] : undefined,\n 'exclude[]': options?.exclude,\n sort_by: options?.sort_by,\n sort_outcome_id: options?.sort_outcome_id,\n sort_order: options?.sort_order,\n add_defaults: options?.add_defaults,\n }),\n )\n }\n\n async getOutcomeContributingScores(\n courseId: number,\n outcomeId: number,\n options?: {\n user_ids?: Array<number | string>\n only_assignment_alignments?: boolean\n show_unpublished_assignments?: boolean\n },\n ): Promise<CanvasOutcomeContributingScoresResponse> {\n return this.client.request<CanvasOutcomeContributingScoresResponse>(\n this.withQuery(`/api/v1/courses/${courseId}/outcomes/${outcomeId}/contributing_scores`, {\n 'user_ids[]': options?.user_ids,\n only_assignment_alignments: options?.only_assignment_alignments,\n show_unpublished_assignments: options?.show_unpublished_assignments,\n }),\n )\n }\n\n async getOutcomeMasteryDistribution(\n courseId: number,\n options?: {\n exclude?: Array<'missing_user_rollups' | 'missing_outcome_results'>\n outcome_ids?: number[]\n student_ids?: Array<number | string>\n include_alignment_distributions?: boolean\n only_assignment_alignments?: boolean\n show_unpublished_assignments?: boolean\n add_defaults?: boolean\n },\n ): Promise<CanvasOutcomeMasteryDistributionResponse> {\n return this.client.request<CanvasOutcomeMasteryDistributionResponse>(\n this.withQuery(`/api/v1/courses/${courseId}/outcome_mastery_distribution`, {\n 'exclude[]': options?.exclude,\n 'outcome_ids[]': options?.outcome_ids,\n 'student_ids[]': options?.student_ids,\n 'include[]': options?.include_alignment_distributions\n ? ['alignment_distributions']\n : undefined,\n only_assignment_alignments: options?.only_assignment_alignments,\n show_unpublished_assignments: options?.show_unpublished_assignments,\n add_defaults: options?.add_defaults,\n }),\n )\n }\n\n private buildContextPath(\n contextType: CanvasOutcomeContextType,\n contextId: number,\n suffix: ContextPathSuffix = 'root_outcome_group',\n ): string {\n const segment = contextType === 'account' ? 'accounts' : 'courses'\n return `/api/v1/${segment}/${contextId}/${suffix}`\n }\n\n private withQuery(\n endpoint: string,\n params: Record<string, string | number | boolean | Array<string | number> | undefined>,\n ): string {\n const searchParams = new URLSearchParams()\n\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue\n if (Array.isArray(value)) {\n for (const item of value) searchParams.append(key, String(item))\n continue\n }\n searchParams.set(key, String(value))\n }\n\n const query = searchParams.toString()\n return query ? `${endpoint}?${query}` : endpoint\n }\n}\n","import type { CanvasHttpClient } from './client'\nimport type {\n CanvasGradebookHistoryDay,\n CanvasGradebookHistoryGrader,\n CanvasGradebookHistorySubmission,\n CanvasGradebookHistorySubmissionVersion,\n} from './types'\n\nexport interface GradebookHistoryFeedParams {\n assignment_id?: number\n user_id?: number\n ascending?: boolean\n}\n\nexport class GradebookHistoryModule {\n constructor(private client: CanvasHttpClient) {}\n\n async listDays(courseId: number): Promise<CanvasGradebookHistoryDay[]> {\n return this.client.request<CanvasGradebookHistoryDay[]>(\n `/api/v1/courses/${courseId}/gradebook_history/days`,\n )\n }\n\n async getDay(courseId: number, date: string): Promise<CanvasGradebookHistoryGrader[]> {\n return this.client.request<CanvasGradebookHistoryGrader[]>(\n `/api/v1/courses/${courseId}/gradebook_history/${encodeURIComponent(date)}`,\n )\n }\n\n async listSubmissions(\n courseId: number,\n date: string,\n graderId: number,\n assignmentId: number,\n ): Promise<CanvasGradebookHistorySubmission[]> {\n return this.client.request<CanvasGradebookHistorySubmission[]>(\n `/api/v1/courses/${courseId}/gradebook_history/${encodeURIComponent(date)}/graders/${graderId}/assignments/${assignmentId}/submissions`,\n )\n }\n\n async getFeed(\n courseId: number,\n params: GradebookHistoryFeedParams = {},\n ): Promise<CanvasGradebookHistorySubmissionVersion[]> {\n const searchParams = new URLSearchParams()\n\n if (params.assignment_id !== undefined) {\n searchParams.set('assignment_id', String(params.assignment_id))\n }\n if (params.user_id !== undefined) {\n searchParams.set('user_id', String(params.user_id))\n }\n if (params.ascending !== undefined) {\n searchParams.set('ascending', String(params.ascending))\n }\n\n const query = searchParams.toString()\n\n return this.client.paginate<CanvasGradebookHistorySubmissionVersion>(\n `/api/v1/courses/${courseId}/gradebook_history/feed${query ? `?${query}` : ''}`,\n )\n }\n}\n","import { CanvasHttpClient } from './client'\nimport type { CanvasClientConfig, GeneratedClientDomain } from './types'\nimport { CoursesModule } from './courses'\nimport { AssignmentsModule } from './assignments'\nimport { SubmissionsModule } from './submissions'\nimport { RubricsModule } from './rubrics'\nimport { QuizzesModule } from './quizzes'\nimport { FilesModule } from './files'\nimport { UsersModule, type UsersModuleApi } from './users'\nimport { GeneratedUsersModule } from './generated/users-client'\nimport { GroupsModule } from './groups'\nimport { EnrollmentsModule } from './enrollments'\nimport { DiscussionsModule } from './discussions'\nimport { ModulesModule } from './modules'\nimport { PagesModule } from './pages'\nimport { CalendarModule } from './calendar'\nimport { ConversationsModule } from './conversations'\nimport { PeerReviewsModule } from './peer-reviews'\nimport { AccountsModule } from './accounts'\nimport { AnalyticsModule } from './analytics'\nimport { DashboardModule } from './dashboard'\nimport { OutcomesModule } from './outcomes'\nimport { GradebookHistoryModule } from './gradebook-history'\n\nexport class CanvasClient {\n private client: CanvasHttpClient\n courses: CoursesModule\n assignments: AssignmentsModule\n submissions: SubmissionsModule\n rubrics: RubricsModule\n quizzes: QuizzesModule\n files: FilesModule\n users: UsersModuleApi\n groups: GroupsModule\n enrollments: EnrollmentsModule\n discussions: DiscussionsModule\n modules: ModulesModule\n pages: PagesModule\n calendar: CalendarModule\n conversations: ConversationsModule\n peerReviews: PeerReviewsModule\n accounts: AccountsModule\n analytics: AnalyticsModule\n dashboard: DashboardModule\n outcomes: OutcomesModule\n gradebookHistory: GradebookHistoryModule\n\n constructor(config: CanvasClientConfig) {\n this.client = new CanvasHttpClient(config)\n this.courses = new CoursesModule(this.client)\n this.assignments = new AssignmentsModule(this.client)\n this.submissions = new SubmissionsModule(this.client)\n this.rubrics = new RubricsModule(this.client)\n this.quizzes = new QuizzesModule(this.client)\n this.files = new FilesModule(this.client)\n this.users = isGeneratedEnabled(config.useGeneratedClient, 'users')\n ? new GeneratedUsersModule(config)\n : new UsersModule(this.client)\n this.groups = new GroupsModule(this.client)\n this.enrollments = new EnrollmentsModule(this.client)\n this.discussions = new DiscussionsModule(this.client)\n this.modules = new ModulesModule(this.client)\n this.pages = new PagesModule(this.client)\n this.calendar = new CalendarModule(this.client)\n this.conversations = new ConversationsModule(this.client)\n this.peerReviews = new PeerReviewsModule(this.client)\n this.accounts = new AccountsModule(this.client)\n this.analytics = new AnalyticsModule(this.client)\n this.dashboard = new DashboardModule(this.client)\n this.outcomes = new OutcomesModule(this.client)\n this.gradebookHistory = new GradebookHistoryModule(this.client)\n }\n}\n\nfunction isGeneratedEnabled(\n flag: CanvasClientConfig['useGeneratedClient'],\n domain: GeneratedClientDomain,\n): boolean {\n if (flag === true) return true\n if (Array.isArray(flag)) return (flag as readonly GeneratedClientDomain[]).includes(domain)\n return false\n}\n\nexport { GeneratedUsersModule } from './generated/users-client'\nexport { CanvasHttpClient, CanvasApiError } from './client'\nexport type { CanvasRequestOptions } from './client'\nexport { appendCanvasQuery, toCanvasQuery } from './query'\nexport type { CanvasQueryParams, CanvasQueryPrimitive, CanvasQueryValue } from './query'\nexport type * from './types'\n"],"mappings":"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","names":["body","DEFAULT_LIST_INCLUDE","DEFAULT_GET_INCLUDE","DEFAULT_MAX_PAGINATION_PAGES","USER_AGENT"]}
@@ -9,7 +9,7 @@ import {
9
9
  OUTCOME_SORT_ORDER,
10
10
  SEARCH_CONTENT_TYPES,
11
11
  version
12
- } from "./chunk-A6YFE3W7.js";
12
+ } from "./chunk-DS6QDF2G.js";
13
13
 
14
14
  // src/server.ts
15
15
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
@@ -1168,6 +1168,23 @@ function fileTools(canvas) {
1168
1168
  const file_id = params.file_id;
1169
1169
  return canvas.files.delete(file_id);
1170
1170
  }
1171
+ },
1172
+ {
1173
+ name: "download_file",
1174
+ description: "Download the content of a Canvas file by ID. Text files (plain text, HTML, JSON, XML, JavaScript) are returned as readable text. Binary files (images, PDFs, etc.) are returned as base64-encoded data. Files larger than 10 MB are refused.",
1175
+ inputSchema: {
1176
+ file_id: z9.number().describe("The Canvas file ID"),
1177
+ course_id: z9.number().optional().describe("Optional Canvas course ID to scope the file lookup")
1178
+ },
1179
+ annotations: {
1180
+ readOnlyHint: true,
1181
+ openWorldHint: true
1182
+ },
1183
+ handler: async (params) => {
1184
+ const file_id = params.file_id;
1185
+ const course_id = params.course_id;
1186
+ return canvas.files.download(file_id, course_id);
1187
+ }
1171
1188
  }
1172
1189
  ];
1173
1190
  }
@@ -2670,4 +2687,4 @@ function createCanvasMCPServer(config) {
2670
2687
  export {
2671
2688
  createCanvasMCPServer
2672
2689
  };
2673
- //# sourceMappingURL=chunk-CIRHFOJ5.js.map
2690
+ //# sourceMappingURL=chunk-FB2X3VRR.js.map