{"record":{"id":"38b7e796b8ce1873","repo":"actualbudget/actual","slug":"single-x-actual-name-is-required","errorCode":null,"errorMessage":"single x-actual-name is required","messagePattern":"single x-actual-name is required","errorType":"http","errorClass":null,"httpStatus":400,"severity":"error","filePath":"packages/sync-server/src/app-sync.ts","lineNumber":302,"sourceCode":"\n  filesService.update(file.id, new FileUpdate({ groupId: null }));\n\n  if (groupId) {\n    try {\n      await fs.unlink(getPathForGroupFile(groupId));\n    } catch {\n      console.log(`Unable to delete sync data for group \"${groupId}\"`);\n    }\n  }\n\n  res.send(OK_RESPONSE);\n});\n\napp.post('/upload-user-file', async (req, res) => {\n  if (typeof req.headers['x-actual-name'] !== 'string') {\n    // FIXME: Not sure how this cannot be a string when the header is\n    // set.\n    res.status(400).send('single x-actual-name is required');\n    return;\n  }\n\n  const name = decodeURIComponent(req.headers['x-actual-name']);\n  const fileId = req.headers['x-actual-file-id'];\n\n  if (!fileId || typeof fileId !== 'string') {\n    res.status(400).send('fileId is required');\n    return;\n  }\n  if (!isValidFileId(fileId)) {\n    res.status(400).send('invalid fileId');\n    return;\n  }\n\n  let groupId = req.headers['x-actual-group-id'] || null;\n  const encryptMeta = extractSingleHeader(req, res, 'x-actual-encrypt-meta');\n  if (res.headersSent) return;","sourceCodeStart":284,"sourceCodeEnd":320,"githubUrl":"https://github.com/actualbudget/actual/blob/d4334cb6e6123f4d3bcea1ad6166608884c7e658/packages/sync-server/src/app-sync.ts#L284-L320","documentation":"Error \"single x-actual-name is required\" thrown in actualbudget/actual.","triggerScenarios":"Thrown at packages/sync-server/src/app-sync.ts:302 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d4334cb6e6123f4d3bcea1ad6166608884c7e658","analyzedAt":"2026-08-29T01:02:11.213Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}