/
home
/
techb158
/
cosmic-risk.abdallabala.com
/
src
/
domain
/
/home/techb158/cosmic-risk.abdallabala.com/src/domain
mkdir
upload
Name
Size
Mode
Actions
entitlements.js
2698
0644
edit
dl
rm
integrations.js
4438
0644
edit
dl
rm
permissions.js
3730
0644
edit
dl
rm
risk-engine.js
13452
0644
edit
dl
rm
Edit:
/home/techb158/cosmic-risk.abdallabala.com/src/domain/integrations.js
(4438B)
const SUPPORTED_PM_PROVIDERS = { TRELLO: { label: "Trello", externalProjectName: "Board", workItemName: "Card", mitigationObjectName: "Checklist item", statusObjectName: "List", riskFieldName: "Custom field or badge", evidenceObjectName: "Attachment or comment" }, JIRA: { label: "Jira", externalProjectName: "Project", workItemName: "Issue", mitigationObjectName: "Sub-task or linked issue", statusObjectName: "Workflow status", riskFieldName: "Custom field", evidenceObjectName: "Attachment or comment" }, ASANA: { label: "Asana", externalProjectName: "Project", workItemName: "Task", mitigationObjectName: "Subtask", statusObjectName: "Section or custom status field", riskFieldName: "Custom field", evidenceObjectName: "Attachment or comment" }, MICROSOFT_PLANNER: { label: "Microsoft Planner", externalProjectName: "Plan", workItemName: "Task", mitigationObjectName: "Checklist item", statusObjectName: "Bucket or progress state", riskFieldName: "Category, description, or task details", evidenceObjectName: "Task reference or checklist evidence" } }; function listSupportedProviders() { return Object.entries(SUPPORTED_PM_PROVIDERS).map(([provider, capabilities]) => ({ provider, capabilities })); } function riskStatusToExternalStatus(provider, risk) { if (provider === "TRELLO") { if (risk.status === "CLOSED") return "Approved for deployment"; if (risk.residualScore >= 50) return "Blocked by risk"; if (risk.status === "IN_MITIGATION") return "In mitigation"; return risk.lifecyclePhase || "Risk register"; } if (provider === "JIRA") { if (risk.status === "CLOSED") return "Done"; if (risk.status === "IN_MITIGATION") return "In Progress"; return "To Do"; } if (provider === "ASANA") { if (risk.status === "CLOSED") return "Complete"; if (risk.status === "IN_MITIGATION") return "In progress"; return "Open"; } if (provider === "MICROSOFT_PLANNER") { if (risk.status === "CLOSED") return "Completed"; if (risk.status === "IN_MITIGATION") return "In progress"; if (risk.residualScore >= 50) return "Blocked bucket"; return "Not started"; } return risk.status || "Open"; } function externalStatusToLocalStatus(provider, externalStatus) { if (!externalStatus) return "OPEN"; const s = String(externalStatus).toLowerCase().trim(); if (provider === "TRELLO") { if (s.includes("approved for deployment") || s.includes("done") || s.includes("closed")) return "CLOSED"; if (s.includes("mitigation") || s.includes("in progress") || s.includes("working")) return "IN_MITIGATION"; if (s.includes("accepted")) return "ACCEPTED"; return "OPEN"; } if (provider === "JIRA") { if (s === "done" || s === "closed" || s === "resolved") return "CLOSED"; if (s === "in progress" || s === "selected for development" || s === "in review") return "IN_MITIGATION"; if (s === "accepted" || s === "approved") return "ACCEPTED"; return "OPEN"; } if (provider === "ASANA") { if (s === "complete" || s === "completed" || s === "closed") return "CLOSED"; if (s.includes("in progress") || s.includes("mitigation")) return "IN_MITIGATION"; if (s === "accepted" || s === "approved") return "ACCEPTED"; return "OPEN"; } if (provider === "MICROSOFT_PLANNER") { if (s === "completed" || s === "closed" || s === "done") return "CLOSED"; if (s.includes("in progress") || s.includes("mitigation")) return "IN_MITIGATION"; if (s === "accepted" || s === "approved") return "ACCEPTED"; return "OPEN"; } return "OPEN"; } function parseDimensionFromLabels(labels = []) { const dims = ["Organizational","Technical","Human","Governance","Legal","Ethical","Operational"]; for (const label of labels) { const name = (label.name || label || "").replace(/^COSMIC:/i, ""); if (dims.includes(name)) return name; } return "Technical"; } function parsePhaseFromLabels(labels = []) { for (const label of labels) { const name = (label.name || label || ""); const match = name.match(/^COSMIC:Phase:(.+)/i); if (match) return match[1]; } return "Needs identification"; } module.exports = { SUPPORTED_PM_PROVIDERS, listSupportedProviders, riskStatusToExternalStatus, externalStatusToLocalStatus, parseDimensionFromLabels, parsePhaseFromLabels };
Save
cmd:
run