jackwener/OpenCLI · error · CommandExecutionError
${prefix}${data.message || 'Unknown error'} (code=${data.cod
Error message
${prefix}${data.message || 'Unknown error'} (code=${data.code}) What it means
After assertOk's specialized checks (environment, cookie, identity) all pass, any remaining non-zero BOSS code is thrown as CommandExecutionError '<prefix><message> (code=<code>)'. This is the generic BOSS API business-error path — the message text and numeric code come straight from BOSS and indicate whatever that endpoint rejected (permission, rate limit, invalid parameters, empty results, etc.).
Source
Thrown at clis/boss/utils.js:96
throw new AuthRequiredError(BOSS_DOMAIN, RECRUITER_ONLY_MSG);
}
}
/**
* Throw if the API response is not code 0.
* Checks for cookie expiry first, then identity mismatch, then throws
* with the provided message.
*/
export function assertOk(data, errorPrefix) {
if (!data || typeof data !== 'object') {
throw new CommandExecutionError(`${errorPrefix ? `${errorPrefix}: ` : ''}Boss API returned malformed response`);
}
if (data.code === 0)
return;
checkEnvironment(data);
checkAuth(data);
checkRecruiterSide(data);
const prefix = errorPrefix ? `${errorPrefix}: ` : '';
throw new CommandExecutionError(`${prefix}${data.message || 'Unknown error'} (code=${data.code})`);
}
/**
* Make a credentialed XHR request via page.evaluate().
*
* This is the single XHR template — no more copy-pasting the same 15-line
* XMLHttpRequest boilerplate across every adapter.
*
* @returns Parsed JSON response
* @throws On network error, timeout, JSON parse failure, or cookie expiry
*/
export async function bossFetch(page, url, opts = {}) {
const method = opts.method ?? 'GET';
const timeout = opts.timeout ?? DEFAULT_TIMEOUT;
const body = opts.body ?? null;
// Build the evaluate script. We use JSON.stringify for safe interpolation.
const script = `
async () => {
return new Promise((resolve, reject) => {View on GitHub (pinned to 49907e53dc)
Solutions
- Read the Chinese message and code in the error — they come from BOSS and identify the exact business failure.
- Retry after a delay if the code indicates rate limiting or a transient BOSS error.
- Validate the uids/jobIds you pass (they may have expired or been deleted).
- Confirm the account has the permission that endpoint requires (recruiter vs seeker, verified employer).
- Set OPENCLI_VERBOSE and inspect which wapi URL returned the code to pinpoint the failing call.
Example fix
// before await bossFetch(page, urlWithStaleJobId); // CommandExecutionError: ... (code=1101) // after const job = await fetchJobList(page); await bossFetch(page, urlWith(job.id)); // use fresh jobId from the API
Defensive patterns
Strategy: try-catch
Validate before calling
const probe = await bossFetch(page, url, { allowNonZero: true });
if (probe.code !== 0) console.error(`BOSS pre-check failed: ${probe.message} (code=${probe.code})`); Type guard
function isOk(v) {
return typeof v === 'object' && v !== null && v.code === 0;
} Try / catch
try {
await runBossCommand();
} catch (e) {
const m = e.message.match(/\(code=(\d+)\)/);
if (e instanceof CommandExecutionError && m) {
console.error(`BOSS business error ${m[1]}: ${e.message}. Validate ids/permissions, then retry.`);
return;
}
throw e;
} Prevention
- Read the embedded BOSS message and code before retrying
- Refresh stale uids/jobIds from a fresh list call before using them
- Respect rate limits; add delays between calls
- Verify account permissions for the endpoint (recruiter vs seeker)
When it happens
Trigger: Any bossFetch (or direct assertOk from captureJobList) receiving a non-zero code that is not 7/37/24 and not code-37-with-environment-marker — e.g. code for rate limiting, invalid jobId, or insufficient permission on that endpoint.
Common situations: Passing a stale jobId/uid that no longer exists; hitting per-account rate limits; calling an endpoint your account lacks permission for; BOSS-side transient errors during maintenance.
Related errors
- Bilibili ${label} API failed: ${message} (${payload.code})
- ${probe.detail}
- Bilibili creator comparison API failed: ${message} (${payloa
- 获取视频分P信息失败: ${payload?.message ?? 'unknown'} (${payload?.cod
- 获取关注列表失败: ${payload.message} (${payload.code})
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/57a685ff5e41863e.
Report an issue: GitHub.