brightspace-mcp-server 3.11.5 → 3.11.6

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.
@@ -351,8 +351,11 @@ export class PurdueSSOFlow {
351
351
  const challengeVisible = number !== null ||
352
352
  await page.locator("#idDiv_SAOTCAS_Title").first().isVisible().catch(() => false) ||
353
353
  await page.locator("#idDiv_SAOTCC_Title").first().isVisible().catch(() => false);
354
- if (challengeVisible && !challenged) {
354
+ // The checkbox can render after the heading or number. Recheck during
355
+ // the existing poll without delaying the first challenge announcement.
356
+ if (challengeVisible)
355
357
  await this.rememberMfaDevice(page);
358
+ if (challengeVisible && !challenged) {
356
359
  challenged = true;
357
360
  log("WARN", "Waiting up to 5 minutes for Microsoft MFA approval on your device.");
358
361
  this.config.onMfaChallenge?.(number);
@@ -507,13 +510,13 @@ export class PurdueSSOFlow {
507
510
  return true;
508
511
  }
509
512
  /**
510
- * Tick Entra's "Don't ask again" box, once per login and never in a loop.
513
+ * Tick Entra's "Don't ask again" box once; retry absent controls on later MFA polls.
511
514
  * Opt-in: without an explicit true the box is left alone and the outcome
512
515
  * is recorded as "off", so get_server_info can say why nothing was ticked.
513
516
  * An already-checked box is left alone so this can never untick it.
514
517
  */
515
518
  async rememberMfaDevice(page) {
516
- if (this.rememberMfa)
519
+ if (this.rememberMfa && this.rememberMfa.outcome !== "absent")
517
520
  return;
518
521
  if (this.config.rememberMfa !== true) {
519
522
  this.rememberMfa = { outcome: "off", at: new Date().toISOString() };
@@ -543,6 +546,8 @@ export class PurdueSSOFlow {
543
546
  catch {
544
547
  outcome = "unknown";
545
548
  }
549
+ if (this.rememberMfa?.outcome === outcome)
550
+ return;
546
551
  this.rememberMfa = { outcome, at: new Date().toISOString() };
547
552
  log("INFO", `Entra remember-MFA checkbox: ${REMEMBER_MFA_LOG[outcome]}`);
548
553
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brightspace-mcp-server",
3
- "version": "3.11.5",
3
+ "version": "3.11.6",
4
4
  "mcpName": "io.github.RohanMuppa/brightspace",
5
5
  "description": "MCP server for Brightspace (D2L). Check grades, due dates, assignments, announcements, syllabus, rosters and more via Claude, ChatGPT, Cursor, Windsurf, or any MCP client.",
6
6
  "type": "module",