brightspace-mcp-server 1.2.6 → 1.5.1
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 +44 -13
- package/build/api/cache.d.ts +1 -1
- package/build/api/cache.js +1 -1
- package/build/api/client.d.ts +1 -1
- package/build/api/client.d.ts.map +1 -1
- package/build/api/client.js +25 -3
- package/build/api/client.js.map +1 -1
- package/build/api/errors.d.ts +2 -2
- package/build/api/errors.js +2 -2
- package/build/api/index.d.ts +1 -1
- package/build/api/index.js +1 -1
- package/build/api/rate-limiter.d.ts +2 -2
- package/build/api/rate-limiter.js +2 -2
- package/build/api/types.d.ts +1 -1
- package/build/api/types.js +1 -1
- package/build/api/version-discovery.d.ts +2 -2
- package/build/api/version-discovery.js +2 -2
- package/build/auth/auth-runner.d.ts +2 -2
- package/build/auth/auth-runner.d.ts.map +1 -1
- package/build/auth/auth-runner.js +61 -12
- package/build/auth/auth-runner.js.map +1 -1
- package/build/auth/browser-auth.d.ts +35 -1
- package/build/auth/browser-auth.d.ts.map +1 -1
- package/build/auth/browser-auth.js +219 -28
- package/build/auth/browser-auth.js.map +1 -1
- package/build/auth/index.d.ts +5 -2
- package/build/auth/index.d.ts.map +1 -1
- package/build/auth/index.js +4 -2
- package/build/auth/index.js.map +1 -1
- package/build/auth/purdue-sso.d.ts +30 -1
- package/build/auth/purdue-sso.d.ts.map +1 -1
- package/build/auth/purdue-sso.js +144 -17
- package/build/auth/purdue-sso.js.map +1 -1
- package/build/auth/session-store.d.ts +1 -1
- package/build/auth/session-store.js +1 -1
- package/build/auth/sso-flow.d.ts +24 -0
- package/build/auth/sso-flow.d.ts.map +1 -0
- package/build/auth/sso-flow.js +21 -0
- package/build/auth/sso-flow.js.map +1 -0
- package/build/auth/suny-sso.d.ts +49 -0
- package/build/auth/suny-sso.d.ts.map +1 -0
- package/build/auth/suny-sso.js +146 -0
- package/build/auth/suny-sso.js.map +1 -0
- package/build/auth/token-manager.d.ts +29 -2
- package/build/auth/token-manager.d.ts.map +1 -1
- package/build/auth/token-manager.js +83 -4
- package/build/auth/token-manager.js.map +1 -1
- package/build/auth/token-mint.d.ts +32 -0
- package/build/auth/token-mint.d.ts.map +1 -0
- package/build/auth/token-mint.js +71 -0
- package/build/auth/token-mint.js.map +1 -0
- package/build/auth-cli.d.ts +1 -1
- package/build/auth-cli.js +9 -4
- package/build/auth-cli.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js +6 -2
- package/build/index.js.map +1 -1
- package/build/setup.d.ts +2 -2
- package/build/setup.js +31 -5
- package/build/setup.js.map +1 -1
- package/build/tools/download-file.d.ts +6 -2
- package/build/tools/download-file.d.ts.map +1 -1
- package/build/tools/download-file.js +27 -7
- package/build/tools/download-file.js.map +1 -1
- package/build/tools/get-announcements.d.ts +65 -2
- package/build/tools/get-announcements.d.ts.map +1 -1
- package/build/tools/get-announcements.js +69 -25
- package/build/tools/get-announcements.js.map +1 -1
- package/build/tools/get-assignments.d.ts +8 -2
- package/build/tools/get-assignments.d.ts.map +1 -1
- package/build/tools/get-assignments.js +76 -17
- package/build/tools/get-assignments.js.map +1 -1
- package/build/tools/get-classlist-emails.d.ts +2 -2
- package/build/tools/get-classlist-emails.js +2 -2
- package/build/tools/get-course-content.d.ts +2 -2
- package/build/tools/get-course-content.js +2 -2
- package/build/tools/get-discussions.d.ts +1 -1
- package/build/tools/get-discussions.js +1 -1
- package/build/tools/get-my-courses.d.ts +2 -2
- package/build/tools/get-my-courses.d.ts.map +1 -1
- package/build/tools/get-my-courses.js +10 -4
- package/build/tools/get-my-courses.js.map +1 -1
- package/build/tools/get-my-grades.d.ts +1 -1
- package/build/tools/get-my-grades.js +1 -1
- package/build/tools/get-roster.d.ts +2 -2
- package/build/tools/get-roster.js +2 -2
- package/build/tools/get-syllabus.d.ts +1 -1
- package/build/tools/get-syllabus.js +1 -1
- package/build/tools/get-upcoming-due-dates.d.ts +2 -2
- package/build/tools/get-upcoming-due-dates.d.ts.map +1 -1
- package/build/tools/get-upcoming-due-dates.js +121 -45
- package/build/tools/get-upcoming-due-dates.js.map +1 -1
- package/build/tools/index.d.ts +2 -2
- package/build/tools/index.js +2 -2
- package/build/tools/schemas.d.ts +3 -3
- package/build/tools/schemas.d.ts.map +1 -1
- package/build/tools/schemas.js +11 -5
- package/build/tools/schemas.js.map +1 -1
- package/build/tools/tool-helpers.d.ts +1 -1
- package/build/tools/tool-helpers.js +1 -1
- package/build/types/index.d.ts +12 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/index.js +2 -2
- package/build/update.d.ts +1 -1
- package/build/update.js +1 -1
- package/build/utils/config-store.d.ts +3 -2
- package/build/utils/config-store.d.ts.map +1 -1
- package/build/utils/config-store.js +2 -2
- package/build/utils/config-store.js.map +1 -1
- package/build/utils/config.d.ts +2 -2
- package/build/utils/config.d.ts.map +1 -1
- package/build/utils/config.js +3 -2
- package/build/utils/config.js.map +1 -1
- package/build/utils/course-filter.d.ts +2 -2
- package/build/utils/course-filter.js +2 -2
- package/build/utils/deep-links.d.ts +15 -0
- package/build/utils/deep-links.d.ts.map +1 -0
- package/build/utils/deep-links.js +31 -0
- package/build/utils/deep-links.js.map +1 -0
- package/build/utils/download-helpers.d.ts +2 -2
- package/build/utils/download-helpers.js +2 -2
- package/build/utils/errors.d.ts +2 -2
- package/build/utils/errors.js +2 -2
- package/build/utils/file-validator.d.ts +2 -2
- package/build/utils/file-validator.d.ts.map +1 -1
- package/build/utils/file-validator.js +21 -11
- package/build/utils/file-validator.js.map +1 -1
- package/build/utils/html-converter.d.ts +2 -2
- package/build/utils/html-converter.js +2 -2
- package/build/utils/logger.d.ts +2 -2
- package/build/utils/logger.js +2 -2
- package/build/utils/pdf-extractor.d.ts +2 -2
- package/build/utils/pdf-extractor.js +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
3
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
-
* Licensed under
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
7
|
import { D2LApiClient } from "../api/index.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
3
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
-
* Licensed under
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { DEFAULT_CACHE_TTLS } from "../api/index.js";
|
|
7
7
|
import { GetMyGradesSchema, } from "./schemas.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
7
|
import { D2LApiClient } from "../api/index.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { DEFAULT_CACHE_TTLS } from "../api/index.js";
|
|
7
7
|
import { GetRosterSchema, } from "./schemas.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
3
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
-
* Licensed under
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
7
|
import { D2LApiClient } from "../api/index.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
3
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
-
* Licensed under
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { ApiError, DEFAULT_CACHE_TTLS } from "../api/index.js";
|
|
7
7
|
import { GetSyllabusSchema } from "./schemas.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
7
|
import { D2LApiClient } from "../api/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-upcoming-due-dates.d.ts","sourceRoot":"","sources":["../../src/tools/get-upcoming-due-dates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-upcoming-due-dates.d.ts","sourceRoot":"","sources":["../../src/tools/get-upcoming-due-dates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA6KnD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,GAChB,IAAI,CAsDN"}
|
|
@@ -1,20 +1,118 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { DEFAULT_CACHE_TTLS } from "../api/index.js";
|
|
7
7
|
import { GetUpcomingDueDatesSchema, } from "./schemas.js";
|
|
8
8
|
import { toolResponse, sanitizeError } from "./tool-helpers.js";
|
|
9
9
|
import { log } from "../utils/logger.js";
|
|
10
10
|
import { applyCourseFilter } from "../utils/course-filter.js";
|
|
11
|
+
import { assignmentUrl, quizUrl } from "../utils/deep-links.js";
|
|
12
|
+
/** D2L list endpoints return either a paged { Objects: [...] } or a flat array. */
|
|
13
|
+
function unwrapList(raw) {
|
|
14
|
+
return Array.isArray(raw) ? raw : (raw?.Objects ?? []);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Resolve which courses to query, and their names.
|
|
18
|
+
*
|
|
19
|
+
* A tool-level courseId bypasses the configured course filter, but enrollments
|
|
20
|
+
* are still fetched so the course can be named.
|
|
21
|
+
*/
|
|
22
|
+
async function resolveCourses(apiClient, config, courseId) {
|
|
23
|
+
let items = [];
|
|
24
|
+
try {
|
|
25
|
+
const response = await apiClient.get(apiClient.lp("/enrollments/myenrollments/?orgUnitTypeId=3&isActive=true"), { ttl: DEFAULT_CACHE_TTLS.enrollments });
|
|
26
|
+
items = response.Items ?? [];
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
// Without enrollments there is no course list to walk, so only the explicit
|
|
30
|
+
// single-course case can continue (with an unnamed course).
|
|
31
|
+
if (!courseId)
|
|
32
|
+
throw error;
|
|
33
|
+
log("DEBUG", "get_upcoming_due_dates: could not fetch enrollments for course name", error);
|
|
34
|
+
}
|
|
35
|
+
if (courseId) {
|
|
36
|
+
const match = items.find((item) => item.OrgUnit.Id === courseId);
|
|
37
|
+
return [{ id: courseId, name: match?.OrgUnit.Name ?? null }];
|
|
38
|
+
}
|
|
39
|
+
const filtered = applyCourseFilter(items.map((item) => ({
|
|
40
|
+
id: item.OrgUnit.Id,
|
|
41
|
+
name: item.OrgUnit.Name,
|
|
42
|
+
code: item.OrgUnit.Code,
|
|
43
|
+
isActive: item.Access.IsActive,
|
|
44
|
+
})), config.courseFilter);
|
|
45
|
+
return filtered.map((course) => ({ id: course.id, name: course.name }));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Collect every dated assignment and quiz for one course.
|
|
49
|
+
*
|
|
50
|
+
* Two API calls per course, no submissions or attempts: the due date lives on
|
|
51
|
+
* the item itself, which is what makes this cheap enough to run across all
|
|
52
|
+
* enrolled courses.
|
|
53
|
+
*/
|
|
54
|
+
async function fetchCourseDueItems(apiClient, baseUrl, course) {
|
|
55
|
+
const [dropboxResult, quizResult] = await Promise.allSettled([
|
|
56
|
+
apiClient.get(apiClient.le(course.id, "/dropbox/folders/"), { ttl: DEFAULT_CACHE_TTLS.assignments }),
|
|
57
|
+
apiClient.get(apiClient.le(course.id, "/quizzes/"), { ttl: DEFAULT_CACHE_TTLS.assignments }),
|
|
58
|
+
]);
|
|
59
|
+
const items = [];
|
|
60
|
+
if (dropboxResult.status === "fulfilled") {
|
|
61
|
+
for (const folder of unwrapList(dropboxResult.value)) {
|
|
62
|
+
if (folder.IsHidden === true)
|
|
63
|
+
continue;
|
|
64
|
+
if (!folder.DueDate)
|
|
65
|
+
continue;
|
|
66
|
+
items.push({
|
|
67
|
+
type: "assignment",
|
|
68
|
+
id: folder.Id,
|
|
69
|
+
title: folder.Name,
|
|
70
|
+
courseId: course.id,
|
|
71
|
+
courseName: course.name,
|
|
72
|
+
dueDate: folder.DueDate,
|
|
73
|
+
startDate: null,
|
|
74
|
+
endDate: null,
|
|
75
|
+
url: assignmentUrl(baseUrl, course.id, folder.Id),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// 403 for past courses and similar: log and keep the other courses.
|
|
81
|
+
log("DEBUG", `get_upcoming_due_dates: failed to fetch dropbox folders for course ${course.id}`, dropboxResult.reason);
|
|
82
|
+
}
|
|
83
|
+
if (quizResult.status === "fulfilled") {
|
|
84
|
+
for (const quiz of unwrapList(quizResult.value)) {
|
|
85
|
+
if (quiz.IsActive === false)
|
|
86
|
+
continue;
|
|
87
|
+
// Many instructors set only an End Date, which is the effective deadline.
|
|
88
|
+
const dueDate = quiz.DueDate ?? quiz.EndDate;
|
|
89
|
+
if (!dueDate)
|
|
90
|
+
continue;
|
|
91
|
+
items.push({
|
|
92
|
+
type: "quiz",
|
|
93
|
+
id: quiz.QuizId,
|
|
94
|
+
title: quiz.Name,
|
|
95
|
+
courseId: course.id,
|
|
96
|
+
courseName: course.name,
|
|
97
|
+
dueDate,
|
|
98
|
+
startDate: quiz.StartDate ?? null,
|
|
99
|
+
endDate: quiz.EndDate ?? null,
|
|
100
|
+
url: quizUrl(baseUrl, course.id, quiz.QuizId),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
log("DEBUG", `get_upcoming_due_dates: failed to fetch quizzes for course ${course.id}`, quizResult.reason);
|
|
106
|
+
}
|
|
107
|
+
return items;
|
|
108
|
+
}
|
|
11
109
|
/**
|
|
12
110
|
* Register get_upcoming_due_dates tool
|
|
13
111
|
*/
|
|
14
112
|
export function registerGetUpcomingDueDates(server, apiClient, config) {
|
|
15
113
|
server.registerTool("get_upcoming_due_dates", {
|
|
16
114
|
title: "Get Upcoming Due Dates",
|
|
17
|
-
description: "Fetch upcoming due dates across all your courses
|
|
115
|
+
description: "Fetch upcoming due dates across all your courses, derived from the due dates on assignments (dropbox folders) and quizzes themselves. Use this when the user asks about deadlines, what's due, upcoming work, or what they need to do this week.",
|
|
18
116
|
inputSchema: GetUpcomingDueDatesSchema,
|
|
19
117
|
}, async (args) => {
|
|
20
118
|
try {
|
|
@@ -22,49 +120,27 @@ export function registerGetUpcomingDueDates(server, apiClient, config) {
|
|
|
22
120
|
// Parse and validate input
|
|
23
121
|
const { daysAhead, courseId } = GetUpcomingDueDatesSchema.parse(args);
|
|
24
122
|
// Build time window
|
|
25
|
-
const now =
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// Apply course filter
|
|
37
|
-
const filteredEnrollments = applyCourseFilter(enrollments.Items.map(item => ({
|
|
38
|
-
id: item.OrgUnit.Id,
|
|
39
|
-
name: item.OrgUnit.Name,
|
|
40
|
-
code: item.OrgUnit.Code,
|
|
41
|
-
isActive: item.Access.IsActive,
|
|
42
|
-
})), config.courseFilter);
|
|
43
|
-
orgUnitIds = filteredEnrollments.map((e) => e.id).join(",");
|
|
44
|
-
}
|
|
45
|
-
log("DEBUG", `get_upcoming_due_dates: querying orgUnitIds=${orgUnitIds}, window=${startDateTime} to ${endDateTime}`);
|
|
46
|
-
// Build path
|
|
47
|
-
const path = apiClient.leGlobal(`/calendar/events/myEvents/?startDateTime=${encodeURIComponent(startDateTime)}&endDateTime=${encodeURIComponent(endDateTime)}&orgUnitIdsCSV=${orgUnitIds}`);
|
|
48
|
-
// Fetch events — D2L returns ObjectListPage wrapper with "Objects" array (NOT "Items")
|
|
49
|
-
const response = await apiClient.get(path, {
|
|
50
|
-
ttl: DEFAULT_CACHE_TTLS.assignments,
|
|
123
|
+
const now = Date.now();
|
|
124
|
+
const windowEnd = now + daysAhead * 24 * 60 * 60 * 1000;
|
|
125
|
+
const courses = await resolveCourses(apiClient, config, courseId);
|
|
126
|
+
log("DEBUG", `get_upcoming_due_dates: querying ${courses.length} course(s), window=${daysAhead} days`);
|
|
127
|
+
// Fetch every course in parallel; the API client rate limits itself
|
|
128
|
+
const results = await Promise.allSettled(courses.map((course) => fetchCourseDueItems(apiClient, config.baseUrl, course)));
|
|
129
|
+
const items = results.flatMap((result) => {
|
|
130
|
+
if (result.status === "fulfilled")
|
|
131
|
+
return result.value;
|
|
132
|
+
log("DEBUG", "get_upcoming_due_dates: skipping course after fetch failure", result.reason);
|
|
133
|
+
return [];
|
|
51
134
|
});
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
startDate: event.StartDateTime,
|
|
62
|
-
endDate: event.EndDateTime,
|
|
63
|
-
isAllDay: event.IsAllDayEvent,
|
|
64
|
-
}))
|
|
65
|
-
.sort((a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime());
|
|
66
|
-
log("INFO", `get_upcoming_due_dates: Retrieved ${mappedEvents.length} events`);
|
|
67
|
-
return toolResponse(mappedEvents);
|
|
135
|
+
// Keep what falls inside the window, soonest first
|
|
136
|
+
const upcoming = items
|
|
137
|
+
.filter((item) => {
|
|
138
|
+
const due = new Date(item.dueDate).getTime();
|
|
139
|
+
return Number.isFinite(due) && due >= now && due <= windowEnd;
|
|
140
|
+
})
|
|
141
|
+
.sort((a, b) => new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime());
|
|
142
|
+
log("INFO", `get_upcoming_due_dates: Retrieved ${upcoming.length} items across ${courses.length} courses`);
|
|
143
|
+
return toolResponse(upcoming);
|
|
68
144
|
}
|
|
69
145
|
catch (error) {
|
|
70
146
|
return sanitizeError(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-upcoming-due-dates.js","sourceRoot":"","sources":["../../src/tools/get-upcoming-due-dates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-upcoming-due-dates.js","sourceRoot":"","sources":["../../src/tools/get-upcoming-due-dates.ts"],"names":[],"mappings":"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"}
|
package/build/tools/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
export { registerGetMyCourses } from "./get-my-courses.js";
|
|
7
7
|
export { registerGetUpcomingDueDates } from "./get-upcoming-due-dates.js";
|
package/build/tools/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
// Tool registration functions - barrel export
|
|
7
7
|
export { registerGetMyCourses } from "./get-my-courses.js";
|
package/build/tools/schemas.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
/**
|
|
@@ -10,7 +10,7 @@ import { z } from "zod";
|
|
|
10
10
|
* Also used in tool handlers for runtime parsing via .parse(args).
|
|
11
11
|
*/
|
|
12
12
|
export declare const GetMyCoursesSchema: z.ZodObject<{
|
|
13
|
-
activeOnly: z.
|
|
13
|
+
activeOnly: z.ZodOptional<z.ZodBoolean>;
|
|
14
14
|
}, z.core.$strip>;
|
|
15
15
|
export declare const GetUpcomingDueDatesSchema: z.ZodObject<{
|
|
16
16
|
daysAhead: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB;;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB;;iBAU7B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;iBAG/B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;iBASjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;iBAGnC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;iBAa7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;iBAK5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;iBAO1B,CAAC"}
|
package/build/tools/schemas.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
/**
|
|
@@ -10,7 +10,13 @@ import { z } from "zod";
|
|
|
10
10
|
* Also used in tool handlers for runtime parsing via .parse(args).
|
|
11
11
|
*/
|
|
12
12
|
export const GetMyCoursesSchema = z.object({
|
|
13
|
-
|
|
13
|
+
// Intentionally has no default: omitting it falls back to the configured
|
|
14
|
+
// D2L_ACTIVE_ONLY / config.json policy (true unless the user changed it).
|
|
15
|
+
// A default here would silently override that configuration on every call.
|
|
16
|
+
activeOnly: z
|
|
17
|
+
.boolean()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Only return currently active courses. Defaults to the server's configured activeOnly setting (true unless overridden)."),
|
|
14
20
|
});
|
|
15
21
|
export const GetUpcomingDueDatesSchema = z.object({
|
|
16
22
|
daysAhead: z.coerce.number().int().min(1).max(90).default(7).describe("Number of days ahead to look for due dates"),
|
|
@@ -52,7 +58,7 @@ export const DownloadFileSchema = z.object({
|
|
|
52
58
|
.describe("Specific file ID within a dropbox submission."),
|
|
53
59
|
downloadPath: z.string().min(1)
|
|
54
60
|
.describe("Absolute path to the directory where the file should be saved."),
|
|
55
|
-
customFilename: z.string().optional()
|
|
61
|
+
customFilename: z.string().max(255).optional()
|
|
56
62
|
.describe("Custom filename for the downloaded file (include extension). If not provided, uses the original filename from Brightspace."),
|
|
57
63
|
});
|
|
58
64
|
export const GetSyllabusSchema = z.object({
|
|
@@ -74,7 +80,7 @@ export const GetRosterSchema = z.object({
|
|
|
74
80
|
.describe("Course ID to get roster for."),
|
|
75
81
|
includeStudents: z.boolean().default(false)
|
|
76
82
|
.describe("Include students in results. Default is instructors and TAs only."),
|
|
77
|
-
searchTerm: z.string().optional()
|
|
83
|
+
searchTerm: z.string().max(200).optional()
|
|
78
84
|
.describe("Optional search term to filter by name."),
|
|
79
85
|
});
|
|
80
86
|
//# sourceMappingURL=schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
3
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
-
* Licensed under
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
7
7
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
3
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
-
* Licensed under
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { ZodError } from "zod";
|
|
7
7
|
import { ApiError, RateLimitError, NetworkError } from "../api/index.js";
|
package/build/types/index.d.ts
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
export interface TokenData {
|
|
7
7
|
accessToken: string;
|
|
8
8
|
capturedAt: number;
|
|
9
9
|
expiresAt: number;
|
|
10
10
|
source: "browser" | "cache";
|
|
11
|
+
/**
|
|
12
|
+
* "d2lSessionVal=...; d2lSecureSessionVal=...", harvested at login.
|
|
13
|
+
* Present only when both cookies were found. With csrfToken it lets the
|
|
14
|
+
* token manager mint a fresh JWT instead of relaunching the browser.
|
|
15
|
+
*/
|
|
16
|
+
cookieHeader?: string;
|
|
17
|
+
/** D2L XSRF token; the mint answers 403 without it. */
|
|
18
|
+
csrfToken?: string;
|
|
11
19
|
}
|
|
12
20
|
export interface EncryptedData {
|
|
13
21
|
iv: string;
|
|
@@ -27,6 +35,8 @@ export interface AppConfig {
|
|
|
27
35
|
headless: boolean;
|
|
28
36
|
username?: string;
|
|
29
37
|
password?: string;
|
|
38
|
+
/** Campus within a shared multi-campus Brightspace instance. */
|
|
39
|
+
campus?: string;
|
|
30
40
|
courseFilter: CourseFilterConfig;
|
|
31
41
|
}
|
|
32
42
|
export interface AuthResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAGD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAGD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAG3D,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;CACrB"}
|
package/build/types/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/build/update.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
4
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
|
-
* Licensed under
|
|
5
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
|
8
8
|
*/
|
package/build/update.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
4
|
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
|
-
* Licensed under
|
|
5
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
|
8
8
|
*/
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
/** JSON schema for ~/.brightspace-mcp/config.json */
|
|
7
7
|
export interface ConfigStoreData {
|
|
8
8
|
baseUrl?: string;
|
|
9
9
|
username?: string;
|
|
10
10
|
password?: string;
|
|
11
|
+
campus?: string;
|
|
11
12
|
sessionDir?: string;
|
|
12
13
|
tokenTtl?: number;
|
|
13
14
|
headless?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/utils/config-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,eAAe,IAAI,eAAe,CAGjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAQ7D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
1
|
+
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/utils/config-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,eAAe,IAAI,eAAe,CAGjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAQ7D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from "node:fs";
|
|
7
7
|
import * as path from "node:path";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/utils/config-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/utils/config-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAgB9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACpE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
package/build/utils/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import type { AppConfig } from "../types/index.js";
|
|
7
7
|
export declare function loadConfig(): AppConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,wBAAgB,UAAU,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,wBAAgB,UAAU,IAAI,SAAS,CAyDtC;AASD,YAAY,EAAE,SAAS,EAAE,CAAC"}
|
package/build/utils/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import * as path from "node:path";
|
|
7
7
|
import * as os from "node:os";
|
|
@@ -49,6 +49,7 @@ export function loadConfig() {
|
|
|
49
49
|
headless,
|
|
50
50
|
username: process.env.D2L_USERNAME || store?.username,
|
|
51
51
|
password: process.env.D2L_PASSWORD || store?.password,
|
|
52
|
+
campus: process.env.D2L_CAMPUS || store?.campus,
|
|
52
53
|
courseFilter: {
|
|
53
54
|
includeCourseIds,
|
|
54
55
|
excludeCourseIds,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import type { CourseFilterConfig } from "../types/index.js";
|
|
7
7
|
interface FilterableCourse {
|