{"record":{"id":"d67e5b8b40c7b097","repo":"jackwener/OpenCLI","slug":"unsupported-filter","errorCode":null,"errorMessage":"Unsupported --filter ","messagePattern":"Unsupported --filter ","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"clis/coupang/search.js","lineNumber":424,"sourceCode":"    strategy: Strategy.COOKIE,\n    browser: true,\n    args: [\n        { name: 'query', required: true, positional: true, help: 'Search keyword' },\n        { name: 'page', type: 'int', default: 1, help: 'Search result page number' },\n        { name: 'limit', type: 'int', default: 20, help: 'Max results (max 50)' },\n        { name: 'filter', required: false, help: 'Optional search filter (currently supports: rocket)' },\n    ],\n    columns: ['rank', 'product_id', 'title', 'price', 'unit_price', 'rating', 'review_count', 'rocket', 'delivery_type', 'delivery_promise', 'url'],\n    func: async (page, kwargs) => {\n        const query = String(kwargs.query || '').trim();\n        if (!query) {\n            throw new ArgumentError('query cannot be empty');\n        }\n        const pageNumber = parsePageArg(kwargs.page, 1);\n        const limit = parseLimitArg(kwargs.limit, 20, 50);\n        const filter = String(kwargs.filter || '').trim().toLowerCase();\n        if (filter && filter !== 'rocket') {\n            throw new ArgumentError(`Unsupported --filter \"${filter}\" (supported: rocket)`);\n        }\n        const initialPage = filter ? 1 : pageNumber;\n        const url = `https://www.coupang.com/np/search?q=${encodeURIComponent(query)}&channel=user&page=${initialPage}`;\n        await page.goto(url).catch((error) => {\n            throw new CommandExecutionError(`coupang search navigation failed: ${error?.message || error}`);\n        });\n        if (filter) {\n            const filterResult = await page.evaluate(buildApplyFilterEvaluate(filter)).catch((error) => {\n                throw new CommandExecutionError(`coupang search filter evaluation failed: ${error?.message || error}`);\n            });\n            if (!filterResult?.ok) {\n                throw new EmptyResultError('coupang search', `Filter \"${filter}\" was not available on the current page; try without --filter or wait for Coupang to render the filter bar.`);\n            }\n            await page.wait(3).catch((error) => {\n                throw new CommandExecutionError(`coupang search wait failed: ${error?.message || error}`);\n            });\n            if (pageNumber > 1) {\n                const locationInfo = await page.evaluate(buildCurrentLocationEvaluate()).catch((error) => {","sourceCodeStart":406,"sourceCodeEnd":442,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/coupang/search.js#L406-L442","documentation":"ArgumentError (exit code 2, usage error) thrown when the --filter option is given a value other than 'rocket'. Currently only the 'rocket' filter is supported, and the message names the rejected value plus the supported one.","triggerScenarios":"`opencli coupang search <query> --filter <value>` where value (after trim/lowercase) is anything besides 'rocket', e.g. --filter deals, --filter rocket-delivery, --filter free-shipping.","commonSituations":"Guessing filter names not in the help text; case/spacing mistakes (helps are trimmed+lowercased so 'Rocket' is fine, but 'rocket shipping' is not); copying filters from Coupang's UI that the CLI hasn't implemented; older docs referencing removed filters.","solutions":["Use --filter rocket or omit --filter entirely.","Run the command's help to see supported filters (currently: rocket).","Normalize your input: the check is on the trimmed lowercase value, so avoid extra words or hyphenated variants.","If you need another filter, apply it manually in the browser or file a feature request."],"exampleFix":"// before\nopencli coupang search \"ssd\" --filter free-shipping\n// after\nopencli coupang search \"ssd\" --filter rocket","handlingStrategy":"validation","validationCode":"const SUPPORTED_FILTERS = ['rocket'];\nfunction validateFilter(filter) {\n  const f = String(filter ?? '').trim().toLowerCase();\n  if (f && !SUPPORTED_FILTERS.includes(f)) throw new Error(`Unsupported --filter \"${f}\" (supported: rocket)`);\n  return f;\n}","typeGuard":"function isValidFilter(f) { return typeof f === 'string' && ['rocket'].includes(f.trim().toLowerCase()); }","tryCatchPattern":"try {\n  return await run('coupang search', { query, filter });\n} catch (err) {\n  if (err?.code === 'ARGUMENT' && /Unsupported --filter/.test(err.message)) {\n    console.error('Only --filter rocket is supported; omit --filter for unfiltered search.');\n    process.exit(2);\n  }\n  throw err;\n}","preventionTips":["Only pass --filter rocket (or omit it).","Check the command help for the current list of supported filters.","Normalize filter input (trim + lowercase) in wrapper scripts.","Don't copy filter names from the Coupang web UI — the CLI supports a subset."],"tags":["argument","validation","filter","coupang"],"backgroundTag":"invalid-argument-value","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}