{"record":{"id":"be04c39bd6851549","repo":"jackwener/OpenCLI","slug":"tiktok-studio-item-list-requires-login-statusms","errorCode":null,"errorMessage":"TikTok Studio item_list requires login: ${statusMsg || statusCode}","messagePattern":"TikTok Studio item_list requires login: (.+?)","errorType":"exception","errorClass":"AuthRequiredError","httpStatus":null,"severity":"error","filePath":"clis/tiktok/creator-videos.js","lineNumber":120,"sourceCode":"}\n\nfunction looksAuthFailure(message) {\n    return /\\b(auth|login|log in|permission|unauthori[sz]ed|forbidden)\\b/i.test(message);\n}\n\nfunction unwrapPayload(data) {\n    if (!data || typeof data !== 'object') {\n        throw new CommandExecutionError('TikTok Studio item_list returned an empty response');\n    }\n    return data.data && typeof data.data === 'object' ? data.data : data;\n}\n\nfunction assertApiSuccess(data) {\n    const statusCode = data.status_code ?? data.statusCode;\n    const statusMsg = String(data.status_msg ?? data.statusMsg ?? '').trim();\n    if (statusCode !== undefined && Number(statusCode) !== 0) {\n        if (looksAuthFailure(statusMsg)) {\n            throw new AuthRequiredError('www.tiktok.com', `TikTok Studio item_list requires login: ${statusMsg || statusCode}`);\n        }\n        throw new CommandExecutionError(`TikTok Studio item_list failed: ${statusMsg || statusCode}`);\n    }\n    if (statusMsg && !/^(success|ok)$/i.test(statusMsg)) {\n        if (looksAuthFailure(statusMsg)) {\n            throw new AuthRequiredError('www.tiktok.com', `TikTok Studio item_list requires login: ${statusMsg}`);\n        }\n        throw new CommandExecutionError(`TikTok Studio item_list failed: ${statusMsg}`);\n    }\n}\n\nfunction normalizeNumber(value) {\n    const n = Number(value);\n    return Number.isFinite(n) ? n : 0;\n}\n\nfunction formatDate(value) {\n    const seconds = Number(value);","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/tiktok/creator-videos.js#L102-L138","documentation":"assertApiSuccess inspects TikTok's status_code/status_msg. When status_code is non-zero and the status message matches the auth-failure pattern (auth, login, permission, unauthorized, forbidden), the library raises AuthRequiredError for www.tiktok.com instead of a generic failure, telling you the session is not authenticated for TikTok Studio.","triggerScenarios":"item_list responds with statusCode != 0 and a status_msg like 'user not login', 'please log in', or 'permission denied' — e.g. expired/missing cookies when calling fetchCreatorVideosPage.","commonSituations":"Session cookies expired or were cleared; running headless without completing TikTok login; TikTok invalidating the session after a password change or suspicious-activity logout; using a different account than the studio owner.","solutions":["Run the TikTok login flow for this CLI (e.g. `opencli tiktok login`) and retry.","Refresh or re-import cookies for www.tiktok.com.","Confirm the logged-in account actually owns the creator studio being queried.","If the message is spurious (not really an auth issue), inspect status_msg/statusCode from the raw response to confirm."],"exampleFix":"// before\nopencli tiktok creator-videos --user-name someuser\n// after (re-authenticate first)\nopencli tiktok login\nopencli tiktok creator-videos --user-name someuser","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"import { AuthRequiredError } from './errors.js';\ntry {\n  const videos = await listCreatorVideos(opts);\n} catch (e) {\n  if (e instanceof AuthRequiredError || String(e.message).includes('requires login')) {\n    await tiktokLogin('www.tiktok.com');\n    return listCreatorVideos(opts);\n  }\n  throw e;\n}","preventionTips":["Check/refresh TikTok session cookies before batch runs.","Run the login flow at the start of scheduled jobs.","Catch AuthRequiredError explicitly and trigger re-auth automatically.","Avoid sharing one session across machines that log each other out."],"tags":["authentication","tiktok","session-expired","api"],"backgroundTag":"auth-required","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}