2024-05-06 22:51:32 +02:00
|
|
|
import axios from 'axios';
|
|
|
|
import middleware from './_common/middleware.js';
|
2023-08-14 23:15:00 +02:00
|
|
|
|
2024-05-06 22:51:32 +02:00
|
|
|
const rankHandler = async (url) => {
|
2023-08-14 23:15:00 +02:00
|
|
|
const domain = url ? new URL(url).hostname : null;
|
|
|
|
if (!domain) throw new Error('Invalid URL');
|
|
|
|
|
|
|
|
try {
|
|
|
|
const auth = process.env.TRANCO_API_KEY ? // Auth is optional.
|
|
|
|
{ auth: { username: process.env.TRANCO_USERNAME, password: process.env.TRANCO_API_KEY } }
|
|
|
|
: {};
|
|
|
|
const response = await axios.get(
|
2023-09-03 17:58:46 +02:00
|
|
|
`https://tranco-list.eu/api/ranks/domain/${domain}`, { timeout: 5000 }, auth,
|
2023-08-14 23:15:00 +02:00
|
|
|
);
|
|
|
|
if (!response.data || !response.data.ranks || response.data.ranks.length === 0) {
|
|
|
|
return { skipped: `Skipping, as ${domain} isn't ranked in the top 100 million sites yet.`};
|
|
|
|
}
|
|
|
|
return response.data;
|
|
|
|
} catch (error) {
|
|
|
|
return { error: `Unable to fetch rank, ${error.message}` };
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2024-05-06 22:51:32 +02:00
|
|
|
export const handler = middleware(rankHandler);
|
|
|
|
export default handler;
|
2023-09-03 13:27:04 +02:00
|
|
|
|