{"record":{"id":"89baea91c9caa4f5","repo":"jackwener/OpenCLI","slug":"facebook-feed-returned-malformed-extraction-payloa","errorCode":null,"errorMessage":"facebook feed returned malformed extraction payload","messagePattern":"facebook feed returned malformed extraction payload","errorType":"exception","errorClass":"CommandExecutionError","httpStatus":null,"severity":"error","filePath":"clis/facebook/feed.js","lineNumber":368,"sourceCode":"      `Failed to navigate to facebook feed: ${err instanceof Error ? err.message : err}`,\n      'Check that facebook.com is reachable and the browser extension is connected.',\n    );\n  }\n\n  await loadFeedPosts(page, limit);\n\n  let payload;\n  try {\n    payload = unwrapBrowserResult(await page.evaluate(buildFeedExtractScript(limit)));\n  } catch (err) {\n    throw new CommandExecutionError(\n      `Failed to read facebook feed: ${err instanceof Error ? err.message : err}`,\n      'Facebook may not have rendered or the feed markup may have changed.',\n    );\n  }\n\n  if (!payload || typeof payload !== 'object' || !Array.isArray(payload.rows)) {\n    throw new CommandExecutionError('facebook feed returned malformed extraction payload');\n  }\n\n  if (payload.status === 'auth') {\n    throw new AuthRequiredError('www.facebook.com', 'Open Chrome and log in to Facebook before retrying.');\n  }\n\n  if (payload.rows.length > 0) {\n    return payload.rows;\n  }\n\n  if (payload.status === 'empty') {\n    throw new EmptyResultError('facebook feed', 'Facebook did not show any feed posts for this account.');\n  }\n\n  const diagnostics = payload.diagnostics || {};\n  if (diagnostics.articleCount || diagnostics.actionMenuCount || diagnostics.fallbackActionCount || diagnostics.mainTextLength > 200) {\n    throw new CommandExecutionError(\n      'facebook feed page rendered but no feed rows could be extracted',","sourceCodeStart":350,"sourceCodeEnd":386,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/facebook/feed.js#L350-L386","documentation":"getFacebookFeed validates the extraction payload: it must be a non-null object with an Array rows field. If the page script returned anything else (null, a string, an object without rows), the library throws CommandExecutionError('facebook feed returned malformed extraction payload'). This guards against silent contract drift between the in-page script and the Node-side parser.","triggerScenarios":"page.evaluate succeeds but its return value is null/undefined or lacks a rows array — e.g. the in-page script hit an unexpected DOM state and returned a fallback value, or unwrapBrowserResult returned a non-object.","commonSituations":"Facebook serves an alternate layout (mobile/basic/limited experience) the script doesn't recognize; A/B tested markup causes the script's early-return fallback path; extension serialization dropped the object.","solutions":["Retry once; intermittent layouts often resolve on a fresh page load.","Log/inspect the raw evaluate return value to see what shape actually came back.","Update the in-page extraction script so every code path returns { rows: [...] }.","Confirm you are on the desktop facebook.com site, not a mobile/basic redirect."],"exampleFix":"// before\nthrow new CommandExecutionError('facebook feed returned malformed extraction payload');\n// after\nif (!payload || typeof payload !== 'object' || !Array.isArray(payload.rows)) {\n  throw new CommandExecutionError(`facebook feed returned malformed extraction payload: ${JSON.stringify(payload).slice(0, 200)}`);\n}","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"function isFeedPayload(p) {\n  return p !== null && typeof p === 'object' && Array.isArray(p.rows);\n}","tryCatchPattern":"try {\n  const rows = await getFacebookFeed(page, { limit: 10 });\n} catch (err) {\n  if (/malformed extraction payload/.test(err.message)) {\n    // retry on a fresh page load; check for alternate mobile/basic layout\n  } else throw err;\n}","preventionTips":["Use the desktop facebook.com site, not mobile/basic redirects.","Keep extraction script and CLI versions aligned.","Retry once with a fresh page load when it occurs.","Inspect raw evaluate output if it persists to identify layout drift."],"tags":["schema","extraction","facebook"],"backgroundTag":"schema-validation-failed","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}