diff --git a/app/composables/npm/useOrgPackages.ts b/app/composables/npm/useOrgPackages.ts index ab1f81b32..3cb66f950 100644 --- a/app/composables/npm/useOrgPackages.ts +++ b/app/composables/npm/useOrgPackages.ts @@ -92,11 +92,11 @@ export function useOrgPackages(orgName: MaybeRefOrGetter) { // Get all package names in the org let packageNames: string[] try { - const { data } = await $npmRegistry>( - `/-/org/${encodeURIComponent(org)}/package`, + const { packages } = await $fetch<{ packages: string[]; count: number }>( + `/api/registry/org/${encodeURIComponent(org)}/packages`, { signal }, ) - packageNames = Object.keys(data) + packageNames = packages } catch (err) { // Check if this is a 404 (org not found) if (err && typeof err === 'object' && 'statusCode' in err && err.statusCode === 404) { diff --git a/server/api/registry/org/[org]/packages.get.ts b/server/api/registry/org/[org]/packages.get.ts index 28b0dbba8..4dd2019b5 100644 --- a/server/api/registry/org/[org]/packages.get.ts +++ b/server/api/registry/org/[org]/packages.get.ts @@ -1,6 +1,5 @@ -import { CACHE_MAX_AGE_ONE_HOUR } from '#shared/utils/constants' - -const NPM_REGISTRY = 'https://registry.npmjs.org' +import { CACHE_MAX_AGE_ONE_HOUR, NPM_REGISTRY } from '#shared/utils/constants' +import { FetchError } from 'ofetch' // Validation pattern for npm org names (alphanumeric with hyphens) const NPM_ORG_NAME_RE = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i @@ -37,8 +36,14 @@ export default defineCachedEventHandler( packages: Object.keys(data), count: Object.keys(data).length, } - } catch { - // Org doesn't exist or has no packages + } catch (error) { + // Let 404s propagate (org not found) so consumers can distinguish from empty + if (error instanceof FetchError && error.statusCode === 404) { + throw createError({ statusCode: 404, message: `Organization not found: ${org}` }) + } + // For other errors (network, etc.), return empty + // oxlint-disable-next-line no-console -- log npm registry fetch errors for debugging + console.warn(`[org-packages] Failed to fetch packages for org ${org}:`, error) return { packages: [], count: 0,