{"record":{"id":"e09c6bf3f2a8fc5c","repo":"badges/shields","slug":"resource-not-found-e09c6b","errorCode":null,"errorMessage":"resource not found","messagePattern":"resource not found","errorType":"exception","errorClass":"NotFound","httpStatus":404,"severity":"error","filePath":"services/voxelshop/voxelshop-latest-version.service.js","lineNumber":34,"sourceCode":"      get: {\n        summary: 'Voxel Shop Version',\n        description,\n        parameters: pathParams({\n          name: 'resourceId',\n          example: '323',\n        }),\n      },\n    },\n  }\n\n  static defaultBadgeData = {\n    label: 'voxel.shop',\n  }\n\n  async handle({ resourceId }) {\n    const { response } = await this.fetch({ resourceId })\n    if (!response.resource) {\n      throw new NotFound()\n    }\n    return renderVersionBadge({\n      version: response.resource.updates.latest.version,\n    })\n  }\n}\n","sourceCodeStart":16,"sourceCodeEnd":41,"githubUrl":"https://github.com/badges/shields/blob/766fd8bc89a90b8534dc573ab72dec30215ab1ec/services/voxelshop/voxelshop-latest-version.service.js#L16-L41","documentation":"The VoxelShop latest-version badge handle() throws a plain NotFound when the API response has no resource object, surfacing the default 'resource not found' message. Like the downloads badge, this means VoxelShop did not return a resource for the requested id, so no latest version can be read from response.resource.updates.latest.version.","triggerScenarios":"Fetching the voxelshop latest-version badge with a resourceId whose API response contains no resource key — deleted, nonexistent, or inaccessible resource.","commonSituations":"Asset deleted on voxel.shop; mistyped resource id; resource made private after the badge was embedded.","solutions":["Confirm the resourceId matches an existing public resource on voxel.shop.","Fix a mistyped id using the id in the resource page URL.","Remove the badge or pick a different resource if the original was deleted."],"exampleFix":"// before\n/badge/voxelshop/latest-version/88888\n// after\n/badge/voxelshop/latest-version/12345","handlingStrategy":"try-catch","validationCode":"if (!resourceId || !/^\\d+$/.test(resourceId)) throw new Error('valid numeric voxel.shop resourceId required')","typeGuard":"const hasLatestVersion = (r) => typeof r?.resource?.updates?.latest?.version === 'string'","tryCatchPattern":"try { renderVersionBadge() } catch (e) { if (e instanceof NotFound) return 'resource unavailable'; throw e }","preventionTips":["Verify the resource id resolves on voxel.shop before embedding the badge.","Re-check badges after authors delete or make resources private.","Use the id, not the resource name, in the badge URL."],"tags":["not-found","badges","api"],"backgroundTag":"upstream-resource-not-found","analyzedSha":"766fd8bc89a90b8534dc573ab72dec30215ab1ec","analyzedAt":"2026-08-30T01:40:27.499Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}