UNPKG

@spacelift-io/backstage-integration-backend

Version:

Backstage plugin for integrating Spacelift.io with Backstage

66 lines (60 loc) 2.14 kB
'use strict'; 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