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.
Files changed (134) hide show
  1. package/README.md +44 -13
  2. package/build/api/cache.d.ts +1 -1
  3. package/build/api/cache.js +1 -1
  4. package/build/api/client.d.ts +1 -1
  5. package/build/api/client.d.ts.map +1 -1
  6. package/build/api/client.js +25 -3
  7. package/build/api/client.js.map +1 -1
  8. package/build/api/errors.d.ts +2 -2
  9. package/build/api/errors.js +2 -2
  10. package/build/api/index.d.ts +1 -1
  11. package/build/api/index.js +1 -1
  12. package/build/api/rate-limiter.d.ts +2 -2
  13. package/build/api/rate-limiter.js +2 -2
  14. package/build/api/types.d.ts +1 -1
  15. package/build/api/types.js +1 -1
  16. package/build/api/version-discovery.d.ts +2 -2
  17. package/build/api/version-discovery.js +2 -2
  18. package/build/auth/auth-runner.d.ts +2 -2
  19. package/build/auth/auth-runner.d.ts.map +1 -1
  20. package/build/auth/auth-runner.js +61 -12
  21. package/build/auth/auth-runner.js.map +1 -1
  22. package/build/auth/browser-auth.d.ts +35 -1
  23. package/build/auth/browser-auth.d.ts.map +1 -1
  24. package/build/auth/browser-auth.js +219 -28
  25. package/build/auth/browser-auth.js.map +1 -1
  26. package/build/auth/index.d.ts +5 -2
  27. package/build/auth/index.d.ts.map +1 -1
  28. package/build/auth/index.js +4 -2
  29. package/build/auth/index.js.map +1 -1
  30. package/build/auth/purdue-sso.d.ts +30 -1
  31. package/build/auth/purdue-sso.d.ts.map +1 -1
  32. package/build/auth/purdue-sso.js +144 -17
  33. package/build/auth/purdue-sso.js.map +1 -1
  34. package/build/auth/session-store.d.ts +1 -1
  35. package/build/auth/session-store.js +1 -1
  36. package/build/auth/sso-flow.d.ts +24 -0
  37. package/build/auth/sso-flow.d.ts.map +1 -0
  38. package/build/auth/sso-flow.js +21 -0
  39. package/build/auth/sso-flow.js.map +1 -0
  40. package/build/auth/suny-sso.d.ts +49 -0
  41. package/build/auth/suny-sso.d.ts.map +1 -0
  42. package/build/auth/suny-sso.js +146 -0
  43. package/build/auth/suny-sso.js.map +1 -0
  44. package/build/auth/token-manager.d.ts +29 -2
  45. package/build/auth/token-manager.d.ts.map +1 -1
  46. package/build/auth/token-manager.js +83 -4
  47. package/build/auth/token-manager.js.map +1 -1
  48. package/build/auth/token-mint.d.ts +32 -0
  49. package/build/auth/token-mint.d.ts.map +1 -0
  50. package/build/auth/token-mint.js +71 -0
  51. package/build/auth/token-mint.js.map +1 -0
  52. package/build/auth-cli.d.ts +1 -1
  53. package/build/auth-cli.js +9 -4
  54. package/build/auth-cli.js.map +1 -1
  55. package/build/index.d.ts +1 -1
  56. package/build/index.js +6 -2
  57. package/build/index.js.map +1 -1
  58. package/build/setup.d.ts +2 -2
  59. package/build/setup.js +31 -5
  60. package/build/setup.js.map +1 -1
  61. package/build/tools/download-file.d.ts +6 -2
  62. package/build/tools/download-file.d.ts.map +1 -1
  63. package/build/tools/download-file.js +27 -7
  64. package/build/tools/download-file.js.map +1 -1
  65. package/build/tools/get-announcements.d.ts +65 -2
  66. package/build/tools/get-announcements.d.ts.map +1 -1
  67. package/build/tools/get-announcements.js +69 -25
  68. package/build/tools/get-announcements.js.map +1 -1
  69. package/build/tools/get-assignments.d.ts +8 -2
  70. package/build/tools/get-assignments.d.ts.map +1 -1
  71. package/build/tools/get-assignments.js +76 -17
  72. package/build/tools/get-assignments.js.map +1 -1
  73. package/build/tools/get-classlist-emails.d.ts +2 -2
  74. package/build/tools/get-classlist-emails.js +2 -2
  75. package/build/tools/get-course-content.d.ts +2 -2
  76. package/build/tools/get-course-content.js +2 -2
  77. package/build/tools/get-discussions.d.ts +1 -1
  78. package/build/tools/get-discussions.js +1 -1
  79. package/build/tools/get-my-courses.d.ts +2 -2
  80. package/build/tools/get-my-courses.d.ts.map +1 -1
  81. package/build/tools/get-my-courses.js +10 -4
  82. package/build/tools/get-my-courses.js.map +1 -1
  83. package/build/tools/get-my-grades.d.ts +1 -1
  84. package/build/tools/get-my-grades.js +1 -1
  85. package/build/tools/get-roster.d.ts +2 -2
  86. package/build/tools/get-roster.js +2 -2
  87. package/build/tools/get-syllabus.d.ts +1 -1
  88. package/build/tools/get-syllabus.js +1 -1
  89. package/build/tools/get-upcoming-due-dates.d.ts +2 -2
  90. package/build/tools/get-upcoming-due-dates.d.ts.map +1 -1
  91. package/build/tools/get-upcoming-due-dates.js +121 -45
  92. package/build/tools/get-upcoming-due-dates.js.map +1 -1
  93. package/build/tools/index.d.ts +2 -2
  94. package/build/tools/index.js +2 -2
  95. package/build/tools/schemas.d.ts +3 -3
  96. package/build/tools/schemas.d.ts.map +1 -1
  97. package/build/tools/schemas.js +11 -5
  98. package/build/tools/schemas.js.map +1 -1
  99. package/build/tools/tool-helpers.d.ts +1 -1
  100. package/build/tools/tool-helpers.js +1 -1
  101. package/build/types/index.d.ts +12 -2
  102. package/build/types/index.d.ts.map +1 -1
  103. package/build/types/index.js +2 -2
  104. package/build/update.d.ts +1 -1
  105. package/build/update.js +1 -1
  106. package/build/utils/config-store.d.ts +3 -2
  107. package/build/utils/config-store.d.ts.map +1 -1
  108. package/build/utils/config-store.js +2 -2
  109. package/build/utils/config-store.js.map +1 -1
  110. package/build/utils/config.d.ts +2 -2
  111. package/build/utils/config.d.ts.map +1 -1
  112. package/build/utils/config.js +3 -2
  113. package/build/utils/config.js.map +1 -1
  114. package/build/utils/course-filter.d.ts +2 -2
  115. package/build/utils/course-filter.js +2 -2
  116. package/build/utils/deep-links.d.ts +15 -0
  117. package/build/utils/deep-links.d.ts.map +1 -0
  118. package/build/utils/deep-links.js +31 -0
  119. package/build/utils/deep-links.js.map +1 -0
  120. package/build/utils/download-helpers.d.ts +2 -2
  121. package/build/utils/download-helpers.js +2 -2
  122. package/build/utils/errors.d.ts +2 -2
  123. package/build/utils/errors.js +2 -2
  124. package/build/utils/file-validator.d.ts +2 -2
  125. package/build/utils/file-validator.d.ts.map +1 -1
  126. package/build/utils/file-validator.js +21 -11
  127. package/build/utils/file-validator.js.map +1 -1
  128. package/build/utils/html-converter.d.ts +2 -2
  129. package/build/utils/html-converter.js +2 -2
  130. package/build/utils/logger.d.ts +2 -2
  131. package/build/utils/logger.js +2 -2
  132. package/build/utils/pdf-extractor.d.ts +2 -2
  133. package/build/utils/pdf-extractor.js +2 -2
  134. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/tools/download-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/tools/download-file.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,76 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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";
