-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy path_worker.js
63 lines (55 loc) · 1.4 KB
/
_worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const BOT_AGENTS = [
'googlebot',
'bingbot',
'yahoo! slurp',
'yandex',
'baiduspider',
'facebookexternalhit',
'twitterbot',
'rogerbot',
'linkedinbot',
'embedly',
'quora link preview',
'showyoubot',
'outbrain',
'pinterest/0.',
'developers.google.com/+/web/snippet',
'slackbot',
'vkshare',
'w3c_validator',
'redditbot',
'applebot',
'whatsapp',
'flipboard',
'tumblr',
'bitlybot',
'skypeuripreview',
'nuzzel',
'discordbot',
'qwantify',
'pinterestbot',
'bitrix link preview',
'xing-contenttabreceiver',
'telegrambot'
]
const fetchPrerendered = async request => {
const { url, headers } = request
const prerenderUrl = `https://service.prerender.io/${url}`
const headersToSend = new Headers(headers)
headersToSend.set('X-Prerender-Token', '7vGsiwq4BB5avp2mXVfq')
const prerenderRequest = new Request(prerenderUrl, {
headers: headersToSend,
redirect: 'manual'
})
const { status, body } = await fetch(prerenderRequest)
return new Response(body, { status })
}
export default {
fetch(request, env) {
const pathname = new URL(request.url).pathname.toLowerCase()
const userAgent = (request.headers.get('User-Agent') || '').toLowerCase()
// a crawler that requests the document
if (BOT_AGENTS.some(agent => userAgent.includes(agent)) && !pathname.includes('.')) return fetchPrerendered(request)
return env.ASSETS.fetch(request)
}
}