Back to Library
NPM
js • 1/27/2026
14
const axios = require('axios');
async function searchNpm(query) {
if (!query) {
throw new Error("Query cannot be empty for NPM search.");
}
try {
const searchUrl = `https://registry.npmjs.com/-/v1/search?text=${encodeURIComponent(query)}`;
const response = await axios.get(searchUrl, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
},
timeout: 15000
});
const { objects } = response.data;
if (!objects || objects.length === 0) {
return [];
}
const results = objects.map(obj => {
const pkg = obj.package;
return {
name: pkg.name,
version: pkg.version,
description: pkg.description || 'No description provided.',
keywords: pkg.keywords || [],
author: pkg.author ? pkg.author.name : 'N/A',
date: pkg.date,
links: {
npm: pkg.links.npm,
homepage: pkg.links.homepage || 'N/A',
repository: pkg.links.repository || 'N/A',
}
};
});
return results;
} catch (error) {
if (axios.isAxiosError(error)) {
const errorMessage = error.response ? `Status: ${error.response.status}, Data: ${JSON.stringify(error.response.data)}` : error.message;
throw new Error(`NPM search failed: ${errorMessage}`);
} else {
throw new Error(`An unexpected error occurred during NPM search: ${error.message}`);
}
}
}
module.exports = { searchNpm };