{"record":{"id":"eaac351efad1c9ff","repo":"calcom/cal.diy","slug":"something-went-wrong-unable-to-get-recording","errorCode":null,"errorMessage":"Something went wrong! Unable to get recording","messagePattern":"Something went wrong! Unable to get recording","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/app-store/dailyvideo/lib/VideoApiAdapter.ts","lineNumber":413,"sourceCode":"    getAvailability: () => {\n      return Promise.resolve([]);\n    },\n    createMeeting: async (event: CalendarEvent): Promise<VideoCallData> =>\n      createOrUpdateMeeting(\"/rooms\", event, region),\n    deleteMeeting: async (uid: string): Promise<void> => {\n      await fetcher(`/rooms/${uid}`, { method: \"DELETE\" });\n      return Promise.resolve();\n    },\n    updateMeeting: (bookingRef: PartialReference, event: CalendarEvent): Promise<VideoCallData> =>\n      createOrUpdateMeeting(`/rooms/${bookingRef.uid}`, event, region),\n    getRecordings: async (roomName: string): Promise<GetRecordingsResponseSchema> => {\n      try {\n        const res = await fetcher(`/recordings?room_name=${roomName}`).then(\n          getRecordingsResponseSchema.parse\n        );\n        return Promise.resolve(res);\n      } catch {\n        throw new Error(\"Something went wrong! Unable to get recording\");\n      }\n    },\n    createInstantCalVideoRoom: (endTime: string) => createInstantMeeting(endTime, region),\n    getRecordingDownloadLink: async (recordingId: string): Promise<GetAccessLinkResponseSchema> => {\n      try {\n        const res = await fetcher(`/recordings/${recordingId}/access-link?valid_for_secs=43200`).then(\n          getAccessLinkResponseSchema.parse\n        );\n        return Promise.resolve(res);\n      } catch (err) {\n        console.log(\"err\", err);\n        throw new Error(\"Something went wrong! Unable to get recording access link\");\n      }\n    },\n    getAllTranscriptsAccessLinkFromRoomName: async (roomName: string): Promise<Array<string>> => {\n      try {\n        const allTranscripts = await fetcher(`/transcript?room_name=${roomName}`).then(getTranscripts.parse);\n","sourceCodeStart":395,"sourceCodeEnd":431,"githubUrl":"https://github.com/calcom/cal.diy/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/dailyvideo/lib/VideoApiAdapter.ts#L395-L431","documentation":"`getRecordings` wraps a `fetcher(`/recordings?room_name=${roomName}`)` call (Zod-parsed via `getRecordingsResponseSchema`) in try/catch and re-throws a generic Error on any failure. The original error (network, non-2xx, schema mismatch) is discarded, leaving only this message.","triggerScenarios":"Daily API returns a non-2xx for the recordings listing (auth failure, unknown room name, rate limit), the response shape doesn't match `getRecordingsResponseSchema`, or the network request throws.","commonSituations":"Daily API key expired/invalid; `roomName` doesn't match an existing Daily room; Daily API schema changed after an upgrade breaking the Zod parse; transient network error; room with no recordings returns a shape the schema rejects.","solutions":["Re-throw with `cause` so the original Daily response/schema error is preserved.","Verify the Daily API credential is valid and the room name exists.","Confirm `getRecordingsResponseSchema` matches the current Daily recordings API response shape.","Treat a `404 recordings-not-found` response as an empty list rather than an error."],"exampleFix":"// before\ntry {\n  const res = await fetcher(`/recordings?room_name=${roomName}`).then(getRecordingsResponseSchema.parse);\n  return Promise.resolve(res);\n} catch {\n  throw new Error(\"Something went wrong! Unable to get recording\");\n}\n\n// after\ntry {\n  const res = await fetcher(`/recordings?room_name=${roomName}`).then(getRecordingsResponseSchema.parse);\n  return res;\n} catch (err) {\n  throw new Error(`Unable to get recording for room ${roomName}`, { cause: err });\n}","handlingStrategy":"try-catch","validationCode":"if (!roomName || typeof roomName !== \"string\") {\n  throw new Error(\"roomName required to fetch recordings\");\n}","typeGuard":"function isRecordingsResponse(r: unknown): r is GetRecordingsResponseSchema {\n  return getRecordingsResponseSchema.safeParse(r).success;\n}","tryCatchPattern":"try {\n  return await adapter.getRecordings(roomName);\n} catch (e) {\n  if (e instanceof Error && /Unable to get recording/.test(e.message)) {\n    return { data: [] };\n  }\n  throw e;\n}","preventionTips":["Preserve the cause via `new Error(msg, { cause: err })`.","Confirm the Daily credential and room name are valid before calling.","Keep `getRecordingsResponseSchema` in sync with the Daily API.","Treat missing recordings as an empty result rather than throwing."],"tags":["video","daily","recordings","swallowed-error","upstream-api"],"backgroundTag":null,"analyzedSha":"176037d0afbe572f870a3c702985e7cd83fe6c0c","analyzedAt":"2026-08-12T19:12:41.464Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}