diff --git a/apps/admin/src/app/dashboard/hr/candidates/[id]/actions.tsx b/apps/admin/src/app/dashboard/hr/candidates/[id]/actions.tsx
new file mode 100644
index 0000000..4a29cd9
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/candidates/[id]/actions.tsx
@@ -0,0 +1,40 @@
+'use client';
+import { useTransition } from 'react';
+import { Button } from '@repo/ui/components/button';
+import { updateCandidateStage } from './update-stage.action';
+import { useToast } from '@repo/ui/components/use-toast';
+
+const stages = ['SCREENING', 'TECH_INTERVIEW', 'SYSTEM_DESIGN', 'FINAL_INTERVIEW', 'OFFER', 'REJECTED'] as const;
+
+export function CandidateActions({ candidateId, currentStage }: { candidateId: string; currentStage: string }) {
+ const [pending, startTransition] = useTransition();
+ const { toast } = useToast();
+
+ const handleStageChange = (stage: string) => {
+ startTransition(async () => {
+ const result = await updateCandidateStage(candidateId, stage);
+ if (result.success) {
+ toast({ title: 'Этап обновлён' });
+ } else {
+ toast({ title: 'Ошибка', variant: 'destructive' });
+ }
+ });
+ };
+
+ return (
+
+ {stages.map((stage) => (
+
+ ))}
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/candidates/[id]/page.tsx b/apps/admin/src/app/dashboard/hr/candidates/[id]/page.tsx
new file mode 100644
index 0000000..49f61fe
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/candidates/[id]/page.tsx
@@ -0,0 +1,114 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { notFound } from 'next/navigation';
+import { Badge } from '@repo/ui/components/badge';
+import { Button } from '@repo/ui/components/button';
+import Link from 'next/link';
+import { CandidateActions } from './actions';
+
+const stageColors: Record = {
+ SCREENING: 'bg-blue-100 text-blue-800',
+ TECH_INTERVIEW: 'bg-yellow-100 text-yellow-800',
+ SYSTEM_DESIGN: 'bg-purple-100 text-purple-800',
+ FINAL_INTERVIEW: 'bg-orange-100 text-orange-800',
+ OFFER: 'bg-green-100 text-green-800',
+ REJECTED: 'bg-red-100 text-red-800',
+};
+
+export default async function CandidateDetailPage(props: { params: Promise<{ id: string }> }) {
+ const { id } = await props.params;
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const candidate = await prisma.candidate.findUnique({
+ where: { id },
+ include: {
+ createdBy: { select: { name: true } },
+ interviews: {
+ include: {
+ recruiter: { select: { name: true } },
+ _count: { select: { challenges: true } },
+ },
+ orderBy: { createdAt: 'desc' },
+ },
+ },
+ });
+
+ if (!candidate) notFound();
+
+ return (
+
+
+
+
+ {candidate.firstName} {candidate.lastName}
+
+
{candidate.email}
+
+
+ {candidate.pipelineStage.replace(/_/g, ' ')}
+
+
+
+
+
+
Информация
+
+
+
- Телефон
+ - {candidate.phone || '—'}
+
+
+
- CV
+
- {candidate.cvLink ? Ссылка : '—'}
+
+
+
- Создан
+ - {candidate.createdAt.toLocaleDateString()}
+
+
+
- Создал
+ - {candidate.createdBy.name}
+
+
+
+
+
+
Действия
+
+
+
+
+ {candidate.notes && (
+
+
Заметки
+
{candidate.notes}
+
+ )}
+
+
+
Интервью ({candidate.interviews.length})
+ {candidate.interviews.length === 0 ? (
+
Нет интервью
+ ) : (
+
+ {candidate.interviews.map((interview) => (
+
+
+
{interview.title}
+
+ {interview.recruiter.name} · {interview._count.challenges} задач · {interview.status}
+
+
+
+
+
+
+ ))}
+
+ )}
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/candidates/[id]/update-stage.action.ts b/apps/admin/src/app/dashboard/hr/candidates/[id]/update-stage.action.ts
new file mode 100644
index 0000000..4b82a9c
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/candidates/[id]/update-stage.action.ts
@@ -0,0 +1,18 @@
+'use server';
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { revalidatePath } from 'next/cache';
+
+export async function updateCandidateStage(candidateId: string, stage: string) {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ await prisma.candidate.update({
+ where: { id: candidateId },
+ data: { pipelineStage: stage as any },
+ });
+
+ revalidatePath('/dashboard/hr');
+ return { success: true };
+}
diff --git a/apps/admin/src/app/dashboard/hr/candidates/columns.tsx b/apps/admin/src/app/dashboard/hr/candidates/columns.tsx
new file mode 100644
index 0000000..b6e6298
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/candidates/columns.tsx
@@ -0,0 +1,59 @@
+'use client';
+import type { ColumnDef } from '@tanstack/react-table';
+import { Badge } from '@repo/ui/components/badge';
+import { Button } from '@repo/ui/components/button';
+import Link from 'next/link';
+
+type CandidateRow = {
+ id: string;
+ firstName: string;
+ lastName: string;
+ email: string;
+ pipelineStage: string;
+ status: string;
+ createdBy: { name: string | null };
+ _count: { interviews: number };
+};
+
+const stageColors: Record = {
+ SCREENING: 'bg-blue-100 text-blue-800',
+ TECH_INTERVIEW: 'bg-yellow-100 text-yellow-800',
+ SYSTEM_DESIGN: 'bg-purple-100 text-purple-800',
+ FINAL_INTERVIEW: 'bg-orange-100 text-orange-800',
+ OFFER: 'bg-green-100 text-green-800',
+ REJECTED: 'bg-red-100 text-red-800',
+};
+
+export const columns: ColumnDef[] = [
+ {
+ accessorKey: 'firstName',
+ header: 'Имя',
+ cell: ({ row }) => `${row.original.firstName} ${row.original.lastName}`,
+ },
+ { accessorKey: 'email', header: 'Email' },
+ {
+ accessorKey: 'pipelineStage',
+ header: 'Этап',
+ cell: ({ row }) => (
+
+ {row.original.pipelineStage.replace(/_/g, ' ')}
+
+ ),
+ },
+ {
+ accessorKey: '_count.interviews',
+ header: 'Интервью',
+ },
+ {
+ accessorKey: 'createdBy.name',
+ header: 'Создал',
+ },
+ {
+ id: 'actions',
+ cell: ({ row }) => (
+
+
+
+ ),
+ },
+];
diff --git a/apps/admin/src/app/dashboard/hr/candidates/create.action.ts b/apps/admin/src/app/dashboard/hr/candidates/create.action.ts
new file mode 100644
index 0000000..f261566
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/candidates/create.action.ts
@@ -0,0 +1,32 @@
+'use server';
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { revalidatePath } from 'next/cache';
+import { z } from 'zod';
+
+const schema = z.object({
+ firstName: z.string().min(1),
+ lastName: z.string().min(1),
+ email: z.string().email(),
+ phone: z.string().optional(),
+ cvLink: z.string().optional(),
+ notes: z.string().optional(),
+});
+
+export async function createCandidate(data: z.infer) {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const parsed = schema.parse(data);
+
+ await prisma.candidate.create({
+ data: {
+ ...parsed,
+ createdById: session!.user.id,
+ },
+ });
+
+ revalidatePath('/dashboard/hr/candidates');
+ return { success: true };
+}
diff --git a/apps/admin/src/app/dashboard/hr/candidates/page.tsx b/apps/admin/src/app/dashboard/hr/candidates/page.tsx
new file mode 100644
index 0000000..260ca49
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/candidates/page.tsx
@@ -0,0 +1,30 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { DataTable } from '@repo/ui/components/data-table';
+import { columns } from './columns';
+
+export default async function CandidatesPage() {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const candidates = await prisma.candidate.findMany({
+ include: {
+ createdBy: { select: { name: true } },
+ _count: { select: { interviews: true } },
+ },
+ orderBy: { createdAt: 'desc' },
+ });
+
+ return (
+
+
+
+
Кандидаты
+
Все кандидаты в системе
+
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/[id]/live/live-view.tsx b/apps/admin/src/app/dashboard/hr/interviews/[id]/live/live-view.tsx
new file mode 100644
index 0000000..371206e
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/[id]/live/live-view.tsx
@@ -0,0 +1,135 @@
+'use client';
+import { useState, useEffect, useCallback, useRef } from 'react';
+import { Badge } from '@repo/ui/components/badge';
+import { Button } from '@repo/ui/components/button';
+import { Textarea } from '@repo/ui/components/textarea';
+import { saveNote } from './save-note.action';
+import { useToast } from '@repo/ui/components/use-toast';
+
+type ChallengeData = {
+ id: string;
+ challengeId: number;
+ order: number;
+ code: string;
+ isSubmitted: boolean;
+ passedTests: number;
+ totalTests: number;
+ challenge: { name: string; slug: string; difficulty: string; tests: string };
+};
+
+type Interview = {
+ id: string;
+ title: string;
+ token: string;
+ status: string;
+ duration: number;
+ candidate: { firstName: string; lastName: string };
+ challenges: ChallengeData[];
+};
+
+export function LiveCodingView({ interview }: { interview: Interview }) {
+ const { toast } = useToast();
+ const [activeChallengeIdx, setActiveChallengeIdx] = useState(0);
+ const [code, setCode] = useState('');
+ const [note, setNote] = useState('');
+ const [events, setEvents] = useState([]);
+ const pollingRef = useRef(null);
+ const challenge = interview.challenges[activeChallengeIdx];
+
+ useEffect(() => {
+ const poll = async () => {
+ try {
+ const res = await fetch(`/api/interview/poll?id=${interview.id}`);
+ const data = await res.json();
+
+ if (data.code) setCode(data.code);
+ if (data.events) setEvents(data.events.slice(-100));
+ } catch {}
+ };
+
+ poll();
+ pollingRef.current = setInterval(poll, 2000);
+ return () => { if (pollingRef.current) clearInterval(pollingRef.current); };
+ }, [interview.id, activeChallengeIdx]);
+
+ const handleSaveNote = useCallback(async () => {
+ if (!note.trim()) return;
+ const result = await saveNote(interview.id, note);
+ if (result.success) {
+ toast({ title: 'Заметка сохранена' });
+ setNote('');
+ }
+ }, [note, interview.id, toast]);
+
+ return (
+
+
+
+
+
Live: {interview.title}
+
+ {interview.candidate.firstName} {interview.candidate.lastName}
+
+
+
LIVE
+
+
+
+ {interview.challenges.map((ch, i) => (
+
+ ))}
+
+
+ {challenge && (
+
+
+ {challenge.challenge.name}
+ {challenge.challenge.difficulty}
+
+
+ {code || 'Кандидат ещё не начал писать код...'}
+
+
+ )}
+
+
+
Лог событий
+
+ {events.length === 0 && (
+
Ожидание действий кандидата...
+ )}
+ {events.map((ev: any, i: number) => (
+
+ {new Date(ev.timestamp).toLocaleTimeString()}
+ {' '}
+ {ev.type}
+
+ ))}
+
+
+
+
+
+
+
Заметки рекрутера
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/[id]/live/page.tsx b/apps/admin/src/app/dashboard/hr/interviews/[id]/live/page.tsx
new file mode 100644
index 0000000..745bb42
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/[id]/live/page.tsx
@@ -0,0 +1,30 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { notFound } from 'next/navigation';
+import { LiveCodingView } from './live-view';
+
+export default async function LiveInterviewPage(props: { params: Promise<{ id: string }> }) {
+ const { id } = await props.params;
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const interview = await prisma.interviewSession.findUnique({
+ where: { id },
+ include: {
+ candidate: { select: { firstName: true, lastName: true } },
+ challenges: {
+ include: { challenge: { select: { name: true, slug: true, difficulty: true, tests: true } } },
+ orderBy: { order: 'asc' },
+ },
+ },
+ });
+
+ if (!interview) notFound();
+
+ return (
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/[id]/live/save-note.action.ts b/apps/admin/src/app/dashboard/hr/interviews/[id]/live/save-note.action.ts
new file mode 100644
index 0000000..8613690
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/[id]/live/save-note.action.ts
@@ -0,0 +1,21 @@
+'use server';
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { revalidatePath } from 'next/cache';
+
+export async function saveNote(sessionId: string, content: string) {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ await prisma.interviewNote.create({
+ data: {
+ sessionId,
+ authorId: session!.user.id,
+ content,
+ },
+ });
+
+ revalidatePath(`/dashboard/hr/interviews/${sessionId}`);
+ return { success: true };
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/[id]/page.tsx b/apps/admin/src/app/dashboard/hr/interviews/[id]/page.tsx
new file mode 100644
index 0000000..976b26e
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/[id]/page.tsx
@@ -0,0 +1,109 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { notFound } from 'next/navigation';
+import { Badge } from '@repo/ui/components/badge';
+import { Button } from '@repo/ui/components/button';
+import Link from 'next/link';
+import { cn } from '@repo/ui/cn';
+import { buttonVariants } from '@repo/ui/components/button';
+
+export default async function InterviewDetailPage(props: { params: Promise<{ id: string }> }) {
+ const { id } = await props.params;
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const interview = await prisma.interviewSession.findUnique({
+ where: { id },
+ include: {
+ candidate: true,
+ recruiter: { select: { name: true } },
+ challenges: {
+ include: { challenge: { select: { name: true, slug: true, difficulty: true } } },
+ orderBy: { order: 'asc' },
+ },
+ notes: {
+ include: { author: { select: { name: true } } },
+ orderBy: { createdAt: 'desc' },
+ },
+ },
+ });
+
+ if (!interview) notFound();
+
+ const interviewLink = `${process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000'}/interview/${interview.token}`;
+
+ return (
+
+
+
+
{interview.title}
+
+ {interview.candidate.firstName} {interview.candidate.lastName} · {interview.recruiter.name}
+
+
+
{interview.status}
+
+
+
+
+
Ссылка для кандидата
+
+ {interviewLink}
+
+
+
+
+ {interview.status === 'IN_PROGRESS' && (
+
+
Live-просмотр
+
+
+
+
+ )}
+
+
+
+
Задачи ({interview.challenges.length})
+
+ {interview.challenges.map((ic) => (
+
+
+
{ic.challenge.name}
+
{ic.challenge.difficulty}
+
+
+ {ic.isSubmitted
+ ? `${ic.passedTests}/${ic.totalTests} тестов`
+ : 'Не решена'}
+
+
+ ))}
+
+
+
+
+
Заметки ({interview.notes.length})
+ {interview.notes.length === 0 ? (
+
Нет заметок
+ ) : (
+
+ {interview.notes.map((note) => (
+
+
+ {note.author.name}
+ {note.createdAt.toLocaleString()}
+
+
{note.content}
+ {note.rating &&
Оценка: {note.rating}/5}
+
+ ))}
+
+ )}
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/columns.tsx b/apps/admin/src/app/dashboard/hr/interviews/columns.tsx
new file mode 100644
index 0000000..2614da0
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/columns.tsx
@@ -0,0 +1,64 @@
+'use client';
+import type { ColumnDef } from '@tanstack/react-table';
+import { Badge } from '@repo/ui/components/badge';
+import { Button } from '@repo/ui/components/button';
+import Link from 'next/link';
+
+type InterviewRow = {
+ id: string;
+ title: string;
+ token: string;
+ status: string;
+ candidate: { firstName: string; lastName: string };
+ recruiter: { name: string | null };
+ _count: { challenges: number };
+ createdAt: Date;
+};
+
+const statusColors: Record = {
+ PENDING: 'bg-gray-100 text-gray-800',
+ IN_PROGRESS: 'bg-blue-100 text-blue-800',
+ COMPLETED: 'bg-green-100 text-green-800',
+ EXPIRED: 'bg-red-100 text-red-800',
+};
+
+export const columns: ColumnDef[] = [
+ { accessorKey: 'title', header: 'Название' },
+ {
+ accessorKey: 'candidate',
+ header: 'Кандидат',
+ cell: ({ row }) => `${row.original.candidate.firstName} ${row.original.candidate.lastName}`,
+ },
+ {
+ accessorKey: 'status',
+ header: 'Статус',
+ cell: ({ row }) => (
+ {row.original.status}
+ ),
+ },
+ {
+ accessorKey: '_count.challenges',
+ header: 'Задач',
+ },
+ { accessorKey: 'recruiter.name', header: 'Рекрутер' },
+ {
+ accessorKey: 'createdAt',
+ header: 'Создано',
+ cell: ({ row }) => row.original.createdAt.toLocaleDateString(),
+ },
+ {
+ id: 'actions',
+ cell: ({ row }) => (
+
+
+
+
+ {row.original.status === 'IN_PROGRESS' && (
+
+
+
+ )}
+
+ ),
+ },
+];
diff --git a/apps/admin/src/app/dashboard/hr/interviews/create/create-interview.action.ts b/apps/admin/src/app/dashboard/hr/interviews/create/create-interview.action.ts
new file mode 100644
index 0000000..1af4f87
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/create/create-interview.action.ts
@@ -0,0 +1,44 @@
+'use server';
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { revalidatePath } from 'next/cache';
+import { z } from 'zod';
+import crypto from 'node:crypto';
+
+const schema = z.object({
+ title: z.string().min(1),
+ candidateId: z.string().min(1),
+ recruiterId: z.string().min(1),
+ challengeIds: z.array(z.number()).min(1),
+ duration: z.number().min(60).max(86400),
+});
+
+export async function createInterview(data: z.infer) {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const parsed = schema.parse(data);
+ const token = crypto.randomBytes(16).toString('hex');
+
+ const interview = await prisma.interviewSession.create({
+ data: {
+ title: parsed.title,
+ token,
+ duration: parsed.duration,
+ candidateId: parsed.candidateId,
+ recruiterId: parsed.recruiterId,
+ status: 'PENDING',
+ challenges: {
+ create: parsed.challengeIds.map((challengeId, index) => ({
+ challengeId,
+ order: index,
+ code: '',
+ })),
+ },
+ },
+ });
+
+ revalidatePath('/dashboard/hr/interviews');
+ return { success: true, id: interview.id, token };
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/create/form.tsx b/apps/admin/src/app/dashboard/hr/interviews/create/form.tsx
new file mode 100644
index 0000000..ff7d454
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/create/form.tsx
@@ -0,0 +1,123 @@
+'use client';
+import { useState, useTransition } from 'react';
+import { useRouter } from 'next/navigation';
+import { Button } from '@repo/ui/components/button';
+import { Input } from '@repo/ui/components/input';
+import { Label } from '@repo/ui/components/label';
+import { Card, CardContent } from '@repo/ui/components/card';
+import { Badge } from '@repo/ui/components/badge';
+import { useToast } from '@repo/ui/components/use-toast';
+import { createInterview } from './create-interview.action';
+
+type Candidate = { id: string; firstName: string; lastName: string; email: string };
+type Challenge = { id: number; name: string; slug: string; difficulty: string };
+
+export function CreateInterviewForm({
+ candidates,
+ challenges,
+ recruiterId,
+}: {
+ candidates: Candidate[];
+ challenges: Challenge[];
+ recruiterId: string;
+}) {
+ const router = useRouter();
+ const { toast } = useToast();
+ const [pending, startTransition] = useTransition();
+ const [title, setTitle] = useState('');
+ const [duration, setDuration] = useState('3600');
+ const [selectedCandidate, setSelectedCandidate] = useState('');
+ const [selectedChallenges, setSelectedChallenges] = useState([]);
+
+ const handleSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+ if (!selectedCandidate || selectedChallenges.length === 0) {
+ toast({ title: 'Выберите кандидата и хотя бы одну задачу', variant: 'destructive' });
+ return;
+ }
+
+ startTransition(async () => {
+ const result = await createInterview({
+ title,
+ candidateId: selectedCandidate,
+ recruiterId,
+ challengeIds: selectedChallenges,
+ duration: parseInt(duration, 10),
+ });
+
+ if (result.success) {
+ toast({ title: 'Интервью создано!' });
+ router.push(`/dashboard/hr/interviews/${result.id}`);
+ } else {
+ toast({ title: 'Ошибка создания', variant: 'destructive' });
+ }
+ });
+ };
+
+ const toggleChallenge = (id: number) => {
+ setSelectedChallenges((prev) =>
+ prev.includes(id) ? prev.filter((c) => c !== id) : [...prev, id],
+ );
+ };
+
+ return (
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/create/page.tsx b/apps/admin/src/app/dashboard/hr/interviews/create/page.tsx
new file mode 100644
index 0000000..8ff8cb6
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/create/page.tsx
@@ -0,0 +1,32 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { CreateInterviewForm } from './form';
+
+export default async function CreateInterviewPage() {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const [candidates, challenges] = await Promise.all([
+ prisma.candidate.findMany({
+ where: { status: 'ACTIVE' },
+ select: { id: true, firstName: true, lastName: true, email: true },
+ orderBy: { createdAt: 'desc' },
+ }),
+ prisma.challenge.findMany({
+ where: { status: 'ACTIVE' },
+ select: { id: true, name: true, slug: true, difficulty: true },
+ orderBy: { id: 'asc' },
+ }),
+ ]);
+
+ return (
+
+
+
Создать интервью
+
Выберите кандидата и задачи
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/interviews/page.tsx b/apps/admin/src/app/dashboard/hr/interviews/page.tsx
new file mode 100644
index 0000000..740bd1e
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/interviews/page.tsx
@@ -0,0 +1,38 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { DataTable } from '@repo/ui/components/data-table';
+import { columns } from './columns';
+import { Button } from '@repo/ui/components/button';
+import Link from 'next/link';
+import { cn } from '@repo/ui/cn';
+import { buttonVariants } from '@repo/ui/components/button';
+
+export default async function InterviewsPage() {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const interviews = await prisma.interviewSession.findMany({
+ include: {
+ candidate: { select: { firstName: true, lastName: true } },
+ recruiter: { select: { name: true } },
+ _count: { select: { challenges: true } },
+ },
+ orderBy: { createdAt: 'desc' },
+ });
+
+ return (
+
+
+
+
Интервью
+
Все сессии интервью
+
+
+ Создать интервью
+
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/layout.tsx b/apps/admin/src/app/dashboard/hr/layout.tsx
new file mode 100644
index 0000000..06c128f
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/layout.tsx
@@ -0,0 +1,20 @@
+import { SidebarNav } from '../../dashboard/_components/side-nav';
+
+const hrNavItems = [
+ { title: 'Обзор', href: '/dashboard/hr' },
+ { title: 'Кандидаты', href: '/dashboard/hr/candidates' },
+ { title: 'Воронка', href: '/dashboard/hr/pipeline' },
+ { title: 'Задачи', href: '/dashboard/hr/tasks' },
+ { title: 'Интервью', href: '/dashboard/hr/interviews' },
+];
+
+export default function HRLayout({ children }: { children: React.ReactNode }) {
+ return (
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/page.tsx b/apps/admin/src/app/dashboard/hr/page.tsx
new file mode 100644
index 0000000..45bda9d
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/page.tsx
@@ -0,0 +1,67 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import Link from 'next/link';
+import { buttonVariants } from '@repo/ui/components/button';
+import { cn } from '@repo/ui/cn';
+
+export default async function HROverviewPage() {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const [candidates, interviews, challenges] = await Promise.all([
+ prisma.candidate.count(),
+ prisma.interviewSession.count(),
+ prisma.challenge.count({ where: { status: 'ACTIVE' } }),
+ ]);
+
+ const pipelineCounts = await prisma.candidate.groupBy({
+ by: ['pipelineStage'],
+ _count: true,
+ });
+
+ return (
+
+
+
HR Рекрутинг
+
Управление наймом и интервью
+
+
+
+
+
{candidates}
+
Кандидатов
+
+
+
{interviews}
+
Интервью
+
+
+
{challenges}
+
Задач в банке
+
+
+
+
+
Воронка найма
+
+ {pipelineCounts.map((item) => (
+
+
{item._count}
+
{item.pipelineStage.replace(/_/g, ' ')}
+
+ ))}
+
+
+
+
+
+ Кандидаты
+
+
+ Новое интервью
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/pipeline/page.tsx b/apps/admin/src/app/dashboard/hr/pipeline/page.tsx
new file mode 100644
index 0000000..6916baa
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/pipeline/page.tsx
@@ -0,0 +1,49 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { PipelineBoard } from './pipeline-board';
+
+const stageOrder = ['SCREENING', 'TECH_INTERVIEW', 'SYSTEM_DESIGN', 'FINAL_INTERVIEW', 'OFFER', 'REJECTED'] as const;
+
+const stageLabels: Record = {
+ SCREENING: 'Скрининг',
+ TECH_INTERVIEW: 'Тех. интервью',
+ SYSTEM_DESIGN: 'System Design',
+ FINAL_INTERVIEW: 'Финальное',
+ OFFER: 'Оффер',
+ REJECTED: 'Отказ',
+};
+
+export default async function PipelinePage() {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const candidates = await prisma.candidate.findMany({
+ select: {
+ id: true,
+ firstName: true,
+ lastName: true,
+ email: true,
+ pipelineStage: true,
+ createdAt: true,
+ _count: { select: { interviews: true } },
+ },
+ orderBy: { createdAt: 'desc' },
+ });
+
+ const columns = stageOrder.map((stage) => ({
+ stage,
+ label: stageLabels[stage],
+ candidates: candidates.filter((c) => c.pipelineStage === stage),
+ }));
+
+ return (
+
+
+
Воронка найма
+
Перетаскивайте кандидатов между этапами
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/pipeline/pipeline-board.tsx b/apps/admin/src/app/dashboard/hr/pipeline/pipeline-board.tsx
new file mode 100644
index 0000000..6eaab22
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/pipeline/pipeline-board.tsx
@@ -0,0 +1,95 @@
+'use client';
+import { useState, useCallback } from 'react';
+import { Card, CardContent, CardHeader, CardTitle } from '@repo/ui/components/card';
+import { Badge } from '@repo/ui/components/badge';
+import { Button } from '@repo/ui/components/button';
+import Link from 'next/link';
+import { updateCandidateStage } from '../candidates/[id]/update-stage.action';
+import { useToast } from '@repo/ui/components/use-toast';
+
+type CandidateSummary = {
+ id: string;
+ firstName: string;
+ lastName: string;
+ email: string;
+ pipelineStage: string;
+ createdAt: Date;
+ _count: { interviews: number };
+};
+
+type Column = {
+ stage: string;
+ label: string;
+ candidates: CandidateSummary[];
+};
+
+export function PipelineBoard({ columns }: { columns: Column[] }) {
+ const [cols, setCols] = useState(columns);
+ const { toast } = useToast();
+
+ const handleDrop = useCallback(async (candidateId: string, newStage: string) => {
+ setCols((prev) =>
+ prev.map((col) => ({
+ ...col,
+ candidates:
+ col.stage === newStage
+ ? [...col.candidates, prev.flatMap((c) => c.candidates).find((c) => c.id === candidateId)!].filter(Boolean)
+ : col.candidates.filter((c) => c.id !== candidateId),
+ })),
+ );
+
+ const result = await updateCandidateStage(candidateId, newStage);
+ if (!result.success) {
+ toast({ title: 'Ошибка обновления этапа', variant: 'destructive' });
+ }
+ }, [toast]);
+
+ return (
+
+ {cols.map((column) => (
+
e.preventDefault()}
+ onDrop={(e) => {
+ const id = e.dataTransfer.getData('candidateId');
+ if (id) handleDrop(id, column.stage);
+ }}
+ >
+
+
+
+ {column.label}
+ {column.candidates.length}
+
+
+
+ {column.candidates.map((candidate) => (
+ e.dataTransfer.setData('candidateId', candidate.id)}
+ className="cursor-grab rounded border bg-card p-3 text-sm shadow-sm active:cursor-grabbing"
+ >
+
+ {candidate.firstName} {candidate.lastName}
+
+
{candidate.email}
+
+ {candidate._count.interviews} интервью
+
+
+
+
+
+ ))}
+ {column.candidates.length === 0 && (
+ Нет кандидатов
+ )}
+
+
+
+ ))}
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/hr/tasks/columns.tsx b/apps/admin/src/app/dashboard/hr/tasks/columns.tsx
new file mode 100644
index 0000000..4984c19
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/tasks/columns.tsx
@@ -0,0 +1,35 @@
+'use client';
+import type { ColumnDef } from '@tanstack/react-table';
+import { Badge } from '@repo/ui/components/badge';
+
+type ChallengeRow = {
+ id: number;
+ name: string;
+ slug: string;
+ difficulty: string;
+ language: string;
+ shortDescription: string;
+};
+
+const difficultyColors: Record = {
+ BEGINNER: 'bg-green-100 text-green-800',
+ EASY: 'bg-emerald-100 text-emerald-800',
+ MEDIUM: 'bg-yellow-100 text-yellow-800',
+ HARD: 'bg-red-100 text-red-800',
+ EXTREME: 'bg-purple-100 text-purple-800',
+};
+
+export const columns: ColumnDef[] = [
+ { accessorKey: 'name', header: 'Название' },
+ { accessorKey: 'shortDescription', header: 'Описание' },
+ {
+ accessorKey: 'difficulty',
+ header: 'Сложность',
+ cell: ({ row }) => (
+
+ {row.original.difficulty}
+
+ ),
+ },
+ { accessorKey: 'language', header: 'Язык' },
+];
diff --git a/apps/admin/src/app/dashboard/hr/tasks/page.tsx b/apps/admin/src/app/dashboard/hr/tasks/page.tsx
new file mode 100644
index 0000000..06023f5
--- /dev/null
+++ b/apps/admin/src/app/dashboard/hr/tasks/page.tsx
@@ -0,0 +1,40 @@
+import { auth } from '~/server/auth';
+import { prisma } from '@repo/db';
+import { assertAdminOrRecruiter } from '~/utils/auth-guards';
+import { DataTable } from '@repo/ui/components/data-table';
+import { columns } from './columns';
+import { Button } from '@repo/ui/components/button';
+import Link from 'next/link';
+
+export default async function TasksPage() {
+ const session = await auth();
+ assertAdminOrRecruiter(session);
+
+ const challenges = await prisma.challenge.findMany({
+ where: { status: 'ACTIVE' },
+ select: {
+ id: true,
+ name: true,
+ slug: true,
+ difficulty: true,
+ language: true,
+ shortDescription: true,
+ },
+ orderBy: { id: 'asc' },
+ });
+
+ return (
+
+
+
+
Банк задач
+
Выберите задачи для интервью
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/admin/src/app/dashboard/layout.tsx b/apps/admin/src/app/dashboard/layout.tsx
index 0705368..f8abd7c 100644
--- a/apps/admin/src/app/dashboard/layout.tsx
+++ b/apps/admin/src/app/dashboard/layout.tsx
@@ -38,6 +38,10 @@ const sidebarNavItems: SidebarNavItem[] = [
icon: 'award',
title: 'Награждение',
},
+ {
+ title: 'HR Рекрутинг',
+ href: '/dashboard/hr',
+ },
];
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
return (
diff --git a/apps/admin/src/utils/auth-guards.ts b/apps/admin/src/utils/auth-guards.ts
index 192dc52..87eeb89 100644
--- a/apps/admin/src/utils/auth-guards.ts
+++ b/apps/admin/src/utils/auth-guards.ts
@@ -8,3 +8,23 @@ export const assertAdmin = (session: Session | null) => {
throw new Error('You are not authorized to perform this action.');
}
};
+
+export const assertAdminOrChampionshipManager = (session: Session | null) => {
+ const roles = session?.user?.role ?? [];
+ const isAdmin = roles.includes(RoleTypes.ADMIN);
+ const isChampManager = roles.includes(RoleTypes.CHAMPIONSHIP_MANAGER);
+
+ if (!isAdmin && !isChampManager) {
+ throw new Error('You are not authorized to perform this action.');
+ }
+};
+
+export const assertAdminOrRecruiter = (session: Session | null) => {
+ const roles = session?.user?.role ?? [];
+ const isAdmin = roles.includes(RoleTypes.ADMIN);
+ const isRecruiter = roles.includes(RoleTypes.RECRUITER);
+
+ if (!isAdmin && !isRecruiter) {
+ throw new Error('You are not authorized to perform this action.');
+ }
+};
diff --git a/apps/web/src/app/api/interview/poll/route.ts b/apps/web/src/app/api/interview/poll/route.ts
new file mode 100644
index 0000000..8657c2f
--- /dev/null
+++ b/apps/web/src/app/api/interview/poll/route.ts
@@ -0,0 +1,27 @@
+import { prisma } from '@repo/db';
+import { NextResponse } from 'next/server';
+
+export async function GET(req: Request) {
+ const { searchParams } = new URL(req.url);
+ const id = searchParams.get('id');
+
+ if (!id) {
+ return NextResponse.json({ error: 'Missing id' }, { status: 400 });
+ }
+
+ const events = await prisma.interviewEvent.findMany({
+ where: { sessionId: id },
+ orderBy: { timestamp: 'desc' },
+ take: 100,
+ });
+
+ const lastCodeEvent = events.find((e) => e.type === 'CODE_CHANGE' || e.type === 'SUBMIT');
+ const code = lastCodeEvent?.payload && typeof lastCodeEvent.payload === 'object' && 'code' in lastCodeEvent.payload
+ ? (lastCodeEvent.payload as { code?: string }).code
+ : null;
+
+ return NextResponse.json({
+ code,
+ events: events.reverse(),
+ });
+}
diff --git a/apps/web/src/app/api/interview/save-code/route.ts b/apps/web/src/app/api/interview/save-code/route.ts
new file mode 100644
index 0000000..c55a0cd
--- /dev/null
+++ b/apps/web/src/app/api/interview/save-code/route.ts
@@ -0,0 +1,26 @@
+import { prisma } from '@repo/db';
+import { NextResponse } from 'next/server';
+
+export async function POST(req: Request) {
+ try {
+ const { sessionId, challengeId, code, passedTests, totalTests, isSubmitted } = await req.json();
+
+ await prisma.interviewChallenge.update({
+ where: { id: challengeId },
+ data: { code, passedTests, totalTests, isSubmitted: isSubmitted ?? false },
+ });
+
+ await prisma.interviewEvent.create({
+ data: {
+ sessionId,
+ type: isSubmitted ? 'SUBMIT' : 'CODE_CHANGE',
+ payload: { code, passedTests, totalTests },
+ },
+ });
+
+ return NextResponse.json({ success: true });
+ } catch (error: any) {
+ console.error('Save code error:', error);
+ return NextResponse.json({ success: false, error: error.message }, { status: 500 });
+ }
+}
diff --git a/apps/web/src/app/interview/[token]/interview-room.tsx b/apps/web/src/app/interview/[token]/interview-room.tsx
new file mode 100644
index 0000000..12570d4
--- /dev/null
+++ b/apps/web/src/app/interview/[token]/interview-room.tsx
@@ -0,0 +1,285 @@
+'use client';
+import { useState, useEffect, useCallback, useRef } from 'react';
+import { Badge } from '@repo/ui/components/badge';
+import { Button } from '@repo/ui/components/button';
+import { useToast } from '@repo/ui/components/use-toast';
+
+type ChallengeData = {
+ id: string;
+ challengeId: number;
+ order: number;
+ code: string;
+ isSubmitted: boolean;
+ challenge: {
+ name: string;
+ slug: string;
+ difficulty: string;
+ tests: string;
+ code: string;
+ description: string;
+ };
+};
+
+type SessionData = {
+ id: string;
+ title: string;
+ token: string;
+ status: string;
+ duration: number;
+ candidate: { firstName: string; lastName: string };
+ challenges: ChallengeData[];
+};
+
+export function InterviewRoom({ session }: { session: SessionData }) {
+ const { toast } = useToast();
+ const [activeChallengeIdx, setActiveChallengeIdx] = useState(0);
+ const [code, setCode] = useState('');
+ const [timeLeft, setTimeLeft] = useState(session.duration);
+ const [isRunning, setIsRunning] = useState(false);
+ const [output, setOutput] = useState('');
+ const [checking, setChecking] = useState(false);
+ const timeRef = useRef(null);
+ const challenge = session.challenges[activeChallengeIdx];
+
+ useEffect(() => {
+ if (challenge) {
+ setCode(challenge.code || challenge.challenge.code || '');
+ }
+ }, [activeChallengeIdx, challenge]);
+
+ const saveCode = useCallback(async (codeToSave: string) => {
+ if (!challenge || !isRunning) return;
+ try {
+ await fetch('/api/interview/save-code', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ sessionId: session.id,
+ challengeId: challenge.id,
+ code: codeToSave,
+ passedTests: 0,
+ totalTests: 1,
+ }),
+ });
+ } catch {}
+ }, [challenge, session.id, isRunning]);
+
+ useEffect(() => {
+ if (!isRunning) return;
+
+ const timer = setInterval(() => {
+ saveCode(code);
+ }, 3000);
+
+ return () => clearInterval(timer);
+ }, [isRunning, code, saveCode]);
+
+ const startInterview = useCallback(() => {
+ setIsRunning(true);
+ setTimeLeft(session.duration);
+
+ fetch('/api/interview/save-code', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ sessionId: session.id,
+ challengeId: challenge?.id,
+ code: code,
+ type: 'START',
+ }),
+ });
+ }, [session.id, session.duration, challenge?.id, code]);
+
+ useEffect(() => {
+ if (!isRunning) return;
+
+ timeRef.current = setInterval(() => {
+ setTimeLeft((prev) => {
+ if (prev <= 1) {
+ clearInterval(timeRef.current!);
+ handleSubmit();
+ return 0;
+ }
+ return prev - 1;
+ });
+ }, 1000);
+
+ return () => {
+ if (timeRef.current) clearInterval(timeRef.current);
+ };
+ }, [isRunning]);
+
+ const handleRun = useCallback(async () => {
+ if (!challenge) return;
+ setChecking(true);
+ setOutput('');
+
+ try {
+ const res = await fetch('/api/execute', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ code,
+ tests: challenge.challenge.tests,
+ language: 'python',
+ }),
+ });
+
+ const result = await res.json();
+ setOutput(result.output || result.error || 'Нет вывода');
+
+ await fetch('/api/interview/save-code', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ sessionId: session.id,
+ challengeId: challenge.id,
+ code,
+ type: 'RUN',
+ passedTests: result.success ? 1 : 0,
+ totalTests: 1,
+ }),
+ });
+
+ if (!result.success) {
+ toast({ title: 'Тесты не пройдены', variant: 'destructive' });
+ }
+ } catch (e: any) {
+ setOutput(`Ошибка: ${e.message}`);
+ } finally {
+ setChecking(false);
+ }
+ }, [code, challenge, session.id, toast]);
+
+ const handleSubmit = useCallback(async () => {
+ if (!challenge) return;
+ setChecking(true);
+
+ try {
+ const res = await fetch('/api/execute', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ code,
+ tests: challenge.challenge.tests,
+ language: 'python',
+ }),
+ });
+
+ const result = await res.json();
+
+ await fetch('/api/interview/save-code', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ sessionId: session.id,
+ challengeId: challenge.id,
+ code,
+ passedTests: result.success ? 1 : 0,
+ totalTests: 1,
+ isSubmitted: true,
+ }),
+ });
+
+ setOutput(result.success ? '✓ Решение принято!' : '✗ Тесты не пройдены');
+
+ if (result.success) {
+ toast({ title: 'Задача решена!' });
+ }
+
+ if (timeRef.current) clearInterval(timeRef.current);
+ setIsRunning(false);
+ } finally {
+ setChecking(false);
+ }
+ }, [code, challenge, session.id, toast]);
+
+ const formatTime = (seconds: number) => {
+ const m = Math.floor(seconds / 60);
+ const s = seconds % 60;
+ return `${m}:${s.toString().padStart(2, '0')}`;
+ };
+
+ if (!isRunning) {
+ return (
+
+
+
{session.title}
+
+ {session.candidate.firstName} {session.candidate.lastName}
+
+
+ {session.challenges.length} задач · {formatTime(session.duration)}
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
{challenge?.challenge.name}
+ {challenge && {challenge.challenge.difficulty}}
+
+
+
+ {challenge?.challenge.description || 'Условие задачи'}
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/web/src/app/interview/[token]/page.tsx b/apps/web/src/app/interview/[token]/page.tsx
new file mode 100644
index 0000000..9157bf5
--- /dev/null
+++ b/apps/web/src/app/interview/[token]/page.tsx
@@ -0,0 +1,23 @@
+import { prisma } from '@repo/db';
+import { notFound, redirect } from 'next/navigation';
+import { InterviewRoom } from './interview-room';
+
+export default async function InterviewPage(props: { params: Promise<{ token: string }> }) {
+ const { token } = await props.params;
+
+ const session = await prisma.interviewSession.findUnique({
+ where: { token },
+ include: {
+ candidate: { select: { firstName: true, lastName: true } },
+ challenges: {
+ include: { challenge: { select: { name: true, slug: true, difficulty: true, tests: true, code: true, description: true } } },
+ orderBy: { order: 'asc' },
+ },
+ },
+ });
+
+ if (!session || session.status === 'EXPIRED') notFound();
+ if (session.status === 'COMPLETED') redirect('/');
+
+ return ;
+}
diff --git a/packages/db/schema.prisma b/packages/db/schema.prisma
index 5996a83..4856132 100644
--- a/packages/db/schema.prisma
+++ b/packages/db/schema.prisma
@@ -46,6 +46,7 @@ enum RoleTypes {
CHAMPIONSHIP_MANAGER
TEACHER
STUDENT
+ RECRUITER
}
enum UserStatus {
@@ -159,8 +160,13 @@ model User {
createdExams ExamSession[] @relation("exam_student")
teacherExams Exam[] @relation("exam_teacher")
- championships ChampionshipParticipant[]
- userBadges UserBadge[]
+ championships ChampionshipParticipant[]
+ userBadges UserBadge[]
+
+ candidateCreatedBy Candidate[] @relation("candidate_creator")
+ candidateRecruiter Candidate[] @relation("candidate_recruiter")
+ interviewSessions InterviewSession[] @relation("session_recruiter")
+ interviewNotes InterviewNote[]
}
model VerificationToken {
@@ -262,6 +268,7 @@ model Challenge {
TrackChallenge TrackChallenge[]
Notification Notification[]
championships ChampionshipChallenge[]
+ interviewChallenges InterviewChallenge[] @relation("interview_challenges")
@@index([userId])
}
@@ -729,6 +736,129 @@ model ExamResult {
@@index([sessionId])
}
+/// ─── HR / Interview Mode ──────────────────────────────────────────────────────
+
+enum PipelineStageType {
+ SCREENING
+ TECH_INTERVIEW
+ SYSTEM_DESIGN
+ FINAL_INTERVIEW
+ OFFER
+ REJECTED
+}
+
+enum InterviewSessionStatus {
+ PENDING
+ IN_PROGRESS
+ COMPLETED
+ EXPIRED
+}
+
+enum CandidateStatus {
+ ACTIVE
+ HIRED
+ REJECTED
+ ARCHIVED
+}
+
+model Candidate {
+ id String @id @default(uuid())
+ firstName String
+ lastName String
+ email String @unique
+ phone String?
+ cvLink String?
+ notes String? @db.Text
+ status CandidateStatus @default(ACTIVE)
+ pipelineStage PipelineStageType @default(SCREENING)
+
+ createdBy User @relation("candidate_creator", fields: [createdById], references: [id])
+ createdById String
+ recruiter User? @relation("candidate_recruiter", fields: [recruiterId], references: [id])
+ recruiterId String?
+
+ interviews InterviewSession[]
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ @@index([email])
+ @@index([status])
+ @@index([pipelineStage])
+ @@index([createdById])
+}
+
+model InterviewSession {
+ id String @id @default(uuid())
+ title String
+ token String @unique
+ status InterviewSessionStatus @default(PENDING)
+ duration Int @default(3600) // seconds
+
+ candidate Candidate @relation(fields: [candidateId], references: [id])
+ candidateId String
+ recruiter User @relation("session_recruiter", fields: [recruiterId], references: [id])
+ recruiterId String
+
+ challenges InterviewChallenge[]
+ events InterviewEvent[]
+ notes InterviewNote[]
+
+ startedAt DateTime?
+ submittedAt DateTime?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ @@index([token])
+ @@index([candidateId])
+ @@index([recruiterId])
+}
+
+model InterviewChallenge {
+ id String @id @default(uuid())
+ session InterviewSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
+ sessionId String
+ challenge Challenge @relation("interview_challenges", fields: [challengeId], references: [id])
+ challengeId Int
+ order Int
+ code String @db.Text
+ isSubmitted Boolean @default(false)
+ passedTests Int @default(0)
+ totalTests Int @default(0)
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ @@index([sessionId])
+ @@index([challengeId])
+}
+
+model InterviewNote {
+ id String @id @default(uuid())
+ session InterviewSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
+ sessionId String
+ author User @relation(fields: [authorId], references: [id])
+ authorId String
+ content String @db.Text
+ rating Int? // 1-5
+
+ createdAt DateTime @default(now())
+
+ @@index([sessionId])
+}
+
+model InterviewEvent {
+ id String @id @default(uuid())
+ session InterviewSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
+ sessionId String
+ type String // CODE_CHANGE, RUN, SUBMIT, TAB_SWITCH
+ payload Json // { code?, output?, testResults?, ... }
+ timestamp DateTime @default(now())
+
+ @@index([sessionId])
+ @@index([timestamp])
+}
+
model ShortURL {
id Int @id @default(autoincrement())
/// the original full url that we want to shorten e.g. https://www.url.com
diff --git a/packages/db/seed/dev.ts b/packages/db/seed/dev.ts
index b46071f..a7c4bd1 100644
--- a/packages/db/seed/dev.ts
+++ b/packages/db/seed/dev.ts
@@ -54,6 +54,12 @@ async function main() {
create: { role: 'TEACHER' },
});
+ const recruiterRole = await prisma.role.upsert({
+ where: { role: 'RECRUITER' },
+ update: {},
+ create: { role: 'RECRUITER' },
+ });
+
// 2. Создание админа
const adminUser = await prisma.user.upsert({
where: { id: ADMIN_USER_ID },
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b0d9766..b763f69 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -87,9 +87,6 @@ importers:
'@repo/ui':
specifier: workspace:*
version: link:../../packages/ui
- '@sentry/nextjs':
- specifier: ^10.60.0
- version: 10.60.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.107.2(postcss@8.5.3))
'@tanstack/react-query':
specifier: 5.51.21
version: 5.51.21(react@19.1.0)
@@ -104,10 +101,10 @@ importers:
version: 2.6.0-beta.12
next:
specifier: 15.3.8
- version: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 15.3.8(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next-themes:
specifier: ^0.2.1
- version: 0.2.1(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 0.2.1(next@15.3.8(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react:
specifier: 19.1.0
version: 19.1.0
@@ -216,37 +213,6 @@ importers:
specifier: ^5.3.3
version: 5.8.3
- apps/code-runner:
- dependencies:
- '@repo/code-runner':
- specifier: workspace:*
- version: link:../../packages/code-runner
- '@repo/redis':
- specifier: workspace:*
- version: link:../../packages/redis
- dotenv-cli:
- specifier: ^7.4.4
- version: 7.4.4
- devDependencies:
- '@repo/lint':
- specifier: workspace:*
- version: link:../../tooling/config-eslint
- '@repo/tsconfig':
- specifier: workspace:*
- version: link:../../tooling/config-typescript
- '@types/node':
- specifier: ^20.4.2
- version: 20.17.30
- eslint:
- specifier: ^8.57.0
- version: 8.57.1
- tsx:
- specifier: 4.19.0
- version: 4.19.0
- typescript:
- specifier: ^5.3.3
- version: 5.8.3
-
apps/og-image:
dependencies:
'@vercel/og':
@@ -254,7 +220,7 @@ importers:
version: 1.0.0
next:
specifier: 15.3.8
- version: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react:
specifier: 19.1.0
version: 19.1.0
@@ -316,9 +282,6 @@ importers:
'@repo/auth':
specifier: workspace:*
version: link:../../packages/auth
- '@repo/code-runner':
- specifier: workspace:*
- version: link:../../packages/code-runner
'@repo/db':
specifier: workspace:*
version: link:../../packages/db
@@ -335,8 +298,8 @@ importers:
specifier: workspace:*
version: link:../../packages/ui
'@sentry/nextjs':
- specifier: ^10.60.0
- version: 10.60.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.107.2(postcss@8.5.3))
+ specifier: ^7.73.0
+ version: 7.120.3(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.107.2(postcss@8.5.3))
'@t3-oss/env-nextjs':
specifier: ^0.6.0
version: 0.6.1(typescript@5.8.3)(zod@3.23.3)
@@ -354,28 +317,22 @@ importers:
version: 4.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(types-react@19.0.0-rc.1)
'@uploadthing/react':
specifier: ^6.8.0
- version: 6.8.0(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(uploadthing@6.13.3(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7))
+ version: 6.8.0(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(uploadthing@6.13.3(h3@1.15.1)(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7))
'@uploadthing/shared':
specifier: ^6.7.9
version: 6.7.9
'@vercel/analytics':
specifier: ^1.1.1
- version: 1.5.0(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
+ version: 1.5.0(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
'@vercel/edge-config':
specifier: ^0.2.1
version: 0.2.1
'@vercel/speed-insights':
specifier: ^1.0.12
- version: 1.2.0(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
+ version: 1.2.0(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
'@vercel/toolbar':
specifier: ^0.1.18
- version: 0.1.18(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@5.4.18(@types/node@20.17.30)(terser@5.39.0))
- altcha:
- specifier: ^3.1.0
- version: 3.1.0
- altcha-lib:
- specifier: ^2.2.0
- version: 2.2.0
+ version: 0.1.18(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@5.4.18(@types/node@20.17.30)(terser@5.39.0))
bad-words:
specifier: ^3.0.4
version: 3.0.4
@@ -417,13 +374,13 @@ importers:
version: 5.1.5
next:
specifier: 15.3.8
- version: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next-auth:
specifier: 5.0.0-beta.25
- version: 5.0.0-beta.25(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(nodemailer@6.10.1)(react@19.1.0)
+ version: 5.0.0-beta.25(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(nodemailer@6.10.1)(react@19.1.0)
next-themes:
specifier: ^0.2.1
- version: 0.2.1(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 0.2.1(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
nodemailer:
specifier: ^6.9.16
version: 6.10.1
@@ -475,9 +432,6 @@ importers:
server-only:
specifier: ^0.0.1
version: 0.0.1
- sql.js:
- specifier: ^1.14.1
- version: 1.14.1
superjson:
specifier: ^2.2.1
version: 2.2.2
@@ -492,7 +446,7 @@ importers:
version: 5.0.0
uploadthing:
specifier: ^6.8.0
- version: 6.13.3(h3@1.15.1)(next@15.3.8(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7)
+ version: 6.13.3(h3@1.15.1)(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7)
uuid:
specifier: ^14.0.0
version: 14.0.0
@@ -539,9 +493,6 @@ importers:
'@types/react-syntax-highlighter':
specifier: ^15.5.7
version: 15.5.13
- '@types/sql.js':
- specifier: ^1.4.11
- version: 1.4.11
'@types/uuid':
specifier: ^11.0.0
version: 11.0.0
@@ -601,7 +552,7 @@ importers:
version: 2.4.3
next-auth:
specifier: 5.0.0-beta.25
- version: 5.0.0-beta.25(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(nodemailer@6.10.1)(react@19.1.0)
+ version: 5.0.0-beta.25(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(nodemailer@6.10.1)(react@19.1.0)
devDependencies:
'@repo/lint':
specifier: workspace:*
@@ -628,34 +579,6 @@ importers:
specifier: ^5.3.3
version: 5.8.3
- packages/code-runner:
- dependencies:
- '@repo/redis':
- specifier: workspace:*
- version: link:../redis
- uuid:
- specifier: ^14.0.0
- version: 14.0.0
- devDependencies:
- '@repo/lint':
- specifier: workspace:*
- version: link:../../tooling/config-eslint
- '@repo/tsconfig':
- specifier: workspace:*
- version: link:../../tooling/config-typescript
- '@types/node':
- specifier: ^20.4.2
- version: 20.17.30
- '@types/uuid':
- specifier: ^11.0.0
- version: 11.0.0
- eslint:
- specifier: ^8.57.0
- version: 8.57.1
- typescript:
- specifier: ^5.3.3
- version: 5.8.3
-
packages/db:
dependencies:
'@prisma/client':
@@ -725,9 +648,6 @@ importers:
'@typescript/ata':
specifier: ^0.9.4
version: 0.9.7(typescript@5.8.3)
- altcha:
- specifier: ^3.1.0
- version: 3.1.0
clsx:
specifier: ^2.0.0
version: 2.1.1
@@ -742,10 +662,10 @@ importers:
version: 0.4.2(monaco-editor@0.52.2(patch_hash=1048031a34a1a0b12411a35e7fc4440057530620d7b567bcd688125073e9a86b))
next:
specifier: 15.3.8
- version: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next-themes:
specifier: ^0.2.1
- version: 0.2.1(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 0.2.1(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
prettier:
specifier: ^3.1.1
version: 3.5.3
@@ -904,7 +824,7 @@ importers:
version: 4.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(types-react@19.0.0-rc.1)
'@uploadthing/react':
specifier: ^6.8.0
- version: 6.8.0(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(uploadthing@6.13.3(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7))
+ version: 6.8.0(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(uploadthing@6.13.3(h3@1.15.1)(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7))
class-variance-authority:
specifier: ^0.7.0
version: 0.7.1
@@ -919,7 +839,7 @@ importers:
version: 3.0.1
next-themes:
specifier: ^0.2.1
- version: 0.2.1(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 0.2.1(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react:
specifier: 19.1.0
version: 19.1.0
@@ -1065,17 +985,6 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
- '@apm-js-collab/code-transformer-bundler-plugins@0.5.0':
- resolution: {integrity: sha512-YxLBY5nGlurL7QeJLq6e5g0ouBpAp0pwgyA/5rHXEXwhiPLn9ZHbT+Y2LlP90GT872cSocfjWRYu/fnpuBudNQ==}
- engines: {node: '>=18.0.0'}
-
- '@apm-js-collab/code-transformer@0.15.0':
- resolution: {integrity: sha512-XmXYVs8CzJ1Aj79noVbn2weUO/XWtRyURpGqx7aU7DOXlUQhR0WKOQNF0okh7PCeY37vxf7kU3v57OAkEPm3ww==}
- hasBin: true
-
- '@apm-js-collab/tracing-hooks@0.10.0':
- resolution: {integrity: sha512-2/Z3NTewJTruUkmsSnBC5bJlLNUd9keuD1OLlTEpim4FyLhm6m2Rnfv+wrFdUvFfhmH8CRdiDZBqBrn+wyaGuA==}
-
'@auth/core@0.37.4':
resolution: {integrity: sha512-HOXJwXWXQRhbBDHlMU0K/6FT1v+wjtzdKhsNg0ZN7/gne6XPsIrjZ4daMcFnbq0Z/vsAbYBinQhhua0d77v7qw==}
peerDependencies:
@@ -1112,10 +1021,18 @@ packages:
resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
engines: {node: '>=6.9.0'}
+ '@babel/compat-data@7.29.7':
+ resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/core@7.26.10':
resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
engines: {node: '>=6.9.0'}
+ '@babel/core@7.29.7':
+ resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/eslint-parser@7.27.0':
resolution: {integrity: sha512-dtnzmSjXfgL/HDgMcmsLSzyGbEosi4DrGWoCNfuI+W4IkVJw6izpTe7LtOdwAXnkDqw5yweboYCTkM2rQizCng==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
@@ -1127,20 +1044,42 @@ packages:
resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==}
engines: {node: '>=6.9.0'}
+ '@babel/generator@7.29.7':
+ resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-compilation-targets@7.27.0':
resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-compilation-targets@7.29.7':
+ resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.29.7':
+ resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-module-imports@7.25.9':
resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-module-imports@7.29.7':
+ resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-module-transforms@7.26.0':
resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/helper-module-transforms@7.29.7':
+ resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/helper-plugin-utils@7.26.5':
resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
engines: {node: '>=6.9.0'}
@@ -1149,6 +1088,10 @@ packages:
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-string-parser@7.29.7':
+ resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
@@ -1161,15 +1104,28 @@ packages:
resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-option@7.29.7':
+ resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helpers@7.27.0':
resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==}
engines: {node: '>=6.9.0'}
+ '@babel/helpers@7.29.7':
+ resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/parser@7.27.0':
resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/parser@7.29.7':
+ resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/plugin-syntax-jsx@7.25.9':
resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
engines: {node: '>=6.9.0'}
@@ -1190,10 +1146,18 @@ packages:
resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
engines: {node: '>=6.9.0'}
+ '@babel/template@7.29.7':
+ resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/traverse@7.27.0':
resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==}
engines: {node: '>=6.9.0'}
+ '@babel/traverse@7.29.7':
+ resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/types@7.26.9':
resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
engines: {node: '>=6.9.0'}
@@ -1202,6 +1166,10 @@ packages:
resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.29.7':
+ resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
+ engines: {node: '>=6.9.0'}
+
'@cloudflare/kv-asset-handler@0.4.0':
resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==}
engines: {node: '>=18.0.0'}
@@ -2240,6 +2208,9 @@ packages:
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
engines: {node: '>=6.0.0'}
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
@@ -2254,9 +2225,6 @@ packages:
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
- '@jridgewell/sourcemap-codec@1.5.5':
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
@@ -2538,42 +2506,6 @@ packages:
'@one-ini/wasm@0.1.1':
resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
- '@opentelemetry/api-logs@0.214.0':
- resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==}
- engines: {node: '>=8.0.0'}
-
- '@opentelemetry/api@1.9.1':
- resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==}
- engines: {node: '>=8.0.0'}
-
- '@opentelemetry/core@2.8.0':
- resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/instrumentation@0.214.0':
- resolution: {integrity: sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/resources@2.8.0':
- resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/sdk-trace-base@2.8.0':
- resolution: {integrity: sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/semantic-conventions@1.41.1':
- resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==}
- engines: {node: '>=14'}
-
'@panva/hkdf@1.2.1':
resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
@@ -3633,11 +3565,11 @@ packages:
rollup:
optional: true
- '@rollup/plugin-commonjs@28.0.1':
- resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==}
- engines: {node: '>=16.0.0 || 14 >= 14.17'}
+ '@rollup/plugin-commonjs@24.0.0':
+ resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==}
+ engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: ^2.68.0||^3.0.0||^4.0.0
+ rollup: ^2.68.0||^3.0.0
peerDependenciesMeta:
rollup:
optional: true
@@ -3710,111 +3642,51 @@ packages:
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm-eabi@4.62.2':
- resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==}
- cpu: [arm]
- os: [android]
-
'@rollup/rollup-android-arm64@4.40.0':
resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-android-arm64@4.62.2':
- resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==}
- cpu: [arm64]
- os: [android]
-
'@rollup/rollup-darwin-arm64@4.40.0':
resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-arm64@4.62.2':
- resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==}
- cpu: [arm64]
- os: [darwin]
-
'@rollup/rollup-darwin-x64@4.40.0':
resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.62.2':
- resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==}
- cpu: [x64]
- os: [darwin]
-
'@rollup/rollup-freebsd-arm64@4.40.0':
resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-arm64@4.62.2':
- resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==}
- cpu: [arm64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-x64@4.40.0':
resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.62.2':
- resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==}
- cpu: [x64]
- os: [freebsd]
-
'@rollup/rollup-linux-arm-gnueabihf@4.40.0':
resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-gnueabihf@4.62.2':
- resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm-musleabihf@4.40.0':
resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.62.2':
- resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm64-gnu@4.40.0':
resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.62.2':
- resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==}
- cpu: [arm64]
- os: [linux]
-
'@rollup/rollup-linux-arm64-musl@4.40.0':
resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.62.2':
- resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-loong64-gnu@4.62.2':
- resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==}
- cpu: [loong64]
- os: [linux]
-
- '@rollup/rollup-linux-loong64-musl@4.62.2':
- resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==}
- cpu: [loong64]
- os: [linux]
-
'@rollup/rollup-linux-loongarch64-gnu@4.40.0':
resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==}
cpu: [loong64]
@@ -3825,111 +3697,46 @@ packages:
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.62.2':
- resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==}
- cpu: [ppc64]
- os: [linux]
-
- '@rollup/rollup-linux-ppc64-musl@4.62.2':
- resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==}
- cpu: [ppc64]
- os: [linux]
-
'@rollup/rollup-linux-riscv64-gnu@4.40.0':
resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.62.2':
- resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==}
- cpu: [riscv64]
- os: [linux]
-
'@rollup/rollup-linux-riscv64-musl@4.40.0':
resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.62.2':
- resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==}
- cpu: [riscv64]
- os: [linux]
-
'@rollup/rollup-linux-s390x-gnu@4.40.0':
resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.62.2':
- resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==}
- cpu: [s390x]
- os: [linux]
-
'@rollup/rollup-linux-x64-gnu@4.40.0':
resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.62.2':
- resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==}
- cpu: [x64]
- os: [linux]
-
'@rollup/rollup-linux-x64-musl@4.40.0':
resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.62.2':
- resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-openbsd-x64@4.62.2':
- resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==}
- cpu: [x64]
- os: [openbsd]
-
- '@rollup/rollup-openharmony-arm64@4.62.2':
- resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==}
- cpu: [arm64]
- os: [openharmony]
-
'@rollup/rollup-win32-arm64-msvc@4.40.0':
resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-arm64-msvc@4.62.2':
- resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==}
- cpu: [arm64]
- os: [win32]
-
'@rollup/rollup-win32-ia32-msvc@4.40.0':
resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.62.2':
- resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-gnu@4.62.2':
- resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==}
- cpu: [x64]
- os: [win32]
-
'@rollup/rollup-win32-x64-msvc@4.40.0':
resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.62.2':
- resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==}
- cpu: [x64]
- os: [win32]
-
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@@ -3939,152 +3746,75 @@ packages:
'@selderee/plugin-htmlparser2@0.10.0':
resolution: {integrity: sha512-gW69MEamZ4wk1OsOq1nG1jcyhXIQcnrsX5JwixVw/9xaiav8TCyjESAruu1Rz9yyInhgBXxkNwMeygKnN2uxNA==}
- '@sentry/babel-plugin-component-annotate@5.3.0':
- resolution: {integrity: sha512-p4q8gn8wcFqZGP/s2MnJCAAd8fTikaU6A0mM97RDHQgStcrYiaS0Sc5zUNfb1V+UOLPuvdEdL6MwyxfzjYJQTA==}
- engines: {node: '>= 18'}
-
- '@sentry/browser-utils@10.60.0':
- resolution: {integrity: sha512-YhdPeMJnMaKVi5NQ2tD9RJ2AxU7cav5khmiMHFppmbP3I3Os2EHVaQjAVb6/ePAINr/d5mj5SxpnWmFX17iXsg==}
- engines: {node: '>=18'}
-
- '@sentry/browser@10.60.0':
- resolution: {integrity: sha512-20vzPKGrmupJPCaWd+soCOLkZRwKZxt0AVF4XGPNoGp7D7wVPRlHf+FWwVMx+rRRkahKupFefM2D9YoiUiBeag==}
- engines: {node: '>=18'}
-
- '@sentry/bundler-plugin-core@5.3.0':
- resolution: {integrity: sha512-L5T60sWdAI3qWwdg3Ptwek/0TY59PERrxyqp4XMUkroayQvGd9r5dIW9Q1kSeXX9iJ442nXbFZKAOyCKV4Z13Q==}
- engines: {node: '>= 18'}
-
- '@sentry/cli-darwin@2.58.6':
- resolution: {integrity: sha512-udAVvcyfNa0R+95GvPz/+43/N3TC0TYKdkQ7D7jhPSzbcMc7l2fxRNN5yB3UpCA5fWFnW4toeaqwDBhb/Wh3LA==}
- engines: {node: '>=10'}
- os: [darwin]
-
- '@sentry/cli-linux-arm64@2.58.6':
- resolution: {integrity: sha512-q8mEcNNmeXMy5i+jWT30TVpH7LcP4HD21CD5XRSPAd/a912HF6EpK0ybf/1USO14WOhoXbAGi9txwaWabSe33g==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux, freebsd, android]
-
- '@sentry/cli-linux-arm@2.58.6':
- resolution: {integrity: sha512-pD0LAt5PcUzAinBwvDqc66x9+2CabHEv486yP0gRjWO7SakbaxmfVq/EXd8VLq/Tzi39LAu422UYK1lpW3MILw==}
- engines: {node: '>=10'}
- cpu: [arm]
- os: [linux, freebsd, android]
-
- '@sentry/cli-linux-i686@2.58.6':
- resolution: {integrity: sha512-q8vNJi1eOV/4vxAFWBsEwLHoSYapaZHIf4j76KJGJXFKTkEbsjCOOsKbwUIBTQQhRgV4DFWh3ryfsPS/que4Kg==}
- engines: {node: '>=10'}
- cpu: [x86, ia32]
- os: [linux, freebsd, android]
-
- '@sentry/cli-linux-x64@2.58.6':
- resolution: {integrity: sha512-DZu956Mhi3ZRjTBe1WdbGV46ldVbA8d2rgp/fh51GsI25zjBHah4wZnPTSzpc+YqxU6pJpg579B/r3jrIK530Q==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux, freebsd, android]
+ '@sentry-internal/feedback@7.120.3':
+ resolution: {integrity: sha512-ewJJIQ0mbsOX6jfiVFvqMjokxNtgP3dNwUv+4nenN+iJJPQsM6a0ocro3iscxwVdbkjw5hY3BUV2ICI5Q0UWoA==}
+ engines: {node: '>=12'}
- '@sentry/cli-win32-arm64@2.58.6':
- resolution: {integrity: sha512-nj0Ff/kmAB73EPDhR8B4O9r+NUHK5GkPCkGWC+kXVemqAJWL5jcJ5KdxG0l/S0z6RoEoltID8/43/B+TaMlT7A==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [win32]
+ '@sentry-internal/replay-canvas@7.120.3':
+ resolution: {integrity: sha512-s5xy+bVL1eDZchM6gmaOiXvTqpAsUfO7122DxVdEDMtwVq3e22bS2aiGa8CUgOiJkulZ+09q73nufM77kOmT/A==}
+ engines: {node: '>=12'}
- '@sentry/cli-win32-i686@2.58.6':
- resolution: {integrity: sha512-WNZiDzPbgsEMQWq4avsQ391v/xWKJDIWWWo9GYl+N/w5qcYKkoDW7wQG7T9FasI6ENn68phChTOAPXXxbfAdOg==}
- engines: {node: '>=10'}
- cpu: [x86, ia32]
- os: [win32]
+ '@sentry-internal/tracing@7.120.3':
+ resolution: {integrity: sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==}
+ engines: {node: '>=8'}
- '@sentry/cli-win32-x64@2.58.6':
- resolution: {integrity: sha512-R35WJ17oF4D2eqI1DR2sQQqr0fjRTt5xoP16WrTu91XM2lndRMFsnjh+/GttbxapLCBNlrjzia99MJ0PZHZpgA==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [win32]
+ '@sentry/browser@7.120.3':
+ resolution: {integrity: sha512-i9vGcK9N8zZ/JQo1TCEfHHYZ2miidOvgOABRUc9zQKhYdcYQB2/LU1kqlj77Pxdxf4wOa9137d6rPrSn9iiBxg==}
+ engines: {node: '>=8'}
- '@sentry/cli@2.58.6':
- resolution: {integrity: sha512-baBcNPLLfUi9WuL+Tpri9BFaAdvugZIKelC5X0tt0Zdy+K0K+PCVSrnNmwMWU/HyaF/SEv6b6UHnXIdqanBlcg==}
- engines: {node: '>= 10'}
+ '@sentry/cli@1.77.3':
+ resolution: {integrity: sha512-c3eDqcDRmy4TFz2bFU5Y6QatlpoBPPa8cxBooaS4aMQpnIdLYPF1xhyyiW0LQlDUNc3rRjNF7oN5qKoaRoMTQQ==}
+ engines: {node: '>= 8'}
hasBin: true
- '@sentry/conventions@0.12.0':
- resolution: {integrity: sha512-z1JQrl/1SLY+8wpzvork6vl+fpsg/oCCxM7HWWhUnI/R+OGNyoIzieQuggX3uUMY7NBtp8UWCQx6FeFazzOF9g==}
- engines: {node: '>=14'}
-
- '@sentry/core@10.60.0':
- resolution: {integrity: sha512-szN7ccOJAEaLb1BBQzCQhABGMTJmKNUk0G2sc7rWhajeXoZoMKIbNkI9RvJrFuV69cbad/d/BKGBjbpJhySAzw==}
- engines: {node: '>=18'}
-
- '@sentry/feedback@10.60.0':
- resolution: {integrity: sha512-RcGUgaI8yrIXunhNLpdNLsBUJIDvnEGDRmFhC5v0oMltoGtovrIqrEhPXEiSWQvNB0x4q33ejkLeJRJoSDOp2w==}
- engines: {node: '>=18'}
+ '@sentry/core@7.120.3':
+ resolution: {integrity: sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==}
+ engines: {node: '>=8'}
- '@sentry/nextjs@10.60.0':
- resolution: {integrity: sha512-7QModZzPQ6UpNeLaqZfCm2v/nNaR+9za+YkQ/t5Hj6gOZTmac+UUFcDpzSMsL1/WyuIL4pVYLv4p2Ti4BqQsnQ==}
- engines: {node: '>=18'}
- peerDependencies:
- next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 || ^16.0.0-0
+ '@sentry/integrations@7.120.3':
+ resolution: {integrity: sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==}
+ engines: {node: '>=8'}
- '@sentry/node-core@10.60.0':
- resolution: {integrity: sha512-aXi9ixvP+hgUZPPZCRwMNHgY2I0gkSeoAKAUuysDJhWDmrygwfGdlkbGmmtW6PQjtMYFx69Igt5btvhjEBoJTw==}
- engines: {node: '>=18'}
+ '@sentry/nextjs@7.120.3':
+ resolution: {integrity: sha512-dP7yyziUi7IzAfalakYzDDCwitI6pmh+9fKInsk4WeGRU+zRZphLOngj2ZYqUurjXeOUHaO3DIlnRB9R9WG5WA==}
+ engines: {node: '>=8'}
peerDependencies:
- '@opentelemetry/api': ^1.9.0
- '@opentelemetry/core': ^1.30.1 || ^2.1.0
- '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1'
- '@opentelemetry/instrumentation': '>=0.57.1 <1'
- '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
+ next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0
+ react: 16.x || 17.x || 18.x
+ webpack: '>= 4.0.0'
peerDependenciesMeta:
- '@opentelemetry/api':
+ webpack:
optional: true
- '@opentelemetry/core':
- optional: true
- '@opentelemetry/exporter-trace-otlp-http':
- optional: true
- '@opentelemetry/instrumentation':
- optional: true
- '@opentelemetry/sdk-trace-base':
- optional: true
-
- '@sentry/node@10.60.0':
- resolution: {integrity: sha512-u//paUrkKaCr0oNn7r7UulGydkYMSkU1wQOIpG/P/jf7psZWnyXhgeszHzUfZXo6pCdxXG9z9viPvzGjqPQN7A==}
- engines: {node: '>=18'}
- '@sentry/opentelemetry@10.60.0':
- resolution: {integrity: sha512-gl+2NVH+9RmTu7pd9kV1tKif+Th+p9tmnXR1l3Sb3Wqo1ir5FaNMKrloWEKMXjnepii9EJUrEHdSC+i8NoexxQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@opentelemetry/api': ^1.9.0
- '@opentelemetry/core': ^1.30.1 || ^2.1.0
- '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
+ '@sentry/node@7.120.3':
+ resolution: {integrity: sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==}
+ engines: {node: '>=8'}
- '@sentry/react@10.60.0':
- resolution: {integrity: sha512-ALRIDOj7T1Vk9t9IyI12Tq2t3MKoV2F/mKn140AiUBk3WzQhq2gXQUFpcsaDYA2FBsrYoYc6qdqrny6mMbA0Xg==}
- engines: {node: '>=18'}
+ '@sentry/react@7.120.3':
+ resolution: {integrity: sha512-BcpoK9dwblfb20xwjn/1DRtplvPEXFc3XCRkYSnTfnfZNU8yPOcVX4X2X0I8R+/gsg+MWiFOdEtXJ3FqpJiJ4Q==}
+ engines: {node: '>=8'}
peerDependencies:
- react: ^16.14.0 || 17.x || 18.x || 19.x
+ react: 15.x || 16.x || 17.x || 18.x
- '@sentry/replay-canvas@10.60.0':
- resolution: {integrity: sha512-mYyQRJbhRRaqUkRvkJZyqt9AWdomh4108LOAph1YJvV1jW7tKYPPFNAUveJd7YkYCyhUOtekN0DKNJveK802qA==}
- engines: {node: '>=18'}
+ '@sentry/replay@7.120.3':
+ resolution: {integrity: sha512-CjVq1fP6bpDiX8VQxudD5MPWwatfXk8EJ2jQhJTcWu/4bCSOQmHxnnmBM+GVn5acKUBCodWHBN+IUZgnJheZSg==}
+ engines: {node: '>=12'}
- '@sentry/replay@10.60.0':
- resolution: {integrity: sha512-j+w774BP1p+v/ga1hJAJSn0cXgTiB2VWwQCAxukF7AEXscny/OCXzTTsaPxdovw9kDHI641vKV+/yixLV2nKIQ==}
- engines: {node: '>=18'}
+ '@sentry/types@7.120.3':
+ resolution: {integrity: sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==}
+ engines: {node: '>=8'}
- '@sentry/server-utils@10.60.0':
- resolution: {integrity: sha512-SX+MzWM3nz5ttKT48rlfktm0ERyIpDLma+b6pYeWgW2oFHKcpIu0g0qMGJrZs4lKM3MlgV7IqLa4texMqTp9kQ==}
- engines: {node: '>=18'}
+ '@sentry/utils@7.120.3':
+ resolution: {integrity: sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==}
+ engines: {node: '>=8'}
- '@sentry/vercel-edge@10.60.0':
- resolution: {integrity: sha512-Ti7LR4Fm61IBSMQsOE9IkM//yQqffg7UUl898geqXEN3hq50J79OwNENAjDsXwsrP90220pHGj1rT+Dsrci6iw==}
- engines: {node: '>=18'}
+ '@sentry/vercel-edge@7.120.3':
+ resolution: {integrity: sha512-/kfz28EsBpwppZniCjhi07TyupGDyVtA1QFcuIebluYsd9u/4kHKwhxlaLA2qlKxlBnSrvJAfYupNDvE/QXXrg==}
+ engines: {node: '>=8'}
- '@sentry/webpack-plugin@5.3.0':
- resolution: {integrity: sha512-i3OQUrS0FZlXLgq57RIKDp+vHHzuvYKPCKewAPXULWKMsBXFGhP6veGRQ+6To/pmZkkXjEX5ofVNDy9C3jEPKQ==}
- engines: {node: '>= 18'}
- peerDependencies:
- webpack: '>=5.0.0'
+ '@sentry/webpack-plugin@1.21.0':
+ resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==}
+ engines: {node: '>= 8'}
'@shuding/opentype.js@1.4.0-beta.0':
resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==}
@@ -4277,9 +4007,6 @@ packages:
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
- '@types/emscripten@1.41.5':
- resolution: {integrity: sha512-cMQm7pxu6BxtHyqJ7mQZ2kXWV5SLmugybFdHCBbJ5eHzOo6VhBckEgAT3//rP5FwPHNPeEiq4SmQ5ucBwsOo4Q==}
-
'@types/estree-jsx@1.0.5':
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
@@ -4353,9 +4080,6 @@ packages:
'@types/semver@7.7.0':
resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==}
- '@types/sql.js@1.4.11':
- resolution: {integrity: sha512-QXIx38p2ZThJaK9vP5ZdqdlRe1FG9I8SmCZOS7FHfB/2qPAjZwkL7/vlfPg6N/oWHuuOaGg/P/IRwfP2W0kWVQ==}
-
'@types/triple-beam@1.3.5':
resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==}
@@ -4899,54 +4623,6 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
- altcha-lib@2.2.0:
- resolution: {integrity: sha512-O4+q6+JECTRgse9NVDsAJ8PwWhYpb+iAlT3wVcZ/BMGv2wkumAGWK3GE5FGbgzI7K5CJLDoNBKuQBUQui+62Ig==}
- hasBin: true
- peerDependencies:
- '@fastify/cookie': ^11.0.0
- '@fastify/cors': ^11.0.0
- '@fastify/formbody': ^8.0.0
- '@nestjs/common': ^10.0.0 || ^11.0.0
- '@nestjs/core': ^10.0.0 || ^11.0.0
- '@nestjs/platform-express': ^10.0.0 || ^11.0.0
- '@sveltejs/kit': ^2.0.0
- cookie-parser: ^1.0.0
- cors: ^2.0.0
- express: ^4.0.0 || ^5.0.0
- fastify: ^5.0.0
- h3: ^2.0.0
- hono: ^4.0.0
- peerDependenciesMeta:
- '@fastify/cookie':
- optional: true
- '@fastify/cors':
- optional: true
- '@fastify/formbody':
- optional: true
- '@nestjs/common':
- optional: true
- '@nestjs/core':
- optional: true
- '@nestjs/platform-express':
- optional: true
- '@sveltejs/kit':
- optional: true
- cookie-parser:
- optional: true
- cors:
- optional: true
- express:
- optional: true
- fastify:
- optional: true
- h3:
- optional: true
- hono:
- optional: true
-
- altcha@3.1.0:
- resolution: {integrity: sha512-rzz+F1xGG55X1LWylHZyabf9V4+5qAZeqd0+mo+8HdFsCqPC4YfUyjQ7lcbW/GVXy1XSnKsPMFkBuhmTymZuWw==}
-
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -5053,10 +4729,6 @@ packages:
ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
- astring@1.9.0:
- resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
- hasBin: true
-
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -5116,10 +4788,6 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- balanced-match@4.0.4:
- resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
- engines: {node: 18 || 20 || >=22}
-
bare-events@2.5.4:
resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==}
@@ -5162,10 +4830,6 @@ packages:
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
- brace-expansion@5.0.6:
- resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
- engines: {node: 18 || 20 || >=22}
-
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
@@ -5271,6 +4935,10 @@ packages:
resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==}
engines: {node: '>=14.16'}
+ chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -5330,9 +4998,6 @@ packages:
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
- cjs-module-lexer@2.2.0:
- resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
-
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
@@ -5723,15 +5388,6 @@ packages:
supports-color:
optional: true
- debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
decache@4.6.2:
resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==}
@@ -6425,10 +6081,6 @@ packages:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
- esquery@1.7.0:
- resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
- engines: {node: '>=0.10'}
-
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
@@ -6800,10 +6452,6 @@ packages:
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin: true
- glob@13.0.6:
- resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
- engines: {node: 18 || 20 || >=22}
-
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
@@ -6897,9 +6545,6 @@ packages:
has-unicode@2.0.1:
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
- hash-wasm@4.12.0:
- resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==}
-
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -7038,14 +6683,13 @@ packages:
resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==}
engines: {node: '>= 4'}
+ immediate@3.0.6:
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
- import-in-the-middle@3.2.0:
- resolution: {integrity: sha512-vR2B6HKIhaBjcZr2bLpFiJ1VbzOlRQ7aby4/gw5WPIzToLjqpfWw3VJ4sk1uDchoOODEirvO2jyrSPtUSL5CrQ==}
- engines: {node: '>=18'}
-
import-meta-resolve@3.1.1:
resolution: {integrity: sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw==}
@@ -7514,6 +7158,9 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ lie@3.1.1:
+ resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==}
+
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
@@ -7552,6 +7199,9 @@ packages:
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
engines: {node: '>=14'}
+ localforage@1.10.0:
+ resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==}
+
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@@ -7626,10 +7276,6 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.5.1:
- resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
- engines: {node: 20 || >=22}
-
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -7646,12 +7292,13 @@ packages:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
+ magic-string@0.27.0:
+ resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+ engines: {node: '>=12'}
+
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
- magic-string@0.30.21:
- resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
-
magicast@0.3.5:
resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
@@ -7750,10 +7397,6 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- meriyah@6.1.4:
- resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==}
- engines: {node: '>=18.0.0'}
-
methods@1.1.2:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
@@ -7899,10 +7542,6 @@ packages:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
- minimatch@10.2.5:
- resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
- engines: {node: 18 || 20 || >=22}
-
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -7933,10 +7572,6 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
- minipass@7.1.3:
- resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
- engines: {node: '>=16 || 14 >=14.17'}
-
minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
@@ -7945,6 +7580,10 @@ packages:
resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
engines: {node: '>= 18'}
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
@@ -7963,9 +7602,6 @@ packages:
engines: {node: '>=14'}
hasBin: true
- module-details-from-path@1.0.4:
- resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
-
monaco-editor@0.52.2:
resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==}
@@ -8370,10 +8006,6 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- path-scurry@2.0.2:
- resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
- engines: {node: 18 || 20 || >=22}
-
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -9012,10 +8644,6 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- require-in-the-middle@8.0.1:
- resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==}
- engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'}
-
require-package-name@2.0.1:
resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==}
@@ -9041,6 +8669,10 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
+ resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+
resolve@2.0.0-next.5:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
@@ -9082,11 +8714,6 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rollup@4.62.2:
- resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -9136,9 +8763,6 @@ packages:
selderee@0.10.0:
resolution: {integrity: sha512-DEL/RW/f4qLw/NrVg97xKaEBC8IpzIG2fvxnzCp3Z4yk4jQ3MXom+Imav9wApjxX2dfS3eW7x0DXafJr85i39A==}
- semifies@1.0.0:
- resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==}
-
semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
@@ -9299,9 +8923,6 @@ packages:
spdx-license-ids@3.0.21:
resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
- sql.js@1.14.1:
- resolution: {integrity: sha512-gcj8zBWU5cFsi9WUP+4bFNXAyF1iRpA3LLyS/DP5xlrNzGmPIizUeBggKa8DbDwdqaKwUcTEnChtd2grWo/x/A==}
-
stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
@@ -10147,6 +9768,10 @@ packages:
engines: {node: '>= 10.13.0'}
hasBin: true
+ webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+
webpack-sources@3.5.0:
resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==}
engines: {node: '>=10.13.0'}
@@ -10340,30 +9965,6 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.31
- '@apm-js-collab/code-transformer-bundler-plugins@0.5.0':
- dependencies:
- '@apm-js-collab/code-transformer': 0.15.0
- es-module-lexer: 2.1.0
- magic-string: 0.30.21
- module-details-from-path: 1.0.4
-
- '@apm-js-collab/code-transformer@0.15.0':
- dependencies:
- '@types/estree': 1.0.9
- astring: 1.9.0
- esquery: 1.7.0
- meriyah: 6.1.4
- semifies: 1.0.0
- source-map: 0.6.1
-
- '@apm-js-collab/tracing-hooks@0.10.0':
- dependencies:
- '@apm-js-collab/code-transformer': 0.15.0
- debug: 4.4.3
- module-details-from-path: 1.0.4
- transitivePeerDependencies:
- - supports-color
-
'@auth/core@0.37.4(nodemailer@6.10.1)':
dependencies:
'@panva/hkdf': 1.2.1
@@ -10402,6 +10003,9 @@ snapshots:
'@babel/compat-data@7.26.8': {}
+ '@babel/compat-data@7.29.7':
+ optional: true
+
'@babel/core@7.26.10':
dependencies:
'@ampproject/remapping': 2.3.0
@@ -10422,6 +10026,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/core@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.7
+ '@babel/helper-compilation-targets': 7.29.7
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
+ '@babel/helpers': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/template': 7.29.7
+ '@babel/traverse': 7.29.7
+ '@babel/types': 7.29.7
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.0
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@babel/eslint-parser@7.27.0(@babel/core@7.26.10)(eslint@8.57.1)':
dependencies:
'@babel/core': 7.26.10
@@ -10438,6 +10063,15 @@ snapshots:
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.1.0
+ '@babel/generator@7.29.7':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+ optional: true
+
'@babel/helper-compilation-targets@7.27.0':
dependencies:
'@babel/compat-data': 7.26.8
@@ -10446,12 +10080,32 @@ snapshots:
lru-cache: 5.1.1
semver: 6.3.1
+ '@babel/helper-compilation-targets@7.29.7':
+ dependencies:
+ '@babel/compat-data': 7.29.7
+ '@babel/helper-validator-option': 7.29.7
+ browserslist: 4.28.2
+ lru-cache: 5.1.1
+ semver: 6.3.1
+ optional: true
+
+ '@babel/helper-globals@7.29.7':
+ optional: true
+
'@babel/helper-module-imports@7.25.9':
dependencies:
- '@babel/traverse': 7.27.0
- '@babel/types': 7.27.0
+ '@babel/traverse': 7.27.0
+ '@babel/types': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.29.7':
+ dependencies:
+ '@babel/traverse': 7.29.7
+ '@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
+ optional: true
'@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
dependencies:
@@ -10462,25 +10116,52 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
+ dependencies:
+ '@babel/core': 7.29.7
+ '@babel/helper-module-imports': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+ '@babel/traverse': 7.29.7
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@babel/helper-plugin-utils@7.26.5': {}
'@babel/helper-string-parser@7.25.9': {}
+ '@babel/helper-string-parser@7.29.7':
+ optional: true
+
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/helper-validator-identifier@7.29.7': {}
'@babel/helper-validator-option@7.25.9': {}
+ '@babel/helper-validator-option@7.29.7':
+ optional: true
+
'@babel/helpers@7.27.0':
dependencies:
'@babel/template': 7.27.0
'@babel/types': 7.27.0
+ '@babel/helpers@7.29.7':
+ dependencies:
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.7
+ optional: true
+
'@babel/parser@7.27.0':
dependencies:
'@babel/types': 7.27.0
+ '@babel/parser@7.29.7':
+ dependencies:
+ '@babel/types': 7.29.7
+ optional: true
+
'@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
@@ -10501,6 +10182,13 @@ snapshots:
'@babel/parser': 7.27.0
'@babel/types': 7.27.0
+ '@babel/template@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+ optional: true
+
'@babel/traverse@7.27.0':
dependencies:
'@babel/code-frame': 7.26.2
@@ -10513,6 +10201,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/traverse@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.7
+ '@babel/helper-globals': 7.29.7
+ '@babel/parser': 7.29.7
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.7
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@babel/types@7.26.9':
dependencies:
'@babel/helper-string-parser': 7.25.9
@@ -10523,6 +10224,12 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
+ '@babel/types@7.29.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+ optional: true
+
'@cloudflare/kv-asset-handler@0.4.0':
dependencies:
mime: 3.0.0
@@ -11261,7 +10968,7 @@ snapshots:
'@jridgewell/gen-mapping@0.3.13':
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/gen-mapping@0.3.8':
@@ -11270,6 +10977,12 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.31
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ optional: true
+
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/set-array@1.2.1': {}
@@ -11281,8 +10994,6 @@ snapshots:
'@jridgewell/sourcemap-codec@1.5.0': {}
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
'@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
@@ -11677,41 +11388,6 @@ snapshots:
'@one-ini/wasm@0.1.1': {}
- '@opentelemetry/api-logs@0.214.0':
- dependencies:
- '@opentelemetry/api': 1.9.1
-
- '@opentelemetry/api@1.9.1': {}
-
- '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)':
- dependencies:
- '@opentelemetry/api': 1.9.1
- '@opentelemetry/semantic-conventions': 1.41.1
-
- '@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1)':
- dependencies:
- '@opentelemetry/api': 1.9.1
- '@opentelemetry/api-logs': 0.214.0
- import-in-the-middle: 3.2.0
- require-in-the-middle: 8.0.1
- transitivePeerDependencies:
- - supports-color
-
- '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.1)':
- dependencies:
- '@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/semantic-conventions': 1.41.1
-
- '@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)':
- dependencies:
- '@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/semantic-conventions': 1.41.1
-
- '@opentelemetry/semantic-conventions@1.41.1': {}
-
'@panva/hkdf@1.2.1': {}
'@parcel/watcher-android-arm64@2.5.1':
@@ -12787,17 +12463,16 @@ snapshots:
optionalDependencies:
rollup: 4.40.0
- '@rollup/plugin-commonjs@28.0.1(rollup@4.62.2)':
+ '@rollup/plugin-commonjs@24.0.0(rollup@2.79.2)':
dependencies:
- '@rollup/pluginutils': 5.1.4(rollup@4.62.2)
+ '@rollup/pluginutils': 5.1.4(rollup@2.79.2)
commondir: 1.0.1
estree-walker: 2.0.2
- fdir: 6.4.4(picomatch@4.0.2)
+ glob: 8.1.0
is-reference: 1.2.1
- magic-string: 0.30.21
- picomatch: 4.0.2
+ magic-string: 0.27.0
optionalDependencies:
- rollup: 4.62.2
+ rollup: 2.79.2
'@rollup/plugin-commonjs@28.0.3(rollup@4.40.0)':
dependencies:
@@ -12850,157 +12525,82 @@ snapshots:
optionalDependencies:
rollup: 4.40.0
- '@rollup/pluginutils@5.1.4(rollup@4.40.0)':
+ '@rollup/pluginutils@5.1.4(rollup@2.79.2)':
dependencies:
'@types/estree': 1.0.7
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
- rollup: 4.40.0
+ rollup: 2.79.2
- '@rollup/pluginutils@5.1.4(rollup@4.62.2)':
+ '@rollup/pluginutils@5.1.4(rollup@4.40.0)':
dependencies:
'@types/estree': 1.0.7
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
- rollup: 4.62.2
+ rollup: 4.40.0
'@rollup/rollup-android-arm-eabi@4.40.0':
optional: true
- '@rollup/rollup-android-arm-eabi@4.62.2':
- optional: true
-
'@rollup/rollup-android-arm64@4.40.0':
optional: true
- '@rollup/rollup-android-arm64@4.62.2':
- optional: true
-
'@rollup/rollup-darwin-arm64@4.40.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.62.2':
- optional: true
-
'@rollup/rollup-darwin-x64@4.40.0':
optional: true
- '@rollup/rollup-darwin-x64@4.62.2':
- optional: true
-
'@rollup/rollup-freebsd-arm64@4.40.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.62.2':
- optional: true
-
'@rollup/rollup-freebsd-x64@4.40.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.62.2':
- optional: true
-
'@rollup/rollup-linux-arm-gnueabihf@4.40.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.62.2':
- optional: true
-
'@rollup/rollup-linux-arm-musleabihf@4.40.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.62.2':
- optional: true
-
'@rollup/rollup-linux-arm64-gnu@4.40.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.62.2':
- optional: true
-
'@rollup/rollup-linux-arm64-musl@4.40.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.62.2':
- optional: true
-
- '@rollup/rollup-linux-loong64-gnu@4.62.2':
- optional: true
-
- '@rollup/rollup-linux-loong64-musl@4.62.2':
- optional: true
-
'@rollup/rollup-linux-loongarch64-gnu@4.40.0':
optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.62.2':
- optional: true
-
- '@rollup/rollup-linux-ppc64-musl@4.62.2':
- optional: true
-
'@rollup/rollup-linux-riscv64-gnu@4.40.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.62.2':
- optional: true
-
'@rollup/rollup-linux-riscv64-musl@4.40.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.62.2':
- optional: true
-
'@rollup/rollup-linux-s390x-gnu@4.40.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.62.2':
- optional: true
-
'@rollup/rollup-linux-x64-gnu@4.40.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.62.2':
- optional: true
-
'@rollup/rollup-linux-x64-musl@4.40.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.62.2':
- optional: true
-
- '@rollup/rollup-openbsd-x64@4.62.2':
- optional: true
-
- '@rollup/rollup-openharmony-arm64@4.62.2':
- optional: true
-
'@rollup/rollup-win32-arm64-msvc@4.40.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.62.2':
- optional: true
-
'@rollup/rollup-win32-ia32-msvc@4.40.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.62.2':
- optional: true
-
- '@rollup/rollup-win32-x64-gnu@4.62.2':
- optional: true
-
'@rollup/rollup-win32-x64-msvc@4.40.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.62.2':
- optional: true
-
'@rtsao/scc@1.1.0': {}
'@rushstack/eslint-patch@1.11.0': {}
@@ -13010,182 +12610,125 @@ snapshots:
domhandler: 5.0.3
selderee: 0.10.0
- '@sentry/babel-plugin-component-annotate@5.3.0': {}
-
- '@sentry/browser-utils@10.60.0':
+ '@sentry-internal/feedback@7.120.3':
dependencies:
- '@sentry/core': 10.60.0
+ '@sentry/core': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/browser@10.60.0':
+ '@sentry-internal/replay-canvas@7.120.3':
dependencies:
- '@sentry/browser-utils': 10.60.0
- '@sentry/core': 10.60.0
- '@sentry/feedback': 10.60.0
- '@sentry/replay': 10.60.0
- '@sentry/replay-canvas': 10.60.0
+ '@sentry/core': 7.120.3
+ '@sentry/replay': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/bundler-plugin-core@5.3.0':
+ '@sentry-internal/tracing@7.120.3':
dependencies:
- '@babel/core': 7.26.10
- '@sentry/babel-plugin-component-annotate': 5.3.0
- '@sentry/cli': 2.58.6
- dotenv: 16.5.0
- find-up: 5.0.0
- glob: 13.0.6
- magic-string: 0.30.21
- transitivePeerDependencies:
- - encoding
- - supports-color
-
- '@sentry/cli-darwin@2.58.6':
- optional: true
-
- '@sentry/cli-linux-arm64@2.58.6':
- optional: true
-
- '@sentry/cli-linux-arm@2.58.6':
- optional: true
-
- '@sentry/cli-linux-i686@2.58.6':
- optional: true
-
- '@sentry/cli-linux-x64@2.58.6':
- optional: true
-
- '@sentry/cli-win32-arm64@2.58.6':
- optional: true
-
- '@sentry/cli-win32-i686@2.58.6':
- optional: true
+ '@sentry/core': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/cli-win32-x64@2.58.6':
- optional: true
+ '@sentry/browser@7.120.3':
+ dependencies:
+ '@sentry-internal/feedback': 7.120.3
+ '@sentry-internal/replay-canvas': 7.120.3
+ '@sentry-internal/tracing': 7.120.3
+ '@sentry/core': 7.120.3
+ '@sentry/integrations': 7.120.3
+ '@sentry/replay': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/cli@2.58.6':
+ '@sentry/cli@1.77.3':
dependencies:
https-proxy-agent: 5.0.1
+ mkdirp: 0.5.6
node-fetch: 2.7.0
progress: 2.0.3
proxy-from-env: 1.1.0
which: 2.0.2
- optionalDependencies:
- '@sentry/cli-darwin': 2.58.6
- '@sentry/cli-linux-arm': 2.58.6
- '@sentry/cli-linux-arm64': 2.58.6
- '@sentry/cli-linux-i686': 2.58.6
- '@sentry/cli-linux-x64': 2.58.6
- '@sentry/cli-win32-arm64': 2.58.6
- '@sentry/cli-win32-i686': 2.58.6
- '@sentry/cli-win32-x64': 2.58.6
transitivePeerDependencies:
- encoding
- supports-color
- '@sentry/conventions@0.12.0': {}
-
- '@sentry/core@10.60.0': {}
-
- '@sentry/feedback@10.60.0':
+ '@sentry/core@7.120.3':
dependencies:
- '@sentry/core': 10.60.0
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/nextjs@10.60.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.107.2(postcss@8.5.3))':
+ '@sentry/integrations@7.120.3':
dependencies:
- '@opentelemetry/api': 1.9.1
- '@rollup/plugin-commonjs': 28.0.1(rollup@4.62.2)
- '@sentry/browser-utils': 10.60.0
- '@sentry/bundler-plugin-core': 5.3.0
- '@sentry/conventions': 0.12.0
- '@sentry/core': 10.60.0
- '@sentry/node': 10.60.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))
- '@sentry/opentelemetry': 10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
- '@sentry/react': 10.60.0(react@19.1.0)
- '@sentry/vercel-edge': 10.60.0
- '@sentry/webpack-plugin': 5.3.0(webpack@5.107.2(postcss@8.5.3))
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- rollup: 4.62.2
- stacktrace-parser: 0.1.11
- transitivePeerDependencies:
- - '@opentelemetry/core'
- - '@opentelemetry/exporter-trace-otlp-http'
- - '@opentelemetry/sdk-trace-base'
- - encoding
- - react
- - supports-color
- - webpack
+ '@sentry/core': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
+ localforage: 1.10.0
- '@sentry/node-core@10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))':
+ '@sentry/nextjs@7.120.3(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.107.2(postcss@8.5.3))':
dependencies:
- '@sentry/conventions': 0.12.0
- '@sentry/core': 10.60.0
- '@sentry/opentelemetry': 10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
- import-in-the-middle: 3.2.0
+ '@rollup/plugin-commonjs': 24.0.0(rollup@2.79.2)
+ '@sentry/core': 7.120.3
+ '@sentry/integrations': 7.120.3
+ '@sentry/node': 7.120.3
+ '@sentry/react': 7.120.3(react@19.1.0)
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
+ '@sentry/vercel-edge': 7.120.3
+ '@sentry/webpack-plugin': 1.21.0
+ chalk: 3.0.0
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ resolve: 1.22.8
+ rollup: 2.79.2
+ stacktrace-parser: 0.1.11
optionalDependencies:
- '@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
-
- '@sentry/node@10.60.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))':
- dependencies:
- '@opentelemetry/api': 1.9.1
- '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/semantic-conventions': 1.41.1
- '@sentry/core': 10.60.0
- '@sentry/node-core': 10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
- '@sentry/opentelemetry': 10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
- '@sentry/server-utils': 10.60.0
- import-in-the-middle: 3.2.0
+ webpack: 5.107.2(postcss@8.5.3)
transitivePeerDependencies:
- - '@opentelemetry/core'
- - '@opentelemetry/exporter-trace-otlp-http'
+ - encoding
- supports-color
- '@sentry/opentelemetry@10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))':
+ '@sentry/node@7.120.3':
dependencies:
- '@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
- '@sentry/conventions': 0.12.0
- '@sentry/core': 10.60.0
+ '@sentry-internal/tracing': 7.120.3
+ '@sentry/core': 7.120.3
+ '@sentry/integrations': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/react@10.60.0(react@19.1.0)':
+ '@sentry/react@7.120.3(react@19.1.0)':
dependencies:
- '@sentry/browser': 10.60.0
- '@sentry/core': 10.60.0
+ '@sentry/browser': 7.120.3
+ '@sentry/core': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
+ hoist-non-react-statics: 3.3.2
react: 19.1.0
- '@sentry/replay-canvas@10.60.0':
+ '@sentry/replay@7.120.3':
dependencies:
- '@sentry/core': 10.60.0
- '@sentry/replay': 10.60.0
+ '@sentry-internal/tracing': 7.120.3
+ '@sentry/core': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/replay@10.60.0':
- dependencies:
- '@sentry/browser-utils': 10.60.0
- '@sentry/core': 10.60.0
+ '@sentry/types@7.120.3': {}
- '@sentry/server-utils@10.60.0':
+ '@sentry/utils@7.120.3':
dependencies:
- '@apm-js-collab/code-transformer': 0.15.0
- '@apm-js-collab/code-transformer-bundler-plugins': 0.5.0
- '@apm-js-collab/tracing-hooks': 0.10.0
- '@sentry/conventions': 0.12.0
- '@sentry/core': 10.60.0
- magic-string: 0.30.21
- transitivePeerDependencies:
- - supports-color
+ '@sentry/types': 7.120.3
- '@sentry/vercel-edge@10.60.0':
+ '@sentry/vercel-edge@7.120.3':
dependencies:
- '@opentelemetry/api': 1.9.1
- '@sentry/core': 10.60.0
+ '@sentry-internal/tracing': 7.120.3
+ '@sentry/core': 7.120.3
+ '@sentry/integrations': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
- '@sentry/webpack-plugin@5.3.0(webpack@5.107.2(postcss@8.5.3))':
+ '@sentry/webpack-plugin@1.21.0':
dependencies:
- '@sentry/bundler-plugin-core': 5.3.0
- webpack: 5.107.2(postcss@8.5.3)
+ '@sentry/cli': 1.77.3
+ webpack-sources: 3.2.3
transitivePeerDependencies:
- encoding
- supports-color
@@ -13370,8 +12913,6 @@ snapshots:
dependencies:
'@types/ms': 2.1.0
- '@types/emscripten@1.41.5': {}
-
'@types/estree-jsx@1.0.5':
dependencies:
'@types/estree': 1.0.7
@@ -13442,11 +12983,6 @@ snapshots:
'@types/semver@7.7.0': {}
- '@types/sql.js@1.4.11':
- dependencies:
- '@types/emscripten': 1.41.5
- '@types/node': 20.17.30
-
'@types/triple-beam@1.3.5': {}
'@types/unist@2.0.11': {}
@@ -13722,16 +13258,16 @@ snapshots:
'@uploadthing/mime-types@0.2.10': {}
- '@uploadthing/react@6.8.0(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(uploadthing@6.13.3(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7))':
+ '@uploadthing/react@6.8.0(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(uploadthing@6.13.3(h3@1.15.1)(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7))':
dependencies:
'@uploadthing/dropzone': 0.4.1(react@19.1.0)
'@uploadthing/shared': 6.7.9
file-selector: 0.6.0
react: 19.1.0
tailwind-merge: 2.6.0
- uploadthing: 6.13.3(h3@1.15.1)(next@15.3.8(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7)
+ uploadthing: 6.13.3(h3@1.15.1)(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7)
optionalDependencies:
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- solid-js
- svelte
@@ -13743,9 +13279,9 @@ snapshots:
effect: 3.4.8
std-env: 3.9.0
- '@vercel/analytics@1.5.0(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)':
+ '@vercel/analytics@1.5.0(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)':
optionalDependencies:
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
'@vercel/edge-config-fs@0.1.0': {}
@@ -13798,9 +13334,9 @@ snapshots:
satori: 0.0.46
yoga-wasm-web: 0.3.0
- '@vercel/speed-insights@1.2.0(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)':
+ '@vercel/speed-insights@1.2.0(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)':
optionalDependencies:
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
'@vercel/style-guide@6.0.0(@next/eslint-plugin-next@14.2.33)(eslint@8.57.1)(prettier@3.5.3)(typescript@5.8.3)(vitest@0.34.6(playwright@1.52.0)(terser@5.39.0))':
@@ -13837,7 +13373,7 @@ snapshots:
- supports-color
- vitest
- '@vercel/toolbar@0.1.18(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@5.4.18(@types/node@20.17.30)(terser@5.39.0))':
+ '@vercel/toolbar@0.1.18(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@5.4.18(@types/node@20.17.30)(terser@5.39.0))':
dependencies:
'@tinyhttp/app': 1.3.0
chokidar: 3.6.0
@@ -13846,7 +13382,7 @@ snapshots:
get-port: 5.1.1
strip-ansi: 6.0.1
optionalDependencies:
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
vite: 5.4.18(@types/node@20.17.30)(terser@5.39.0)
@@ -14002,10 +13538,6 @@ snapshots:
dependencies:
acorn: 8.14.1
- acorn-import-attributes@1.9.5(acorn@8.17.0):
- dependencies:
- acorn: 8.17.0
-
acorn-import-phases@1.0.4(acorn@8.17.0):
dependencies:
acorn: 8.17.0
@@ -14024,7 +13556,7 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.4.3
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
@@ -14062,12 +13594,6 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
- altcha-lib@2.2.0: {}
-
- altcha@3.1.0:
- dependencies:
- hash-wasm: 4.12.0
-
ansi-regex@5.0.1: {}
ansi-regex@6.1.0: {}
@@ -14199,8 +13725,6 @@ snapshots:
ast-types-flow@0.0.8: {}
- astring@1.9.0: {}
-
async-function@1.0.0: {}
async-sema@3.1.1: {}
@@ -14255,8 +13779,6 @@ snapshots:
balanced-match@1.0.2: {}
- balanced-match@4.0.4: {}
-
bare-events@2.5.4:
optional: true
@@ -14291,10 +13813,6 @@ snapshots:
dependencies:
balanced-match: 1.0.2
- brace-expansion@5.0.6:
- dependencies:
- balanced-match: 4.0.4
-
braces@3.0.3:
dependencies:
fill-range: 7.1.1
@@ -14406,6 +13924,11 @@ snapshots:
dependencies:
chalk: 5.4.1
+ chalk@3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -14459,8 +13982,6 @@ snapshots:
dependencies:
consola: 3.4.2
- cjs-module-lexer@2.2.0: {}
-
class-variance-authority@0.7.1:
dependencies:
clsx: 2.1.1
@@ -14861,10 +14382,6 @@ snapshots:
dependencies:
ms: 2.1.3
- debug@4.4.3:
- dependencies:
- ms: 2.1.3
-
decache@4.6.2:
dependencies:
callsite: 1.0.0
@@ -15723,10 +15240,6 @@ snapshots:
dependencies:
estraverse: 5.3.0
- esquery@1.7.0:
- dependencies:
- estraverse: 5.3.0
-
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
@@ -16102,12 +15615,6 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@13.0.6:
- dependencies:
- minimatch: 10.2.5
- minipass: 7.1.3
- path-scurry: 2.0.2
-
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -16218,8 +15725,6 @@ snapshots:
has-unicode@2.0.1: {}
- hash-wasm@4.12.0: {}
-
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
@@ -16432,7 +15937,7 @@ snapshots:
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.4.3
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
@@ -16457,18 +15962,13 @@ snapshots:
ignore@7.0.3: {}
+ immediate@3.0.6: {}
+
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
- import-in-the-middle@3.2.0:
- dependencies:
- acorn: 8.17.0
- acorn-import-attributes: 1.9.5(acorn@8.17.0)
- cjs-module-lexer: 2.2.0
- module-details-from-path: 1.0.4
-
import-meta-resolve@3.1.1: {}
imurmurhash@0.1.4: {}
@@ -16885,6 +16385,10 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lie@3.1.1:
+ dependencies:
+ immediate: 3.0.6
+
lilconfig@2.1.0: {}
lilconfig@3.1.3: {}
@@ -16934,6 +16438,10 @@ snapshots:
pkg-types: 2.1.0
quansync: 0.2.10
+ localforage@1.10.0:
+ dependencies:
+ lie: 3.1.1
+
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
@@ -17000,8 +16508,6 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.5.1: {}
-
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -17014,13 +16520,13 @@ snapshots:
lz-string@1.5.0: {}
- magic-string@0.30.17:
+ magic-string@0.27.0:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
- magic-string@0.30.21:
+ magic-string@0.30.17:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/sourcemap-codec': 1.5.0
magicast@0.3.5:
dependencies:
@@ -17229,8 +16735,6 @@ snapshots:
merge2@1.4.1: {}
- meriyah@6.1.4: {}
-
methods@1.1.2: {}
micro-api-client@3.3.0: {}
@@ -17473,10 +16977,6 @@ snapshots:
min-indent@1.0.1: {}
- minimatch@10.2.5:
- dependencies:
- brace-expansion: 5.0.6
-
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
@@ -17503,8 +17003,6 @@ snapshots:
minipass@7.1.2: {}
- minipass@7.1.3: {}
-
minizlib@2.1.2:
dependencies:
minipass: 3.3.6
@@ -17514,6 +17012,10 @@ snapshots:
dependencies:
minipass: 7.1.2
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
mkdirp@1.0.4: {}
mkdirp@3.0.1: {}
@@ -17530,8 +17032,6 @@ snapshots:
ast-module-types: 5.0.0
node-source-walk: 6.0.2
- module-details-from-path@1.0.4: {}
-
monaco-editor@0.52.2(patch_hash=1048031a34a1a0b12411a35e7fc4440057530620d7b567bcd688125073e9a86b): {}
monaco-vim@0.4.2(monaco-editor@0.52.2(patch_hash=1048031a34a1a0b12411a35e7fc4440057530620d7b567bcd688125073e9a86b)):
@@ -17571,21 +17071,27 @@ snapshots:
p-wait-for: 5.0.2
qs: 6.14.0
- next-auth@5.0.0-beta.25(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(nodemailer@6.10.1)(react@19.1.0):
+ next-auth@5.0.0-beta.25(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(nodemailer@6.10.1)(react@19.1.0):
dependencies:
'@auth/core': 0.37.4(nodemailer@6.10.1)
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
optionalDependencies:
nodemailer: 6.10.1
- next-themes@0.2.1(next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ next-themes@0.2.1(next@15.3.8(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ dependencies:
+ next: 15.3.8(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+
+ next-themes@0.2.1(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
- next@15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ next@15.3.8(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@next/env': 15.3.8
'@swc/counter': 0.1.3
@@ -17605,7 +17111,32 @@ snapshots:
'@next/swc-linux-x64-musl': 15.3.5
'@next/swc-win32-arm64-msvc': 15.3.5
'@next/swc-win32-x64-msvc': 15.3.5
- '@opentelemetry/api': 1.9.1
+ '@playwright/test': 1.52.0
+ sharp: 0.34.1
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
+ next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ dependencies:
+ '@next/env': 15.3.8
+ '@swc/counter': 0.1.3
+ '@swc/helpers': 0.5.15
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001715
+ postcss: 8.4.31
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.1.0)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 15.3.5
+ '@next/swc-darwin-x64': 15.3.5
+ '@next/swc-linux-arm64-gnu': 15.3.5
+ '@next/swc-linux-arm64-musl': 15.3.5
+ '@next/swc-linux-x64-gnu': 15.3.5
+ '@next/swc-linux-x64-musl': 15.3.5
+ '@next/swc-win32-arm64-msvc': 15.3.5
+ '@next/swc-win32-x64-msvc': 15.3.5
'@playwright/test': 1.52.0
sharp: 0.34.1
transitivePeerDependencies:
@@ -18026,11 +17557,6 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
- path-scurry@2.0.2:
- dependencies:
- lru-cache: 11.5.1
- minipass: 7.1.3
-
path-type@4.0.0: {}
path-type@6.0.0: {}
@@ -18724,13 +18250,6 @@ snapshots:
require-from-string@2.0.2: {}
- require-in-the-middle@8.0.1:
- dependencies:
- debug: 4.4.3
- module-details-from-path: 1.0.4
- transitivePeerDependencies:
- - supports-color
-
require-package-name@2.0.1: {}
resend@0.17.2:
@@ -18758,6 +18277,12 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
+ resolve@1.22.8:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
resolve@2.0.0-next.5:
dependencies:
is-core-module: 2.16.1
@@ -18813,37 +18338,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.40.0
fsevents: 2.3.3
- rollup@4.62.2:
- dependencies:
- '@types/estree': 1.0.9
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.62.2
- '@rollup/rollup-android-arm64': 4.62.2
- '@rollup/rollup-darwin-arm64': 4.62.2
- '@rollup/rollup-darwin-x64': 4.62.2
- '@rollup/rollup-freebsd-arm64': 4.62.2
- '@rollup/rollup-freebsd-x64': 4.62.2
- '@rollup/rollup-linux-arm-gnueabihf': 4.62.2
- '@rollup/rollup-linux-arm-musleabihf': 4.62.2
- '@rollup/rollup-linux-arm64-gnu': 4.62.2
- '@rollup/rollup-linux-arm64-musl': 4.62.2
- '@rollup/rollup-linux-loong64-gnu': 4.62.2
- '@rollup/rollup-linux-loong64-musl': 4.62.2
- '@rollup/rollup-linux-ppc64-gnu': 4.62.2
- '@rollup/rollup-linux-ppc64-musl': 4.62.2
- '@rollup/rollup-linux-riscv64-gnu': 4.62.2
- '@rollup/rollup-linux-riscv64-musl': 4.62.2
- '@rollup/rollup-linux-s390x-gnu': 4.62.2
- '@rollup/rollup-linux-x64-gnu': 4.62.2
- '@rollup/rollup-linux-x64-musl': 4.62.2
- '@rollup/rollup-openbsd-x64': 4.62.2
- '@rollup/rollup-openharmony-arm64': 4.62.2
- '@rollup/rollup-win32-arm64-msvc': 4.62.2
- '@rollup/rollup-win32-ia32-msvc': 4.62.2
- '@rollup/rollup-win32-x64-gnu': 4.62.2
- '@rollup/rollup-win32-x64-msvc': 4.62.2
- fsevents: 2.3.3
-
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -18908,8 +18402,6 @@ snapshots:
dependencies:
parseley: 0.11.0
- semifies@1.0.0: {}
-
semver@5.7.2: {}
semver@6.3.1: {}
@@ -19117,8 +18609,6 @@ snapshots:
spdx-license-ids@3.0.21: {}
- sql.js@1.14.1: {}
-
stable-hash@0.0.5: {}
stack-trace@0.0.10: {}
@@ -19268,6 +18758,13 @@ snapshots:
optionalDependencies:
'@babel/core': 7.26.10
+ styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.1.0):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.1.0
+ optionalDependencies:
+ '@babel/core': 7.29.7
+
stylis@4.2.0: {}
sucrase@3.35.0:
@@ -19807,7 +19304,7 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.1
- uploadthing@6.13.3(h3@1.15.1)(next@15.3.8(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7):
+ uploadthing@6.13.3(h3@1.15.1)(next@15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tailwindcss@3.4.7):
dependencies:
'@effect/schema': 0.68.18(effect@3.4.8)
'@uploadthing/mime-types': 0.2.10
@@ -19817,7 +19314,7 @@ snapshots:
std-env: 3.9.0
optionalDependencies:
h3: 1.15.1
- next: 15.3.8(@babel/core@7.26.10)(@opentelemetry/api@1.9.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ next: 15.3.8(@babel/core@7.29.7)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
tailwindcss: 3.4.7
uqr@0.1.2: {}
@@ -20015,6 +19512,8 @@ snapshots:
- bufferutil
- utf-8-validate
+ webpack-sources@3.2.3: {}
+
webpack-sources@3.5.0: {}
webpack-virtual-modules@0.6.2: {}