init
This commit is contained in:
commit
a04776256d
56 changed files with 6808 additions and 0 deletions
62
lib/analytics.ts
Normal file
62
lib/analytics.ts
Normal 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);
|
||||
}
|
||||
},
|
||||
};
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue