import { getBookerBaseUrl } from "@calcom/lib/getBookerUrl/server"; import { safeStringify } from "@calcom/lib/safeStringify"; import logger from "../logger"; type BookingEventType = { slug: string; team: { slug: string | null; parentId: number | null; } | null; }; /** * It has its profile always set and if organizationId is null, then username would be regular(non-org) username. */ type ProfileEnrichedBookingUser = { profile: { organizationId: number | null; username: string | null }; } | null; export function getOrganizationIdOfBooking(booking: { eventType: BookingEventType; profileEnrichedBookingUser: ProfileEnrichedBookingUser; }) { const { eventType, profileEnrichedBookingUser } = booking; return eventType.team ? eventType.team.parentId : profileEnrichedBookingUser?.profile.organizationId ?? null; } export async function buildEventUrlFromBooking(booking: { eventType: BookingEventType; profileEnrichedBookingUser: ProfileEnrichedBookingUser; dynamicGroupSlugRef: string | null; }) { const { eventType, dynamicGroupSlugRef, profileEnrichedBookingUser } = booking; const eventSlug = eventType.slug; const eventTeam = eventType.team; const bookingOrganizationId = getOrganizationIdOfBooking({ eventType, profileEnrichedBookingUser }); const bookerUrl = await getBookerBaseUrl(bookingOrganizationId); if (dynamicGroupSlugRef) { return `${bookerUrl}/${dynamicGroupSlugRef}/${eventSlug}`; } if (eventTeam?.slug) { return `${bookerUrl}/team/${eventTeam.slug}/${eventSlug}`; } const username = profileEnrichedBookingUser?.profile?.username; if (!username) { logger.error("No username found for booking user.", safeStringify({ profileEnrichedBookingUser })); throw new Error("No username found for booking user."); } return `${bookerUrl}/${username}/${eventSlug}`; }