@spacelift-io/backstage-integration-backend
Version:
Backstage plugin for integrating Spacelift.io with Backstage
66 lines (60 loc) • 2.14 kB
JavaScript
;
var express = require('express');
var Router = require('express-promise-router');
var graphqlRequest = require('graphql-request');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
function handleError(res, logger, error, context) {
logger.error(`${context}:`, error);
if (error instanceof graphqlRequest.ClientError) {
const gqlError = error.response.errors?.[0];
const message = gqlError?.message || "GraphQL request failed";
const statusCode = error.response.status ?? 500;
res.status(statusCode).json({ error: message, details: gqlError?.extensions });
return;
}
if (error.status && typeof error.status === "number") {
res.status(error.status).json({ error: error.message || "An internal error occurred" });
} else {
res.status(500).json({ error: "An unexpected internal error occurred" });
}
}
async function createRouter({
spaceliftService,
logger,
readOnly
}) {
const router = Router__default.default();
router.use(express__default.default.json());
router.get("/health", (_, res) => {
logger.info("PONG!");
res.json({ status: "ok" });
});
router.get("/stacks", async (_req, res) => {
try {
const stacks = await spaceliftService.getStacks();
res.json(stacks);
} catch (error) {
handleError(res, logger, error, "Error fetching stacks");
}
});
router.post("/stacks/:stackId/trigger", async (req, res) => {
if (readOnly) {
res.status(403).json({
error: "Trigger functionality is disabled. Plugin is in read-only mode."
});
return;
}
const { stackId } = req.params;
try {
const runTrigger = await spaceliftService.triggerRun(stackId);
res.json(runTrigger);
} catch (error) {
handleError(res, logger, error, `Error triggering run for stack ${stackId}`);
}
});
return router;
}
exports.createRouter = createRouter;
//# sourceMappingURL=router.cjs.js.map