diff --git a/apps/web/components/apps/AdditionalCalendarSelector.tsx b/apps/web/components/apps/AdditionalCalendarSelector.tsx index ba04da95aa..75d5cbb6fe 100644 --- a/apps/web/components/apps/AdditionalCalendarSelector.tsx +++ b/apps/web/components/apps/AdditionalCalendarSelector.tsx @@ -18,7 +18,7 @@ interface AdditionalCalendarSelectorProps { const AdditionalCalendarSelector = ({ isPending }: AdditionalCalendarSelectorProps): JSX.Element | null => { const { t } = useLocale(); - const [data] = trpc.viewer.integrations.useSuspenseQuery({ variant: "calendar", onlyInstalled: true }); + const [data] = trpc.viewer.apps.integrations.useSuspenseQuery({ variant: "calendar", onlyInstalled: true }); const options = data.items.map((item) => ({ label: item.name, diff --git a/apps/web/components/apps/AppPage.tsx b/apps/web/components/apps/AppPage.tsx index dc25b785fc..01b3bf41c3 100644 --- a/apps/web/components/apps/AppPage.tsx +++ b/apps/web/components/apps/AppPage.tsx @@ -87,7 +87,7 @@ export const AppPage = ({ if (data?.setupPending) return; setIsLoading(false); showToast(data?.message || t("app_successfully_installed"), "success"); - await utils.viewer.appCredentialsByType.invalidate({ appType: type }); + await utils.viewer.apps.appCredentialsByType.invalidate({ appType: type }); }, onError: (error) => { if (error instanceof Error) showToast(error.message || t("app_could_not_be_installed"), "error"); @@ -143,7 +143,7 @@ export const AppPage = ({ */ const [appInstalledForAllTargets, setAppInstalledForAllTargets] = useState(false); - const appDbQuery = trpc.viewer.appCredentialsByType.useQuery({ appType: type }); + const appDbQuery = trpc.viewer.apps.appCredentialsByType.useQuery({ appType: type }); useEffect( function refactorMeWithoutEffect() { @@ -161,7 +161,7 @@ export const AppPage = ({ [appDbQuery.data, availableForTeams] ); - const dependencyData = trpc.viewer.appsRouter.queryForDependencies.useQuery(dependencies, { + const dependencyData = trpc.viewer.apps.queryForDependencies.useQuery(dependencies, { enabled: !!dependencies, }); diff --git a/apps/web/components/apps/CalendarListContainer.tsx b/apps/web/components/apps/CalendarListContainer.tsx index 20177f7a24..1b54b1d350 100644 --- a/apps/web/components/apps/CalendarListContainer.tsx +++ b/apps/web/components/apps/CalendarListContainer.tsx @@ -31,7 +31,7 @@ type Props = { function CalendarList(props: Props) { const { t } = useLocale(); - const query = trpc.viewer.integrations.useQuery({ variant: "calendar", onlyInstalled: false }); + const query = trpc.viewer.apps.integrations.useQuery({ variant: "calendar", onlyInstalled: false }); return ( Promise.allSettled([ - utils.viewer.integrations.invalidate( + utils.viewer.apps.integrations.invalidate( { variant: "calendar", onlyInstalled: true }, { exact: true, @@ -89,7 +89,10 @@ export function CalendarListContainer(props: { heading?: boolean; fromOnboarding utils.viewer.connectedCalendars.invalidate(), ]); const query = trpc.viewer.connectedCalendars.useQuery(); - const installedCalendars = trpc.viewer.integrations.useQuery({ variant: "calendar", onlyInstalled: true }); + const installedCalendars = trpc.viewer.apps.integrations.useQuery({ + variant: "calendar", + onlyInstalled: true, + }); const mutation = trpc.viewer.setDestinationCalendar.useMutation({ onSuccess: () => { utils.viewer.connectedCalendars.invalidate(); diff --git a/apps/web/components/apps/InstallAppButtonChild.tsx b/apps/web/components/apps/InstallAppButtonChild.tsx index 635ccebff6..4cf0a3b040 100644 --- a/apps/web/components/apps/InstallAppButtonChild.tsx +++ b/apps/web/components/apps/InstallAppButtonChild.tsx @@ -11,7 +11,7 @@ export const InstallAppButtonChild = ({ ...props }: { multiInstall?: boolean; - credentials?: RouterOutputs["viewer"]["appCredentialsByType"]["credentials"]; + credentials?: RouterOutputs["viewer"]["apps"]["appCredentialsByType"]["credentials"]; paid?: AppFrontendPayload["paid"]; } & ButtonProps) => { const { t } = useLocale(); diff --git a/apps/web/components/apps/MultiDisconnectIntegration.tsx b/apps/web/components/apps/MultiDisconnectIntegration.tsx index fdf09d3e44..b57f3d5b28 100644 --- a/apps/web/components/apps/MultiDisconnectIntegration.tsx +++ b/apps/web/components/apps/MultiDisconnectIntegration.tsx @@ -19,7 +19,7 @@ import { import type { inferRouterOutputs } from "@trpc/server"; type RouterOutput = inferRouterOutputs; -type Credentials = RouterOutput["viewer"]["appCredentialsByType"]["credentials"]; +type Credentials = RouterOutput["viewer"]["apps"]["appCredentialsByType"]["credentials"]; interface Props { credentials: Credentials; @@ -48,7 +48,7 @@ export function MultiDisconnectIntegration({ credentials, onSuccess }: Props) { }, async onSettled() { await utils.viewer.connectedCalendars.invalidate(); - await utils.viewer.integrations.invalidate(); + await utils.viewer.apps.integrations.invalidate(); }, }); diff --git a/apps/web/components/getting-started/components/AppConnectionItem.tsx b/apps/web/components/getting-started/components/AppConnectionItem.tsx index 3066316b01..bcdf051316 100644 --- a/apps/web/components/getting-started/components/AppConnectionItem.tsx +++ b/apps/web/components/getting-started/components/AppConnectionItem.tsx @@ -25,7 +25,7 @@ const AppConnectionItem = (props: IAppConnectionItem) => { const { title, logo, type, installed, isDefault, defaultInstall, slug } = props; const { t } = useLocale(); const utils = trpc.useUtils(); - const setDefaultConferencingApp = trpc.viewer.appsRouter.setDefaultConferencingApp.useMutation({ + const setDefaultConferencingApp = trpc.viewer.apps.setDefaultConferencingApp.useMutation({ onSuccess: async () => { await utils.viewer.me.invalidate(); }, @@ -54,7 +54,7 @@ const AppConnectionItem = (props: IAppConnectionItem) => { setDefaultConferencingApp.mutate({ slug }); } setInstalling(false); - utils.viewer.integrations.invalidate(); + utils.viewer.apps.integrations.invalidate(); showToast(t("app_successfully_installed"), "success"); }, onError: (error) => { diff --git a/apps/web/components/getting-started/steps-views/ConnectCalendars.tsx b/apps/web/components/getting-started/steps-views/ConnectCalendars.tsx index 88e95a6b74..c465e4437a 100644 --- a/apps/web/components/getting-started/steps-views/ConnectCalendars.tsx +++ b/apps/web/components/getting-started/steps-views/ConnectCalendars.tsx @@ -19,7 +19,7 @@ const ConnectedCalendars = (props: IConnectCalendarsProps) => { eventTypeId: null, }); const { t } = useLocale(); - const queryIntegrations = trpc.viewer.integrations.useQuery({ + const queryIntegrations = trpc.viewer.apps.integrations.useQuery({ variant: "calendar", onlyInstalled: false, sortByMostPopular: true, diff --git a/apps/web/components/getting-started/steps-views/ConnectedVideoStep.tsx b/apps/web/components/getting-started/steps-views/ConnectedVideoStep.tsx index 84581a3cbe..a52e9725f0 100644 --- a/apps/web/components/getting-started/steps-views/ConnectedVideoStep.tsx +++ b/apps/web/components/getting-started/steps-views/ConnectedVideoStep.tsx @@ -14,7 +14,7 @@ interface ConnectedAppStepProps { const ConnectedVideoStep = (props: ConnectedAppStepProps) => { const { nextStep } = props; - const { data: queryConnectedVideoApps, isPending } = trpc.viewer.integrations.useQuery({ + const { data: queryConnectedVideoApps, isPending } = trpc.viewer.apps.integrations.useQuery({ variant: "conferencing", onlyInstalled: false, diff --git a/apps/web/modules/apps/installed/[category]/installed-category-view.tsx b/apps/web/modules/apps/installed/[category]/installed-category-view.tsx index 93aeb85841..d981d56cee 100644 --- a/apps/web/modules/apps/installed/[category]/installed-category-view.tsx +++ b/apps/web/modules/apps/installed/[category]/installed-category-view.tsx @@ -38,16 +38,16 @@ const IntegrationsContainer = ({ }: IntegrationsContainerProps): JSX.Element => { const { t } = useLocale(); const utils = trpc.useUtils(); - const query = trpc.viewer.integrations.useQuery({ + const query = trpc.viewer.apps.integrations.useQuery({ variant, exclude, onlyInstalled: true, includeTeamInstalledApps: true, }); - const { data: defaultConferencingApp } = trpc.viewer.getUsersDefaultConferencingApp.useQuery(); + const { data: defaultConferencingApp } = trpc.viewer.apps.getUsersDefaultConferencingApp.useQuery(); - const updateDefaultAppMutation = trpc.viewer.updateUserDefaultConferencingApp.useMutation(); + const updateDefaultAppMutation = trpc.viewer.apps.updateUserDefaultConferencingApp.useMutation(); const updateLocationsMutation = trpc.viewer.eventTypes.bulkUpdateToDefaultLocation.useMutation(); @@ -65,7 +65,7 @@ const IntegrationsContainer = ({ { onSuccess: () => { showToast("Default app updated successfully", "success"); - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); onSuccessCallback(); }, onError: (error) => { @@ -83,7 +83,7 @@ const IntegrationsContainer = ({ }, { onSuccess: () => { - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); callback(); }, } @@ -91,11 +91,11 @@ const IntegrationsContainer = ({ }; const handleConnectDisconnectIntegrationMenuToggle = () => { - utils.viewer.integrations.invalidate(); + utils.viewer.apps.integrations.invalidate(); }; const handleBulkEditDialogToggle = () => { - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); }; // TODO: Refactor and reuse getAppCategories? @@ -218,7 +218,7 @@ export default function InstalledApps({ category }: PageProps) { onSuccess: () => { showToast(t("app_removed_successfully"), "success"); callback(); - utils.viewer.integrations.invalidate(); + utils.viewer.apps.integrations.invalidate(); utils.viewer.connectedCalendars.invalidate(); }, onError: () => { diff --git a/apps/web/modules/availability/[schedule]/schedule-view.tsx b/apps/web/modules/availability/[schedule]/schedule-view.tsx index dbf6cf4240..5a54637897 100644 --- a/apps/web/modules/availability/[schedule]/schedule-view.tsx +++ b/apps/web/modules/availability/[schedule]/schedule-view.tsx @@ -70,7 +70,7 @@ export const AvailabilitySettingsWebWrapper = ({ }; const handleBulkEditDialogToggle = () => { - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); }; const isDefaultSchedule = me.data?.defaultScheduleId === scheduleId; diff --git a/apps/web/modules/availability/availability-view.tsx b/apps/web/modules/availability/availability-view.tsx index 49d1b66549..1a68a0e093 100644 --- a/apps/web/modules/availability/availability-view.tsx +++ b/apps/web/modules/availability/availability-view.tsx @@ -101,7 +101,7 @@ export function AvailabilityList({ schedules }: RouterOutputs["viewer"]["availab }; const handleBulkEditDialogToggle = () => { - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); }; const duplicateMutation = trpc.viewer.availability.schedule.duplicate.useMutation({ diff --git a/packages/app-store/_components/AppCard.tsx b/packages/app-store/_components/AppCard.tsx index 030c56d570..c3ba3dcd0d 100644 --- a/packages/app-store/_components/AppCard.tsx +++ b/packages/app-store/_components/AppCard.tsx @@ -24,7 +24,9 @@ export default function AppCard({ hideSettingsIcon = false, hideAppCardOptions = false, }: { - app: RouterOutputs["viewer"]["integrations"]["items"][number] & { credentialOwner?: CredentialOwner }; + app: RouterOutputs["viewer"]["apps"]["integrations"]["items"][number] & { + credentialOwner?: CredentialOwner; + }; description?: React.ReactNode; switchChecked?: boolean; switchOnClick?: (e: boolean) => void; diff --git a/packages/app-store/_components/EventTypeAppCardInterface.tsx b/packages/app-store/_components/EventTypeAppCardInterface.tsx index 51298a36ea..7728aef220 100644 --- a/packages/app-store/_components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/_components/EventTypeAppCardInterface.tsx @@ -10,7 +10,7 @@ import { ErrorBoundary } from "@calcom/ui"; import type { EventTypeAppCardComponentProps, CredentialOwner } from "../types"; import { DynamicComponent } from "./DynamicComponent"; -export type EventTypeApp = RouterOutputs["viewer"]["integrations"]["items"][number] & { +export type EventTypeApp = RouterOutputs["viewer"]["apps"]["integrations"]["items"][number] & { credentialOwner?: CredentialOwner; }; diff --git a/packages/app-store/_components/OmniInstallAppButton.tsx b/packages/app-store/_components/OmniInstallAppButton.tsx index 6bb048c1f3..f9aa70b294 100644 --- a/packages/app-store/_components/OmniInstallAppButton.tsx +++ b/packages/app-store/_components/OmniInstallAppButton.tsx @@ -29,9 +29,8 @@ export default function OmniInstallAppButton({ const mutation = useAddAppMutation(null, { returnTo, onSuccess: (data) => { - //TODO: viewer.appById might be replaced with viewer.apps so that a single query needs to be invalidated. - utils.viewer.appById.invalidate({ appId }); - utils.viewer.integrations.invalidate({ + utils.viewer.apps.appById.invalidate({ appId }); + utils.viewer.apps.integrations.invalidate({ extendsFeature: "EventType", ...(teamId && { teamId }), }); diff --git a/packages/app-store/_components/eventTypeAppCardInterface.test.tsx b/packages/app-store/_components/eventTypeAppCardInterface.test.tsx index 505cb0234d..b81d358c99 100644 --- a/packages/app-store/_components/eventTypeAppCardInterface.test.tsx +++ b/packages/app-store/_components/eventTypeAppCardInterface.test.tsx @@ -26,7 +26,9 @@ const mockProps = { name: "TestApp", slug: "testapp", credentialOwner: {}, - } as RouterOutputs["viewer"]["integrations"]["items"][number] & { credentialOwner?: CredentialOwner }, + } as RouterOutputs["viewer"]["apps"]["integrations"]["items"][number] & { + credentialOwner?: CredentialOwner; + }, eventType: {}, getAppData: getAppDataMock, setAppData: setAppDataMock, diff --git a/packages/app-store/alby/pages/setup/index.tsx b/packages/app-store/alby/pages/setup/index.tsx index 225093b408..3a9635f91f 100644 --- a/packages/app-store/alby/pages/setup/index.tsx +++ b/packages/app-store/alby/pages/setup/index.tsx @@ -73,11 +73,11 @@ function AlbySetupCallback() { function AlbySetupPage(props: IAlbySetupProps) { const router = useRouter(); const { t } = useLocale(); - const integrations = trpc.viewer.integrations.useQuery({ variant: "payment", appId: "alby" }); + const integrations = trpc.viewer.apps.integrations.useQuery({ variant: "payment", appId: "alby" }); const [albyPaymentAppCredentials] = integrations.data?.items || []; const [credentialId] = albyPaymentAppCredentials?.userCredentialIds || [-1]; const showContent = !!integrations.data && integrations.isSuccess && !!credentialId; - const saveKeysMutation = trpc.viewer.appsRouter.updateAppCredentials.useMutation({ + const saveKeysMutation = trpc.viewer.apps.updateAppCredentials.useMutation({ onSuccess: () => { showToast(t("keys_have_been_saved"), "success"); router.push("/event-types"); diff --git a/packages/app-store/components.tsx b/packages/app-store/components.tsx index 6e52e74ccf..1109cfc170 100644 --- a/packages/app-store/components.tsx +++ b/packages/app-store/components.tsx @@ -109,7 +109,7 @@ export const AppDependencyComponent = ({ dependencyData, }: { appName: string; - dependencyData: RouterOutputs["viewer"]["appsRouter"]["queryForDependencies"]; + dependencyData: RouterOutputs["viewer"]["apps"]["queryForDependencies"]; }) => { const { t } = useLocale(); diff --git a/packages/app-store/hitpay/pages/setup/index.tsx b/packages/app-store/hitpay/pages/setup/index.tsx index 0597abd416..b8346a5dc0 100644 --- a/packages/app-store/hitpay/pages/setup/index.tsx +++ b/packages/app-store/hitpay/pages/setup/index.tsx @@ -100,12 +100,12 @@ function HitPaySetupPage(props: IHitPaySetupProps) { }), }); - const integrations = trpc.viewer.integrations.useQuery({ variant: "payment", appId: "hitpay" }); + const integrations = trpc.viewer.apps.integrations.useQuery({ variant: "payment", appId: "hitpay" }); const [HitPayPaymentAppCredentials] = integrations.data?.items || []; const [credentialId] = HitPayPaymentAppCredentials?.userCredentialIds || [-1]; const showContent = !!integrations.data && integrations.isSuccess && !!credentialId; - const saveKeysMutation = trpc.viewer.appsRouter.updateAppCredentials.useMutation({ + const saveKeysMutation = trpc.viewer.apps.updateAppCredentials.useMutation({ onSuccess: () => { showToast(t("keys_have_been_saved"), "success"); router.push("/event-types"); diff --git a/packages/app-store/make/pages/setup/index.tsx b/packages/app-store/make/pages/setup/index.tsx index fc23a64daf..36419549c4 100644 --- a/packages/app-store/make/pages/setup/index.tsx +++ b/packages/app-store/make/pages/setup/index.tsx @@ -18,7 +18,7 @@ export default function MakeSetup({ inviteLink }: InferGetServerSidePropsType { showToast(t("keys_have_been_saved"), "success"); router.push("/event-types"); diff --git a/packages/app-store/types.d.ts b/packages/app-store/types.d.ts index b2911f5d3b..0bd26d57e3 100644 --- a/packages/app-store/types.d.ts +++ b/packages/app-store/types.d.ts @@ -22,7 +22,7 @@ export type CredentialOwner = { readOnly?: boolean; }; -export type EventTypeAppCardApp = RouterOutputs["viewer"]["integrations"]["items"][number] & { +export type EventTypeAppCardApp = RouterOutputs["viewer"]["apps"]["integrations"]["items"][number] & { credentialOwner?: CredentialOwner; credentialIds?: number[]; }; diff --git a/packages/app-store/wipemycalother/components/wipeMyCalActionButton.tsx b/packages/app-store/wipemycalother/components/wipeMyCalActionButton.tsx index 4c4daff04f..6fcc6490f0 100644 --- a/packages/app-store/wipemycalother/components/wipeMyCalActionButton.tsx +++ b/packages/app-store/wipemycalother/components/wipeMyCalActionButton.tsx @@ -13,7 +13,7 @@ interface IWipeMyCalActionButtonProps { const WipeMyCalActionButton = (props: IWipeMyCalActionButtonProps) => { const { bookingsEmpty, bookingStatus } = props; const [openDialog, setOpenDialog] = useState(false); - const { isSuccess, isPending, data } = trpc.viewer.integrations.useQuery({ + const { isSuccess, isPending, data } = trpc.viewer.apps.integrations.useQuery({ variant: "other", onlyInstalled: undefined, }); diff --git a/packages/app-store/zapier/pages/setup/index.tsx b/packages/app-store/zapier/pages/setup/index.tsx index 56353cc92f..5e2b6a0674 100644 --- a/packages/app-store/zapier/pages/setup/index.tsx +++ b/packages/app-store/zapier/pages/setup/index.tsx @@ -18,7 +18,7 @@ export default function ZapierSetup(props: IZapierSetupProps) { const [newApiKeys, setNewApiKeys] = useState>({}); const { t } = useLocale(); const utils = trpc.useUtils(); - const integrations = trpc.viewer.integrations.useQuery({ variant: "automation" }); + const integrations = trpc.viewer.apps.integrations.useQuery({ variant: "automation" }); const oldApiKey = trpc.viewer.apiKeys.findKeyOfType.useQuery({ appId: ZAPIER }); const teamsList = trpc.viewer.teams.listOwnedTeams.useQuery(undefined, { refetchOnWindowFocus: false, diff --git a/packages/features/apps/AdminAppsList.tsx b/packages/features/apps/AdminAppsList.tsx index 5c9af795e5..80627302fd 100644 --- a/packages/features/apps/AdminAppsList.tsx +++ b/packages/features/apps/AdminAppsList.tsx @@ -36,7 +36,7 @@ import { } from "@calcom/ui"; import cs from "@calcom/ui/classNames"; -type App = RouterOutputs["viewer"]["appsRouter"]["listLocal"][number]; +type App = RouterOutputs["viewer"]["apps"]["listLocal"][number]; const IntegrationContainer = ({ app, @@ -66,9 +66,9 @@ const IntegrationContainer = ({ } }; - const enableAppMutation = trpc.viewer.appsRouter.toggle.useMutation({ + const enableAppMutation = trpc.viewer.apps.toggle.useMutation({ onSuccess: (enabled) => { - utils.viewer.appsRouter.listLocal.invalidate({ category }); + utils.viewer.apps.listLocal.invalidate({ category }); setDisableDialog(false); showToast( enabled ? t("app_is_enabled", { appName: app.name }) : t("app_is_disabled", { appName: app.name }), @@ -197,10 +197,10 @@ const EditKeysModal: FC<{ resolver: zodResolver(appKeySchema), }); - const saveKeysMutation = trpc.viewer.appsRouter.saveKeys.useMutation({ + const saveKeysMutation = trpc.viewer.apps.saveKeys.useMutation({ onSuccess: () => { showToast(fromEnabled ? t("app_is_enabled", { appName }) : t("keys_have_been_saved"), "success"); - utils.viewer.appsRouter.listLocal.invalidate(); + utils.viewer.apps.listLocal.invalidate(); handleModelClose(); }, onError: (error) => { @@ -271,7 +271,7 @@ const AdminAppsListContainer = () => { const { t } = useLocale(); const category = searchParams?.get("category") || AppCategories.calendar; - const { data: apps, isPending } = trpc.viewer.appsRouter.listLocal.useQuery( + const { data: apps, isPending } = trpc.viewer.apps.listLocal.useQuery( { category }, { enabled: searchParams !== null } ); diff --git a/packages/features/apps/components/AppList.tsx b/packages/features/apps/components/AppList.tsx index 416dc5f006..0d00af0545 100644 --- a/packages/features/apps/components/AppList.tsx +++ b/packages/features/apps/components/AppList.tsx @@ -33,10 +33,10 @@ export type HandleDisconnect = (credentialId: number, app: App["slug"], teamId?: interface AppListProps { variant?: AppCategories; - data: RouterOutputs["viewer"]["integrations"]; + data: RouterOutputs["viewer"]["apps"]["integrations"]; handleDisconnect: HandleDisconnect; listClassName?: string; - defaultConferencingApp: RouterOutputs["viewer"]["getUsersDefaultConferencingApp"]; + defaultConferencingApp: RouterOutputs["viewer"]["apps"]["getUsersDefaultConferencingApp"]; handleUpdateUserDefaultConferencingApp: (params: UpdateUsersDefaultConferencingAppParams) => void; handleBulkUpdateDefaultLocation: (params: BulkUpdatParams) => void; isBulkUpdateDefaultLocationPending: boolean; @@ -72,7 +72,7 @@ export const AppList = ({ const ChildAppCard = ({ item, }: { - item: RouterOutputs["viewer"]["integrations"]["items"][number] & { + item: RouterOutputs["viewer"]["apps"]["integrations"]["items"][number] & { credentialOwner?: CredentialOwner; }; }) => { diff --git a/packages/features/apps/components/DisconnectIntegration.tsx b/packages/features/apps/components/DisconnectIntegration.tsx index d9f08f4aab..fbe5a8d2bb 100644 --- a/packages/features/apps/components/DisconnectIntegration.tsx +++ b/packages/features/apps/components/DisconnectIntegration.tsx @@ -34,7 +34,7 @@ export default function DisconnectIntegration(props: { }, async onSettled() { await utils.viewer.connectedCalendars.invalidate(); - await utils.viewer.integrations.invalidate(); + await utils.viewer.apps.integrations.invalidate(); }, }); diff --git a/packages/features/calendars/CalendarSwitch.tsx b/packages/features/calendars/CalendarSwitch.tsx index adc1b7b64b..aee9919131 100644 --- a/packages/features/calendars/CalendarSwitch.tsx +++ b/packages/features/calendars/CalendarSwitch.tsx @@ -80,7 +80,7 @@ const CalendarSwitch = (props: ICalendarSwitchProps) => { } }, async onSettled() { - await utils.viewer.integrations.invalidate(); + await utils.viewer.apps.integrations.invalidate(); await utils.viewer.connectedCalendars.invalidate(); }, onError() { diff --git a/packages/features/ee/teams/components/GoogleWorkspaceInviteButton.tsx b/packages/features/ee/teams/components/GoogleWorkspaceInviteButton.tsx index 92e6f3468f..68894770c0 100644 --- a/packages/features/ee/teams/components/GoogleWorkspaceInviteButton.tsx +++ b/packages/features/ee/teams/components/GoogleWorkspaceInviteButton.tsx @@ -41,7 +41,7 @@ export function GoogleWorkspaceInviteButton( const teamId = Number(params.id); const [googleWorkspaceLoading, setGoogleWorkspaceLoading] = useState(false); const { data: credential } = trpc.viewer.googleWorkspace.checkForGWorkspace.useQuery(); - const { data: hasGcalInstalled } = trpc.viewer.appsRouter.checkGlobalKeys.useQuery({ + const { data: hasGcalInstalled } = trpc.viewer.apps.checkGlobalKeys.useQuery({ slug: "google-calendar", }); const mutation = trpc.viewer.googleWorkspace.getUsersFromGWorkspace.useMutation({ diff --git a/packages/features/eventtypes/components/tabs/apps/EventAppsTab.tsx b/packages/features/eventtypes/components/tabs/apps/EventAppsTab.tsx index 09750e0004..819e16c87d 100644 --- a/packages/features/eventtypes/components/tabs/apps/EventAppsTab.tsx +++ b/packages/features/eventtypes/components/tabs/apps/EventAppsTab.tsx @@ -17,7 +17,7 @@ export type EventType = Pick["eventType"] & export const EventAppsTab = ({ eventType }: { eventType: EventType }) => { const { t } = useLocale(); - const { data: eventTypeApps, isPending } = trpc.viewer.integrations.useQuery({ + const { data: eventTypeApps, isPending } = trpc.viewer.apps.integrations.useQuery({ extendsFeature: "EventType", teamId: eventType.team?.id || eventType.parent?.teamId, }); diff --git a/packages/features/eventtypes/components/tabs/instant/InstantEventController.tsx b/packages/features/eventtypes/components/tabs/instant/InstantEventController.tsx index 6a073980ca..bb5c6022b5 100644 --- a/packages/features/eventtypes/components/tabs/instant/InstantEventController.tsx +++ b/packages/features/eventtypes/components/tabs/instant/InstantEventController.tsx @@ -270,7 +270,7 @@ const InstantMeetingWebhooks = ({ eventType }: { eventType: EventTypeSetup }) => eventTypeId: eventType.id, eventTriggers: [WebhookTriggerEvents.INSTANT_MEETING], }); - const { data: installedApps, isPending } = trpc.viewer.integrations.useQuery({ + const { data: installedApps, isPending } = trpc.viewer.apps.integrations.useQuery({ variant: "other", onlyInstalled: true, }); diff --git a/packages/features/eventtypes/components/tabs/webhooks/EventWebhooksTab.tsx b/packages/features/eventtypes/components/tabs/webhooks/EventWebhooksTab.tsx index b82f10d675..a2e4c1d018 100644 --- a/packages/features/eventtypes/components/tabs/webhooks/EventWebhooksTab.tsx +++ b/packages/features/eventtypes/components/tabs/webhooks/EventWebhooksTab.tsx @@ -23,7 +23,7 @@ export const EventWebhooksTab = ({ eventType }: Pick { const teamId = searchParams?.get("teamId") ? Number(searchParams.get("teamId")) : undefined; const platform = searchParams?.get("platform") ? Boolean(searchParams.get("platform")) : false; - const { data: installedApps, isPending } = trpc.viewer.integrations.useQuery( + const { data: installedApps, isPending } = trpc.viewer.apps.integrations.useQuery( { variant: "other", onlyInstalled: true }, { suspense: true, diff --git a/packages/lib/getConnectedApps.ts b/packages/lib/getConnectedApps.ts index 8891e0b7e0..0969ff8685 100644 --- a/packages/lib/getConnectedApps.ts +++ b/packages/lib/getConnectedApps.ts @@ -1,3 +1,5 @@ +import type { Prisma } from "@prisma/client"; + import appStore from "@calcom/app-store"; import type { TDependencyData } from "@calcom/app-store/_appRegistry"; import type { CredentialOwner } from "@calcom/app-store/types"; @@ -8,14 +10,41 @@ import { getUsersCredentials } from "@calcom/lib/server/getUsersCredentials"; import type { PrismaClient } from "@calcom/prisma"; import type { User } from "@calcom/prisma/client"; import { MembershipRole } from "@calcom/prisma/enums"; +import type { AppCategories } from "@calcom/prisma/enums"; import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential"; -import type { TeamQuery } from "@calcom/trpc/server/routers/loggedInViewer/integrations.handler"; -import type { TIntegrationsInputSchema } from "@calcom/trpc/server/routers/loggedInViewer/integrations.schema"; import type { PaymentApp } from "@calcom/types/PaymentService"; import { buildNonDelegationCredentials } from "./delegationCredential/clientAndServer"; export type ConnectedApps = Awaited>; +type InputSchema = { + variant?: string | undefined; + exclude?: Array | null; + onlyInstalled?: boolean | undefined; + includeTeamInstalledApps?: boolean | null; + extendsFeature?: "EventType" | null; + teamId?: number | null; + sortByMostPopular?: boolean | null; + sortByInstalledFirst?: boolean | null; + categories?: Array | null; + appId?: string | null; +}; + +export type TeamQuery = Prisma.TeamGetPayload<{ + select: { + id: true; + credentials: { + select: typeof import("@calcom/prisma/selects/credential").credentialForCalendarServiceSelect; + }; + name: true; + logoUrl: true; + members: { + select: { + role: true; + }; + }; + }; +}>; export async function getConnectedApps({ user, @@ -24,7 +53,7 @@ export async function getConnectedApps({ }: { user: Pick & { avatar?: string }; prisma: PrismaClient; - input: TIntegrationsInputSchema; + input: InputSchema; }) { const { variant, diff --git a/packages/lib/hooks/useApp.ts b/packages/lib/hooks/useApp.ts index 0c36a8b87e..f008eb72f6 100644 --- a/packages/lib/hooks/useApp.ts +++ b/packages/lib/hooks/useApp.ts @@ -5,7 +5,7 @@ import { trpc } from "@calcom/trpc/react"; export default function useApp(appId: string) { const { status } = useSession(); - return trpc.viewer.appById.useQuery( + return trpc.viewer.apps.appById.useQuery( { appId }, { enabled: status === "authenticated", diff --git a/packages/platform/atoms/connect/conferencing-apps/ConferencingAppsViewWebWrapper.tsx b/packages/platform/atoms/connect/conferencing-apps/ConferencingAppsViewWebWrapper.tsx index cccde46006..522415e60b 100644 --- a/packages/platform/atoms/connect/conferencing-apps/ConferencingAppsViewWebWrapper.tsx +++ b/packages/platform/atoms/connect/conferencing-apps/ConferencingAppsViewWebWrapper.tsx @@ -44,26 +44,26 @@ const InstalledConferencingApps = ({ const { t } = useLocale(); const utils = trpc.useUtils(); - const { data: defaultConferencingApp } = trpc.viewer.getUsersDefaultConferencingApp.useQuery(); + const { data: defaultConferencingApp } = trpc.viewer.apps.getUsersDefaultConferencingApp.useQuery(); - const updateDefaultAppMutation = trpc.viewer.updateUserDefaultConferencingApp.useMutation(); + const updateDefaultAppMutation = trpc.viewer.apps.updateUserDefaultConferencingApp.useMutation(); const updateLocationsMutation = trpc.viewer.eventTypes.bulkUpdateToDefaultLocation.useMutation(); const { data: eventTypesQueryData, isFetching: isEventTypesFetching } = trpc.viewer.eventTypes.bulkEventFetch.useQuery(); - const [result] = trpc.viewer.integrations.useSuspenseQuery({ + const [result] = trpc.viewer.apps.integrations.useSuspenseQuery({ variant: "conferencing", onlyInstalled: true, }); const handleConnectDisconnectIntegrationMenuToggle = () => { - utils.viewer.integrations.invalidate(); + utils.viewer.apps.integrations.invalidate(); }; const handleBulkEditDialogToggle = () => { - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); }; const handleUpdateUserDefaultConferencingApp = ({ @@ -77,7 +77,7 @@ const InstalledConferencingApps = ({ { onSuccess: () => { showToast("Default app updated successfully", "success"); - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); onSuccessCallback(); }, onError: (error) => { @@ -95,7 +95,7 @@ const InstalledConferencingApps = ({ }, { onSuccess: () => { - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + utils.viewer.apps.getUsersDefaultConferencingApp.invalidate(); callback(); }, } @@ -189,7 +189,7 @@ export const ConferencingAppsViewWebWrapper = ({ onSuccess: () => { showToast(t("app_removed_successfully"), "success"); callback(); - utils.viewer.integrations.invalidate(); + utils.viewer.apps.integrations.invalidate(); utils.viewer.connectedCalendars.invalidate(); }, onError: () => { diff --git a/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx index b77f628a0e..abc69d8493 100644 --- a/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx +++ b/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx @@ -109,7 +109,7 @@ const EventTypeWeb = ({ id, ...rest }: EventTypeSetupProps & { id: number }) => const [pendingRoute, setPendingRoute] = useState(""); const { eventType, locationOptions, team, teamMembers, destinationCalendar } = rest; const [slugExistsChildrenDialogOpen, setSlugExistsChildrenDialogOpen] = useState([]); - const { data: eventTypeApps } = trpc.viewer.integrations.useQuery({ + const { data: eventTypeApps } = trpc.viewer.apps.integrations.useQuery({ extendsFeature: "EventType", teamId: eventType.team?.id || eventType.parent?.teamId, onlyInstalled: true, diff --git a/packages/platform/libraries/index.ts b/packages/platform/libraries/index.ts index 16238f9361..53fc1d0992 100644 --- a/packages/platform/libraries/index.ts +++ b/packages/platform/libraries/index.ts @@ -15,7 +15,6 @@ import { getTranslation } from "@calcom/lib/server/i18n"; import { MembershipRole } from "@calcom/prisma/enums"; import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential"; import { paymentDataSelect } from "@calcom/prisma/selects/payment"; -import type { TeamQuery } from "@calcom/trpc/server/routers/loggedInViewer/integrations.handler"; import { createNewUsersConnectToOrgIfExists } from "@calcom/trpc/server/routers/viewer/teams/inviteMember/utils"; export { getUsersCredentials } from "@calcom/lib/server/getUsersCredentials"; @@ -78,7 +77,22 @@ export { roundRobinManualReassignment } from "@calcom/features/ee/round-robin/ro export { ErrorCode } from "@calcom/lib/errorCodes"; export { validateCustomEventName } from "@calcom/lib/event"; -export type { TeamQuery }; + +export type TeamQuery = Prisma.TeamGetPayload<{ + select: { + id: true; + credentials: { + select: typeof import("@calcom/prisma/selects/credential").credentialForCalendarServiceSelect; + }; + name: true; + logoUrl: true; + members: { + select: { + role: true; + }; + }; + }; +}>; export { credentialForCalendarServiceSelect }; export { MembershipRole }; diff --git a/packages/trpc/react/shared.ts b/packages/trpc/react/shared.ts index 45bd724cf6..e4252132bc 100644 --- a/packages/trpc/react/shared.ts +++ b/packages/trpc/react/shared.ts @@ -28,7 +28,6 @@ export const ENDPOINTS = [ "viewer", "webhook", "workflows", - "appsRouter", "googleWorkspace", "oAuth", "attributes", diff --git a/packages/trpc/server/routers/loggedInViewer/_router.tsx b/packages/trpc/server/routers/loggedInViewer/_router.tsx index e21eeec7ff..052aee5b99 100644 --- a/packages/trpc/server/routers/loggedInViewer/_router.tsx +++ b/packages/trpc/server/routers/loggedInViewer/_router.tsx @@ -2,15 +2,12 @@ import authedProcedure from "../../procedures/authedProcedure"; import { importHandler, router } from "../../trpc"; import { ZAddNotificationsSubscriptionInputSchema } from "./addNotificationsSubscription.schema"; import { ZAddSecondaryEmailInputSchema } from "./addSecondaryEmail.schema"; -import { ZAppByIdInputSchema } from "./appById.schema"; -import { ZAppCredentialsByTypeInputSchema } from "./appCredentialsByType.schema"; import { ZConnectAndJoinInputSchema } from "./connectAndJoin.schema"; import { ZConnectedCalendarsInputSchema } from "./connectedCalendars.schema"; import { ZDeleteCredentialInputSchema } from "./deleteCredential.schema"; import { ZEventTypeOrderInputSchema } from "./eventTypeOrder.schema"; import { ZGetCalVideoRecordingsInputSchema } from "./getCalVideoRecordings.schema"; import { ZGetDownloadLinkOfCalVideoRecordingsInputSchema } from "./getDownloadLinkOfCalVideoRecordings.schema"; -import { ZIntegrationsInputSchema } from "./integrations.schema"; import { ZLocationOptionsInputSchema } from "./locationOptions.schema"; import { ZNoShowInputSchema } from "./markNoShow.schema"; import { ZOutOfOfficeInputSchema } from "./outOfOfficeCreateOrUpdate.schema"; @@ -22,7 +19,6 @@ import { ZRoutingFormOrderInputSchema } from "./routingFormOrder.schema"; import { ZSetDestinationCalendarInputSchema } from "./setDestinationCalendar.schema"; import { ZSubmitFeedbackInputSchema } from "./submitFeedback.schema"; import { ZUpdateProfileInputSchema } from "./updateProfile.schema"; -import { ZUpdateUserDefaultConferencingAppInputSchema } from "./updateUserDefaultConferencingApp.schema"; import { ZWorkflowOrderInputSchema } from "./workflowOrder.schema"; const NAMESPACE = "loggedInViewer"; @@ -32,9 +28,6 @@ const namespaced = (s: string) => `${NAMESPACE}.${s}`; type AppsRouterHandlerCache = { connectedCalendars?: typeof import("./connectedCalendars.handler").connectedCalendarsHandler; setDestinationCalendar?: typeof import("./setDestinationCalendar.handler").setDestinationCalendarHandler; - integrations?: typeof import("./integrations.handler").integrationsHandler; - appById?: typeof import("./appById.handler").appByIdHandler; - appCredentialsByType?: typeof import("./appCredentialsByType.handler").appCredentialsByTypeHandler; stripeCustomer?: typeof import("./stripeCustomer.handler").stripeCustomerHandler; updateProfile?: typeof import("./updateProfile.handler").updateProfileHandler; eventTypeOrder?: typeof import("./eventTypeOrder.handler").eventTypeOrderHandler; @@ -45,8 +38,6 @@ type AppsRouterHandlerCache = { deleteCredential?: typeof import("./deleteCredential.handler").deleteCredentialHandler; getCalVideoRecordings?: typeof import("./getCalVideoRecordings.handler").getCalVideoRecordingsHandler; getDownloadLinkOfCalVideoRecordings?: typeof import("./getDownloadLinkOfCalVideoRecordings.handler").getDownloadLinkOfCalVideoRecordingsHandler; - getUsersDefaultConferencingApp?: typeof import("./getUsersDefaultConferencingApp.handler").getUsersDefaultConferencingAppHandler; - updateUserDefaultConferencingApp?: typeof import("./updateUserDefaultConferencingApp.handler").updateUserDefaultConferencingAppHandler; teamsAndUserProfilesQuery?: typeof import("./teamsAndUserProfilesQuery.handler").teamsAndUserProfilesQuery; connectAndJoin?: typeof import("./connectAndJoin.handler").Handler; outOfOfficeCreateOrUpdate?: typeof import("./outOfOfficeCreateOrUpdate.handler").outOfOfficeCreateOrUpdate; @@ -95,49 +86,6 @@ export const loggedInViewerRouter = router({ return UNSTABLE_HANDLER_CACHE.setDestinationCalendar({ ctx, input }); }), - integrations: authedProcedure.input(ZIntegrationsInputSchema).query(async ({ ctx, input }) => { - if (!UNSTABLE_HANDLER_CACHE.integrations) { - UNSTABLE_HANDLER_CACHE.integrations = (await import("./integrations.handler")).integrationsHandler; - } - - // Unreachable code but required for type safety - if (!UNSTABLE_HANDLER_CACHE.integrations) { - throw new Error("Failed to load handler"); - } - - return UNSTABLE_HANDLER_CACHE.integrations({ ctx, input }); - }), - - appById: authedProcedure.input(ZAppByIdInputSchema).query(async ({ ctx, input }) => { - if (!UNSTABLE_HANDLER_CACHE.appById) { - UNSTABLE_HANDLER_CACHE.appById = (await import("./appById.handler")).appByIdHandler; - } - - // Unreachable code but required for type safety - if (!UNSTABLE_HANDLER_CACHE.appById) { - throw new Error("Failed to load handler"); - } - - return UNSTABLE_HANDLER_CACHE.appById({ ctx, input }); - }), - - appCredentialsByType: authedProcedure - .input(ZAppCredentialsByTypeInputSchema) - .query(async ({ ctx, input }) => { - if (!UNSTABLE_HANDLER_CACHE.appCredentialsByType) { - UNSTABLE_HANDLER_CACHE.appCredentialsByType = ( - await import("./appCredentialsByType.handler") - ).appCredentialsByTypeHandler; - } - - // Unreachable code but required for type safety - if (!UNSTABLE_HANDLER_CACHE.appCredentialsByType) { - throw new Error("Failed to load handler"); - } - - return UNSTABLE_HANDLER_CACHE.appCredentialsByType({ ctx, input }); - }), - stripeCustomer: authedProcedure.query(async ({ ctx }) => { if (!UNSTABLE_HANDLER_CACHE.stripeCustomer) { UNSTABLE_HANDLER_CACHE.stripeCustomer = ( @@ -296,38 +244,6 @@ export const loggedInViewerRouter = router({ return UNSTABLE_HANDLER_CACHE.getDownloadLinkOfCalVideoRecordings({ ctx, input }); }), - - getUsersDefaultConferencingApp: authedProcedure.query(async ({ ctx }) => { - if (!UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp) { - UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp = ( - await import("./getUsersDefaultConferencingApp.handler") - ).getUsersDefaultConferencingAppHandler; - } - - // Unreachable code but required for type safety - if (!UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp) { - throw new Error("Failed to load handler"); - } - - return UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp({ ctx }); - }), - - updateUserDefaultConferencingApp: authedProcedure - .input(ZUpdateUserDefaultConferencingAppInputSchema) - .mutation(async ({ ctx, input }) => { - if (!UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp) { - UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp = ( - await import("./updateUserDefaultConferencingApp.handler") - ).updateUserDefaultConferencingAppHandler; - } - - // Unreachable code but required for type safety - if (!UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp) { - throw new Error("Failed to load handler"); - } - - return UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp({ ctx, input }); - }), teamsAndUserProfilesQuery, connectAndJoin: authedProcedure.input(ZConnectAndJoinInputSchema).mutation(async ({ ctx, input }) => { if (!UNSTABLE_HANDLER_CACHE.connectAndJoin) { diff --git a/packages/trpc/server/routers/viewer/_router.tsx b/packages/trpc/server/routers/viewer/_router.tsx index 55b4301e6c..69915b81c8 100644 --- a/packages/trpc/server/routers/viewer/_router.tsx +++ b/packages/trpc/server/routers/viewer/_router.tsx @@ -37,6 +37,7 @@ export const viewerRouter = mergeRouters( loggedInViewerRouter, router({ + apps: appsRouter, me: meRouter, public: publicViewerRouter, auth: authRouter, @@ -62,7 +63,6 @@ export const viewerRouter = mergeRouters( appRoutingForms: app_RoutingForms, appBasecamp3: app_Basecamp3, features: featureFlagRouter, - appsRouter, users: userAdminRouter, oAuth: oAuthRouter, googleWorkspace: googleWorkspaceRouter, diff --git a/packages/trpc/server/routers/viewer/apps/_router.tsx b/packages/trpc/server/routers/viewer/apps/_router.tsx index 66093c3e03..6bf4c86edf 100644 --- a/packages/trpc/server/routers/viewer/apps/_router.tsx +++ b/packages/trpc/server/routers/viewer/apps/_router.tsx @@ -1,14 +1,22 @@ import authedProcedure, { authedAdminProcedure } from "../../../procedures/authedProcedure"; import { router } from "../../../trpc"; +import { ZAppByIdInputSchema } from "./appById.schema"; +import { ZAppCredentialsByTypeInputSchema } from "./appCredentialsByType.schema"; import { checkGlobalKeysSchema } from "./checkGlobalKeys.schema"; +import { ZIntegrationsInputSchema } from "./integrations.schema"; import { ZListLocalInputSchema } from "./listLocal.schema"; import { ZQueryForDependenciesInputSchema } from "./queryForDependencies.schema"; import { ZSaveKeysInputSchema } from "./saveKeys.schema"; import { ZSetDefaultConferencingAppSchema } from "./setDefaultConferencingApp.schema"; import { ZToggleInputSchema } from "./toggle.schema"; import { ZUpdateAppCredentialsInputSchema } from "./updateAppCredentials.schema"; +import { ZUpdateUserDefaultConferencingAppInputSchema } from "./updateUserDefaultConferencingApp.schema"; type AppsRouterHandlerCache = { + appById?: typeof import("./appById.handler").appByIdHandler; + appCredentialsByType?: typeof import("./appCredentialsByType.handler").appCredentialsByTypeHandler; + getUsersDefaultConferencingApp?: typeof import("./getUsersDefaultConferencingApp.handler").getUsersDefaultConferencingAppHandler; + integrations?: typeof import("./integrations.handler").integrationsHandler; listLocal?: typeof import("./listLocal.handler").listLocalHandler; toggle?: typeof import("./toggle.handler").toggleHandler; saveKeys?: typeof import("./saveKeys.handler").saveKeysHandler; @@ -17,11 +25,67 @@ type AppsRouterHandlerCache = { queryForDependencies?: typeof import("./queryForDependencies.handler").queryForDependenciesHandler; checkGlobalKeys?: typeof import("./checkGlobalKeys.handler").checkForGlobalKeysHandler; setDefaultConferencingApp?: typeof import("./setDefaultConferencingApp.handler").setDefaultConferencingAppHandler; + updateUserDefaultConferencingApp?: typeof import("./updateUserDefaultConferencingApp.handler").updateUserDefaultConferencingAppHandler; }; const UNSTABLE_HANDLER_CACHE: AppsRouterHandlerCache = {}; export const appsRouter = router({ + appById: authedProcedure.input(ZAppByIdInputSchema).query(async ({ ctx, input }) => { + if (!UNSTABLE_HANDLER_CACHE.appById) { + UNSTABLE_HANDLER_CACHE.appById = (await import("./appById.handler")).appByIdHandler; + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.appById) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.appById({ ctx, input }); + }), + + appCredentialsByType: authedProcedure + .input(ZAppCredentialsByTypeInputSchema) + .query(async ({ ctx, input }) => { + if (!UNSTABLE_HANDLER_CACHE.appCredentialsByType) { + UNSTABLE_HANDLER_CACHE.appCredentialsByType = ( + await import("./appCredentialsByType.handler") + ).appCredentialsByTypeHandler; + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.appCredentialsByType) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.appCredentialsByType({ ctx, input }); + }), + getUsersDefaultConferencingApp: authedProcedure.query(async ({ ctx }) => { + if (!UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp) { + UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp = ( + await import("./getUsersDefaultConferencingApp.handler") + ).getUsersDefaultConferencingAppHandler; + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.getUsersDefaultConferencingApp({ ctx }); + }), + integrations: authedProcedure.input(ZIntegrationsInputSchema).query(async ({ ctx, input }) => { + if (!UNSTABLE_HANDLER_CACHE.integrations) { + UNSTABLE_HANDLER_CACHE.integrations = (await import("./integrations.handler")).integrationsHandler; + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.integrations) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.integrations({ ctx, input }); + }), listLocal: authedAdminProcedure.input(ZListLocalInputSchema).query(async ({ ctx, input }) => { if (!UNSTABLE_HANDLER_CACHE.listLocal) { UNSTABLE_HANDLER_CACHE.listLocal = await import("./listLocal.handler").then( @@ -164,4 +228,20 @@ export const appsRouter = router({ input, }); }), + updateUserDefaultConferencingApp: authedProcedure + .input(ZUpdateUserDefaultConferencingAppInputSchema) + .mutation(async ({ ctx, input }) => { + if (!UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp) { + UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp = ( + await import("./updateUserDefaultConferencingApp.handler") + ).updateUserDefaultConferencingAppHandler; + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.updateUserDefaultConferencingApp({ ctx, input }); + }), }); diff --git a/packages/trpc/server/routers/loggedInViewer/appById.handler.ts b/packages/trpc/server/routers/viewer/apps/appById.handler.ts similarity index 93% rename from packages/trpc/server/routers/loggedInViewer/appById.handler.ts rename to packages/trpc/server/routers/viewer/apps/appById.handler.ts index 83d0a8ac3c..be47eec6e0 100644 --- a/packages/trpc/server/routers/loggedInViewer/appById.handler.ts +++ b/packages/trpc/server/routers/viewer/apps/appById.handler.ts @@ -1,9 +1,9 @@ import getApps from "@calcom/app-store/utils"; import { getUsersCredentials } from "@calcom/lib/server/getUsersCredentials"; -import type { TrpcSessionUser } from "@calcom/trpc/server/trpc"; import { TRPCError } from "@trpc/server"; +import type { TrpcSessionUser } from "../../../trpc"; import type { TAppByIdInputSchema } from "./appById.schema"; type AppByIdOptions = { diff --git a/packages/trpc/server/routers/loggedInViewer/appById.schema.ts b/packages/trpc/server/routers/viewer/apps/appById.schema.ts similarity index 100% rename from packages/trpc/server/routers/loggedInViewer/appById.schema.ts rename to packages/trpc/server/routers/viewer/apps/appById.schema.ts diff --git a/packages/trpc/server/routers/loggedInViewer/appCredentialsByType.handler.ts b/packages/trpc/server/routers/viewer/apps/appCredentialsByType.handler.ts similarity index 96% rename from packages/trpc/server/routers/loggedInViewer/appCredentialsByType.handler.ts rename to packages/trpc/server/routers/viewer/apps/appCredentialsByType.handler.ts index 5ad4ca7eea..4b71f4c098 100644 --- a/packages/trpc/server/routers/loggedInViewer/appCredentialsByType.handler.ts +++ b/packages/trpc/server/routers/viewer/apps/appCredentialsByType.handler.ts @@ -1,8 +1,8 @@ import { getAllDelegationCredentialsForUserByAppType } from "@calcom/lib/delegationCredential/server"; import { UserRepository } from "@calcom/lib/server/repository/user"; import { prisma } from "@calcom/prisma"; -import type { TrpcSessionUser } from "@calcom/trpc/server/trpc"; +import type { TrpcSessionUser } from "../../../trpc"; import type { TAppCredentialsByTypeInputSchema } from "./appCredentialsByType.schema"; type AppCredentialsByTypeOptions = { diff --git a/packages/trpc/server/routers/loggedInViewer/appCredentialsByType.schema.ts b/packages/trpc/server/routers/viewer/apps/appCredentialsByType.schema.ts similarity index 100% rename from packages/trpc/server/routers/loggedInViewer/appCredentialsByType.schema.ts rename to packages/trpc/server/routers/viewer/apps/appCredentialsByType.schema.ts diff --git a/packages/trpc/server/routers/loggedInViewer/getUsersDefaultConferencingApp.handler.ts b/packages/trpc/server/routers/viewer/apps/getUsersDefaultConferencingApp.handler.ts similarity index 84% rename from packages/trpc/server/routers/loggedInViewer/getUsersDefaultConferencingApp.handler.ts rename to packages/trpc/server/routers/viewer/apps/getUsersDefaultConferencingApp.handler.ts index bfe662c1fc..ccf0c82623 100644 --- a/packages/trpc/server/routers/loggedInViewer/getUsersDefaultConferencingApp.handler.ts +++ b/packages/trpc/server/routers/viewer/apps/getUsersDefaultConferencingApp.handler.ts @@ -1,5 +1,6 @@ import { userMetadata } from "@calcom/prisma/zod-utils"; -import type { TrpcSessionUser } from "@calcom/trpc/server/trpc"; + +import type { TrpcSessionUser } from "../../../trpc"; type GetUsersDefaultConferencingAppOptions = { ctx: { diff --git a/packages/trpc/server/routers/loggedInViewer/getUsersDefaultConferencingApp.schema.ts b/packages/trpc/server/routers/viewer/apps/getUsersDefaultConferencingApp.schema.ts similarity index 100% rename from packages/trpc/server/routers/loggedInViewer/getUsersDefaultConferencingApp.schema.ts rename to packages/trpc/server/routers/viewer/apps/getUsersDefaultConferencingApp.schema.ts diff --git a/packages/trpc/server/routers/loggedInViewer/integrations.handler.ts b/packages/trpc/server/routers/viewer/apps/integrations.handler.ts similarity index 59% rename from packages/trpc/server/routers/loggedInViewer/integrations.handler.ts rename to packages/trpc/server/routers/viewer/apps/integrations.handler.ts index 3029038b1b..acf5ffcd21 100644 --- a/packages/trpc/server/routers/loggedInViewer/integrations.handler.ts +++ b/packages/trpc/server/routers/viewer/apps/integrations.handler.ts @@ -1,5 +1,3 @@ -import type { Prisma } from "@prisma/client"; - import { getConnectedApps } from "@calcom/lib/getConnectedApps"; import { prisma } from "@calcom/prisma"; import type { TrpcSessionUser } from "@calcom/trpc/server/trpc"; @@ -13,22 +11,6 @@ type IntegrationsOptions = { input: TIntegrationsInputSchema; }; -export type TeamQuery = Prisma.TeamGetPayload<{ - select: { - id: true; - credentials: { - select: typeof import("@calcom/prisma/selects/credential").credentialForCalendarServiceSelect; - }; - name: true; - logoUrl: true; - members: { - select: { - role: true; - }; - }; - }; -}>; - export const integrationsHandler = async ({ ctx, input }: IntegrationsOptions) => { const user = ctx.user; return getConnectedApps({ user, input, prisma }); diff --git a/packages/trpc/server/routers/loggedInViewer/integrations.schema.ts b/packages/trpc/server/routers/viewer/apps/integrations.schema.ts similarity index 100% rename from packages/trpc/server/routers/loggedInViewer/integrations.schema.ts rename to packages/trpc/server/routers/viewer/apps/integrations.schema.ts diff --git a/packages/trpc/server/routers/loggedInViewer/updateUserDefaultConferencingApp.handler.ts b/packages/trpc/server/routers/viewer/apps/updateUserDefaultConferencingApp.handler.ts similarity index 96% rename from packages/trpc/server/routers/loggedInViewer/updateUserDefaultConferencingApp.handler.ts rename to packages/trpc/server/routers/viewer/apps/updateUserDefaultConferencingApp.handler.ts index d0bfafd5bf..610691549b 100644 --- a/packages/trpc/server/routers/loggedInViewer/updateUserDefaultConferencingApp.handler.ts +++ b/packages/trpc/server/routers/viewer/apps/updateUserDefaultConferencingApp.handler.ts @@ -4,10 +4,10 @@ import getApps from "@calcom/app-store/utils"; import { getUsersCredentials } from "@calcom/lib/server/getUsersCredentials"; import { prisma } from "@calcom/prisma"; import { userMetadata } from "@calcom/prisma/zod-utils"; -import type { TrpcSessionUser } from "@calcom/trpc/server/trpc"; import { TRPCError } from "@trpc/server"; +import type { TrpcSessionUser } from "../../../trpc"; import type { TUpdateUserDefaultConferencingAppInputSchema } from "./updateUserDefaultConferencingApp.schema"; type UpdateUserDefaultConferencingAppOptions = { diff --git a/packages/trpc/server/routers/loggedInViewer/updateUserDefaultConferencingApp.schema.ts b/packages/trpc/server/routers/viewer/apps/updateUserDefaultConferencingApp.schema.ts similarity index 100% rename from packages/trpc/server/routers/loggedInViewer/updateUserDefaultConferencingApp.schema.ts rename to packages/trpc/server/routers/viewer/apps/updateUserDefaultConferencingApp.schema.ts