This commit is contained in:
Jared Palmer 2023-05-19 12:33:56 -04:00
commit a04776256d
56 changed files with 6808 additions and 0 deletions

62
lib/analytics.ts Normal file
View file

@ -0,0 +1,62 @@
import type { NextRequest, NextFetchEvent } from "next/server";
import type { NextApiRequest } from "next";
export const initAnalytics = ({
request,
event,
}: {
request: NextRequest | NextApiRequest | Request;
event?: NextFetchEvent;
}) => {
const endpoint = process.env.VERCEL_URL;
return {
track: async (eventName: string, data?: any) => {
try {
if (!endpoint && process.env.NODE_ENV === "development") {
console.log(
`[Vercel Web Analytics] Track "${eventName}"` +
(data ? ` with data ${JSON.stringify(data || {})}` : "")
);
return;
}
const headers: { [key: string]: string } = {};
Object.entries(request.headers).map(([key, value]) => {
headers[key] = value;
});
const body = {
o: headers.referer,
ts: new Date().getTime(),
r: "",
en: eventName,
ed: data,
};
const promise = fetch(
`https://${process.env.VERCEL_URL}/_vercel/insights/event`,
{
headers: {
"content-type": "application/json",
"user-agent": headers["user-agent"] as string,
"x-forwarded-for": headers["x-forwarded-for"] as string,
"x-va-server": "1",
},
body: JSON.stringify(body),
method: "POST",
}
);
if (event) {
event.waitUntil(promise);
}
{
await promise;
}
} catch (err) {
console.error(err);
}
},
};
};