import type { Prisma } from "@prisma/client"; import type { LocationType } from "@calcom/app-store/locations"; /** * This is the definition for an app store's app metadata. * This is used to display App info, categorize or hide certain apps in the app store. */ export interface App { /** * Wheter if the app is installed or not. Usually we check for api keys in env * variables to determine if this is true or not. * */ installed: boolean; /** The app type */ type: | `${string}_calendar` | `${string}_messaging` | `${string}_payment` | `${string}_video` | `${string}_web3` | `${string}_other`; /** The display name for the app, TODO settle between this or name */ title: string; /** The display name for the app */ name: string; /** A brief description, usually found in the app's package.json */ description: string; /** The icon to display in /apps/installed */ imageSrc: string; /** TODO determine if we should use this instead of category */ variant: "calendar" | "payment" | "conferencing"; /** The slug for the app store public page inside `/apps/[slug] */ slug: string; /** The category to which this app belongs, currently we have `calendar`, `payment` or `video` */ category: string; /** An abosolute url to the app logo */ logo: string; /** Company or individual publishing this app */ publisher: string; /** App's website */ url: string; /** Optional documentation website URL */ docsUrl?: string; /** Wether if the app is verified by Cal.com or not */ verified: boolean; /** Wether the app should appear in the trending section of the app store */ trending: boolean; /** Rating from 0 to 5, harcoded for now. Should be fetched later on. */ rating: number; /** Number of reviews, harcoded for now. Should be fetched later on. */ reviews: number; /** * Wheter if the app is installed globally or needs user intervention. * Used to show Connect/Disconnect buttons in App Store * */ isGlobal?: boolean; /** A contact email, mainly to ask for support */ email: string; /** Add this value as a posible location option in event types */ locationType?: LocationType; /** If the app adds a location, how should it be displayed? */ locationLabel?: string; /** Needed API Keys (usually for global apps) */ key?: Prisma.JsonValue; /** Needed API Keys (usually for global apps) */ key?: Prisma.JsonValue; /** If not free, what kind of fees does the app have */ feeType?: "monthly" | "usage-based" | "one-time" | "free"; /** 0 = free. if type="usage-based" it's the price per booking */ price?: number; /** only required for "usage-based" billing. % of commission for paid bookings */ commission?: number; }