32 lines
895 B
TypeScript
32 lines
895 B
TypeScript
import { shouldBlockCrawler, extractUserAgent } from 'crawl-me-not';
|
|
import type { Handle } from '@sveltejs/kit';
|
|
|
|
export const handle: Handle = async ({ event, resolve }) => {
|
|
const userAgent = extractUserAgent(event.request.headers);
|
|
const result = shouldBlockCrawler(userAgent, {
|
|
blockAI: true,
|
|
blockSEO: false,
|
|
debug: true
|
|
});
|
|
|
|
if (result.isBlocked) {
|
|
console.log(`Blocked ${result.crawlerType} crawler: ${result.userAgent}`);
|
|
return new Response('Access denied', {
|
|
status: 403,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-Blocked-Reason': `${result.crawlerType} crawler detected`
|
|
}
|
|
});
|
|
}
|
|
|
|
return resolve(event);
|
|
};
|
|
|
|
// If you need to compose multiple handles:
|
|
// import { sequence } from '@sveltejs/kit/hooks';
|
|
//
|
|
// export const handle = sequence(
|
|
// crawlerBlockingHandle,
|
|
// // your other handles...
|
|
// );
|