64 lines
No EOL
1.9 KiB
JavaScript
64 lines
No EOL
1.9 KiB
JavaScript
import crypto from 'node:crypto'
|
|
import { getStore } from '@netlify/blobs'
|
|
|
|
export default async (request, context) => {
|
|
const params = new URL(request['url']).searchParams
|
|
const ns = params.get('ns')
|
|
const site = params.get('site')
|
|
const page = params.get('page')
|
|
const ignore = params.get('ignore')
|
|
const setUrl = (id, event) => {
|
|
let url = `https://cdn.usefathom.com/?h=${encodeURIComponent(site)}&p=${encodeURIComponent(page)}&sid=CWSVCDJC&cid=${id}`
|
|
if (event) url = `${url}&name=${encodeURIComponent(event)}`
|
|
return url
|
|
}
|
|
const lang = decodeURIComponent(params.get('lang'))
|
|
const nav = decodeURIComponent(params.get('nav'))
|
|
const notLang = !lang || lang === 'null' || lang === 'undefined'
|
|
const notNav = !nav || nav === 'null' || nav === 'undefined'
|
|
const acceptLanguage = notLang ? request['headers'].get('accept-language') : lang
|
|
const userAgent = notNav ? request['headers'].get('user-agent') : nav
|
|
const headers = {
|
|
'Accept-Language': acceptLanguage,
|
|
'User-Agent': userAgent
|
|
}
|
|
const id = crypto.createHash('md5').update(`${context['ip']}${context['geo']['city']}${context['geo']['latitude']}${context['geo']['longitude']}${userAgent}`).digest('hex')
|
|
let url = setUrl(id)
|
|
const ids = getStore('ids')
|
|
let userId = await ids.get(id)
|
|
|
|
if (ignore) return new Response(JSON.stringify({
|
|
status: 'accepted',
|
|
}),
|
|
{ headers: { "Content-Type": "application/json" } }
|
|
)
|
|
|
|
if (!userId) await ids.set(id, id)
|
|
userId = await ids.get(id)
|
|
|
|
if (ns) {
|
|
url = setUrl(userId, 'noscript visit')
|
|
} else {
|
|
url = setUrl(userId, 'Blocked visit')
|
|
}
|
|
|
|
fetch(url, { headers })
|
|
.then((data) => {
|
|
console.log(data);
|
|
return {}
|
|
})
|
|
.catch((err) => {
|
|
console.log(err)
|
|
return {}
|
|
})
|
|
|
|
return new Response(JSON.stringify({
|
|
status: 'success',
|
|
}),
|
|
{ headers: { "Content-Type": "application/json" } }
|
|
)
|
|
}
|
|
|
|
export const config = {
|
|
path: "/api/event",
|
|
} |