{"record":{"id":"3471446f3ee8a8f4","repo":"badges/shields","slug":"not-found-347144","errorCode":null,"errorMessage":"not found","messagePattern":"not found","errorType":"exception","errorClass":"NotFound","httpStatus":404,"severity":"error","filePath":"services/chrome-web-store/chrome-web-store-users.service.js","lineNumber":34,"sourceCode":"        parameters: pathParams({\n          name: 'storeId',\n          example: 'ogffaloegjglncjfehdfplabnoondfjo',\n        }),\n      },\n    },\n  }\n\n  static defaultBadgeData = { label: 'users' }\n\n  static transform(users) {\n    return String(users.replaceAll(',', ''))\n  }\n\n  async handle({ storeId }) {\n    const chromeWebStore = await this.fetch({ storeId })\n    const downloads = chromeWebStore.users()\n    if (downloads == null) {\n      throw new NotFound({ prettyMessage: 'not found' })\n    }\n    return renderDownloadsBadge({\n      downloads: this.constructor.transform(downloads),\n    })\n  }\n}\n\nconst ChromeWebStoreDownloads = redirector({\n  category: 'downloads',\n  route: {\n    base: 'chrome-web-store/d',\n    pattern: ':storeId',\n  },\n  transformPath: ({ storeId }) => `/chrome-web-store/users/${storeId}`,\n  dateAdded: new Date('2019-02-27'),\n})\n\nexport { ChromeWebStoreDownloads, ChromeWebStoreUsers }","sourceCodeStart":16,"sourceCodeEnd":52,"githubUrl":"https://github.com/badges/shields/blob/766fd8bc89a90b8534dc573ab72dec30215ab1ec/services/chrome-web-store/chrome-web-store-users.service.js#L16-L52","documentation":"The Chrome Web Store badge service throws NotFound with message 'not found' when the extension's user count returned by the scraped Chrome Web Store page is null. It means the extension page could not yield a downloads/users figure, typically because the extension does not exist or the page structure lacks the data.","triggerScenarios":"Calling the chrome-web-store users badge with a storeId whose extension page cannot be scraped or reports no user count; `chromeWebStore.users()` returns null.","commonSituations":"Typos or invalid storeId formats, unpublished/removed Chrome extensions, region-restricted extensions, or Chrome Web Store layout changes breaking the scraper.","solutions":["Verify the storeId by opening https://chromewebstore.google.com/detail/<storeId> in a browser and confirming the extension exists and shows a user count","Retry later if the Chrome Web Store was temporarily unavailable or its markup changed","Check for trailing whitespace or wrong ID casing in the badge URL","Report to the service maintainers if the live page shows a user count but the badge still returns 'not found'"],"exampleFix":"// before\n/badge/chrome-web-store/users/invalid-id\n// after\n/badge/chrome-web-store/users/nkemmklpomlogoijgonofhndcffbppgb","handlingStrategy":"validation","validationCode":"const STORE_ID_RE = /^[a-p]{32}$/;\nif (!STORE_ID_RE.test(storeId)) throw new Error(`invalid Chrome Web Store storeId: ${storeId}`);","typeGuard":"function hasUsers(page) { return page != null && typeof page.users === 'function'; }","tryCatchPattern":"try {\n  const badge = await fetchBadge(`/chrome-web-store/users/${storeId}`);\n} catch (e) {\n  if (e.status === 404) console.warn(`extension ${storeId} not found or has no user data`);\n  else throw e;\n}","preventionTips":["Verify the 32-character storeId against the Chrome Web Store URL before building the badge","Confirm the extension is publicly listed and shows a user count","Re-check the badge when the Chrome Web Store UI changes","Cache a last-known-good state so a transient scrape failure doesn't blank your README"],"tags":["not-found","chrome-web-store","upstream"],"backgroundTag":"resource-not-found","analyzedSha":"766fd8bc89a90b8534dc573ab72dec30215ab1ec","analyzedAt":"2026-08-30T01:40:27.499Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}