mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import type { IncomingMessage } from 'http';
|
|
|
|
type SocialPreviewBot = 'twitter' | 'facebook' | 'telegram' | 'slack';
|
|
type SearchEngineBot = 'google' | 'bing' | 'yahoo' | 'duckduckgo';
|
|
|
|
type ReturnType = {
|
|
type: 'social_preview';
|
|
bot: SocialPreviewBot;
|
|
} | {
|
|
type: 'search_engine';
|
|
bot: SearchEngineBot;
|
|
} | undefined;
|
|
|
|
export default function detectBotRequest(req: IncomingMessage): ReturnType {
|
|
const userAgent = req.headers['user-agent'];
|
|
|
|
if (!userAgent) {
|
|
return;
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('twitter')) {
|
|
return { type: 'social_preview', bot: 'twitter' };
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('facebook')) {
|
|
return { type: 'social_preview', bot: 'facebook' };
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('telegram')) {
|
|
return { type: 'social_preview', bot: 'telegram' };
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('slack')) {
|
|
return { type: 'social_preview', bot: 'slack' };
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('googlebot')) {
|
|
return { type: 'search_engine', bot: 'google' };
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('bingbot')) {
|
|
return { type: 'search_engine', bot: 'bing' };
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('yahoo')) {
|
|
return { type: 'search_engine', bot: 'yahoo' };
|
|
}
|
|
|
|
if (userAgent.toLowerCase().includes('duckduck')) {
|
|
return { type: 'search_engine', bot: 'duckduckgo' };
|
|
}
|
|
}
|