import { validJson } from "@lib/jsonUtils"; import { Prisma } from "@prisma/client"; const credentialData = Prisma.validator()({ select: { id: true, type: true, key: true }, }); type CredentialData = Prisma.CredentialGetPayload; function getIntegrations(credentials: CredentialData[]) { const integrations = [ { installed: !!(process.env.GOOGLE_API_CREDENTIALS && validJson(process.env.GOOGLE_API_CREDENTIALS)), credential: credentials.find((integration) => integration.type === "google_calendar") || null, type: "google_calendar", title: "Google Calendar", imageSrc: "integrations/google-calendar.svg", description: "For personal and business calendars", }, { installed: !!(process.env.MS_GRAPH_CLIENT_ID && process.env.MS_GRAPH_CLIENT_SECRET), type: "office365_calendar", credential: credentials.find((integration) => integration.type === "office365_calendar") || null, title: "Office 365 / Outlook.com Calendar", imageSrc: "integrations/outlook.svg", description: "For personal and business calendars", }, { installed: !!(process.env.ZOOM_CLIENT_ID && process.env.ZOOM_CLIENT_SECRET), type: "zoom_video", credential: credentials.find((integration) => integration.type === "zoom_video") || null, title: "Zoom", imageSrc: "integrations/zoom.svg", description: "Video Conferencing", }, { installed: true, type: "caldav_calendar", credential: credentials.find((integration) => integration.type === "caldav_calendar") || null, title: "CalDav Server", imageSrc: "integrations/caldav.svg", description: "For personal and business calendars", }, { installed: true, type: "apple_calendar", credential: credentials.find((integration) => integration.type === "apple_calendar") || null, title: "Apple Calendar", imageSrc: "integrations/apple-calendar.svg", description: "For personal and business calendars", }, { installed: !!( process.env.STRIPE_CLIENT_ID && process.env.NEXT_PUBLIC_STRIPE_PUBLIC_KEY && process.env.STRIPE_PRIVATE_KEY ), type: "stripe_payment", credential: credentials.find((integration) => integration.type === "stripe_payment") || null, title: "Stripe", imageSrc: "integrations/stripe.svg", description: "Receive payments", }, ]; return integrations; } export function hasIntegration(integrations: ReturnType, type: string): boolean { return !!integrations.find((i) => i.type === type && !!i.installed && !!i.credential); } export default getIntegrations;