{"record":{"id":"a01b5d30c76f0d0c","repo":"jackwener/OpenCLI","slug":"transient-access","errorCode":"TRANSIENT_ACCESS","errorMessage":"${payload.message || 'huodongxing events page returned a temporary busy/access page'}","messagePattern":"\\$\\{payload\\.message \\|\\| 'huodongxing events page returned a temporary busy/access page'\\}","errorType":"exception","errorClass":"CommandExecutionError","httpStatus":null,"severity":"warning","filePath":"clis/huodongxing/events.js","lineNumber":291,"sourceCode":"}\n\nfunction requireExtractionRows(result) {\n  const payload = unwrapEvaluateResult(result);\n  if (payload?.ok === true && Array.isArray(payload.rows)) return payload.rows;\n  if (payload?.ok === true) {\n    throw new CommandExecutionError(\n      'huodongxing events returned malformed extraction rows',\n      'Expected browser extraction payload rows to be an array.',\n    );\n  }\n  if (payload?.code === 'RATE_LIMIT') {\n    throw new CommandExecutionError(\n      payload.message || 'huodongxing events was rate limited by www.huodongxing.com',\n      payload.hint || 'Wait a few minutes and retry from a real browser session.',\n    );\n  }\n  if (payload?.code === 'TRANSIENT_ACCESS') {\n    throw new CommandExecutionError(\n      payload.message || 'huodongxing events page returned a temporary busy/access page',\n      payload.hint || 'Wait and retry from the same browser session.',\n    );\n  }\n  if (payload?.code === 'INVALID_LIMIT') {\n    throw new ArgumentError(payload.message || 'huodongxing limit must be a positive integer <= 50');\n  }\n  if (payload?.code === 'EMPTY_RESULT') {\n    throw new EmptyResultError(\n      'huodongxing events',\n      payload.hint || 'No Huodongxing event cards were found. The page may be empty.',\n    );\n  }\n  throw new CommandExecutionError(\n    payload?.message || 'huodongxing events returned malformed extraction data',\n    payload?.hint || 'Huodongxing extraction did not return the expected structured payload.',\n  );\n}","sourceCodeStart":273,"sourceCodeEnd":309,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/huodongxing/events.js#L273-L309","documentation":"The extractor returned code 'TRANSIENT_ACCESS' — the site served a temporary busy/captcha/access-check page instead of event data. This CommandExecutionError is retryable from the same browser session.","triggerScenarios":"huodongxing serving its WAF/access-check interstitial during extraction; payload has code: 'TRANSIENT_ACCESS'.","commonSituations":"First visit from a new session/IP triggering an access challenge; temporary site-side throttling; headless browser detected intermittently.","solutions":["Wait briefly and retry from the same browser session so the access challenge completes","Use an interactive (non-fresh) browser profile with existing cookies","Slow down or space out automated calls","Retry after the site's access window clears"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { const rows = extractEventRows(limit); } catch (e) { if (e instanceof CommandExecutionError && /busy\\/access page/.test(e.message)) { await sleep(30_000); return extractEventRows(limit); } throw e; }","preventionTips":["Reuse a warm browser session that has already passed the access check","Avoid spawning many fresh sessions from one IP","Retry from the SAME session — do not open a new one","Reduce concurrency when running automated queries"],"tags":["transient","scraping","access-block"],"backgroundTag":"waf-access-challenge","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}