/home/techb158/balavpn.abdallabala.com/src/app/api/integrations/[integrationId]/discover
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/integrations/[integrationId]/discover/route.js (1503B)
const { prisma } = require("../../../../../lib/prisma");
const { getActorFromRequest } = require("../../../../../lib/request-context");
const { hasPermission } = require("../../../../../domain/permissions");
const { jsonResponse, errorResponse } = require("../../../../../lib/http");
const { loadIntegrationCredentials } = require("../../../../../services/integration-service");
const { discoverIntegrationResources } = require("../../../../../integrations/pm-clients");
export async function GET(request, { params }) {
try {
const { integrationId } = await params;
const actor = await getActorFromRequest(request);
const integration = await prisma.integration.findUnique({
where: { id: integrationId },
include: { workspace: true }
});
if (!integration) {
return errorResponse(Object.assign(new Error("Integration not found"), { status: 404 }));
}
const membership = actor.memberships.find(m => m.organizationId === integration.workspace.organizationId && m.status === "ACTIVE");
if (!membership || !hasPermission(membership.role.permissions, "integration:manage")) {
return errorResponse(Object.assign(new Error("Permission denied: integration:manage"), { status: 403 }));
}
const credentials = await loadIntegrationCredentials(integration);
const resources = await discoverIntegrationResources(integration.provider, credentials);
return jsonResponse({ resources });
} catch (error) {
return errorResponse(error);
}
}