mirror of https://github.com/buster-so/buster.git
add dev response
This commit is contained in:
parent
7e4a2064e2
commit
292a68f0b6
|
@ -1,8 +1,12 @@
|
|||
import { createServerFileRoute } from '@tanstack/react-start/server';
|
||||
import { chromium } from 'playwright';
|
||||
import { z } from 'zod';
|
||||
import { getMetric } from '@/api/buster_rest/metrics';
|
||||
import { getSupabaseServerClient } from '@/integrations/supabase/server';
|
||||
import { Route as MetricContentRoute } from './_content/metrics.$metricId.content';
|
||||
|
||||
const isDev = import.meta.env.DEV;
|
||||
|
||||
export const GetMetricScreenshotParamsSchema = z.object({
|
||||
metricId: z.string(),
|
||||
});
|
||||
|
@ -16,20 +20,37 @@ export const GetMetricScreenshotQuerySchema = z.object({
|
|||
|
||||
export const ServerRoute = createServerFileRoute('/screenshots/metrics/$metricId/').methods({
|
||||
GET: async ({ request, params }) => {
|
||||
const bearerToken = request.headers.get('Authorization') || '';
|
||||
const accessToken = bearerToken.replace('Bearer ', '');
|
||||
const supabase = getSupabaseServerClient();
|
||||
const {
|
||||
data: { user },
|
||||
} = await supabase.auth.getUser(accessToken);
|
||||
|
||||
if (!user || user.is_anonymous) {
|
||||
return new Response('Unauthorized', { status: 401 });
|
||||
}
|
||||
|
||||
console.time('capture screenshot');
|
||||
const { metricId } = GetMetricScreenshotParamsSchema.parse(params);
|
||||
const { version_number, type, width, height } = GetMetricScreenshotQuerySchema.parse(
|
||||
Object.fromEntries(new URL(request.url).searchParams)
|
||||
);
|
||||
const origin = new URL(request.url).origin;
|
||||
|
||||
console.timeLog('capture screenshot', 'params parsed');
|
||||
const browser = await chromium.launch();
|
||||
console.timeLog('capture screenshot', 'browser launched');
|
||||
try {
|
||||
const page = await browser.newPage({
|
||||
// Create a session object for Supabase
|
||||
|
||||
// Create browser context with authentication cookies
|
||||
const context = await browser.newContext({
|
||||
viewport: { width, height },
|
||||
});
|
||||
console.timeLog('capture screenshot', 'page created');
|
||||
|
||||
const page = await context.newPage();
|
||||
console.timeLog('capture screenshot', 'page created with auth cookie');
|
||||
|
||||
const fullPath = `${origin}${MetricContentRoute.fullPath}`;
|
||||
await page.goto(fullPath, { waitUntil: 'networkidle' });
|
||||
|
@ -39,6 +60,21 @@ export const ServerRoute = createServerFileRoute('/screenshots/metrics/$metricId
|
|||
});
|
||||
console.timeLog('capture screenshot', 'screenshot taken');
|
||||
console.timeEnd('capture screenshot');
|
||||
|
||||
if (!isDev) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
success: true,
|
||||
}),
|
||||
{
|
||||
status: 200,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return new Response(new Uint8Array(screenshotBuffer), {
|
||||
headers: {
|
||||
'Content-Type': 'image/png',
|
||||
|
|
Loading…
Reference in New Issue