8
8
  import type { AppConfig } from "../types/index.js";
9
+ interface NewsItem {
10
+ Id: number;
11
+ Title: string;
12
+ Body: {
13
+ Text: string;
14
+ Html: string;
15
+ } | null;
16
+ CreatedBy: {
17
+ Identifier: string;
18
+ DisplayName: string;
19
+ } | null;
20
+ CreatedDate: string | null;
21
+ LastModifiedBy: {
22
+ Identifier: string;
23
+ DisplayName: string;
24
+ };
25
+ LastModifiedDate: string;
26
+ StartDate: string | null;
27
+ EndDate: string | null;
28
+ IsPublished?: boolean;
29
+ IsPinned: boolean;
30
+ IsGlobal: boolean;
31
+ Attachments: any[];
32
+ }
33
+ /**
34
+ * The date a post was actually scheduled for. StartDate is when the instructor
35
+ * scheduled it, which is the honest date whenever there is one; CreatedDate is
36
+ * the fallback for a post nobody scheduled.
37
+ */
38
+ export declare function effectiveDate(item: NewsItem): string | null;
39
+ /**
40
+ * False only for a draft the instructor has not posted. The test is an explicit
41
+ * false, never a falsy read: an item that omits the field is a shape the tenant
42
+ * has never sent, and treating unknown as unpublished would empty the section
43
+ * the day D2L renames or drops the field.
44
+ */
45
+ export declare function isPublishedNewsItem(item: NewsItem): boolean;
46
+ /**
47
+ * Newest first by the scheduled date, undated last. An undated item sorts to
48
+ * the end rather than to 1970, where a null read as an epoch would put it:
49
+ * ahead of nothing, but behind everything real. Equal dates return 0 and keep
50
+ * the server's own order, which is what makes the slice deterministic when a
51
+ * course posts twice in one minute.
52
+ */
53
+ export declare function newestFirst(a: {
54
+ date: string | null;
55
+ }, b: {
56
+ date: string | null;
57
+ }): number;
58
+ /**
59
+ * Map a raw D2L news item to a clean announcement object.
60
+ */
61
+ export declare function mapNewsItem(item: NewsItem): {
62
+ id: number;
63
+ title: string;
64
+ body: string;
65
+ createdBy: string;
66
+ createdDate: string | null;
67
+ startDate: string | null;
68
+ date: string | null;
69
+ isPinned: boolean;
70
+ };
9
71
  /**
10
72
  * Register get_announcements tool
11
73
  */
