feat(telemetry): collections, universal server-fn coverage, beacon, client tracker

- activities indexes + client_events/client_errors/rollups/alerts collections
- global function middleware via createStart; reads skipped on success
- actor stash, denial dedup, control-flow error guards
- api route logging, auth event overrides, beacon endpoint, web vitals
- centralized admin role checks, shared skeletons, award-badges fix
- extracted deriveRunState with tests
This commit is contained in:
2026-08-25 21:33:25 -07:00
parent 15aeb64b19
commit e2863c1f6c
70 changed files with 2545 additions and 275 deletions
+126
View File
@@ -21,6 +21,8 @@ vi.mock("@/lib/logger", () => ({
}));
import { recordDeniedServerFn, serverFnLoggingMiddleware } from "./activities";
import { setRequestActor } from "@/lib/telemetry/request-context.server";
import { redirect } from "@tanstack/react-router";
type ServerHandler = (opts: {
next: () => Promise<unknown>;
@@ -192,6 +194,130 @@ describe("serverFnLoggingMiddleware", () => {
});
});
const flushWrites = () => new Promise((resolve) => setTimeout(resolve, 20));
describe("serverFnLoggingMiddleware read handling", () => {
it("skips successful read fns", async () => {
setRequest("http://localhost:3000/_serverFn/x");
await runMiddleware({
next: async () => successEnvelope,
data: undefined,
context: {},
serverFnMeta: { id: "x", name: "getPlayerStats" },
});
await flushWrites();
expect(h.createActivity).not.toHaveBeenCalled();
});
it("records failed read fns", async () => {
setRequest("http://localhost:3000/_serverFn/x");
await runMiddleware({
next: async () => ({
result: { success: false, error: { code: "NOT_FOUND" } },
}),
data: undefined,
context: {},
serverFnMeta: { id: "x", name: "getPlayerStats" },
});
await vi.waitFor(() => expect(h.createActivity).toHaveBeenCalledTimes(1));
expect(h.createActivity.mock.calls[0][0]).toMatchObject({
name: "getPlayerStats",
success: false,
});
});
it("records thrown errors from read fns", async () => {
setRequest("http://localhost:3000/_serverFn/x");
await expect(
runMiddleware({
next: async () => {
throw new Error("db down");
},
data: undefined,
context: {},
serverFnMeta: { id: "x", name: "listPlayers" },
})
).rejects.toThrow("db down");
await vi.waitFor(() => expect(h.createActivity).toHaveBeenCalledTimes(1));
});
});
describe("serverFnLoggingMiddleware control flow and dedup", () => {
it("does not record a thrown Response (session refresh)", async () => {
setRequest("http://localhost:3000/_serverFn/doThing");
await expect(
runMiddleware({
next: async () => {
throw new Response("{}", { status: 401 });
},
data: undefined,
context: {},
})
).rejects.toBeInstanceOf(Response);
await flushWrites();
expect(h.createActivity).not.toHaveBeenCalled();
});
it("does not record thrown redirects", async () => {
setRequest("http://localhost:3000/_serverFn/doThing");
await expect(
runMiddleware({
next: async () => {
throw redirect({ to: "/" });
},
data: undefined,
context: {},
})
).rejects.toBeDefined();
await flushWrites();
expect(h.createActivity).not.toHaveBeenCalled();
});
it("does not double-record when a denial was already recorded for the request", async () => {
setRequest("http://localhost:3000/_serverFn/doThing");
recordDeniedServerFn(h.request as unknown as Request, { player_id: "p1" }, { name: "doThing" });
await expect(
runMiddleware({
next: async () => {
throw new Error("Unauthorized");
},
data: undefined,
context: {},
serverFnMeta: { id: "x", name: "doThing" },
})
).rejects.toThrow("Unauthorized");
await flushWrites();
expect(h.createActivity).toHaveBeenCalledTimes(1);
expect(h.createActivity.mock.calls[0][0].error).toContain("FORBIDDEN");
});
it("prefers the stashed request actor over middleware context", async () => {
setRequest("http://localhost:3000/_serverFn/doThing");
setRequestActor(h.request as unknown as Request, { playerId: "p9" });
await runMiddleware({
next: async () => successEnvelope,
data: undefined,
context: { metadata: { player_id: "p1" } },
});
await vi.waitFor(() => expect(h.createActivity).toHaveBeenCalledTimes(1));
expect(h.createActivity.mock.calls[0][0].player).toBe("p9");
});
});
describe("recordDeniedServerFn", () => {
const deniedRequest = (url: string) =>
({ url, headers: new Headers({ "user-agent": "vitest" }) }) as Request;