{"record":{"id":"686e0a85a674d68d","repo":"jackwener/OpenCLI","slug":"xiaohongshu-creator-profile-returned-malformed-per","errorCode":null,"errorMessage":"Xiaohongshu creator profile returned malformed personal_info payload","messagePattern":"Xiaohongshu creator profile returned malformed personal_info payload","errorType":"exception","errorClass":"CommandExecutionError","httpStatus":null,"severity":"error","filePath":"clis/xiaohongshu/auth.js","lineNumber":32,"sourceCode":"      try {\n        const resp = await fetch('/api/galaxy/creator/home/personal_info', { credentials: 'include' });\n        const text = await resp.text();\n        let parsed = null;\n        try { parsed = JSON.parse(text); } catch {}\n        return [resp.ok, resp.status, parsed, text.slice(0, 200)];\n      } catch (error) {\n        return [false, 0, null, String(error && error.message || error)];\n      }\n    }\n  `);\n  const [ok, status, parsed, preview] = Array.isArray(payload) ? payload : [];\n  if (!ok) {\n    const detail = parsed?.msg ?? preview ?? `HTTP ${status ?? ''}`;\n    throw new AuthRequiredError('creator.xiaohongshu.com', `Xiaohongshu creator profile requires login: ${detail}`);\n  }\n  const data = parsed?.data;\n  if (!data) {\n    throw new CommandExecutionError('Xiaohongshu creator profile returned malformed personal_info payload');\n  }\n  return {\n    username: data.name ?? '',\n    followers: data.fans_count ?? 0,\n  };\n}\n\nregisterSiteAuthCommands({\n  site: 'xiaohongshu',\n  domain: 'creator.xiaohongshu.com',\n  loginUrl: 'https://creator.xiaohongshu.com/',\n  columns: ['username', 'followers'],\n  quickCheck: hasXhsSessionCookies,\n  verify: verifyXhsIdentity,\n  poll: async (page) => {\n    if (!await hasXhsSessionCookies(page)) {\n      throw new AuthRequiredError('creator.xiaohongshu.com', 'Waiting for Xiaohongshu session cookies');\n    }","sourceCodeStart":14,"sourceCodeEnd":50,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/xiaohongshu/auth.js#L14-L50","documentation":"verifyXhsIdentity throws this CommandExecutionError when the personal_info API call succeeded (ok true) but parsed.data is missing — the response body isn't the expected {data:{name,fans_count,...}} shape. This is treated as a malformed payload rather than an auth problem, since the server responded.","triggerScenarios":"parsed?.data is undefined after a successful request: XHS returned ok/ success wrapper without data, or the response shape changed (e.g. data nested differently, or an HTML error page parsed oddly).","commonSituations":"creator.xiaohongshu.com API version changed its response envelope; the account exists but has no creator profile data; server-side degradation returning empty data; a proxy/CDN injected an unexpected body.","solutions":["Update the library to match the current personal_info response schema.","Log parsed/preview to inspect the actual response body shape.","Confirm the account actually has a creator profile on creator.xiaohongshu.com.","Retry — transient server issues may return empty data.","Re-login in case a half-valid session yields a degraded response."],"exampleFix":"// before\nconst { username, followers } = await verifyXhsIdentity(page);\n// after\nlet identity;\ntry {\n  identity = await verifyXhsIdentity(page);\n} catch (e) {\n  if (String(e.message).includes('malformed personal_info')) {\n    identity = { username: '', followers: 0 }; // tolerate missing creator data\n  } else throw e;\n}","handlingStrategy":"validation","validationCode":"// validate response shape yourself if you control the fetch layer\nfunction hasCreatorData(parsed) {\n  return parsed && typeof parsed === 'object' &&\n         parsed.data && typeof parsed.data === 'object';\n}","typeGuard":"function hasCreatorData(p) {\n  return !!p && typeof p === 'object' &&\n         !!p.data && typeof p.data === 'object' &&\n         typeof p.data.name === 'string';\n}","tryCatchPattern":"try {\n  return await verifyXhsIdentity(page);\n} catch (e) {\n  if (/malformed personal_info/.test(e.message)) {\n    return { username: '', followers: 0 }; // degrade gracefully\n  }\n  throw e;\n}","preventionTips":["Pin/update library versions when the creator API schema changes.","Confirm the account has creator data before relying on identity checks.","Log raw response bodies on this error to detect schema drift early.","Handle empty/degraded responses server-side instead of crashing."],"tags":["xiaohongshu","schema-change","malformed-payload","api"],"backgroundTag":"schema-validation-failed","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}