Add Node.js backend API with mock providers for all 15 vendors

Express app on port 3000 with /api/status and /api/health endpoints.
Polls all providers every 2 minutes and caches results in memory.
Each vendor is a self-contained ESM module with 10s timeout and
graceful failure handling. Mock data matches existing frontend.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Klein
2026-02-17 10:42:22 -05:00
parent c1184eee91
commit 7d8cde8f92
19 changed files with 1109 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
export const name = "Apple";
export async function checkStatus() {
return {
name,
status: "operational",
message: "All services running normally.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "Classlink";
export async function checkStatus() {
return {
name,
status: "operational",
message: "All services running normally.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "DRC";
export async function checkStatus() {
return {
name,
status: "outage",
message: "INSIGHT portal is currently unavailable. DRC is aware of the issue.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "EdInsight";
export async function checkStatus() {
return {
name,
status: "operational",
message: "Data analytics platform operational.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "FinalSite";
export async function checkStatus() {
return {
name,
status: "operational",
message: "All services running normally.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "Follett";
export async function checkStatus() {
return {
name,
status: "operational",
message: "All services running normally.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "Fortinet";
export async function checkStatus() {
return {
name,
status: "operational",
message: "FortiGuard and FortiCloud services operational.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "Google Workspace";
export async function checkStatus() {
return {
name,
status: "operational",
message: "All services running normally.",
lastUpdated: new Date().toISOString(),
};
}
+33
View File
@@ -0,0 +1,33 @@
import * as microsoft365 from "./microsoft365.js";
import * as spamtitan from "./spamtitan.js";
import * as powerschool from "./powerschool.js";
import * as classlink from "./classlink.js";
import * as apple from "./apple.js";
import * as drc from "./drc.js";
import * as finalsite from "./finalsite.js";
import * as googleWorkspace from "./google-workspace.js";
import * as follett from "./follett.js";
import * as edinsight from "./edinsight.js";
import * as raptor from "./raptor.js";
import * as schoolmessenger from "./schoolmessenger.js";
import * as fortinet from "./fortinet.js";
import * as mcgrawHill from "./mcgraw-hill.js";
import * as localInfrastructure from "./local-infrastructure.js";
export const providers = [
microsoft365,
spamtitan,
powerschool,
classlink,
apple,
drc,
finalsite,
googleWorkspace,
follett,
edinsight,
raptor,
schoolmessenger,
fortinet,
mcgrawHill,
localInfrastructure,
];
+10
View File
@@ -0,0 +1,10 @@
export const name = "Local Infrastructure";
export async function checkStatus() {
return {
name,
status: "operational",
message: "Firewall uptime 42d. WAN throughput nominal.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "McGraw Hill";
export async function checkStatus() {
return {
name,
status: "operational",
message: "All platform services operational.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "Microsoft 365";
export async function checkStatus() {
return {
name,
status: "operational",
message: "All services running normally.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "PowerSchool";
export async function checkStatus() {
return {
name,
status: "degraded",
message: "Slow response times reported. PowerSchool is investigating.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "Raptor";
export async function checkStatus() {
return {
name,
status: "operational",
message: "Visitor management online.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "SchoolMessenger";
export async function checkStatus() {
return {
name,
status: "operational",
message: "Messaging services operational.",
lastUpdated: new Date().toISOString(),
};
}
+10
View File
@@ -0,0 +1,10 @@
export const name = "SpamTitan";
export async function checkStatus() {
return {
name,
status: "operational",
message: "Email filtering operational.",
lastUpdated: new Date().toISOString(),
};
}