/home/techb158/balavpn.abdallabala.com/src/app/api/workspaces/[workspaceId]/integrations
NameSizeModeActions
route.js24720644editdlrm
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/workspaces/[workspaceId]/integrations/route.js (2472B)
const { prisma } = require("../../../../../lib/prisma"); const { getActorFromRequest } = require("../../../../../lib/request-context"); const { hasPermission } = require("../../../../../domain/permissions"); const { jsonResponse, errorResponse, parseJson } = require("../../../../../lib/http"); const { saveIntegrationCredentials } = require("../../../../../services/integration-service"); async function requireWorkspace(request, workspaceId, permission) { const actor = await getActorFromRequest(request); const workspace = await prisma.workspace.findUniqueOrThrow({ where: { id: workspaceId } }); const membership = actor.memberships.find(item => item.organizationId === workspace.organizationId && item.status === "ACTIVE"); if (!membership || !hasPermission(membership.role.permissions, permission)) { const error = new Error(`Permission denied: ${permission}`); error.status = 403; throw error; } return { actor, workspace }; } export async function GET(request, { params }) { try { const { workspaceId } = await params; await requireWorkspace(request, workspaceId, "integration:read"); const integrations = await prisma.integration.findMany({ where: { workspaceId }, orderBy: { provider: "asc" } }); return jsonResponse({ integrations }); } catch (error) { return errorResponse(error); } } export async function POST(request, { params }) { try { const { workspaceId } = await params; const { actor, workspace } = await requireWorkspace(request, workspaceId, "integration:manage"); const body = await parseJson(request); const integration = await prisma.integration.create({ data: { workspaceId: workspace.id, provider: body.provider, workspaceName: body.workspaceName || `${body.provider} workspace`, externalProjectKey: body.externalProjectKey || "", baseUrl: body.baseUrl || "", authMode: body.authMode || "OAuth or API token", connectionStatus: "NEEDS_CONFIGURATION", syncDirection: body.syncDirection || "COSMIC to PM", liveEnabled: body.liveEnabled === true, liveConfig: body.liveConfig || {} } }); const credentialStore = body.credentials ? await saveIntegrationCredentials({ integrationId: integration.id, credentials: body.credentials, actor, request }) : null; return jsonResponse({ integration, credentialStore }, 201); } catch (error) { return errorResponse(error); } }