{"record":{"id":"b0a22a7fcad40873","repo":"decolua/9router","slug":"mimo-bootstrap-failed-response-status","errorCode":null,"errorMessage":"MiMo bootstrap failed: ${response.status}","messagePattern":"MiMo bootstrap failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"open-sse/executors/mimo-free.js","lineNumber":94,"sourceCode":"  jwtExpiresAt = 0;\n}\n\nasync function bootstrapJwt(proxyOptions = null) {\n  if (cachedJwt && Date.now() < jwtExpiresAt - JWT_EXPIRY_BUFFER_MS) {\n    return cachedJwt;\n  }\n\n  const response = await proxyAwareFetch(BOOTSTRAP_URL, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"User-Agent\": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],\n    },\n    body: JSON.stringify({ client: generateFingerprint() }),\n  }, proxyOptions);\n\n  if (!response.ok) {\n    throw new Error(`MiMo bootstrap failed: ${response.status}`);\n  }\n\n  const data = await response.json();\n  if (!data.jwt) {\n    throw new Error(\"MiMo bootstrap returned no JWT\");\n  }\n\n  cachedJwt = data.jwt;\n  jwtExpiresAt = parseJwtExp(data.jwt);\n  return cachedJwt;\n}\n\nexport class MimoFreeExecutor extends BaseExecutor {\n  constructor() {\n    super(\"mimo-free\", PROVIDERS[\"mimo-free\"]);\n    this.sessionId = generateSessionId();\n  }\n","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/decolua/9router/blob/90b52e06ffd666b7929554211474d01588f6b1f8/open-sse/executors/mimo-free.js#L76-L112","documentation":"MiMo's free tier requires a bootstrap call that exchanges a generated browser fingerprint for a JWT. bootstrapJwt() performs that POST; when the HTTP response status is not 2xx it throws this error carrying the status code, because no JWT can be obtained and the chat request cannot proceed.","triggerScenarios":"The bootstrap endpoint returns 4xx/5xx: fingerprint rejected, rate-limited (429), endpoint moved (404), server error (5xx), or a proxy/network error surfacing as a non-OK response. Raised from bootstrapJwt, called by execute/jwt/first/second.","commonSituations":"Heavy free-tier usage triggering rate limits; MiMo changing or geo-blocking the bootstrap endpoint; corporate proxy returning 403/502; stale 9router version after an upstream endpoint change.","solutions":["Check the status code in the message: 429 → back off and retry later; 403/401 → fingerprint/endpoint rejected, update 9router; 5xx → upstream outage, retry later","Update 9router to the latest version in case MiMo changed the bootstrap endpoint or fingerprint scheme","Disable or bypass proxies/VPNs that may be blocked or injecting failures (adjust proxyOptions)","Reduce request frequency — free-tier bootstrap is heavily rate-limited per IP","Verify general connectivity to the MiMo host (curl the bootstrap URL) to rule out network/DNS issues"],"exampleFix":"// before\nconst jwt = await executor.jwt();\n// after\nlet jwt;\ntry { jwt = await executor.jwt(); }\ncatch (e) {\n  if (/MiMo bootstrap failed: 429/.test(e.message)) {\n    await new Promise(r => setTimeout(r, 30_000));\n    jwt = await executor.jwt();\n  } else throw e;\n}","handlingStrategy":"retry","validationCode":"// pre-check reachability of the bootstrap endpoint\nconst ping = await fetch(MIMO_BOOTSTRAP_URL, { method: 'HEAD' }).catch(() => null);\nif (!ping) throw new Error('MiMo bootstrap endpoint unreachable');","typeGuard":null,"tryCatchPattern":"try {\n  jwt = await executor.jwt();\n} catch (e) {\n  const status = e.message.match(/bootstrap failed: (\\d+)/)?.[1];\n  if (status === '429') { await sleep(30_000); jwt = await executor.jwt(); }\n  else if (status?.startsWith('5')) { /* retry with backoff or fail over */ }\n  else throw e;\n}","preventionTips":["Throttle free-tier request rate to avoid 429s","Keep 9router updated — bootstrap endpoints and fingerprint schemes change","Avoid blocked proxies/VPNs on the MiMo route","Monitor the bootstrap endpoint's reachability"],"tags":["mimo","bootstrap","http-status","free-tier","rate-limit"],"backgroundTag":"upstream-http-error","analyzedSha":"90b52e06ffd666b7929554211474d01588f6b1f8","analyzedAt":"2026-08-30T21:05:45.952Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}