{"record":{"id":"004cef9da3b4ad30","repo":"calcom/cal.diy","slug":"default-conferencing-app-defaultapp-appslug-d","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/bulkUpdateEventsToDefaultLocation.ts","lineNumber":29,"sourceCode":"export const bulkUpdateEventsToDefaultLocation = async ({\n  eventTypeIds,\n  user,\n  prisma,\n}: {\n  eventTypeIds: number[];\n  user: Pick<User, \"id\" | \"metadata\">;\n  prisma: PrismaLike;\n}) => {\n  const defaultApp = userMetadataSchema.parse(user.metadata)?.defaultConferencingApp;\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      userId: user.id,\n      appId: foundApp.slug,\n    },\n    select: {\n      id: true,\n    },\n  });\n\n  const eventTypesToUpdate = await prisma.eventType.findMany({\n    where: {\n      id: {\n        in: eventTypeIds,\n      },\n      userId: user.id,","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/calcom/cal.diy/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/bulkUpdateEventsToDefaultLocation.ts#L11-L47","documentation":"Thrown by bulkUpdateEventsToDefaultLocation when the defaultConferencingApp.appSlug stored in user metadata does not resolve to a registered app (getAppFromSlug returns undefined) or that app has no location type in its appData. The stored slug is stale or refers to an app no longer available.","triggerScenarios":"User metadata points to defaultConferencingApp.appSlug that is not in the app registry, or the app exists but exposes no appData.location.type. Happens when an app was uninstalled/renamed/disabled after the user set it as default.","commonSituations":"App slug renamed in an upgrade; app package removed from the build; user manually edited metadata; app disabled via feature flags; the app never had a conferencing location type (misconfigured as a default conferencing app).","solutions":["Have the user re-pick a default conferencing app so metadata stores a current, valid slug.","If an app was renamed, migrate affected users' metadata to the new slug.","Verify the app is installed and generated in the app-store so getAppFromSlug finds it.","Guard callers: clear the default and prompt re-selection when getAppFromSlug returns undefined."],"exampleFix":"// before - trusting stored metadata blindly\nawait bulkUpdateEventsToDefaultLocation({ eventTypeIds, user, prisma });\n// after - validate the slug resolves\nimport { getAppFromSlug } from '@calcom/app-store/utils';\nconst slug = userMetadataSchema.parse(user.metadata)?.defaultConferencingApp?.appSlug;\nif (!slug || !getAppFromSlug(slug)?.appData?.location?.type) {\n  return res.status(400).json({ message: 'Default conferencing app is no longer available' });\n}","handlingStrategy":"validation","validationCode":"import { getAppFromSlug } from '@calcom/app-store/utils';\nconst slug = userMetadataSchema.parse(user.metadata)?.defaultConferencingApp?.appSlug;\nif (!slug || !getAppFromSlug(slug)?.appData?.location?.type) {\n  return res.status(400).json({ message: 'Default conferencing app is no longer available' });\n}","typeGuard":"function isUsableConferencingApp(slug: string): boolean {\n  return !!getAppFromSlug(slug)?.appData?.location?.type;\n}","tryCatchPattern":"null","preventionTips":["Validate the stored slug resolves to an app with a location type before bulk update.","Run slug migrations when an app is renamed so metadata stays valid.","Clear stale defaults and prompt re-selection when an app is uninstalled."],"tags":["event-types","conferencing","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"}