{"record":{"id":"0330371622a0c0b3","repo":"jackwener/OpenCLI","slug":"failed-to-read-facebook-feed-err-instanceof-er","errorCode":null,"errorMessage":"`Failed to read facebook feed: ${err instanceof Error ? err.message : err}`","messagePattern":"`Failed to read facebook feed: (.+?)`","errorType":"exception","errorClass":"CommandExecutionError","httpStatus":null,"severity":"error","filePath":"clis/facebook/feed.js","lineNumber":361,"sourceCode":"\nasync function getFacebookFeed(page, kwargs) {\n  const limit = requireLimit(kwargs.limit ?? 10);\n  try {\n    await page.goto(FACEBOOK_HOME, { settleMs: 4000 });\n  } catch (err) {\n    throw new CommandExecutionError(\n      `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') {","sourceCodeStart":343,"sourceCodeEnd":379,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/facebook/feed.js#L343-L379","documentation":"After navigating, getFacebookFeed runs an in-page extraction script via page.evaluate and unwraps the browser result; any failure there (script error, browser not returning a valid result) is rethrown as a CommandExecutionError with a hint that Facebook may not have rendered or the feed markup changed. It separates 'could not run extraction' from 'extraction ran but found nothing'.","triggerScenarios":"unwrapBrowserResult(await page.evaluate(buildFeedExtractScript(limit))) throws: the evaluate call rejects (page navigated away, crashed tab, script runtime error), or the browser extension returned an unexpected result shape that unwrapBrowserResult rejects.","commonSituations":"Facebook redirects to a login/checkpoint page mid-load; heavy page redraw invalidates execution context; extension protocol mismatch after a browser update; partial page render under slow network.","solutions":["Retry the command after confirming the feed page fully loads in the connected browser.","Check that you are not stuck on a login/checkpoint page (see the auth error path).","Update the CLI and browser extension to matching versions so page.evaluate/unwrapBrowserResult protocols agree.","If persistent, inspect whether Facebook's feed DOM changed and update the extraction script."],"exampleFix":"// before\nconst payload = unwrapBrowserResult(await page.evaluate(buildFeedExtractScript(limit)));\n// after\nlet payload;\ntry {\n  payload = unwrapBrowserResult(await page.evaluate(buildFeedExtractScript(limit)));\n} catch (err) {\n  await page.wait(2);\n  payload = unwrapBrowserResult(await page.evaluate(buildFeedExtractScript(limit)));\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  const rows = await getFacebookFeed(page, { limit: 10 });\n} catch (err) {\n  if (/Failed to read facebook feed/.test(err.message)) {\n    await page.wait(2);\n    // retry once; if persistent, check for login wall or update CLI\n  } else throw err;\n}","preventionTips":["Keep the CLI and browser extension versions in sync.","Ensure the feed page fully loads (no mid-load redirects) before extraction.","Watch for Facebook checkpoint/login redirects that abort evaluate.","Retry once on transient evaluate failures."],"tags":["extraction","page-evaluate","facebook","browser"],"backgroundTag":"page-evaluate-failed","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}