2021-09-22 18:36:13 +00:00
|
|
|
import { Prisma } from "@prisma/client";
|
|
|
|
|
2021-09-22 19:52:38 +00:00
|
|
|
import { validJson } from "@lib/jsonUtils";
|
|
|
|
|
2021-09-22 18:36:13 +00:00
|
|
|
const credentialData = Prisma.validator<Prisma.CredentialArgs>()({
|
|
|
|
select: { id: true, type: true, key: true },
|
|
|
|
});
|
|
|
|
|
|
|
|
type CredentialData = Prisma.CredentialGetPayload<typeof credentialData>;
|
|
|
|
|
2021-10-12 09:35:44 +00:00
|
|
|
export const ALL_INTEGRATIONS = [
|
|
|
|
{
|
|
|
|
installed: !!(process.env.GOOGLE_API_CREDENTIALS && validJson(process.env.GOOGLE_API_CREDENTIALS)),
|
|
|
|
type: "google_calendar",
|
|
|
|
title: "Google Calendar",
|
|
|
|
imageSrc: "integrations/google-calendar.svg",
|
|
|
|
description: "For personal and business calendars",
|
|
|
|
variant: "calendar",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
installed: !!(process.env.MS_GRAPH_CLIENT_ID && process.env.MS_GRAPH_CLIENT_SECRET),
|
|
|
|
type: "office365_calendar",
|
|
|
|
title: "Office 365 / Outlook.com Calendar",
|
|
|
|
imageSrc: "integrations/outlook.svg",
|
|
|
|
description: "For personal and business calendars",
|
|
|
|
variant: "calendar",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
installed: !!(process.env.ZOOM_CLIENT_ID && process.env.ZOOM_CLIENT_SECRET),
|
|
|
|
type: "zoom_video",
|
|
|
|
title: "Zoom",
|
|
|
|
imageSrc: "integrations/zoom.svg",
|
|
|
|
description: "Video Conferencing",
|
|
|
|
variant: "conferencing",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
installed: true,
|
|
|
|
type: "caldav_calendar",
|
|
|
|
title: "CalDav Server",
|
|
|
|
imageSrc: "integrations/caldav.svg",
|
|
|
|
description: "For personal and business calendars",
|
|
|
|
variant: "calendar",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
installed: true,
|
|
|
|
type: "apple_calendar",
|
|
|
|
title: "Apple Calendar",
|
|
|
|
imageSrc: "integrations/apple-calendar.svg",
|
|
|
|
description: "For personal and business calendars",
|
|
|
|
variant: "calendar",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
installed: !!(
|
|
|
|
process.env.STRIPE_CLIENT_ID &&
|
|
|
|
process.env.NEXT_PUBLIC_STRIPE_PUBLIC_KEY &&
|
|
|
|
process.env.STRIPE_PRIVATE_KEY
|
|
|
|
),
|
|
|
|
type: "stripe_payment",
|
|
|
|
title: "Stripe",
|
|
|
|
imageSrc: "integrations/stripe.svg",
|
|
|
|
description: "Receive payments",
|
|
|
|
variant: "payment",
|
|
|
|
},
|
|
|
|
] as const;
|
2021-09-22 18:36:13 +00:00
|
|
|
function getIntegrations(credentials: CredentialData[]) {
|
2021-10-12 09:35:44 +00:00
|
|
|
const integrations = ALL_INTEGRATIONS.map((integration) => ({
|
|
|
|
...integration,
|
|
|
|
/**
|
|
|
|
* @deprecated use `credentials.
|
|
|
|
*/
|
|
|
|
credential: credentials.find((credential) => credential.type === integration.type) || null,
|
|
|
|
credentials: credentials.filter((credential) => credential.type === integration.type) || null,
|
|
|
|
}));
|
2021-09-22 18:36:13 +00:00
|
|
|
|
|
|
|
return integrations;
|
|
|
|
}
|
|
|
|
|
2021-10-12 09:35:44 +00:00
|
|
|
export type IntegraionMeta = ReturnType<typeof getIntegrations>;
|
|
|
|
|
2021-09-22 18:36:13 +00:00
|
|
|
export function hasIntegration(integrations: ReturnType<typeof getIntegrations>, type: string): boolean {
|
|
|
|
return !!integrations.find((i) => i.type === type && !!i.installed && !!i.credential);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default getIntegrations;
|