{"record":{"id":"3105428e6eb86485","repo":"calcom/cal.diy","slug":"default-conferencing-app-defaultapp-appslug-d-310542","errorCode":null,"errorMessage":"Default conferencing app '${defaultApp.appSlug}' doesnt exist.","messagePattern":"Default conferencing app '(.+?)' doesnt exist\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/app-store/_utils/bulkUpdateTeamEventsToDefaultLocation.ts","lineNumber":30,"sourceCode":"  eventTypeIds: number[];\n  teamId: number;\n  prisma: PrismaClient;\n}) => {\n  const team = await prisma.team.findUnique({\n    where: { id: teamId },\n    select: { metadata: true },\n  });\n  const metadataResult = teamMetadataSchema.safeParse(team?.metadata);\n  const defaultApp = metadataResult.success ? metadataResult.data?.defaultConferencingApp : null;\n\n  if (!defaultApp) {\n    throw new Error(\"Default conferencing app not set\");\n  }\n\n  const foundApp = getAppFromSlug(defaultApp.appSlug);\n  const appType = foundApp?.appData?.location?.type;\n  if (!appType) {\n    throw new Error(`Default conferencing app '${defaultApp.appSlug}' doesnt exist.`);\n  }\n\n  const credential = await prisma.credential.findFirst({\n    where: {\n      teamId,\n      appId: foundApp.slug,\n    },\n    select: {\n      id: true,\n    },\n  });\n\n  return await prisma.eventType.updateMany({\n    where: {\n      id: {\n        in: eventTypeIds,\n      },\n      teamId,","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/calcom/cal.diy/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/bulkUpdateTeamEventsToDefaultLocation.ts#L12-L48","documentation":"Thrown by bulkUpdateTeamEventsToDefaultLocation when the team's defaultConferencingApp.appSlug does not resolve to a valid app with a location type via getAppFromSlug. Team-level counterpart of the user version: the stored team default refers to an app that no longer exists or lacks a conferencing location.","triggerScenarios":"Team metadata.defaultConferencingApp.appSlug is set but getAppFromSlug returns undefined, or the found app has no appData.location.type. Occurs after an app is uninstalled/renamed/disabled while the team default still references it.","commonSituations":"App slug renamed across versions; app package removed; team metadata edited manually; app feature-flagged off; non-conferencing app mistakenly set as the team default.","solutions":["Have a team admin re-select a current default conferencing app in team settings.","Migrate team metadata slugs if an app was renamed in an upgrade.","Ensure the target app is installed/generated so getAppFromSlug resolves it.","Guard callers and prompt re-selection when the slug is invalid."],"exampleFix":"// before\nawait bulkUpdateTeamEventsToDefaultLocation({ eventTypeIds, teamId, prisma });\n// after\nconst slug = parsed.data?.defaultConferencingApp?.appSlug;\nif (!slug || !getAppFromSlug(slug)?.appData?.location?.type) {\n  return res.status(400).json({ message: 'Team default conferencing app unavailable' });\n}","handlingStrategy":"validation","validationCode":"import { getAppFromSlug } from '@calcom/app-store/utils';\nconst slug = parsed.data?.defaultConferencingApp?.appSlug;\nif (!slug || !getAppFromSlug(slug)?.appData?.location?.type) {\n  return res.status(400).json({ message: 'Team default conferencing app unavailable' });\n}","typeGuard":"function isUsableTeamConferencingApp(slug: string): boolean {\n  return !!getAppFromSlug(slug)?.appData?.location?.type;\n}","tryCatchPattern":"null","preventionTips":["Validate the team's stored slug resolves to a valid conferencing app before bulk update.","Migrate team metadata slugs across app renames.","Prompt team admins to re-select a default when an app is removed."],"tags":["event-types","conferencing","team","metadata","app-store","stale-config"],"backgroundTag":null,"analyzedSha":"176037d0afbe572f870a3c702985e7cd83fe6c0c","analyzedAt":"2026-08-12T19:12:41.464Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}