diff --git a/server/api/registry/badge/[...pkg].get.ts b/server/api/registry/badge/[...pkg].get.ts index 0f11fb40ce..c3fce058ef 100644 --- a/server/api/registry/badge/[...pkg].get.ts +++ b/server/api/registry/badge/[...pkg].get.ts @@ -14,7 +14,8 @@ export default defineCachedEventHandler( async event => { const pkgParamSegments = getRouterParam(event, 'pkg')?.split('/') ?? [] if (pkgParamSegments.length === 0) { - throw createError({ statusCode: 400, message: 'Package name is required.' }) + // TODO: throwing 404 rather than 400 as it's cacheable + throw createError({ statusCode: 404, message: 'Package name is required.' }) } const { rawPackageName, rawVersion } = parsePackageParams(pkgParamSegments) diff --git a/server/api/registry/docs/[...pkg].get.ts b/server/api/registry/docs/[...pkg].get.ts index db1c340d6e..23cbe4f557 100644 --- a/server/api/registry/docs/[...pkg].get.ts +++ b/server/api/registry/docs/[...pkg].get.ts @@ -8,13 +8,15 @@ export default defineCachedEventHandler( async event => { const pkgParam = getRouterParam(event, 'pkg') if (!pkgParam) { - throw createError({ statusCode: 400, message: 'Package name is required' }) + // TODO: throwing 404 rather than 400 as it's cacheable + throw createError({ statusCode: 404, message: 'Package name is required' }) } const { packageName, version: requestedVersion } = parsePackageParam(pkgParam) if (!packageName) { - throw createError({ statusCode: 400, message: 'Package name is required' }) + // TODO: throwing 404 rather than 400 as it's cacheable + throw createError({ statusCode: 404, message: 'Package name is required' }) } assertValidPackageName(packageName) diff --git a/server/api/registry/file/[...pkg].get.ts b/server/api/registry/file/[...pkg].get.ts index b7c36a4167..b133e0f69d 100644 --- a/server/api/registry/file/[...pkg].get.ts +++ b/server/api/registry/file/[...pkg].get.ts @@ -106,7 +106,8 @@ export default defineCachedEventHandler( if (versionSegments.length < 2) { throw createError({ - statusCode: 400, + // TODO: throwing 404 rather than 400 as it's cacheable + statusCode: 404, message: ERROR_PACKAGE_VERSION_AND_FILE_FAILED, }) } diff --git a/server/api/registry/org/[org]/packages.get.ts b/server/api/registry/org/[org]/packages.get.ts index 0a3774f824..113c2068fe 100644 --- a/server/api/registry/org/[org]/packages.get.ts +++ b/server/api/registry/org/[org]/packages.get.ts @@ -8,7 +8,8 @@ const NPM_ORG_NAME_RE = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i function validateOrgName(name: string): void { if (!name || name.length > 50 || !NPM_ORG_NAME_RE.test(name)) { throw createError({ - statusCode: 400, + // TODO: throwing 404 rather than 400 as it's cacheable + statusCode: 404, message: `Invalid org name: ${name}`, }) } @@ -20,7 +21,8 @@ export default defineCachedEventHandler( if (!org) { throw createError({ - statusCode: 400, + // TODO: throwing 404 rather than 400 as it's cacheable + statusCode: 404, message: 'Org name is required', }) } diff --git a/server/utils/error-handler.ts b/server/utils/error-handler.ts index 1359aff98b..4279d0bbaa 100644 --- a/server/utils/error-handler.ts +++ b/server/utils/error-handler.ts @@ -16,7 +16,8 @@ export function handleApiError(error: unknown, fallback: ErrorOptions): never { // Handle Valibot validation errors if (v.isValiError(error)) { throw createError({ - statusCode: 400, + // TODO: throwing 404 rather than 400 as it's cacheable + statusCode: 404, message: error.issues[0].message, }) } diff --git a/shared/utils/npm.ts b/shared/utils/npm.ts index ab90812212..8d9232ae1a 100644 --- a/shared/utils/npm.ts +++ b/shared/utils/npm.ts @@ -10,7 +10,8 @@ export function assertValidPackageName(name: string): void { if (!result.validForNewPackages && !result.validForOldPackages) { const errors = [...(result.errors ?? []), ...(result.warnings ?? [])] throw createError({ - statusCode: 400, + // TODO: throwing 404 rather than 400 as it's cacheable + statusCode: 404, message: `Invalid package name: ${errors[0] ?? 'unknown error'}`, }) }