UNPKG

@airplane/views

Version:

A React library for building Airplane views. Views components are optimized in style and functionality to produce internal apps that are easy to build and maintain.

122 lines (121 loc) 3.27 kB
import { executeRunbookBackground, SessionTerminationError } from "airplane"; import { getSession } from "airplane/api"; import hash from "object-hash"; import { isGenericExecuteError } from "./status.js"; import { MISSING_EXECUTE_PERMISSIONS_ERROR_PREFIX } from "../errors/formatErrors.js"; import { sendViewMessage } from "../message/sendViewMessage.js"; import { getExecuteOptions } from "./env.js"; const executeRunbook = async (slug, executeType = "mutation", params) => { try { const executeOptions = getExecuteOptions(executeType); const sessionID = await executeRunbookBackground(slug, params, executeOptions); sendViewMessage({ type: "start_session", sessionID }); const checkSession = async () => { const session = await getSession(sessionID, executeOptions); if (session.status === "Failed" || session.status === "Cancelled") { throw new SessionTerminationError(session); } if (session.status !== "Succeeded") { return null; } return { sessionID: session.id }; }; const output = await new Promise((resolve, reject) => { const fnw = async () => { try { const out = await checkSession(); if (out !== null) { return resolve(out); } } catch (err) { return reject(err); } setTimeout(fnw, 500); }; fnw(); }); return output; } catch (e) { if (isSessionTerminationError(e)) { return { error: { message: e.message, type: "FAILED" }, sessionID: e.session.id }; } if (isGenericExecuteError(e)) { if (e.statusCode === 403) { return { error: { message: `${MISSING_EXECUTE_PERMISSIONS_ERROR_PREFIX} ${slug}`, type: "AIRPLANE_INTERNAL" } }; } else if (e.statusCode >= 400 && e.statusCode < 500) { sendViewMessage({ type: "console", messageType: "error", message: e.message, runbookSlug: slug, hash: hash(e), time: Date.now() }); return { error: { message: e.message, type: "CLIENT_ERROR" } }; } else { sendViewMessage({ type: "console", messageType: "error", message: e.message, runbookSlug: slug, hash: hash(e), time: Date.now() }); return { error: { message: e.message, type: "AIRPLANE_INTERNAL" } }; } } else { const message = "An error occured"; sendViewMessage({ type: "console", messageType: "error", message, runbookSlug: slug, hash: hash(message), time: Date.now() }); return { error: { message, type: "AIRPLANE_INTERNAL" } }; } } }; const isSessionTerminationError = (x) => { return typeof x.message === "string" && "session" in x; }; function isExecuteRunbookError(value) { return !!value.error; } export { executeRunbook, isExecuteRunbookError }; //# sourceMappingURL=executeRunbook.js.map