{"record":{"id":"72ad2b674d04e95b","repo":"usebruno/bruno","slug":"api-key-cannot-be-empty","errorCode":null,"errorMessage":"API key cannot be empty","messagePattern":"API key cannot be empty","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/bruno-electron/src/ipc/ai/index.js","lineNumber":117,"sourceCode":"};\n\nconst registerAiIpc = (mainWindow) => {\n  const broadcastStatus = (status) => {\n    if (mainWindow?.webContents && !mainWindow.webContents.isDestroyed()) {\n      mainWindow.webContents.send('main:ai-status-changed', status);\n    }\n  };\n\n  ipcMain.handle('renderer:get-ai-status', async () => buildStatus());\n\n  ipcMain.handle('renderer:set-ai-api-key', async (_event, { providerId, apiKey }) => {\n    assertKnownProvider(providerId);\n    const trimmed = typeof apiKey === 'string' ? apiKey.trim() : '';\n    if (!trimmed) {\n      if (isOpenAiCompatibleProviderId(providerId)) {\n        aiKeyStore.clearKey(providerId);\n      } else {\n        throw new Error('API key cannot be empty');\n      }\n    } else {\n      aiKeyStore.setKey(providerId, trimmed);\n    }\n    clearSdkCache();\n    const status = buildStatus();\n    broadcastStatus(status);\n    return status;\n  });\n\n  ipcMain.handle('renderer:clear-ai-api-key', async (_event, { providerId }) => {\n    assertKnownProvider(providerId);\n    aiKeyStore.clearKey(providerId);\n    clearSdkCache();\n    const status = buildStatus();\n    broadcastStatus(status);\n    return status;\n  });","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/usebruno/bruno/blob/9bdd81c7bdc57006e5f5ebffb79321a8d979f712/packages/bruno-electron/src/ipc/ai/index.js#L99-L135","documentation":"Error \"API key cannot be empty\" thrown in usebruno/bruno.","triggerScenarios":"Thrown at packages/bruno-electron/src/ipc/ai/index.js:117 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Enter a non-empty API key for the provider in Preferences > AI."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9bdd81c7bdc57006e5f5ebffb79321a8d979f712","analyzedAt":"2026-08-13T04:09:25.751Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}