Merge branch 'dev' into boards
Some checks failed
Node.js CI / build (push) Has been cancelled

# Conflicts:
#	pnpm-lock.yaml
This commit is contained in:
Mike Cao 2026-01-07 01:01:39 -08:00
commit aefc36b476
64 changed files with 699 additions and 319 deletions

View file

@ -17,5 +17,6 @@ export async function GET(request: Request) {
telemetryDisabled: !!process.env.DISABLE_TELEMETRY,
trackerScriptName: process.env.TRACKER_SCRIPT_NAME,
updatesDisabled: !!process.env.DISABLE_UPDATES,
currentVersion: !!process.env.currentVersion,
});
}

View file

@ -17,8 +17,8 @@ export async function POST(request: Request) {
return unauthorized();
}
const parameters = await setWebsiteDate(websiteId, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId);
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
const data = await getAttribution(websiteId, parameters as AttributionParameters, filters);

View file

@ -17,8 +17,8 @@ export async function POST(request: Request) {
return unauthorized();
}
const parameters = await setWebsiteDate(websiteId, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId);
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
const data = await getBreakdown(websiteId, parameters as BreakdownParameters, filters);

View file

@ -17,8 +17,8 @@ export async function POST(request: Request) {
return unauthorized();
}
const parameters = await setWebsiteDate(websiteId, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId);
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
const data = await getFunnel(websiteId, parameters as FunnelParameters, filters);

View file

@ -17,8 +17,8 @@ export async function POST(request: Request) {
return unauthorized();
}
const parameters = await setWebsiteDate(websiteId, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId);
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
const data = await getGoal(websiteId, parameters as GoalParameters, filters);

View file

@ -17,8 +17,8 @@ export async function POST(request: Request) {
return unauthorized();
}
const filters = await getQueryFilters(body.filters, websiteId);
const parameters = await setWebsiteDate(websiteId, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
const data = await getRetention(websiteId, parameters as RetentionParameters, filters);

View file

@ -17,8 +17,8 @@ export async function POST(request: Request) {
return unauthorized();
}
const parameters = await setWebsiteDate(websiteId, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId);
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
const data = await getRevenue(websiteId, parameters as RevenuParameters, filters);

View file

@ -18,8 +18,8 @@ export async function POST(request: Request) {
return unauthorized();
}
const filters = await getQueryFilters(body.filters, websiteId);
const parameters = await setWebsiteDate(websiteId, body.parameters);
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
const data = {
utm_source: [],

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getEventDataEvents(websiteId, {
...filters,

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getEventDataFields(websiteId, filters);

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getEventDataProperties(websiteId, filters);

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getEventDataStats(websiteId, filters);

View file

@ -30,7 +30,7 @@ export async function GET(
}
const { propertyName } = query;
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getEventDataValues(websiteId, {
...filters,

View file

@ -29,7 +29,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getWebsiteEvents(websiteId, filters);

View file

@ -29,7 +29,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getEventStats(websiteId, filters);

View file

@ -28,7 +28,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const [events, pages, referrers, browsers, os, devices, countries] = await Promise.all([
getEventMetrics(websiteId, { type: 'event' }, filters),

View file

@ -37,7 +37,7 @@ export async function GET(
}
const { type, limit, offset, search } = query;
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
if (search) {
filters[type] = `c.${search}`;

View file

@ -37,7 +37,7 @@ export async function GET(
}
const { type, limit, offset, search } = query;
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
if (search) {
filters[type] = `c.${search}`;

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const [pageviews, sessions] = await Promise.all([
getPageviewStats(websiteId, filters),

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getSessionDataProperties(websiteId, filters);

View file

@ -29,7 +29,7 @@ export async function GET(
}
const { propertyName } = query;
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getSessionDataValues(websiteId, {
...filters,

View file

@ -25,7 +25,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getSessionActivity(websiteId, sessionId, filters);

View file

@ -28,7 +28,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getWebsiteSessions(websiteId, filters);

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const metrics = await getWebsiteSessionStats(websiteId, filters);

View file

@ -28,7 +28,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getWeeklyTraffic(websiteId, filters);

View file

@ -27,7 +27,7 @@ export async function GET(
return unauthorized();
}
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
const data = await getWebsiteStats(websiteId, filters);

View file

@ -42,7 +42,7 @@ export async function GET(
value: segment.name,
}));
} else {
const filters = await getQueryFilters(query, websiteId);
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
values = await getValues(websiteId, FILTER_COLUMNS[type], filters);
}

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { uuid } from '@/lib/crypto';
import redis from '@/lib/redis';
import { fetchAccount } from '@/lib/load';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
import { pagingParams, searchParams } from '@/lib/schema';
@ -52,7 +52,7 @@ export async function POST(request: Request) {
const { id, name, domain, shareId, teamId } = body;
if (process.env.CLOUD_MODE && !teamId) {
const account = await redis.client.get(`account:${auth.user.id}`);
const account = await fetchAccount(auth.user.id);
if (!account?.hasSubscription) {
const count = await getWebsiteCount(auth.user.id);