@paroicms/server
Version:
The ParoiCMS server
93 lines • 3.73 kB
JavaScript
import { messageOf } from "@paroicms/public-anywhere-lib";
import { type } from "arktype";
import { executeHardenedBackup } from "../admin-backend/backup/hardened-backup.service.js";
import { siteReadyGuard } from "../graphql/graphql.types.js";
import { getActiveSiteContext, getSiteContext, unloadSiteContext, } from "../site-context/site-context.js";
const TestingRequestAT = type({
command: '"loadSiteContext"|"unloadSiteContext"|"backupSite"',
fqdn: "string",
"+": "reject",
});
export async function localTestingRoute(req, res) {
try {
const bodyResult = TestingRequestAT(req.body);
if (bodyResult instanceof type.errors) {
res.status(400).json({
error: "Invalid request format",
details: bodyResult.summary,
});
return;
}
const body = bodyResult;
switch (body.command) {
case "loadSiteContext": {
const siteContext = await getSiteContext(body.fqdn);
siteReadyGuard(siteContext);
res.json({
success: true,
message: `Site context loaded for ${body.fqdn}`,
state: siteContext.requestTracker.state,
pendingRequests: siteContext.requestTracker.pendingRequests.size,
});
break;
}
case "unloadSiteContext": {
const siteContext = getActiveSiteContext(body.fqdn, { returnsUndef: true });
if (!siteContext) {
res.json({
success: true,
message: `Site context for ${body.fqdn} was not loaded`,
wasLoaded: false,
});
return;
}
await unloadSiteContext(siteContext, { inRequest: true });
res.json({
success: true,
message: `Site context unloaded for ${body.fqdn}`,
wasLoaded: true,
});
break;
}
case "backupSite": {
const siteContext = getActiveSiteContext(body.fqdn, { returnsUndef: true });
if (!siteContext) {
res.status(400).json({
success: false,
error: `Site context for ${body.fqdn} is not loaded. Load it first with loadSiteContext.`,
});
return;
}
siteReadyGuard(siteContext);
const startTime = Date.now();
const result = await executeHardenedBackup(siteContext);
const duration = Date.now() - startTime;
res.json({
success: true,
message: `Backup completed for ${body.fqdn}`,
state: siteContext.requestTracker.state,
pendingRequests: siteContext.requestTracker.pendingRequests.size,
backup: {
zipFileName: result.zipFileName,
zipFileWeight: result.zipFileWeight,
durationMs: duration,
},
});
break;
}
default:
res.status(400).json({
error: "Unknown command",
command: body.command,
});
}
}
catch (error) {
const errorMessage = messageOf(error);
res.status(500).json({
success: false,
error: errorMessage,
});
}
}
//# sourceMappingURL=local-testing-route.js.map