12
74
  export declare function registerGetAnnouncements(server: McpServer, apiClient: D2LApiClient, config: AppConfig): void;
75
+ export {};
13
76
  //# sourceMappingURL=get-announcements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-announcements.d.ts","sourceRoot":"","sources":["../../src/tools/get-announcements.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAOnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAuCnD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,GAChB,IAAI,CAkIN"}
1
+ {"version":3,"file":"get-announcements.d.ts","sourceRoot":"","sources":["../../src/tools/get-announcements.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAOnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,SAAS,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,GAAG,EAAE,CAAC;CACpB;AAgCD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE3D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC1B,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACzB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ;;;;;;;;;EAWzC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,GAChB,IAAI,CA+GN"}
@@ -1,13 +1,70 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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 { GetAnnouncementsSchema, } 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
+ /**
12
+ * A date the runtime can actually order, or null. Unreadable and absent are the
13
+ * same answer, so a caller can fall through to the next best.
14
+ */
15
+ function readableDate(raw) {
16
+ if (typeof raw !== "string")
17
+ return null;
18
+ return Number.isNaN(new Date(raw).getTime()) ? null : raw;
19
+ }
20
+ /**
21
+ * The date a post was actually scheduled for. StartDate is when the instructor
22
+ * scheduled it, which is the honest date whenever there is one; CreatedDate is
23
+ * the fallback for a post nobody scheduled.
24
+ */
25
+ export function effectiveDate(item) {
26
+ return readableDate(item.StartDate) ?? readableDate(item.CreatedDate);
27
+ }
28
+ /**
29
+ * False only for a draft the instructor has not posted. The test is an explicit
30
+ * false, never a falsy read: an item that omits the field is a shape the tenant
31
+ * has never sent, and treating unknown as unpublished would empty the section
32
+ * the day D2L renames or drops the field.
33
+ */
34
+ export function isPublishedNewsItem(item) {
35
+ return item.IsPublished !== false;
36
+ }
37
+ /**
38
+ * Newest first by the scheduled date, undated last. An undated item sorts to
39
+ * the end rather than to 1970, where a null read as an epoch would put it:
40
+ * ahead of nothing, but behind everything real. Equal dates return 0 and keep
41
+ * the server's own order, which is what makes the slice deterministic when a
42
+ * course posts twice in one minute.
43
+ */
44
+ export function newestFirst(a, b) {
45
+ if (a.date === b.date)
46
+ return 0;
47
+ if (a.date === null)
48
+ return 1;
49
+ if (b.date === null)
50
+ return -1;
51
+ return new Date(b.date).getTime() - new Date(a.date).getTime();
52
+ }
53
+ /**
54
+ * Map a raw D2L news item to a clean announcement object.
55
+ */
56
+ export function mapNewsItem(item) {
57
+ return {
58
+ id: item.Id,
59
+ title: item.Title,
60
+ body: item.Body?.Text ?? "",
61
+ createdBy: item.CreatedBy?.DisplayName ?? "Unknown",
62
+ createdDate: item.CreatedDate,
63
+ startDate: item.StartDate,
64
+ date: effectiveDate(item),
65
+ isPinned: item.IsPinned,
66
+ };
67
+ }
11
68
  /**
12
69
  * Register get_announcements tool
13
70
  */
@@ -27,19 +84,11 @@ export function registerGetAnnouncements(server, apiClient, config) {
27
84
  const newsItems = await apiClient.get(path, {
28
85
  ttl: DEFAULT_CACHE_TTLS.announcements,
29
86
  });
30
- // Map to clean objects
87
+ // Drop drafts, then map to clean objects
31
88
  const announcements = newsItems
32
- .map((item) => ({
33
- id: item.Id,
34
- title: item.Title,
35
- body: item.Body.Text,
36
- createdBy: item.CreatedBy.DisplayName,
37
- createdDate: item.CreatedDate,
38
- startDate: item.StartDate,
39
- isPinned: item.IsPinned,
40
- }))
41
- .sort((a, b) => new Date(b.createdDate).getTime() -
42
- new Date(a.createdDate).getTime())
89
+ .filter(isPublishedNewsItem)
90
+ .map(mapNewsItem)
91
+ .sort(newestFirst)
43
92
  .slice(0, count);
44
93
  log("INFO", `get_announcements: Retrieved ${announcements.length} announcements for course ${courseId}`);
45
94
  return toolResponse(announcements);
@@ -63,14 +112,10 @@ export function registerGetAnnouncements(server, apiClient, config) {
63
112
  const newsItems = await apiClient.get(path, {
64
113
  ttl: DEFAULT_CACHE_TTLS.announcements,
65
114
  });
66
- return newsItems.map((newsItem) => ({
67
- id: newsItem.Id,
68
- title: newsItem.Title,
69
- body: newsItem.Body.Text,
70
- createdBy: newsItem.CreatedBy.DisplayName,
71
- createdDate: newsItem.CreatedDate,
72
- startDate: newsItem.StartDate,
73
- isPinned: newsItem.IsPinned,
115
+ return newsItems
116
+ .filter(isPublishedNewsItem)
117
+ .map((newsItem) => ({
118
+ ...mapNewsItem(newsItem),
74
119
  courseId: item.OrgUnit.Id,
75
120
  courseName: item.OrgUnit.Name,
76
121
  }));
@@ -88,10 +133,9 @@ export function registerGetAnnouncements(server, apiClient, config) {
88
133
  const allAnnouncements = results
89
134
  .filter((r) => r.status === "fulfilled")
90
135
  .flatMap((r) => r.value);
91
- // Sort by created date and slice to count
136
+ // Sort by the scheduled date and slice to count
92
137
  const announcements = allAnnouncements
93
- .sort((a, b) => new Date(b.createdDate).getTime() -
94
- new Date(a.createdDate).getTime())
138
+ .sort(newestFirst)
95
139
  .slice(0, count);
96
140
  log("INFO", `get_announcements: Retrieved ${announcements.length} announcements (out of ${allAnnouncements.length} total across ${enrollmentResponse.Items.length} courses)`);
97
141
  return toolResponse(announcements);
@@ -1 +1 @@
1
- {"version":3,"file":"get-announcements.js","sourceRoot":"","sources":["../../src/tools/get-announcements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-announcements.js","sourceRoot":"","sources":["../../src/tools/get-announcements.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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";
8
8
  import type { AppConfig } from "../types/index.js";
9
+ /**
10
+ * Fetch assignments (dropbox + quizzes) for a single course
11
+ *
12
+ * baseUrl is optional: without it the items carry a null url.
13
+ */
14
+ export declare function fetchCourseAssignments(apiClient: D2LApiClient, courseId: number, baseUrl?: string): Promise<any[]>;
9
15
  /**
10
16
  * Register get_assignments tool
11
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"get-assignments.d.ts","sourceRoot":"","sources":["../../src/tools/get-assignments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAMnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA4RnD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,GAChB,IAAI,CA2FN"}
1
+ {"version":3,"file":"get-assignments.d.ts","sourceRoot":"","sources":["../../src/tools/get-assignments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAOnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA6GnD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,EAAE,CAAC,CAqMhB;AA8CD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,GAChB,IAAI,CA2FN"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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 { GetAssignmentsSchema } from "./schemas.js";
@@ -9,15 +9,30 @@ import { toolResponse, sanitizeError } from "./tool-helpers.js";
9
9
  import { convertHtmlToMarkdown } from "../utils/html-converter.js";
10
10
  import { log } from "../utils/logger.js";
11
11
  import { applyCourseFilter } from "../utils/course-filter.js";
12
+ import { assignmentUrl, gradebookUrl, quizUrl } from "../utils/deep-links.js";
13
+ /**
14
+ * The grade object types a student is actually scored on: 1 numeric,
15
+ * 2 passfail, 3 selectbox, 4 text. The rest (category, calculated, formula,
16
+ * final) are the gradebook's own arithmetic, not work anybody owes.
17
+ */
18
+ const STUDENT_SCORED = new Set([1, 2, 3, 4]);
12
19
  /**
13
20
  * Fetch assignments (dropbox + quizzes) for a single course
21
+ *
22
+ * baseUrl is optional: without it the items carry a null url.
14
23
  */
15
- async function fetchCourseAssignments(apiClient, courseId) {
24
+ export async function fetchCourseAssignments(apiClient, courseId, baseUrl) {
16
25
  const assignments = [];
17
- // Fetch dropbox folders and quizzes in parallel
18
- const [dropboxResult, quizResult] = await Promise.allSettled([
26
+ // Fetch dropbox folders, quizzes, and the gradebook in parallel. The
27
+ // gradebook is fetched alongside them but read last: a heads-up row is a
28
+ // column that nothing the other two returned matched, so the comparison
29
+ // cannot be made until they have answered.
30
+ const [dropboxResult, quizResult, gradebookResult] = await Promise.allSettled([
19
31
  apiClient.get(apiClient.le(courseId, "/dropbox/folders/"), { ttl: DEFAULT_CACHE_TTLS.assignments }),
20
32
  apiClient.get(apiClient.le(courseId, "/quizzes/"), { ttl: DEFAULT_CACHE_TTLS.assignments }),
33
+ apiClient.get(apiClient.le(courseId, "/grades/"), {
34
+ ttl: DEFAULT_CACHE_TTLS.assignments,
35
+ }),
21
36
  ]);
22
37
  // Process Dropbox folders
23
38
  if (dropboxResult.status === "fulfilled") {
@@ -40,17 +55,15 @@ async function fetchCourseAssignments(apiClient, courseId) {
40
55
  log("DEBUG", `Failed to fetch submissions for folder ${folder.Id}`, error);
41
56
  }
42
57
  }
43
- // Fetch feedback if submissions exist
58
+ // Fetch feedback independently of submissions
44
59
  let feedback = null;
45
- if (submissions.length > 0) {
46
- try {
47
- feedback = await apiClient.get(apiClient.le(courseId, `/dropbox/folders/${folder.Id}/feedback/myFeedback/`), { ttl: DEFAULT_CACHE_TTLS.assignments });
48
- }
49
- catch (error) {
50
- // 404/403 means no feedback available - that's fine
51
- if (error?.status !== 404 && error?.status !== 403) {
52
- log("DEBUG", `Failed to fetch feedback for folder ${folder.Id}`, error);
53
- }
60
+ try {
61
+ feedback = await apiClient.get(apiClient.le(courseId, `/dropbox/folders/${folder.Id}/feedback/myFeedback/`), { ttl: DEFAULT_CACHE_TTLS.assignments });
62
+ }
63
+ catch (error) {
64
+ // 404/403 means no feedback available (or no access) - that's fine
65
+ if (error?.status !== 404 && error?.status !== 403) {
66
+ log("DEBUG", `Failed to fetch feedback for folder ${folder.Id}`, error);
54
67
  }
55
68
  }
56
69
  // Build assignment object
@@ -58,6 +71,7 @@ async function fetchCourseAssignments(apiClient, courseId) {
58
71
  type: "assignment",
59
72
  id: folder.Id,
60
73
  name: folder.Name,
74
+ url: baseUrl ? assignmentUrl(baseUrl, courseId, folder.Id) : null,
61
75
  instructions: folder.CustomInstructions?.Html
62
76
  ? convertHtmlToMarkdown(folder.CustomInstructions.Html)
63
77
  : { markdown: "", html: "" },
@@ -146,6 +160,7 @@ async function fetchCourseAssignments(apiClient, courseId) {
146
160
  type: "quiz",
147
161
  id: quiz.QuizId,
148
162
  name: quiz.Name,
163
+ url: baseUrl ? quizUrl(baseUrl, courseId, quiz.QuizId) : null,
149
164
  instructions: quiz.Description?.Html
150
165
  ? convertHtmlToMarkdown(quiz.Description.Html)
151
166
  : { markdown: "", html: "" },
@@ -170,8 +185,52 @@ async function fetchCourseAssignments(apiClient, courseId) {
170
185
  // Log quiz fetch failure but don't throw
171
186
  log("DEBUG", `Failed to fetch quizzes for course ${courseId}`, quizResult.reason);
172
187
  }
188
+ // Process the gradebook last, once the fetched items are known.
189
+ if (gradebookResult.status === "fulfilled") {
190
+ assignments.push(...gradebookHeadsUp(gradebookResult.value, assignments, courseId, baseUrl));
191
+ }
192
+ else {
193
+ log("DEBUG", `Failed to fetch the gradebook for course ${courseId}`, gradebookResult.reason);
194
+ }
173
195
  return assignments;
174
196
  }
197
+ /**
198
+ * Gradebook columns describing work that no other route already offered.
199
+ *
200
+ * Two rules decide what qualifies. The column must be one a student is scored
201
+ * on, which excludes the bookkeeping types that describe the gradebook's own
202
+ * arithmetic. And it must match no already-fetched assignment or quiz: not
203
+ * "unlinked", which would be the wrong test, because a released midterm's
204
+ * column IS linked, to a quiz the student's own quizzes call cannot see, and
205
+ * that column is the entire reason this exists.
206
+ *
207
+ * A column with no id or no name is skipped rather than fatal: one malformed
208
+ * row should cost its own line, not the course's other heads-up rows.
209
+ */
210
+ function gradebookHeadsUp(raw, fetched, courseId, baseUrl) {
211
+ if (!Array.isArray(raw))
212
+ return [];
213
+ const covered = new Set(fetched.map((item) => item.id).filter((id) => typeof id === "number"));
214
+ const rows = [];
215
+ for (const column of raw) {
216
+ if (!STUDENT_SCORED.has(column?.GradeObjectTypeId))
217
+ continue;
218
+ if (covered.has(column.AssociatedTool?.ToolItemId))
219
+ continue;
220
+ if (typeof column.Id !== "number" || typeof column.Name !== "string")
221
+ continue;
222
+ rows.push({
223
+ type: "gradeOnly",
224
+ id: column.Id,
225
+ name: column.Name,
226
+ // Always null: a grade column carries no due date of its own, and
227
+ // inventing one from the column name would be a guess.
228
+ dueDate: null,
229
+ url: baseUrl ? gradebookUrl(baseUrl, courseId) : null,
230
+ });
231
+ }
232
+ return rows;
233
+ }
175
234
  /**
176
235
  * Register get_assignments tool
177
236
  */
@@ -187,7 +246,7 @@ export function registerGetAssignments(server, apiClient, config) {
187
246
  const { courseId } = GetAssignmentsSchema.parse(args);
188
247
  // Single course case
189
248
  if (courseId) {
190
- const assignments = await fetchCourseAssignments(apiClient, courseId);
249
+ const assignments = await fetchCourseAssignments(apiClient, courseId, config.baseUrl);
191
250
  log("INFO", `get_assignments: Retrieved ${assignments.length} assignments for course ${courseId}`);
192
251
  return toolResponse({ courseId, assignments });
193
252
  }
@@ -206,7 +265,7 @@ export function registerGetAssignments(server, apiClient, config) {
206
265
  // Fetch assignments for each course (handle 403s gracefully)
207
266
  const assignmentPromises = filteredEnrollments.map(async (item) => {
208
267
  try {
209
- const assignments = await fetchCourseAssignments(apiClient, item.OrgUnit.Id);
268
+ const assignments = await fetchCourseAssignments(apiClient, item.OrgUnit.Id, config.baseUrl);
210
269
  return {
211
270
  courseId: item.OrgUnit.Id,
212
271
  courseName: item.OrgUnit.Name,
@@ -1 +1 @@
1
- {"version":3,"file":"get-assignments.js","sourceRoot":"","sources":["../../src/tools/get-assignments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-assignments.js","sourceRoot":"","sources":["../../src/tools/get-assignments.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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 { GetClasslistEmailsSchema } from "./schemas.js";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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 { GetCourseContentSchema } 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 AGPL-3.0 — see LICENSE file for details.
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 AGPL-3.0 — see LICENSE file for details.
4
+ * Licensed under MIT — see LICENSE file for details.
5
5
  */
6
6
  import { DEFAULT_CACHE_TTLS } from "../api/index.js";
7
7
  import { GetDiscussionsSchema } from "./schemas.js";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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-my-courses.d.ts","sourceRoot":"","sources":["../../src/tools/get-my-courses.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAOnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAuBnD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,GAChB,IAAI,CAuDN"}
1
+ {"version":3,"file":"get-my-courses.d.ts","sourceRoot":"","sources":["../../src/tools/get-my-courses.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAOnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAuBnD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,GAChB,IAAI,CA8DN"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Purdue Brightspace MCP Server
3
- * Copyright (c) 2025 Rohan Muppa. All rights reserved.
4
- * Licensed under AGPL-3.0 — see LICENSE file for details.
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 { GetMyCoursesSchema, } from "./schemas.js";
@@ -20,7 +20,13 @@ export function registerGetMyCourses(server, apiClient, config) {
20
20
  try {
21
21
  log("DEBUG", "get_my_courses tool called", { args });
22
22
  // Parse and validate input
23
- const { activeOnly } = GetMyCoursesSchema.parse(args);
23
+ const { activeOnly: activeOnlyArg } = GetMyCoursesSchema.parse(args);
24
+ // An explicit per-call argument wins; otherwise fall back to the configured
25
+ // policy. Resolving once here keeps the API query and the post-fetch filter
26
+ // in agreement — previously the argument shaped the query but the filter
27
+ // still used config.courseFilter.activeOnly, so activeOnly:false fetched
28
+ // inactive courses and then discarded them.
29
+ const activeOnly = activeOnlyArg ?? config.courseFilter.activeOnly;
24
30
  // Build path - orgUnitTypeId=3 means "Course Offering" type
25
31
  const path = apiClient.lp(`/enrollments/myenrollments/?orgUnitTypeId=3${activeOnly ? "&isActive=true" : ""}`);
26
32
  // Fetch enrollments
@@ -39,7 +45,7 @@ export function registerGetMyCourses(server, apiClient, config) {
39
45
  role: item.Access.ClasslistRoleName,
40
46
  isActive: item.Access.IsActive,
41
47
  lastAccessed: item.Access.LastAccessed,
42
- })), config.courseFilter);
48
+ })), { ...config.courseFilter, activeOnly });
43
49
  log("INFO", `get_my_courses: Retrieved ${courses.length} courses`);
44
50
  return toolResponse(courses);
45
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-my-courses.js","sourceRoot":"","sources":["../../src/tools/get-my-courses.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,kBAAkB,GACnB,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;AAwB9D;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,SAAuB,EACvB,MAAiB;IAEjB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,mNAAmN;QACrN,WAAW,EAAE,kBAAkB;KAChC,EACD,KAAK,EAAE,IAAS,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,GAAG,CAAC,OAAO,EAAE,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAErD,2BAA2B;YAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEtD,4DAA4D;YAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CACvB,8CAA8C,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CACnF,CAAC;YAEF,oBAAoB;YACpB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAqB,IAAI,EAAE;gBAC7D,GAAG,EAAE,kBAAkB,CAAC,WAAW;aACpC,CAAC,CAAC;YAEH,uBAAuB;YACvB,IAAI,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC;gBACtC,GAAG,CACD,MAAM,EACN,uFAAuF,EACvF,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;YACJ,CAAC;YAED,+CAA+C;YAC/C,MAAM,OAAO,GAAG,iBAAiB,CAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5B,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;gBACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBACnC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aACvC,CAAC,CAAC,EACH,MAAM,CAAC,YAAY,CACpB,CAAC;YAEF,GAAG,CAAC,MAAM,EAAE,6BAA6B,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;YACnE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-my-courses.js","sourceRoot":"","sources":["../../src/tools/get-my-courses.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,kBAAkB,GACnB,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;AAwB9D;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,SAAuB,EACvB,MAAiB;IAEjB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,mNAAmN;QACrN,WAAW,EAAE,kBAAkB;KAChC,EACD,KAAK,EAAE,IAAS,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,GAAG,CAAC,OAAO,EAAE,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAErD,2BAA2B;YAC3B,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErE,4EAA4E;YAC5E,4EAA4E;YAC5E,yEAAyE;YACzE,yEAAyE;YACzE,4CAA4C;YAC5C,MAAM,UAAU,GAAG,aAAa,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;YAEnE,4DAA4D;YAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CACvB,8CAA8C,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CACnF,CAAC;YAEF,oBAAoB;YACpB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAqB,IAAI,EAAE;gBAC7D,GAAG,EAAE,kBAAkB,CAAC,WAAW;aACpC,CAAC,CAAC;YAEH,uBAAuB;YACvB,IAAI,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC;gBACtC,GAAG,CACD,MAAM,EACN,uFAAuF,EACvF,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;YACJ,CAAC;YAED,+CAA+C;YAC/C,MAAM,OAAO,GAAG,iBAAiB,CAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5B,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;gBACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBACnC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aACvC,CAAC,CAAC,EACH,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,CACvC,CAAC;YAEF,GAAG,CAAC,MAAM,EAAE,6BAA6B,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;YACnE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}