CognxSafeTrack commited on
Commit
2d7440e
·
1 Parent(s): 6c2d132

feat: implement AI document generation (mock, pdf, pptx) and worker integration

Browse files
apps/api/package.json CHANGED
@@ -8,17 +8,21 @@
8
  "start": "node dist/index.js"
9
  },
10
  "dependencies": {
11
- "fastify": "^4.0.0",
12
  "@fastify/cors": "^8.0.0",
13
- "zod": "^3.0.0",
14
  "@repo/database": "workspace:*",
15
  "@repo/shared-types": "workspace:*",
16
- "bullmq": "^5.1.0"
 
 
 
 
 
17
  },
18
  "devDependencies": {
19
- "tsx": "^3.0.0",
20
- "typescript": "^5.0.0",
21
  "@types/node": "^20.0.0",
22
- "@repo/tsconfig": "workspace:*"
 
23
  }
24
  }
 
8
  "start": "node dist/index.js"
9
  },
10
  "dependencies": {
 
11
  "@fastify/cors": "^8.0.0",
12
+ "@prisma/client": "^5.0.0",
13
  "@repo/database": "workspace:*",
14
  "@repo/shared-types": "workspace:*",
15
+ "bullmq": "^5.1.0",
16
+ "fastify": "^4.0.0",
17
+ "openai": "^4.0.0",
18
+ "pptxgenjs": "^3.12.0",
19
+ "puppeteer": "^22.0.0",
20
+ "zod": "^3.25.76"
21
  },
22
  "devDependencies": {
23
+ "@repo/tsconfig": "workspace:*",
 
24
  "@types/node": "^20.0.0",
25
+ "tsx": "^3.0.0",
26
+ "typescript": "^5.0.0"
27
  }
28
  }
apps/api/src/index.ts CHANGED
@@ -14,6 +14,9 @@ server.register(whatsappRoutes, { prefix: '/v1/whatsapp' });
14
  import { adminRoutes } from './routes/admin';
15
  server.register(adminRoutes, { prefix: '/v1/admin' });
16
 
 
 
 
17
  server.get('/health', async () => {
18
  return { status: 'ok', timestamp: new Date().toISOString() };
19
  });
 
14
  import { adminRoutes } from './routes/admin';
15
  server.register(adminRoutes, { prefix: '/v1/admin' });
16
 
17
+ import { aiRoutes } from './routes/ai';
18
+ server.register(aiRoutes, { prefix: '/v1/ai' });
19
+
20
  server.get('/health', async () => {
21
  return { status: 'ok', timestamp: new Date().toISOString() };
22
  });
apps/api/src/routes/ai.ts ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { FastifyInstance } from 'fastify';
2
+ import { aiService } from '../services/ai';
3
+ import { PdfOnePagerRenderer } from '../services/renderers/pdf-renderer';
4
+ import { PptxDeckRenderer } from '../services/renderers/pptx-renderer';
5
+ import { z } from 'zod';
6
+
7
+ const mockS3Upload = async (buffer: Buffer, filename: string): Promise<string> => {
8
+ // In production, upload buffer to S3/R2 here
9
+ // For MVP, return a mock URL
10
+ console.log(`[MOCK UPLOAD] Mocking upload of ${filename} (${buffer.length} bytes)`);
11
+ return `https://dummy-storage.com/downloads/${filename}`;
12
+ };
13
+
14
+ export async function aiRoutes(fastify: FastifyInstance) {
15
+ const pdfRenderer = new PdfOnePagerRenderer();
16
+ const pptxRenderer = new PptxDeckRenderer();
17
+
18
+ // 1. Generate One-Pager (PDF)
19
+ fastify.post('/onepager', async (request) => {
20
+ const bodySchema = z.object({ userContext: z.string() });
21
+ const { userContext } = bodySchema.parse(request.body);
22
+
23
+ console.log('Generating One-Pager for context:', userContext.substring(0, 50));
24
+
25
+ // Step 1: LLM generates structured JSON
26
+ const onePagerData = await aiService.generateOnePagerData(userContext);
27
+
28
+ // Step 2: Renderer creates PDF Buffer
29
+ const pdfBuffer = await pdfRenderer.render(onePagerData);
30
+
31
+ // Step 3: Upload to Storage
32
+ const downloadUrl = await mockS3Upload(pdfBuffer, `onepager-${Date.now()}.pdf`);
33
+
34
+ return { success: true, url: downloadUrl, data: onePagerData };
35
+ });
36
+
37
+ // 2. Generate Pitch Deck (PPTX)
38
+ fastify.post('/deck', async (request) => {
39
+ const bodySchema = z.object({ userContext: z.string() });
40
+ const { userContext } = bodySchema.parse(request.body);
41
+
42
+ console.log('Generating Pitch Deck for context:', userContext.substring(0, 50));
43
+
44
+ // Step 1: LLM generates structured JSON (slides)
45
+ const deckData = await aiService.generatePitchDeckData(userContext);
46
+
47
+ // Step 2: Renderer creates PPTX Buffer
48
+ const pptxBuffer = await pptxRenderer.render(deckData);
49
+
50
+ // Step 3: Upload to Storage
51
+ const downloadUrl = await mockS3Upload(pptxBuffer, `deck-${Date.now()}.pptx`);
52
+
53
+ return { success: true, url: downloadUrl, data: deckData };
54
+ });
55
+ }
apps/api/src/services/ai/index.ts ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { LLMProvider, OnePagerData, OnePagerSchema, PitchDeckData, PitchDeckSchema } from './types';
2
+ import { MockLLMProvider } from './mock-provider';
3
+ import { OpenAIProvider } from './openai-provider';
4
+
5
+ class AIService {
6
+ private provider: LLMProvider;
7
+
8
+ constructor() {
9
+ // If OPENAI_API_KEY is present, use OpenAI. Otherwise fallback to Mock (Dev Mode).
10
+ const apiKey = process.env.OPENAI_API_KEY;
11
+ if (apiKey && apiKey !== '') {
12
+ console.log('[AI_SERVICE] Initializing OpenAI Provider...');
13
+ this.provider = new OpenAIProvider(apiKey);
14
+ } else {
15
+ console.log('[AI_SERVICE] No API Key found. Initializing MOCK Provider...');
16
+ this.provider = new MockLLMProvider();
17
+ }
18
+ }
19
+
20
+ /**
21
+ * Extracts a One-Pager JSON structure from raw user data.
22
+ */
23
+ async generateOnePagerData(userContext: string): Promise<OnePagerData> {
24
+ const prompt = `
25
+ Based on the following user input outlining their business idea, generate a concise one-pager summary.
26
+
27
+ USER INPUT:
28
+ ${userContext}
29
+ `;
30
+
31
+ return this.provider.generateStructuredData(prompt, OnePagerSchema);
32
+ }
33
+
34
+ /**
35
+ * Extracts a Slide Deck JSON structure from raw user data.
36
+ */
37
+ async generatePitchDeckData(userContext: string): Promise<PitchDeckData> {
38
+ const prompt = `
39
+ Based on the following user input outlining their business idea, generate a structured pitch deck presentation.
40
+ Keep bullets under 5 words if possible, and STRICTLY maximum 5 bullets per slide.
41
+
42
+ USER INPUT:
43
+ ${userContext}
44
+ `;
45
+
46
+ return this.provider.generateStructuredData(prompt, PitchDeckSchema);
47
+ }
48
+ }
49
+
50
+ // Export a singleton instance
51
+ export const aiService = new AIService();
apps/api/src/services/ai/mock-provider.ts ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { LLMProvider, OnePagerSchema, PitchDeckSchema } from './types';
2
+
3
+ /**
4
+ * A Provider for local development that doesn't require an API Key.
5
+ * It ignores the prompt and returns dummy data matching the requested schema.
6
+ */
7
+ export class MockLLMProvider implements LLMProvider {
8
+ async generateStructuredData<T>(prompt: string, schema: any): Promise<T> {
9
+ console.log('[MOCK LLM] Prompt received (ignoring content):', prompt.substring(0, 50) + '...');
10
+
11
+ // Return mock data based on the schema being requested
12
+ // Note: In a real advanced mock, you might use a library like JSON Schema Faker,
13
+ // but for our specific use-case, hardcoding the two expected shapes is simpler and safer.
14
+
15
+ if (schema === OnePagerSchema) {
16
+ const mockOnePager = {
17
+ title: "SafeTrack MVP",
18
+ tagline: "Securing the future of agriculture",
19
+ problem: "Farms lack real-time visibility into their operations and equipment.",
20
+ solution: "An integrated dashboard tracking visits, tasks, and IoT sensor data in real-time.",
21
+ targetAudience: "Farm owners and agricultural technicians.",
22
+ businessModel: "SaaS Subscription per farm.",
23
+ callToAction: "Sign up for a free 14-day trial."
24
+ };
25
+ return schema.parse(mockOnePager) as any;
26
+ }
27
+
28
+ if (schema === PitchDeckSchema) {
29
+ const mockDeck = {
30
+ title: "SafeTrack Pitch Deck",
31
+ subtitle: "Revolutionizing Farm Management",
32
+ slides: [
33
+ { title: "The Problem", content: ["Lack of visibility", "Inefficient technician routing", "Equipment failure goes unnoticed"] },
34
+ { title: "Our Solution", content: ["Real-time IoT integration", "Automated visit scheduling", "Centralized dashboard"] },
35
+ { title: "Market Size", content: ["$5B AgTech Market", "Growing at 15% YoY"] },
36
+ { title: "Business Model", content: ["Tiered SaaS pricing", "Enterprise custom plans"] },
37
+ { title: "Next Steps", content: ["Finalize MVP", "Launch Beta", "Raise Seed Round"] }
38
+ ]
39
+ };
40
+ return schema.parse(mockDeck) as any;
41
+ }
42
+
43
+ throw new Error("MockLLMProvider does not support this schema.");
44
+ }
45
+ }
apps/api/src/services/ai/openai-provider.ts ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import OpenAI from 'openai';
2
+ import { z } from 'zod';
3
+ import { zodResponseFormat } from 'openai/helpers/zod';
4
+ import { LLMProvider } from './types';
5
+
6
+ /**
7
+ * Real implementation using OpenAI API and Structured Outputs
8
+ */
9
+ export class OpenAIProvider implements LLMProvider {
10
+ private openai: OpenAI;
11
+
12
+ constructor(apiKey: string) {
13
+ this.openai = new OpenAI({ apiKey });
14
+ }
15
+
16
+ async generateStructuredData<T>(prompt: string, schema: z.ZodSchema<T>): Promise<T> {
17
+ console.log('[OPENAI] Generating structured data...');
18
+
19
+ // Use zodResponseFormat to force OpenAI to return exactly this JSON shape
20
+ const responseFormat = zodResponseFormat(schema as z.ZodTypeAny, 'output_schema');
21
+
22
+ const completion = await this.openai.beta.chat.completions.parse({
23
+ model: 'gpt-4o-mini', // Fast and cheap for MVP
24
+ messages: [
25
+ { role: 'system', content: 'You are an expert business consultant and document generator. Extract the requested information from the user context and output strictly valid JSON according to the schema.' },
26
+ { role: 'user', content: prompt }
27
+ ],
28
+ response_format: responseFormat,
29
+ });
30
+
31
+ const result = completion.choices[0]?.message?.parsed;
32
+
33
+ if (!result) {
34
+ throw new Error("OpenAI failed to return parsed structured data.");
35
+ }
36
+
37
+ return result as T;
38
+ }
39
+ }
apps/api/src/services/ai/types.ts ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { z } from 'zod';
2
+
3
+ // Base interface for all LLM Providers
4
+ export interface LLMProvider {
5
+ generateStructuredData<T>(prompt: string, schema: z.ZodSchema<T>): Promise<T>;
6
+ }
7
+
8
+ // -----------------------------------------------------
9
+ // Zod Schemas for Output Validation
10
+ // -----------------------------------------------------
11
+
12
+ // Schema for the MVP One Pager (PDF)
13
+ export const OnePagerSchema = z.object({
14
+ title: z.string().describe("The name of the business or project"),
15
+ tagline: z.string().describe("A catchy one-sentence summary"),
16
+ problem: z.string().describe("The core problem being solved"),
17
+ solution: z.string().describe("How the product/service solves the problem"),
18
+ targetAudience: z.string().describe("Who this is for"),
19
+ businessModel: z.string().describe("How the project makes money (e.g., Subscription, B2B)"),
20
+ callToAction: z.string().describe("The next step for the reader (e.g., 'Contact us', 'Try the beta')")
21
+ });
22
+ export type OnePagerData = z.infer<typeof OnePagerSchema>;
23
+
24
+ // Schema for a single Slide
25
+ export const SlideSchema = z.object({
26
+ title: z.string().describe("Slide title (max 5 words)"),
27
+ content: z.array(z.string()).max(5).describe("Bullet points for the slide. STRICTLY MAX 5 BULLETS. Keep them concise."),
28
+ notes: z.string().optional().describe("Speaker notes")
29
+ });
30
+ export type SlideData = z.infer<typeof SlideSchema>;
31
+
32
+ // Schema for the V1 Pitch Deck (PPTX)
33
+ export const PitchDeckSchema = z.object({
34
+ title: z.string(),
35
+ subtitle: z.string().optional(),
36
+ slides: z.array(SlideSchema).min(5).max(12).describe("The sequence of slides for the pitch deck")
37
+ });
38
+ export type PitchDeckData = z.infer<typeof PitchDeckSchema>;
apps/api/src/services/renderers/pdf-renderer.ts ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import puppeteer from 'puppeteer';
2
+ import { OnePagerData } from '../ai/types';
3
+ import { DocumentRenderer } from './types';
4
+
5
+ export class PdfOnePagerRenderer implements DocumentRenderer<OnePagerData> {
6
+ async render(data: OnePagerData): Promise<Buffer> {
7
+ // Design System Colors: Primary #1C7C54, Secondary #1B3A57, Accent #F4A261
8
+ const htmlContent = `
9
+ <!DOCTYPE html>
10
+ <html>
11
+ <head>
12
+ <meta charset="utf-8">
13
+ <style>
14
+ @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@700&family=Inter:wght@400;600&display=swap');
15
+
16
+ body {
17
+ font-family: 'Inter', sans-serif;
18
+ color: #333;
19
+ line-height: 1.6;
20
+ margin: 0;
21
+ padding: 40px;
22
+ background-color: #fff;
23
+ }
24
+
25
+ header {
26
+ text-align: center;
27
+ margin-bottom: 40px;
28
+ padding-bottom: 20px;
29
+ border-bottom: 3px solid #F4A261;
30
+ }
31
+
32
+ h1 {
33
+ font-family: 'Montserrat', sans-serif;
34
+ color: #1C7C54;
35
+ font-size: 32px;
36
+ margin: 0 0 10px 0;
37
+ text-transform: uppercase;
38
+ }
39
+
40
+ .tagline {
41
+ color: #1B3A57;
42
+ font-size: 18px;
43
+ font-style: italic;
44
+ margin: 0;
45
+ }
46
+
47
+ .section {
48
+ margin-bottom: 30px;
49
+ }
50
+
51
+ h2 {
52
+ font-family: 'Montserrat', sans-serif;
53
+ color: #1B3A57;
54
+ font-size: 20px;
55
+ border-left: 4px solid #1C7C54;
56
+ padding-left: 10px;
57
+ margin-bottom: 15px;
58
+ }
59
+
60
+ p {
61
+ font-size: 14px;
62
+ margin: 0 0 10px 0;
63
+ color: #4a5568;
64
+ }
65
+
66
+ .cta {
67
+ margin-top: 50px;
68
+ text-align: center;
69
+ background-color: #1B3A57;
70
+ color: white;
71
+ padding: 20px;
72
+ border-radius: 8px;
73
+ }
74
+
75
+ .cta p {
76
+ color: white;
77
+ font-size: 16px;
78
+ font-weight: 600;
79
+ margin: 0;
80
+ }
81
+ </style>
82
+ </head>
83
+ <body>
84
+ <header>
85
+ <h1>${data.title}</h1>
86
+ <p class="tagline">${data.tagline}</p>
87
+ </header>
88
+
89
+ <div class="main-content">
90
+ <div class="section">
91
+ <h2>The Problem</h2>
92
+ <p>${data.problem}</p>
93
+ </div>
94
+
95
+ <div class="section">
96
+ <h2>Our Solution</h2>
97
+ <p>${data.solution}</p>
98
+ </div>
99
+
100
+ <div class="section">
101
+ <h2>Target Audience</h2>
102
+ <p>${data.targetAudience}</p>
103
+ </div>
104
+
105
+ <div class="section">
106
+ <h2>Business Model</h2>
107
+ <p>${data.businessModel}</p>
108
+ </div>
109
+ </div>
110
+
111
+ <div class="cta">
112
+ <p>${data.callToAction}</p>
113
+ </div>
114
+ </body>
115
+ </html>
116
+ `;
117
+
118
+ const browser = await puppeteer.launch({
119
+ headless: true,
120
+ args: ['--no-sandbox', '--disable-setuid-sandbox'], // Required for running as root in Docker/HF
121
+ });
122
+
123
+ const page = await browser.newPage();
124
+ await page.setContent(htmlContent, { waitUntil: 'networkidle0' });
125
+
126
+ const pdfBuffer = await page.pdf({
127
+ format: 'A4',
128
+ printBackground: true,
129
+ margin: { top: '20px', right: '20px', bottom: '20px', left: '20px' }
130
+ });
131
+
132
+ await browser.close();
133
+
134
+ return pdfBuffer as Buffer;
135
+ }
136
+ }
apps/api/src/services/renderers/pptx-renderer.ts ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import PptxGenJS from 'pptxgenjs';
2
+ import { PitchDeckData, SlideData } from '../ai/types';
3
+ import { DocumentRenderer } from './types';
4
+
5
+ export class PptxDeckRenderer implements DocumentRenderer<PitchDeckData> {
6
+ async render(data: PitchDeckData): Promise<Buffer> {
7
+ const pres = new PptxGenJS();
8
+
9
+ // Define Master Slide (Design System)
10
+ // Primary: #1C7C54, Secondary: #1B3A57, Accent: #F4A261
11
+ pres.defineSlideMaster({
12
+ title: 'MASTER_SLIDE',
13
+ bkgd: 'FFFFFF',
14
+ objects: [
15
+ { rect: { x: 0, y: 0, w: '100%', h: 0.75, fill: { color: '1B3A57' } } },
16
+ { rect: { x: 0, y: 0.75, w: '100%', h: 0.05, fill: { color: 'F4A261' } } }
17
+ ]
18
+ });
19
+
20
+ // Title Slide
21
+ const titleSlide = pres.addSlide();
22
+ titleSlide.bkgd = '1B3A57'; // Dark background
23
+ titleSlide.addText(data.title.toUpperCase(), {
24
+ x: 1, y: 2, w: '80%', h: 1,
25
+ fontSize: 44, color: 'FFFFFF', bold: true, fontFace: 'Montserrat', align: 'center'
26
+ });
27
+ if (data.subtitle) {
28
+ titleSlide.addText(data.subtitle, {
29
+ x: 1, y: 3, w: '80%', h: 1,
30
+ fontSize: 24, color: 'F4A261', fontFace: 'Inter', align: 'center'
31
+ });
32
+ }
33
+
34
+ // Content Slides
35
+ data.slides.forEach((slideData: SlideData) => {
36
+ const slide = pres.addSlide({ masterName: 'MASTER_SLIDE' });
37
+
38
+ // Title
39
+ slide.addText(slideData.title, {
40
+ x: 0.5, y: 0.15, w: '90%', h: 0.5,
41
+ fontSize: 28, color: 'FFFFFF', bold: true, fontFace: 'Montserrat'
42
+ });
43
+
44
+ // Bullets (Max 5 enforced by Zod, but we render them nicely)
45
+ const bulletOptions = slideData.content.map(text => ({ text }));
46
+
47
+ slide.addText(bulletOptions, {
48
+ x: 0.5, y: 1.2, w: '90%', h: '70%',
49
+ fontSize: 20, color: '333333', fontFace: 'Inter',
50
+ bullet: { type: 'bullet', code: '2022' }, // Green bullet color not directly supported like this in older typing
51
+ valign: 'top', margin: 10, lineSpacing: 35
52
+ });
53
+
54
+ // Speaker Notes
55
+ if (slideData.notes) {
56
+ slide.addNotes(slideData.notes);
57
+ }
58
+ });
59
+
60
+ // Output to Buffer
61
+ const buffer = await pres.write({ outputType: 'nodebuffer' }) as Buffer;
62
+ return buffer;
63
+ }
64
+ }
apps/api/src/services/renderers/types.ts ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ export interface DocumentRenderer<T> {
2
+ /**
3
+ * Renders structured data into a document format (e.g. PDF buffer or PPTX buffer).
4
+ * @param data The structured JSON content
5
+ * @returns A Promise resolving to a Buffer containing the generated file.
6
+ */
7
+ render(data: T): Promise<Buffer>;
8
+ }
apps/whatsapp-worker/src/index.ts CHANGED
@@ -48,6 +48,39 @@ const worker = new Worker('whatsapp-queue', async (job: Job) => {
48
  lastActivityAt: new Date()
49
  }
50
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
52
  }
53
  } catch (error) {
 
48
  lastActivityAt: new Date()
49
  }
50
  });
51
+
52
+ // 🌟 Trigger AI Document Generation 🌟
53
+ console.log(`[WORKER] Triggering AI Document Generation for User ${userId}...`);
54
+ try {
55
+ // In a real scenario, we'd fetch the user's responses from the DB to build the context.
56
+ // For now, we pass a dummy userContext to trigger the generation flow.
57
+ const userContext = `User ${userId} completed the Business Pitch track. They want to build an AgTech SaaS.`;
58
+
59
+ const API_URL = process.env.VITE_API_URL || 'http://localhost:3001';
60
+
61
+ // Trigger OnePager (PDF)
62
+ const pdfRes = await fetch(`${API_URL}/v1/ai/onepager`, {
63
+ method: 'POST',
64
+ headers: { 'Content-Type': 'application/json' },
65
+ body: JSON.stringify({ userContext })
66
+ });
67
+ const pdfData = await pdfRes.json();
68
+
69
+ // Trigger Pitch Deck (PPTX)
70
+ const pptxRes = await fetch(`${API_URL}/v1/ai/deck`, {
71
+ method: 'POST',
72
+ headers: { 'Content-Type': 'application/json' },
73
+ body: JSON.stringify({ userContext })
74
+ });
75
+ const pptxData = await pptxRes.json();
76
+
77
+ console.log(`[AI DOCS READY] 📄 PDF: ${pdfData.url}`);
78
+ console.log(`[AI DOCS READY] 📊 PPTX: ${pptxData.url}`);
79
+
80
+ // TODO: Send these URLs back to the user via WhatsApp!
81
+ } catch (aiError) {
82
+ console.error('[WORKER] Failed to generate AI documents:', aiError);
83
+ }
84
  }
85
  }
86
  } catch (error) {
pnpm-lock.yaml CHANGED
@@ -47,7 +47,7 @@ importers:
47
  version: 18.3.7(@types/react@18.3.28)
48
  '@vitejs/plugin-react':
49
  specifier: ^4.2.1
50
- version: 4.7.0(vite@5.4.21(@types/node@20.19.33))
51
  autoprefixer:
52
  specifier: ^10.4.16
53
  version: 10.4.24(postcss@8.5.6)
@@ -62,13 +62,16 @@ importers:
62
  version: 5.9.3
63
  vite:
64
  specifier: ^5.0.8
65
- version: 5.4.21(@types/node@20.19.33)
66
 
67
  apps/api:
68
  dependencies:
69
  '@fastify/cors':
70
  specifier: ^8.0.0
71
  version: 8.5.0
 
 
 
72
  '@repo/database':
73
  specifier: workspace:*
74
  version: link:../../packages/database
@@ -81,8 +84,17 @@ importers:
81
  fastify:
82
  specifier: ^4.0.0
83
  version: 4.29.1
 
 
 
 
 
 
 
 
 
84
  zod:
85
- specifier: ^3.0.0
86
  version: 3.25.76
87
  devDependencies:
88
  '@repo/tsconfig':
@@ -127,7 +139,7 @@ importers:
127
  version: 18.3.7(@types/react@18.3.28)
128
  '@vitejs/plugin-react':
129
  specifier: ^4.2.1
130
- version: 4.7.0(vite@5.4.21(@types/node@20.19.33))
131
  autoprefixer:
132
  specifier: ^10.4.16
133
  version: 10.4.24(postcss@8.5.6)
@@ -142,7 +154,7 @@ importers:
142
  version: 5.9.3
143
  vite:
144
  specifier: ^5.0.8
145
- version: 5.4.21(@types/node@20.19.33)
146
 
147
  apps/whatsapp-worker:
148
  dependencies:
@@ -668,6 +680,11 @@ packages:
668
  '@prisma/get-platform@5.22.0':
669
  resolution: {integrity: sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==}
670
 
 
 
 
 
 
671
  '@remix-run/router@1.23.2':
672
  resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==}
673
  engines: {node: '>=14.0.0'}
@@ -800,6 +817,9 @@ packages:
800
  cpu: [x64]
801
  os: [win32]
802
 
 
 
 
803
  '@types/babel__core@7.20.5':
804
  resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
805
 
@@ -818,9 +838,18 @@ packages:
818
  '@types/node-cron@3.0.11':
819
  resolution: {integrity: sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==}
820
 
 
 
 
 
 
 
821
  '@types/node@20.19.33':
822
  resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==}
823
 
 
 
 
824
  '@types/prop-types@15.7.15':
825
  resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
826
 
@@ -832,15 +861,30 @@ packages:
832
  '@types/react@18.3.28':
833
  resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==}
834
 
 
 
 
835
  '@vitejs/plugin-react@4.7.0':
836
  resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
837
  engines: {node: ^14.18.0 || >=16.0.0}
838
  peerDependencies:
839
  vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
840
 
 
 
 
 
841
  abstract-logging@2.0.1:
842
  resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
843
 
 
 
 
 
 
 
 
 
844
  ajv-formats@2.1.1:
845
  resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
846
  peerDependencies:
@@ -860,6 +904,14 @@ packages:
860
  ajv@8.18.0:
861
  resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
862
 
 
 
 
 
 
 
 
 
863
  any-promise@1.3.0:
864
  resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
865
 
@@ -870,6 +922,16 @@ packages:
870
  arg@5.0.2:
871
  resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
872
 
 
 
 
 
 
 
 
 
 
 
873
  atomic-sleep@1.0.0:
874
  resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
875
  engines: {node: '>=8.0.0'}
@@ -884,14 +946,67 @@ packages:
884
  avvio@8.4.0:
885
  resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==}
886
 
 
 
 
 
 
 
 
 
887
  balanced-match@1.0.2:
888
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
889
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
890
  baseline-browser-mapping@2.10.0:
891
  resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==}
892
  engines: {node: '>=6.0.0'}
893
  hasBin: true
894
 
 
 
 
 
895
  binary-extensions@2.3.0:
896
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
897
  engines: {node: '>=8'}
@@ -908,15 +1023,29 @@ packages:
908
  engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
909
  hasBin: true
910
 
 
 
 
911
  buffer-from@1.1.2:
912
  resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
913
 
 
 
 
914
  bullmq@4.18.3:
915
  resolution: {integrity: sha512-H8t9vhfHEbJDaXp7aalSTe+Do+tR1nvr+lsT+jQxLhy+FFfFj/0p4aYJzADTNLdEqltuxneLVxCGVg92GkQx4w==}
916
 
917
  bullmq@5.69.3:
918
  resolution: {integrity: sha512-P9uLsR7fDvejH/1m6uur6j7U9mqY6nNt+XvhlhStOUe7jdwbZoP/c2oWNtE+8ljOlubw4pRUKymtRqkyvloc4A==}
919
 
 
 
 
 
 
 
 
 
920
  camelcase-css@2.0.1:
921
  resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
922
  engines: {node: '>= 6'}
@@ -928,10 +1057,30 @@ packages:
928
  resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
929
  engines: {node: '>= 8.10.0'}
930
 
 
 
 
 
 
 
 
 
 
931
  cluster-key-slot@1.1.2:
932
  resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
933
  engines: {node: '>=0.10.0'}
934
 
 
 
 
 
 
 
 
 
 
 
 
935
  commander@4.1.1:
936
  resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
937
  engines: {node: '>= 6'}
@@ -943,6 +1092,18 @@ packages:
943
  resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
944
  engines: {node: '>= 0.6'}
945
 
 
 
 
 
 
 
 
 
 
 
 
 
946
  cron-parser@4.9.0:
947
  resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
948
  engines: {node: '>=12.0.0'}
@@ -955,6 +1116,10 @@ packages:
955
  csstype@3.2.3:
956
  resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
957
 
 
 
 
 
958
  debug@4.4.3:
959
  resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
960
  engines: {node: '>=6.0'}
@@ -964,6 +1129,14 @@ packages:
964
  supports-color:
965
  optional: true
966
 
 
 
 
 
 
 
 
 
967
  denque@2.1.0:
968
  resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
969
  engines: {node: '>=0.10'}
@@ -972,6 +1145,9 @@ packages:
972
  resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
973
  engines: {node: '>=8'}
974
 
 
 
 
975
  didyoumean@1.2.2:
976
  resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
977
 
@@ -982,9 +1158,42 @@ packages:
982
  resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
983
  engines: {node: '>=12'}
984
 
 
 
 
 
985
  electron-to-chromium@1.5.302:
986
  resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
987
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
988
  esbuild@0.18.20:
989
  resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
990
  engines: {node: '>=12'}
@@ -999,6 +1208,36 @@ packages:
999
  resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1000
  engines: {node: '>=6'}
1001
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1002
  fast-content-type-parse@1.1.0:
1003
  resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==}
1004
 
@@ -1008,6 +1247,9 @@ packages:
1008
  fast-deep-equal@3.1.3:
1009
  resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1010
 
 
 
 
1011
  fast-glob@3.3.3:
1012
  resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
1013
  engines: {node: '>=8.6.0'}
@@ -1033,6 +1275,9 @@ packages:
1033
  fastq@1.20.1:
1034
  resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
1035
 
 
 
 
1036
  fdir@6.5.0:
1037
  resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
1038
  engines: {node: '>=12.0.0'}
@@ -1050,6 +1295,17 @@ packages:
1050
  resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==}
1051
  engines: {node: '>=14'}
1052
 
 
 
 
 
 
 
 
 
 
 
 
1053
  forwarded@0.2.0:
1054
  resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
1055
  engines: {node: '>= 0.6'}
@@ -1072,9 +1328,29 @@ packages:
1072
  resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1073
  engines: {node: '>=6.9.0'}
1074
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1075
  get-tsconfig@4.13.6:
1076
  resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
1077
 
 
 
 
 
1078
  glob-parent@5.1.2:
1079
  resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1080
  engines: {node: '>= 6'}
@@ -1088,10 +1364,51 @@ packages:
1088
  engines: {node: '>=12'}
1089
  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
1090
 
 
 
 
 
 
 
 
 
 
 
 
 
1091
  hasown@2.0.2:
1092
  resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1093
  engines: {node: '>= 0.4'}
1094
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1095
  inflight@1.0.6:
1096
  resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1097
  deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
@@ -1107,10 +1424,17 @@ packages:
1107
  resolution: {integrity: sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA==}
1108
  engines: {node: '>=12.22.0'}
1109
 
 
 
 
 
1110
  ipaddr.js@1.9.1:
1111
  resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
1112
  engines: {node: '>= 0.10'}
1113
 
 
 
 
1114
  is-binary-path@2.1.0:
1115
  resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1116
  engines: {node: '>=8'}
@@ -1123,6 +1447,10 @@ packages:
1123
  resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1124
  engines: {node: '>=0.10.0'}
1125
 
 
 
 
 
1126
  is-glob@4.0.3:
1127
  resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1128
  engines: {node: '>=0.10.0'}
@@ -1131,6 +1459,9 @@ packages:
1131
  resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1132
  engines: {node: '>=0.12.0'}
1133
 
 
 
 
1134
  jiti@1.21.7:
1135
  resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
1136
  hasBin: true
@@ -1138,11 +1469,18 @@ packages:
1138
  js-tokens@4.0.0:
1139
  resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1140
 
 
 
 
 
1141
  jsesc@3.1.0:
1142
  resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1143
  engines: {node: '>=6'}
1144
  hasBin: true
1145
 
 
 
 
1146
  json-schema-ref-resolver@1.0.1:
1147
  resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==}
1148
 
@@ -1154,6 +1492,12 @@ packages:
1154
  engines: {node: '>=6'}
1155
  hasBin: true
1156
 
 
 
 
 
 
 
1157
  light-my-request@5.14.0:
1158
  resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==}
1159
 
@@ -1180,6 +1524,10 @@ packages:
1180
  lru-cache@5.1.1:
1181
  resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1182
 
 
 
 
 
1183
  lucide-react@0.300.0:
1184
  resolution: {integrity: sha512-rQxUUCmWAvNLoAsMZ5j04b2+OJv6UuNLYMY7VK0eVlm4aTwUEjEEHc09/DipkNIlhXUSDn2xoyIzVT0uh7dRsg==}
1185
  peerDependencies:
@@ -1189,6 +1537,10 @@ packages:
1189
  resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
1190
  engines: {node: '>=12'}
1191
 
 
 
 
 
1192
  merge2@1.4.1:
1193
  resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1194
  engines: {node: '>= 8'}
@@ -1197,10 +1549,21 @@ packages:
1197
  resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1198
  engines: {node: '>=8.6'}
1199
 
 
 
 
 
 
 
 
 
1200
  minimatch@5.1.6:
1201
  resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
1202
  engines: {node: '>=10'}
1203
 
 
 
 
1204
  mnemonist@0.39.6:
1205
  resolution: {integrity: sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==}
1206
 
@@ -1225,6 +1588,10 @@ packages:
1225
  engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1226
  hasBin: true
1227
 
 
 
 
 
1228
  node-abort-controller@3.1.1:
1229
  resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
1230
 
@@ -1232,6 +1599,20 @@ packages:
1232
  resolution: {integrity: sha512-lgimEHPE/QDgFlywTd8yTR61ptugX3Qer29efeyWw2rv259HtGBNn1vZVmp8lB9uo9wC0t/AT4iGqXxia+CJFg==}
1233
  engines: {node: '>=6.0.0'}
1234
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1235
  node-gyp-build-optional-packages@5.2.2:
1236
  resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
1237
  hasBin: true
@@ -1261,9 +1642,43 @@ packages:
1261
  once@1.4.0:
1262
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1263
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1264
  path-parse@1.0.7:
1265
  resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1266
 
 
 
 
1267
  picocolors@1.1.1:
1268
  resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1269
 
@@ -1340,6 +1755,9 @@ packages:
1340
  resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
1341
  engines: {node: ^10 || ^12 || >=14}
1342
 
 
 
 
1343
  prettier@3.8.1:
1344
  resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
1345
  engines: {node: '>=14'}
@@ -1350,19 +1768,49 @@ packages:
1350
  engines: {node: '>=16.13'}
1351
  hasBin: true
1352
 
 
 
 
1353
  process-warning@3.0.0:
1354
  resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
1355
 
1356
  process-warning@5.0.0:
1357
  resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
1358
 
 
 
 
 
1359
  proxy-addr@2.0.7:
1360
  resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
1361
  engines: {node: '>= 0.10'}
1362
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1363
  queue-microtask@1.2.3:
1364
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1365
 
 
 
 
1366
  quick-format-unescaped@4.0.4:
1367
  resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
1368
 
@@ -1395,6 +1843,9 @@ packages:
1395
  read-cache@1.0.0:
1396
  resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1397
 
 
 
 
1398
  readdirp@3.6.0:
1399
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1400
  engines: {node: '>=8.10.0'}
@@ -1411,10 +1862,18 @@ packages:
1411
  resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
1412
  engines: {node: '>=4'}
1413
 
 
 
 
 
1414
  require-from-string@2.0.2:
1415
  resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
1416
  engines: {node: '>=0.10.0'}
1417
 
 
 
 
 
1418
  resolve-pkg-maps@1.0.0:
1419
  resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
1420
 
@@ -1442,6 +1901,9 @@ packages:
1442
  run-parallel@1.2.0:
1443
  resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1444
 
 
 
 
1445
  safe-regex2@3.1.0:
1446
  resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==}
1447
 
@@ -1467,6 +1929,21 @@ packages:
1467
  set-cookie-parser@2.7.2:
1468
  resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
1469
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1470
  sonic-boom@4.2.1:
1471
  resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
1472
 
@@ -1488,6 +1965,20 @@ packages:
1488
  standard-as-callback@2.1.0:
1489
  resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
1490
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1491
  sucrase@3.35.1:
1492
  resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
1493
  engines: {node: '>=16 || 14 >=14.17'}
@@ -1502,6 +1993,18 @@ packages:
1502
  engines: {node: '>=14.0.0'}
1503
  hasBin: true
1504
 
 
 
 
 
 
 
 
 
 
 
 
 
1505
  thenify-all@1.6.0:
1506
  resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1507
  engines: {node: '>=0.8'}
@@ -1512,6 +2015,9 @@ packages:
1512
  thread-stream@3.1.0:
1513
  resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
1514
 
 
 
 
1515
  tinyglobby@0.2.15:
1516
  resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
1517
  engines: {node: '>=12.0.0'}
@@ -1524,6 +2030,9 @@ packages:
1524
  resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
1525
  engines: {node: '>=12'}
1526
 
 
 
 
1527
  ts-interface-checker@0.1.13:
1528
  resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1529
 
@@ -1573,6 +2082,12 @@ packages:
1573
  engines: {node: '>=14.17'}
1574
  hasBin: true
1575
 
 
 
 
 
 
 
1576
  undici-types@6.21.0:
1577
  resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1578
 
@@ -1582,6 +2097,9 @@ packages:
1582
  peerDependencies:
1583
  browserslist: '>= 4.21.0'
1584
 
 
 
 
1585
  util-deprecate@1.0.2:
1586
  resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1587
 
@@ -1624,12 +2142,56 @@ packages:
1624
  terser:
1625
  optional: true
1626
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1627
  wrappy@1.0.2:
1628
  resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1629
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1630
  yallist@3.1.1:
1631
  resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1632
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1633
  zod@3.25.76:
1634
  resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
1635
 
@@ -1983,6 +2545,22 @@ snapshots:
1983
  dependencies:
1984
  '@prisma/debug': 5.22.0
1985
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1986
  '@remix-run/router@1.23.2': {}
1987
 
1988
  '@rolldown/pluginutils@1.0.0-beta.27': {}
@@ -2062,6 +2640,8 @@ snapshots:
2062
  '@rollup/rollup-win32-x64-msvc@4.57.1':
2063
  optional: true
2064
 
 
 
2065
  '@types/babel__core@7.20.5':
2066
  dependencies:
2067
  '@babel/parser': 7.29.0
@@ -2087,10 +2667,24 @@ snapshots:
2087
 
2088
  '@types/node-cron@3.0.11': {}
2089
 
 
 
 
 
 
 
 
 
 
2090
  '@types/node@20.19.33':
2091
  dependencies:
2092
  undici-types: 6.21.0
2093
 
 
 
 
 
 
2094
  '@types/prop-types@15.7.15': {}
2095
 
2096
  '@types/react-dom@18.3.7(@types/react@18.3.28)':
@@ -2102,7 +2696,12 @@ snapshots:
2102
  '@types/prop-types': 15.7.15
2103
  csstype: 3.2.3
2104
 
2105
- '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.19.33))':
 
 
 
 
 
2106
  dependencies:
2107
  '@babel/core': 7.29.0
2108
  '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -2110,12 +2709,22 @@ snapshots:
2110
  '@rolldown/pluginutils': 1.0.0-beta.27
2111
  '@types/babel__core': 7.20.5
2112
  react-refresh: 0.17.0
2113
- vite: 5.4.21(@types/node@20.19.33)
2114
  transitivePeerDependencies:
2115
  - supports-color
2116
 
 
 
 
 
2117
  abstract-logging@2.0.1: {}
2118
 
 
 
 
 
 
 
2119
  ajv-formats@2.1.1(ajv@8.18.0):
2120
  optionalDependencies:
2121
  ajv: 8.18.0
@@ -2131,6 +2740,12 @@ snapshots:
2131
  json-schema-traverse: 1.0.0
2132
  require-from-string: 2.0.2
2133
 
 
 
 
 
 
 
2134
  any-promise@1.3.0: {}
2135
 
2136
  anymatch@3.1.3:
@@ -2140,6 +2755,14 @@ snapshots:
2140
 
2141
  arg@5.0.2: {}
2142
 
 
 
 
 
 
 
 
 
2143
  atomic-sleep@1.0.0: {}
2144
 
2145
  autoprefixer@10.4.24(postcss@8.5.6):
@@ -2156,10 +2779,54 @@ snapshots:
2156
  '@fastify/error': 3.4.1
2157
  fastq: 1.20.1
2158
 
 
 
2159
  balanced-match@1.0.2: {}
2160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2161
  baseline-browser-mapping@2.10.0: {}
2162
 
 
 
2163
  binary-extensions@2.3.0: {}
2164
 
2165
  brace-expansion@2.0.2:
@@ -2178,8 +2845,15 @@ snapshots:
2178
  node-releases: 2.0.27
2179
  update-browserslist-db: 1.2.3(browserslist@4.28.1)
2180
 
 
 
2181
  buffer-from@1.1.2: {}
2182
 
 
 
 
 
 
2183
  bullmq@4.18.3:
2184
  dependencies:
2185
  cron-parser: 4.9.0
@@ -2206,6 +2880,13 @@ snapshots:
2206
  transitivePeerDependencies:
2207
  - supports-color
2208
 
 
 
 
 
 
 
 
2209
  camelcase-css@2.0.1: {}
2210
 
2211
  caniuse-lite@1.0.30001770: {}
@@ -2222,14 +2903,48 @@ snapshots:
2222
  optionalDependencies:
2223
  fsevents: 2.3.3
2224
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2225
  cluster-key-slot@1.1.2: {}
2226
 
 
 
 
 
 
 
 
 
 
 
2227
  commander@4.1.1: {}
2228
 
2229
  convert-source-map@2.0.0: {}
2230
 
2231
  cookie@0.7.2: {}
2232
 
 
 
 
 
 
 
 
 
 
 
 
2233
  cron-parser@4.9.0:
2234
  dependencies:
2235
  luxon: 3.7.2
@@ -2238,23 +2953,68 @@ snapshots:
2238
 
2239
  csstype@3.2.3: {}
2240
 
 
 
2241
  debug@4.4.3:
2242
  dependencies:
2243
  ms: 2.1.3
2244
 
 
 
 
 
 
 
 
 
2245
  denque@2.1.0: {}
2246
 
2247
  detect-libc@2.1.2:
2248
  optional: true
2249
 
 
 
2250
  didyoumean@1.2.2: {}
2251
 
2252
  dlv@1.1.3: {}
2253
 
2254
  dotenv@16.6.1: {}
2255
 
 
 
 
 
 
 
2256
  electron-to-chromium@1.5.302: {}
2257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2258
  esbuild@0.18.20:
2259
  optionalDependencies:
2260
  '@esbuild/android-arm': 0.18.20
@@ -2308,12 +3068,46 @@ snapshots:
2308
 
2309
  escalade@3.2.0: {}
2310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2311
  fast-content-type-parse@1.1.0: {}
2312
 
2313
  fast-decode-uri-component@1.0.1: {}
2314
 
2315
  fast-deep-equal@3.1.3: {}
2316
 
 
 
2317
  fast-glob@3.3.3:
2318
  dependencies:
2319
  '@nodelib/fs.stat': 2.0.5
@@ -2365,6 +3159,10 @@ snapshots:
2365
  dependencies:
2366
  reusify: 1.1.0
2367
 
 
 
 
 
2368
  fdir@6.5.0(picomatch@4.0.3):
2369
  optionalDependencies:
2370
  picomatch: 4.0.3
@@ -2379,6 +3177,21 @@ snapshots:
2379
  fast-querystring: 1.1.2
2380
  safe-regex2: 3.1.0
2381
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2382
  forwarded@0.2.0: {}
2383
 
2384
  fraction.js@5.3.4: {}
@@ -2392,10 +3205,42 @@ snapshots:
2392
 
2393
  gensync@1.0.0-beta.2: {}
2394
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2395
  get-tsconfig@4.13.6:
2396
  dependencies:
2397
  resolve-pkg-maps: 1.0.0
2398
 
 
 
 
 
 
 
 
 
2399
  glob-parent@5.1.2:
2400
  dependencies:
2401
  is-glob: 4.0.3
@@ -2412,10 +3257,51 @@ snapshots:
2412
  minimatch: 5.1.6
2413
  once: 1.4.0
2414
 
 
 
 
 
 
 
 
 
2415
  hasown@2.0.2:
2416
  dependencies:
2417
  function-bind: 1.1.2
2418
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2419
  inflight@1.0.6:
2420
  dependencies:
2421
  once: 1.4.0
@@ -2451,8 +3337,12 @@ snapshots:
2451
  transitivePeerDependencies:
2452
  - supports-color
2453
 
 
 
2454
  ipaddr.js@1.9.1: {}
2455
 
 
 
2456
  is-binary-path@2.1.0:
2457
  dependencies:
2458
  binary-extensions: 2.3.0
@@ -2463,18 +3353,28 @@ snapshots:
2463
 
2464
  is-extglob@2.1.1: {}
2465
 
 
 
2466
  is-glob@4.0.3:
2467
  dependencies:
2468
  is-extglob: 2.1.1
2469
 
2470
  is-number@7.0.0: {}
2471
 
 
 
2472
  jiti@1.21.7: {}
2473
 
2474
  js-tokens@4.0.0: {}
2475
 
 
 
 
 
2476
  jsesc@3.1.0: {}
2477
 
 
 
2478
  json-schema-ref-resolver@1.0.1:
2479
  dependencies:
2480
  fast-deep-equal: 3.1.3
@@ -2483,6 +3383,17 @@ snapshots:
2483
 
2484
  json5@2.2.3: {}
2485
 
 
 
 
 
 
 
 
 
 
 
 
2486
  light-my-request@5.14.0:
2487
  dependencies:
2488
  cookie: 0.7.2
@@ -2507,12 +3418,16 @@ snapshots:
2507
  dependencies:
2508
  yallist: 3.1.1
2509
 
 
 
2510
  lucide-react@0.300.0(react@18.3.1):
2511
  dependencies:
2512
  react: 18.3.1
2513
 
2514
  luxon@3.7.2: {}
2515
 
 
 
2516
  merge2@1.4.1: {}
2517
 
2518
  micromatch@4.0.8:
@@ -2520,10 +3435,18 @@ snapshots:
2520
  braces: 3.0.3
2521
  picomatch: 2.3.1
2522
 
 
 
 
 
 
 
2523
  minimatch@5.1.6:
2524
  dependencies:
2525
  brace-expansion: 2.0.2
2526
 
 
 
2527
  mnemonist@0.39.6:
2528
  dependencies:
2529
  obliterator: 2.0.5
@@ -2558,10 +3481,18 @@ snapshots:
2558
 
2559
  nanoid@3.3.11: {}
2560
 
 
 
2561
  node-abort-controller@3.1.1: {}
2562
 
2563
  node-cron@4.2.1: {}
2564
 
 
 
 
 
 
 
2565
  node-gyp-build-optional-packages@5.2.2:
2566
  dependencies:
2567
  detect-libc: 2.1.2
@@ -2583,8 +3514,56 @@ snapshots:
2583
  dependencies:
2584
  wrappy: 1.0.2
2585
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2586
  path-parse@1.0.7: {}
2587
 
 
 
2588
  picocolors@1.1.1: {}
2589
 
2590
  picomatch@2.3.1: {}
@@ -2652,6 +3631,13 @@ snapshots:
2652
  picocolors: 1.1.1
2653
  source-map-js: 1.2.1
2654
 
 
 
 
 
 
 
 
2655
  prettier@3.8.1: {}
2656
 
2657
  prisma@5.22.0:
@@ -2660,17 +3646,75 @@ snapshots:
2660
  optionalDependencies:
2661
  fsevents: 2.3.3
2662
 
 
 
2663
  process-warning@3.0.0: {}
2664
 
2665
  process-warning@5.0.0: {}
2666
 
 
 
2667
  proxy-addr@2.0.7:
2668
  dependencies:
2669
  forwarded: 0.2.0
2670
  ipaddr.js: 1.9.1
2671
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2672
  queue-microtask@1.2.3: {}
2673
 
 
 
 
 
2674
  quick-format-unescaped@4.0.4: {}
2675
 
2676
  react-dom@18.3.1(react@18.3.1):
@@ -2701,6 +3745,16 @@ snapshots:
2701
  dependencies:
2702
  pify: 2.3.0
2703
 
 
 
 
 
 
 
 
 
 
 
2704
  readdirp@3.6.0:
2705
  dependencies:
2706
  picomatch: 2.3.1
@@ -2713,8 +3767,12 @@ snapshots:
2713
  dependencies:
2714
  redis-errors: 1.2.0
2715
 
 
 
2716
  require-from-string@2.0.2: {}
2717
 
 
 
2718
  resolve-pkg-maps@1.0.0: {}
2719
 
2720
  resolve@1.22.11:
@@ -2764,6 +3822,8 @@ snapshots:
2764
  dependencies:
2765
  queue-microtask: 1.2.3
2766
 
 
 
2767
  safe-regex2@3.1.0:
2768
  dependencies:
2769
  ret: 0.4.3
@@ -2782,6 +3842,23 @@ snapshots:
2782
 
2783
  set-cookie-parser@2.7.2: {}
2784
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2785
  sonic-boom@4.2.1:
2786
  dependencies:
2787
  atomic-sleep: 1.0.0
@@ -2799,6 +3876,29 @@ snapshots:
2799
 
2800
  standard-as-callback@2.1.0: {}
2801
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2802
  sucrase@3.35.1:
2803
  dependencies:
2804
  '@jridgewell/gen-mapping': 0.3.13
@@ -2839,6 +3939,41 @@ snapshots:
2839
  - tsx
2840
  - yaml
2841
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2842
  thenify-all@1.6.0:
2843
  dependencies:
2844
  thenify: 3.3.1
@@ -2851,6 +3986,8 @@ snapshots:
2851
  dependencies:
2852
  real-require: 0.2.0
2853
 
 
 
2854
  tinyglobby@0.2.15:
2855
  dependencies:
2856
  fdir: 6.5.0(picomatch@4.0.3)
@@ -2862,6 +3999,8 @@ snapshots:
2862
 
2863
  toad-cache@3.7.0: {}
2864
 
 
 
2865
  ts-interface-checker@0.1.13: {}
2866
 
2867
  tslib@2.8.1: {}
@@ -2903,6 +4042,13 @@ snapshots:
2903
 
2904
  typescript@5.9.3: {}
2905
 
 
 
 
 
 
 
 
2906
  undici-types@6.21.0: {}
2907
 
2908
  update-browserslist-db@1.2.3(browserslist@4.28.1):
@@ -2911,23 +4057,63 @@ snapshots:
2911
  escalade: 3.2.0
2912
  picocolors: 1.1.1
2913
 
 
 
2914
  util-deprecate@1.0.2: {}
2915
 
2916
  uuid@11.1.0: {}
2917
 
2918
  uuid@9.0.1: {}
2919
 
2920
- vite@5.4.21(@types/node@20.19.33):
2921
  dependencies:
2922
  esbuild: 0.21.5
2923
  postcss: 8.5.6
2924
  rollup: 4.57.1
2925
  optionalDependencies:
2926
- '@types/node': 20.19.33
2927
  fsevents: 2.3.3
2928
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2929
  wrappy@1.0.2: {}
2930
 
 
 
 
 
2931
  yallist@3.1.1: {}
2932
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2933
  zod@3.25.76: {}
 
47
  version: 18.3.7(@types/react@18.3.28)
48
  '@vitejs/plugin-react':
49
  specifier: ^4.2.1
50
+ version: 4.7.0(vite@5.4.21(@types/node@22.19.11))
51
  autoprefixer:
52
  specifier: ^10.4.16
53
  version: 10.4.24(postcss@8.5.6)
 
62
  version: 5.9.3
63
  vite:
64
  specifier: ^5.0.8
65
+ version: 5.4.21(@types/node@22.19.11)
66
 
67
  apps/api:
68
  dependencies:
69
  '@fastify/cors':
70
  specifier: ^8.0.0
71
  version: 8.5.0
72
+ '@prisma/client':
73
+ specifier: ^5.0.0
74
+ version: 5.22.0(prisma@5.22.0)
75
  '@repo/database':
76
  specifier: workspace:*
77
  version: link:../../packages/database
 
84
  fastify:
85
  specifier: ^4.0.0
86
  version: 4.29.1
87
+ openai:
88
+ specifier: ^4.0.0
89
+ version: 4.104.0(ws@8.19.0)(zod@3.25.76)
90
+ pptxgenjs:
91
+ specifier: ^3.12.0
92
+ version: 3.12.0
93
+ puppeteer:
94
+ specifier: ^22.0.0
95
+ version: 22.15.0(typescript@5.9.3)
96
  zod:
97
+ specifier: ^3.25.76
98
  version: 3.25.76
99
  devDependencies:
100
  '@repo/tsconfig':
 
139
  version: 18.3.7(@types/react@18.3.28)
140
  '@vitejs/plugin-react':
141
  specifier: ^4.2.1
142
+ version: 4.7.0(vite@5.4.21(@types/node@22.19.11))
143
  autoprefixer:
144
  specifier: ^10.4.16
145
  version: 10.4.24(postcss@8.5.6)
 
154
  version: 5.9.3
155
  vite:
156
  specifier: ^5.0.8
157
+ version: 5.4.21(@types/node@22.19.11)
158
 
159
  apps/whatsapp-worker:
160
  dependencies:
 
680
  '@prisma/get-platform@5.22.0':
681
  resolution: {integrity: sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==}
682
 
683
+ '@puppeteer/browsers@2.3.0':
684
+ resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==}
685
+ engines: {node: '>=18'}
686
+ hasBin: true
687
+
688
  '@remix-run/router@1.23.2':
689
  resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==}
690
  engines: {node: '>=14.0.0'}
 
817
  cpu: [x64]
818
  os: [win32]
819
 
820
+ '@tootallnate/quickjs-emscripten@0.23.0':
821
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
822
+
823
  '@types/babel__core@7.20.5':
824
  resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
825
 
 
838
  '@types/node-cron@3.0.11':
839
  resolution: {integrity: sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==}
840
 
841
+ '@types/node-fetch@2.6.13':
842
+ resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==}
843
+
844
+ '@types/node@18.19.130':
845
+ resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==}
846
+
847
  '@types/node@20.19.33':
848
  resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==}
849
 
850
+ '@types/node@22.19.11':
851
+ resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==}
852
+
853
  '@types/prop-types@15.7.15':
854
  resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
855
 
 
861
  '@types/react@18.3.28':
862
  resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==}
863
 
864
+ '@types/yauzl@2.10.3':
865
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
866
+
867
  '@vitejs/plugin-react@4.7.0':
868
  resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
869
  engines: {node: ^14.18.0 || >=16.0.0}
870
  peerDependencies:
871
  vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
872
 
873
+ abort-controller@3.0.0:
874
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
875
+ engines: {node: '>=6.5'}
876
+
877
  abstract-logging@2.0.1:
878
  resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
879
 
880
+ agent-base@7.1.4:
881
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
882
+ engines: {node: '>= 14'}
883
+
884
+ agentkeepalive@4.6.0:
885
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
886
+ engines: {node: '>= 8.0.0'}
887
+
888
  ajv-formats@2.1.1:
889
  resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
890
  peerDependencies:
 
904
  ajv@8.18.0:
905
  resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
906
 
907
+ ansi-regex@5.0.1:
908
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
909
+ engines: {node: '>=8'}
910
+
911
+ ansi-styles@4.3.0:
912
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
913
+ engines: {node: '>=8'}
914
+
915
  any-promise@1.3.0:
916
  resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
917
 
 
922
  arg@5.0.2:
923
  resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
924
 
925
+ argparse@2.0.1:
926
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
927
+
928
+ ast-types@0.13.4:
929
+ resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
930
+ engines: {node: '>=4'}
931
+
932
+ asynckit@0.4.0:
933
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
934
+
935
  atomic-sleep@1.0.0:
936
  resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
937
  engines: {node: '>=8.0.0'}
 
946
  avvio@8.4.0:
947
  resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==}
948
 
949
+ b4a@1.8.0:
950
+ resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
951
+ peerDependencies:
952
+ react-native-b4a: '*'
953
+ peerDependenciesMeta:
954
+ react-native-b4a:
955
+ optional: true
956
+
957
  balanced-match@1.0.2:
958
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
959
 
960
+ bare-events@2.8.2:
961
+ resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
962
+ peerDependencies:
963
+ bare-abort-controller: '*'
964
+ peerDependenciesMeta:
965
+ bare-abort-controller:
966
+ optional: true
967
+
968
+ bare-fs@4.5.4:
969
+ resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==}
970
+ engines: {bare: '>=1.16.0'}
971
+ peerDependencies:
972
+ bare-buffer: '*'
973
+ peerDependenciesMeta:
974
+ bare-buffer:
975
+ optional: true
976
+
977
+ bare-os@3.6.2:
978
+ resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==}
979
+ engines: {bare: '>=1.14.0'}
980
+
981
+ bare-path@3.0.0:
982
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
983
+
984
+ bare-stream@2.8.0:
985
+ resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==}
986
+ peerDependencies:
987
+ bare-buffer: '*'
988
+ bare-events: '*'
989
+ peerDependenciesMeta:
990
+ bare-buffer:
991
+ optional: true
992
+ bare-events:
993
+ optional: true
994
+
995
+ bare-url@2.3.2:
996
+ resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==}
997
+
998
+ base64-js@1.5.1:
999
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
1000
+
1001
  baseline-browser-mapping@2.10.0:
1002
  resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==}
1003
  engines: {node: '>=6.0.0'}
1004
  hasBin: true
1005
 
1006
+ basic-ftp@5.1.0:
1007
+ resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==}
1008
+ engines: {node: '>=10.0.0'}
1009
+
1010
  binary-extensions@2.3.0:
1011
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
1012
  engines: {node: '>=8'}
 
1023
  engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1024
  hasBin: true
1025
 
1026
+ buffer-crc32@0.2.13:
1027
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
1028
+
1029
  buffer-from@1.1.2:
1030
  resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1031
 
1032
+ buffer@5.7.1:
1033
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
1034
+
1035
  bullmq@4.18.3:
1036
  resolution: {integrity: sha512-H8t9vhfHEbJDaXp7aalSTe+Do+tR1nvr+lsT+jQxLhy+FFfFj/0p4aYJzADTNLdEqltuxneLVxCGVg92GkQx4w==}
1037
 
1038
  bullmq@5.69.3:
1039
  resolution: {integrity: sha512-P9uLsR7fDvejH/1m6uur6j7U9mqY6nNt+XvhlhStOUe7jdwbZoP/c2oWNtE+8ljOlubw4pRUKymtRqkyvloc4A==}
1040
 
1041
+ call-bind-apply-helpers@1.0.2:
1042
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
1043
+ engines: {node: '>= 0.4'}
1044
+
1045
+ callsites@3.1.0:
1046
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1047
+ engines: {node: '>=6'}
1048
+
1049
  camelcase-css@2.0.1:
1050
  resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
1051
  engines: {node: '>= 6'}
 
1057
  resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
1058
  engines: {node: '>= 8.10.0'}
1059
 
1060
+ chromium-bidi@0.6.3:
1061
+ resolution: {integrity: sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==}
1062
+ peerDependencies:
1063
+ devtools-protocol: '*'
1064
+
1065
+ cliui@8.0.1:
1066
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
1067
+ engines: {node: '>=12'}
1068
+
1069
  cluster-key-slot@1.1.2:
1070
  resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
1071
  engines: {node: '>=0.10.0'}
1072
 
1073
+ color-convert@2.0.1:
1074
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1075
+ engines: {node: '>=7.0.0'}
1076
+
1077
+ color-name@1.1.4:
1078
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1079
+
1080
+ combined-stream@1.0.8:
1081
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
1082
+ engines: {node: '>= 0.8'}
1083
+
1084
  commander@4.1.1:
1085
  resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
1086
  engines: {node: '>= 6'}
 
1092
  resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
1093
  engines: {node: '>= 0.6'}
1094
 
1095
+ core-util-is@1.0.3:
1096
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
1097
+
1098
+ cosmiconfig@9.0.0:
1099
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
1100
+ engines: {node: '>=14'}
1101
+ peerDependencies:
1102
+ typescript: '>=4.9.5'
1103
+ peerDependenciesMeta:
1104
+ typescript:
1105
+ optional: true
1106
+
1107
  cron-parser@4.9.0:
1108
  resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
1109
  engines: {node: '>=12.0.0'}
 
1116
  csstype@3.2.3:
1117
  resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
1118
 
1119
+ data-uri-to-buffer@6.0.2:
1120
+ resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
1121
+ engines: {node: '>= 14'}
1122
+
1123
  debug@4.4.3:
1124
  resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
1125
  engines: {node: '>=6.0'}
 
1129
  supports-color:
1130
  optional: true
1131
 
1132
+ degenerator@5.0.1:
1133
+ resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
1134
+ engines: {node: '>= 14'}
1135
+
1136
+ delayed-stream@1.0.0:
1137
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
1138
+ engines: {node: '>=0.4.0'}
1139
+
1140
  denque@2.1.0:
1141
  resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
1142
  engines: {node: '>=0.10'}
 
1145
  resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
1146
  engines: {node: '>=8'}
1147
 
1148
+ devtools-protocol@0.0.1312386:
1149
+ resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==}
1150
+
1151
  didyoumean@1.2.2:
1152
  resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
1153
 
 
1158
  resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
1159
  engines: {node: '>=12'}
1160
 
1161
+ dunder-proto@1.0.1:
1162
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
1163
+ engines: {node: '>= 0.4'}
1164
+
1165
  electron-to-chromium@1.5.302:
1166
  resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
1167
 
1168
+ emoji-regex@8.0.0:
1169
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1170
+
1171
+ end-of-stream@1.4.5:
1172
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
1173
+
1174
+ env-paths@2.2.1:
1175
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
1176
+ engines: {node: '>=6'}
1177
+
1178
+ error-ex@1.3.4:
1179
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
1180
+
1181
+ es-define-property@1.0.1:
1182
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
1183
+ engines: {node: '>= 0.4'}
1184
+
1185
+ es-errors@1.3.0:
1186
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
1187
+ engines: {node: '>= 0.4'}
1188
+
1189
+ es-object-atoms@1.1.1:
1190
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
1191
+ engines: {node: '>= 0.4'}
1192
+
1193
+ es-set-tostringtag@2.1.0:
1194
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
1195
+ engines: {node: '>= 0.4'}
1196
+
1197
  esbuild@0.18.20:
1198
  resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
1199
  engines: {node: '>=12'}
 
1208
  resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1209
  engines: {node: '>=6'}
1210
 
1211
+ escodegen@2.1.0:
1212
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
1213
+ engines: {node: '>=6.0'}
1214
+ hasBin: true
1215
+
1216
+ esprima@4.0.1:
1217
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
1218
+ engines: {node: '>=4'}
1219
+ hasBin: true
1220
+
1221
+ estraverse@5.3.0:
1222
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1223
+ engines: {node: '>=4.0'}
1224
+
1225
+ esutils@2.0.3:
1226
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1227
+ engines: {node: '>=0.10.0'}
1228
+
1229
+ event-target-shim@5.0.1:
1230
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
1231
+ engines: {node: '>=6'}
1232
+
1233
+ events-universal@1.0.1:
1234
+ resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
1235
+
1236
+ extract-zip@2.0.1:
1237
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
1238
+ engines: {node: '>= 10.17.0'}
1239
+ hasBin: true
1240
+
1241
  fast-content-type-parse@1.1.0:
1242
  resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==}
1243
 
 
1247
  fast-deep-equal@3.1.3:
1248
  resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1249
 
1250
+ fast-fifo@1.3.2:
1251
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
1252
+
1253
  fast-glob@3.3.3:
1254
  resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
1255
  engines: {node: '>=8.6.0'}
 
1275
  fastq@1.20.1:
1276
  resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
1277
 
1278
+ fd-slicer@1.1.0:
1279
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
1280
+
1281
  fdir@6.5.0:
1282
  resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
1283
  engines: {node: '>=12.0.0'}
 
1295
  resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==}
1296
  engines: {node: '>=14'}
1297
 
1298
+ form-data-encoder@1.7.2:
1299
+ resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
1300
+
1301
+ form-data@4.0.5:
1302
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
1303
+ engines: {node: '>= 6'}
1304
+
1305
+ formdata-node@4.4.1:
1306
+ resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
1307
+ engines: {node: '>= 12.20'}
1308
+
1309
  forwarded@0.2.0:
1310
  resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
1311
  engines: {node: '>= 0.6'}
 
1328
  resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1329
  engines: {node: '>=6.9.0'}
1330
 
1331
+ get-caller-file@2.0.5:
1332
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
1333
+ engines: {node: 6.* || 8.* || >= 10.*}
1334
+
1335
+ get-intrinsic@1.3.0:
1336
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
1337
+ engines: {node: '>= 0.4'}
1338
+
1339
+ get-proto@1.0.1:
1340
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
1341
+ engines: {node: '>= 0.4'}
1342
+
1343
+ get-stream@5.2.0:
1344
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
1345
+ engines: {node: '>=8'}
1346
+
1347
  get-tsconfig@4.13.6:
1348
  resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
1349
 
1350
+ get-uri@6.0.5:
1351
+ resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==}
1352
+ engines: {node: '>= 14'}
1353
+
1354
  glob-parent@5.1.2:
1355
  resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1356
  engines: {node: '>= 6'}
 
1364
  engines: {node: '>=12'}
1365
  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
1366
 
1367
+ gopd@1.2.0:
1368
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
1369
+ engines: {node: '>= 0.4'}
1370
+
1371
+ has-symbols@1.1.0:
1372
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
1373
+ engines: {node: '>= 0.4'}
1374
+
1375
+ has-tostringtag@1.0.2:
1376
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
1377
+ engines: {node: '>= 0.4'}
1378
+
1379
  hasown@2.0.2:
1380
  resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1381
  engines: {node: '>= 0.4'}
1382
 
1383
+ http-proxy-agent@7.0.2:
1384
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
1385
+ engines: {node: '>= 14'}
1386
+
1387
+ https-proxy-agent@7.0.6:
1388
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
1389
+ engines: {node: '>= 14'}
1390
+
1391
+ https@1.0.0:
1392
+ resolution: {integrity: sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==}
1393
+
1394
+ humanize-ms@1.2.1:
1395
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
1396
+
1397
+ ieee754@1.2.1:
1398
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1399
+
1400
+ image-size@1.2.1:
1401
+ resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==}
1402
+ engines: {node: '>=16.x'}
1403
+ hasBin: true
1404
+
1405
+ immediate@3.0.6:
1406
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
1407
+
1408
+ import-fresh@3.3.1:
1409
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1410
+ engines: {node: '>=6'}
1411
+
1412
  inflight@1.0.6:
1413
  resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1414
  deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
 
1424
  resolution: {integrity: sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA==}
1425
  engines: {node: '>=12.22.0'}
1426
 
1427
+ ip-address@10.1.0:
1428
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
1429
+ engines: {node: '>= 12'}
1430
+
1431
  ipaddr.js@1.9.1:
1432
  resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
1433
  engines: {node: '>= 0.10'}
1434
 
1435
+ is-arrayish@0.2.1:
1436
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
1437
+
1438
  is-binary-path@2.1.0:
1439
  resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1440
  engines: {node: '>=8'}
 
1447
  resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1448
  engines: {node: '>=0.10.0'}
1449
 
1450
+ is-fullwidth-code-point@3.0.0:
1451
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1452
+ engines: {node: '>=8'}
1453
+
1454
  is-glob@4.0.3:
1455
  resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1456
  engines: {node: '>=0.10.0'}
 
1459
  resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1460
  engines: {node: '>=0.12.0'}
1461
 
1462
+ isarray@1.0.0:
1463
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
1464
+
1465
  jiti@1.21.7:
1466
  resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
1467
  hasBin: true
 
1469
  js-tokens@4.0.0:
1470
  resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1471
 
1472
+ js-yaml@4.1.1:
1473
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
1474
+ hasBin: true
1475
+
1476
  jsesc@3.1.0:
1477
  resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1478
  engines: {node: '>=6'}
1479
  hasBin: true
1480
 
1481
+ json-parse-even-better-errors@2.3.1:
1482
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
1483
+
1484
  json-schema-ref-resolver@1.0.1:
1485
  resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==}
1486
 
 
1492
  engines: {node: '>=6'}
1493
  hasBin: true
1494
 
1495
+ jszip@3.10.1:
1496
+ resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
1497
+
1498
+ lie@3.3.0:
1499
+ resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
1500
+
1501
  light-my-request@5.14.0:
1502
  resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==}
1503
 
 
1524
  lru-cache@5.1.1:
1525
  resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1526
 
1527
+ lru-cache@7.18.3:
1528
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
1529
+ engines: {node: '>=12'}
1530
+
1531
  lucide-react@0.300.0:
1532
  resolution: {integrity: sha512-rQxUUCmWAvNLoAsMZ5j04b2+OJv6UuNLYMY7VK0eVlm4aTwUEjEEHc09/DipkNIlhXUSDn2xoyIzVT0uh7dRsg==}
1533
  peerDependencies:
 
1537
  resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
1538
  engines: {node: '>=12'}
1539
 
1540
+ math-intrinsics@1.1.0:
1541
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
1542
+ engines: {node: '>= 0.4'}
1543
+
1544
  merge2@1.4.1:
1545
  resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1546
  engines: {node: '>= 8'}
 
1549
  resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1550
  engines: {node: '>=8.6'}
1551
 
1552
+ mime-db@1.52.0:
1553
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1554
+ engines: {node: '>= 0.6'}
1555
+
1556
+ mime-types@2.1.35:
1557
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1558
+ engines: {node: '>= 0.6'}
1559
+
1560
  minimatch@5.1.6:
1561
  resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
1562
  engines: {node: '>=10'}
1563
 
1564
+ mitt@3.0.1:
1565
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
1566
+
1567
  mnemonist@0.39.6:
1568
  resolution: {integrity: sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==}
1569
 
 
1588
  engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1589
  hasBin: true
1590
 
1591
+ netmask@2.0.2:
1592
+ resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
1593
+ engines: {node: '>= 0.4.0'}
1594
+
1595
  node-abort-controller@3.1.1:
1596
  resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
1597
 
 
1599
  resolution: {integrity: sha512-lgimEHPE/QDgFlywTd8yTR61ptugX3Qer29efeyWw2rv259HtGBNn1vZVmp8lB9uo9wC0t/AT4iGqXxia+CJFg==}
1600
  engines: {node: '>=6.0.0'}
1601
 
1602
+ node-domexception@1.0.0:
1603
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
1604
+ engines: {node: '>=10.5.0'}
1605
+ deprecated: Use your platform's native DOMException instead
1606
+
1607
+ node-fetch@2.7.0:
1608
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
1609
+ engines: {node: 4.x || >=6.0.0}
1610
+ peerDependencies:
1611
+ encoding: ^0.1.0
1612
+ peerDependenciesMeta:
1613
+ encoding:
1614
+ optional: true
1615
+
1616
  node-gyp-build-optional-packages@5.2.2:
1617
  resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
1618
  hasBin: true
 
1642
  once@1.4.0:
1643
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1644
 
1645
+ openai@4.104.0:
1646
+ resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==}
1647
+ hasBin: true
1648
+ peerDependencies:
1649
+ ws: ^8.18.0
1650
+ zod: ^3.23.8
1651
+ peerDependenciesMeta:
1652
+ ws:
1653
+ optional: true
1654
+ zod:
1655
+ optional: true
1656
+
1657
+ pac-proxy-agent@7.2.0:
1658
+ resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==}
1659
+ engines: {node: '>= 14'}
1660
+
1661
+ pac-resolver@7.0.1:
1662
+ resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
1663
+ engines: {node: '>= 14'}
1664
+
1665
+ pako@1.0.11:
1666
+ resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
1667
+
1668
+ parent-module@1.0.1:
1669
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1670
+ engines: {node: '>=6'}
1671
+
1672
+ parse-json@5.2.0:
1673
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
1674
+ engines: {node: '>=8'}
1675
+
1676
  path-parse@1.0.7:
1677
  resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1678
 
1679
+ pend@1.2.0:
1680
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
1681
+
1682
  picocolors@1.1.1:
1683
  resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1684
 
 
1755
  resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
1756
  engines: {node: ^10 || ^12 || >=14}
1757
 
1758
+ pptxgenjs@3.12.0:
1759
+ resolution: {integrity: sha512-ZozkYKWb1MoPR4ucw3/aFYlHkVIJxo9czikEclcUVnS4Iw/M+r+TEwdlB3fyAWO9JY1USxJDt0Y0/r15IR/RUA==}
1760
+
1761
  prettier@3.8.1:
1762
  resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
1763
  engines: {node: '>=14'}
 
1768
  engines: {node: '>=16.13'}
1769
  hasBin: true
1770
 
1771
+ process-nextick-args@2.0.1:
1772
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1773
+
1774
  process-warning@3.0.0:
1775
  resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
1776
 
1777
  process-warning@5.0.0:
1778
  resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
1779
 
1780
+ progress@2.0.3:
1781
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
1782
+ engines: {node: '>=0.4.0'}
1783
+
1784
  proxy-addr@2.0.7:
1785
  resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
1786
  engines: {node: '>= 0.10'}
1787
 
1788
+ proxy-agent@6.5.0:
1789
+ resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==}
1790
+ engines: {node: '>= 14'}
1791
+
1792
+ proxy-from-env@1.1.0:
1793
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
1794
+
1795
+ pump@3.0.3:
1796
+ resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
1797
+
1798
+ puppeteer-core@22.15.0:
1799
+ resolution: {integrity: sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==}
1800
+ engines: {node: '>=18'}
1801
+
1802
+ puppeteer@22.15.0:
1803
+ resolution: {integrity: sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==}
1804
+ engines: {node: '>=18'}
1805
+ deprecated: < 24.15.0 is no longer supported
1806
+ hasBin: true
1807
+
1808
  queue-microtask@1.2.3:
1809
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1810
 
1811
+ queue@6.0.2:
1812
+ resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
1813
+
1814
  quick-format-unescaped@4.0.4:
1815
  resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
1816
 
 
1843
  read-cache@1.0.0:
1844
  resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1845
 
1846
+ readable-stream@2.3.8:
1847
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
1848
+
1849
  readdirp@3.6.0:
1850
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1851
  engines: {node: '>=8.10.0'}
 
1862
  resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
1863
  engines: {node: '>=4'}
1864
 
1865
+ require-directory@2.1.1:
1866
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1867
+ engines: {node: '>=0.10.0'}
1868
+
1869
  require-from-string@2.0.2:
1870
  resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
1871
  engines: {node: '>=0.10.0'}
1872
 
1873
+ resolve-from@4.0.0:
1874
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1875
+ engines: {node: '>=4'}
1876
+
1877
  resolve-pkg-maps@1.0.0:
1878
  resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
1879
 
 
1901
  run-parallel@1.2.0:
1902
  resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1903
 
1904
+ safe-buffer@5.1.2:
1905
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1906
+
1907
  safe-regex2@3.1.0:
1908
  resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==}
1909
 
 
1929
  set-cookie-parser@2.7.2:
1930
  resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
1931
 
1932
+ setimmediate@1.0.5:
1933
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
1934
+
1935
+ smart-buffer@4.2.0:
1936
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
1937
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
1938
+
1939
+ socks-proxy-agent@8.0.5:
1940
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
1941
+ engines: {node: '>= 14'}
1942
+
1943
+ socks@2.8.7:
1944
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
1945
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
1946
+
1947
  sonic-boom@4.2.1:
1948
  resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
1949
 
 
1965
  standard-as-callback@2.1.0:
1966
  resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
1967
 
1968
+ streamx@2.23.0:
1969
+ resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==}
1970
+
1971
+ string-width@4.2.3:
1972
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1973
+ engines: {node: '>=8'}
1974
+
1975
+ string_decoder@1.1.1:
1976
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1977
+
1978
+ strip-ansi@6.0.1:
1979
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1980
+ engines: {node: '>=8'}
1981
+
1982
  sucrase@3.35.1:
1983
  resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
1984
  engines: {node: '>=16 || 14 >=14.17'}
 
1993
  engines: {node: '>=14.0.0'}
1994
  hasBin: true
1995
 
1996
+ tar-fs@3.1.1:
1997
+ resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==}
1998
+
1999
+ tar-stream@3.1.7:
2000
+ resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
2001
+
2002
+ teex@1.0.1:
2003
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
2004
+
2005
+ text-decoder@1.2.7:
2006
+ resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
2007
+
2008
  thenify-all@1.6.0:
2009
  resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
2010
  engines: {node: '>=0.8'}
 
2015
  thread-stream@3.1.0:
2016
  resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
2017
 
2018
+ through@2.3.8:
2019
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
2020
+
2021
  tinyglobby@0.2.15:
2022
  resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
2023
  engines: {node: '>=12.0.0'}
 
2030
  resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
2031
  engines: {node: '>=12'}
2032
 
2033
+ tr46@0.0.3:
2034
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
2035
+
2036
  ts-interface-checker@0.1.13:
2037
  resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
2038
 
 
2082
  engines: {node: '>=14.17'}
2083
  hasBin: true
2084
 
2085
+ unbzip2-stream@1.4.3:
2086
+ resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
2087
+
2088
+ undici-types@5.26.5:
2089
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
2090
+
2091
  undici-types@6.21.0:
2092
  resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
2093
 
 
2097
  peerDependencies:
2098
  browserslist: '>= 4.21.0'
2099
 
2100
+ urlpattern-polyfill@10.0.0:
2101
+ resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==}
2102
+
2103
  util-deprecate@1.0.2:
2104
  resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2105
 
 
2142
  terser:
2143
  optional: true
2144
 
2145
+ web-streams-polyfill@4.0.0-beta.3:
2146
+ resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
2147
+ engines: {node: '>= 14'}
2148
+
2149
+ webidl-conversions@3.0.1:
2150
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
2151
+
2152
+ whatwg-url@5.0.0:
2153
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
2154
+
2155
+ wrap-ansi@7.0.0:
2156
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2157
+ engines: {node: '>=10'}
2158
+
2159
  wrappy@1.0.2:
2160
  resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2161
 
2162
+ ws@8.19.0:
2163
+ resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
2164
+ engines: {node: '>=10.0.0'}
2165
+ peerDependencies:
2166
+ bufferutil: ^4.0.1
2167
+ utf-8-validate: '>=5.0.2'
2168
+ peerDependenciesMeta:
2169
+ bufferutil:
2170
+ optional: true
2171
+ utf-8-validate:
2172
+ optional: true
2173
+
2174
+ y18n@5.0.8:
2175
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
2176
+ engines: {node: '>=10'}
2177
+
2178
  yallist@3.1.1:
2179
  resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
2180
 
2181
+ yargs-parser@21.1.1:
2182
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
2183
+ engines: {node: '>=12'}
2184
+
2185
+ yargs@17.7.2:
2186
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
2187
+ engines: {node: '>=12'}
2188
+
2189
+ yauzl@2.10.0:
2190
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
2191
+
2192
+ zod@3.23.8:
2193
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
2194
+
2195
  zod@3.25.76:
2196
  resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
2197
 
 
2545
  dependencies:
2546
  '@prisma/debug': 5.22.0
2547
 
2548
+ '@puppeteer/browsers@2.3.0':
2549
+ dependencies:
2550
+ debug: 4.4.3
2551
+ extract-zip: 2.0.1
2552
+ progress: 2.0.3
2553
+ proxy-agent: 6.5.0
2554
+ semver: 7.7.4
2555
+ tar-fs: 3.1.1
2556
+ unbzip2-stream: 1.4.3
2557
+ yargs: 17.7.2
2558
+ transitivePeerDependencies:
2559
+ - bare-abort-controller
2560
+ - bare-buffer
2561
+ - react-native-b4a
2562
+ - supports-color
2563
+
2564
  '@remix-run/router@1.23.2': {}
2565
 
2566
  '@rolldown/pluginutils@1.0.0-beta.27': {}
 
2640
  '@rollup/rollup-win32-x64-msvc@4.57.1':
2641
  optional: true
2642
 
2643
+ '@tootallnate/quickjs-emscripten@0.23.0': {}
2644
+
2645
  '@types/babel__core@7.20.5':
2646
  dependencies:
2647
  '@babel/parser': 7.29.0
 
2667
 
2668
  '@types/node-cron@3.0.11': {}
2669
 
2670
+ '@types/node-fetch@2.6.13':
2671
+ dependencies:
2672
+ '@types/node': 20.19.33
2673
+ form-data: 4.0.5
2674
+
2675
+ '@types/node@18.19.130':
2676
+ dependencies:
2677
+ undici-types: 5.26.5
2678
+
2679
  '@types/node@20.19.33':
2680
  dependencies:
2681
  undici-types: 6.21.0
2682
 
2683
+ '@types/node@22.19.11':
2684
+ dependencies:
2685
+ undici-types: 6.21.0
2686
+ optional: true
2687
+
2688
  '@types/prop-types@15.7.15': {}
2689
 
2690
  '@types/react-dom@18.3.7(@types/react@18.3.28)':
 
2696
  '@types/prop-types': 15.7.15
2697
  csstype: 3.2.3
2698
 
2699
+ '@types/yauzl@2.10.3':
2700
+ dependencies:
2701
+ '@types/node': 20.19.33
2702
+ optional: true
2703
+
2704
+ '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.11))':
2705
  dependencies:
2706
  '@babel/core': 7.29.0
2707
  '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
 
2709
  '@rolldown/pluginutils': 1.0.0-beta.27
2710
  '@types/babel__core': 7.20.5
2711
  react-refresh: 0.17.0
2712
+ vite: 5.4.21(@types/node@22.19.11)
2713
  transitivePeerDependencies:
2714
  - supports-color
2715
 
2716
+ abort-controller@3.0.0:
2717
+ dependencies:
2718
+ event-target-shim: 5.0.1
2719
+
2720
  abstract-logging@2.0.1: {}
2721
 
2722
+ agent-base@7.1.4: {}
2723
+
2724
+ agentkeepalive@4.6.0:
2725
+ dependencies:
2726
+ humanize-ms: 1.2.1
2727
+
2728
  ajv-formats@2.1.1(ajv@8.18.0):
2729
  optionalDependencies:
2730
  ajv: 8.18.0
 
2740
  json-schema-traverse: 1.0.0
2741
  require-from-string: 2.0.2
2742
 
2743
+ ansi-regex@5.0.1: {}
2744
+
2745
+ ansi-styles@4.3.0:
2746
+ dependencies:
2747
+ color-convert: 2.0.1
2748
+
2749
  any-promise@1.3.0: {}
2750
 
2751
  anymatch@3.1.3:
 
2755
 
2756
  arg@5.0.2: {}
2757
 
2758
+ argparse@2.0.1: {}
2759
+
2760
+ ast-types@0.13.4:
2761
+ dependencies:
2762
+ tslib: 2.8.1
2763
+
2764
+ asynckit@0.4.0: {}
2765
+
2766
  atomic-sleep@1.0.0: {}
2767
 
2768
  autoprefixer@10.4.24(postcss@8.5.6):
 
2779
  '@fastify/error': 3.4.1
2780
  fastq: 1.20.1
2781
 
2782
+ b4a@1.8.0: {}
2783
+
2784
  balanced-match@1.0.2: {}
2785
 
2786
+ bare-events@2.8.2: {}
2787
+
2788
+ bare-fs@4.5.4:
2789
+ dependencies:
2790
+ bare-events: 2.8.2
2791
+ bare-path: 3.0.0
2792
+ bare-stream: 2.8.0(bare-events@2.8.2)
2793
+ bare-url: 2.3.2
2794
+ fast-fifo: 1.3.2
2795
+ transitivePeerDependencies:
2796
+ - bare-abort-controller
2797
+ - react-native-b4a
2798
+ optional: true
2799
+
2800
+ bare-os@3.6.2:
2801
+ optional: true
2802
+
2803
+ bare-path@3.0.0:
2804
+ dependencies:
2805
+ bare-os: 3.6.2
2806
+ optional: true
2807
+
2808
+ bare-stream@2.8.0(bare-events@2.8.2):
2809
+ dependencies:
2810
+ streamx: 2.23.0
2811
+ teex: 1.0.1
2812
+ optionalDependencies:
2813
+ bare-events: 2.8.2
2814
+ transitivePeerDependencies:
2815
+ - bare-abort-controller
2816
+ - react-native-b4a
2817
+ optional: true
2818
+
2819
+ bare-url@2.3.2:
2820
+ dependencies:
2821
+ bare-path: 3.0.0
2822
+ optional: true
2823
+
2824
+ base64-js@1.5.1: {}
2825
+
2826
  baseline-browser-mapping@2.10.0: {}
2827
 
2828
+ basic-ftp@5.1.0: {}
2829
+
2830
  binary-extensions@2.3.0: {}
2831
 
2832
  brace-expansion@2.0.2:
 
2845
  node-releases: 2.0.27
2846
  update-browserslist-db: 1.2.3(browserslist@4.28.1)
2847
 
2848
+ buffer-crc32@0.2.13: {}
2849
+
2850
  buffer-from@1.1.2: {}
2851
 
2852
+ buffer@5.7.1:
2853
+ dependencies:
2854
+ base64-js: 1.5.1
2855
+ ieee754: 1.2.1
2856
+
2857
  bullmq@4.18.3:
2858
  dependencies:
2859
  cron-parser: 4.9.0
 
2880
  transitivePeerDependencies:
2881
  - supports-color
2882
 
2883
+ call-bind-apply-helpers@1.0.2:
2884
+ dependencies:
2885
+ es-errors: 1.3.0
2886
+ function-bind: 1.1.2
2887
+
2888
+ callsites@3.1.0: {}
2889
+
2890
  camelcase-css@2.0.1: {}
2891
 
2892
  caniuse-lite@1.0.30001770: {}
 
2903
  optionalDependencies:
2904
  fsevents: 2.3.3
2905
 
2906
+ chromium-bidi@0.6.3(devtools-protocol@0.0.1312386):
2907
+ dependencies:
2908
+ devtools-protocol: 0.0.1312386
2909
+ mitt: 3.0.1
2910
+ urlpattern-polyfill: 10.0.0
2911
+ zod: 3.23.8
2912
+
2913
+ cliui@8.0.1:
2914
+ dependencies:
2915
+ string-width: 4.2.3
2916
+ strip-ansi: 6.0.1
2917
+ wrap-ansi: 7.0.0
2918
+
2919
  cluster-key-slot@1.1.2: {}
2920
 
2921
+ color-convert@2.0.1:
2922
+ dependencies:
2923
+ color-name: 1.1.4
2924
+
2925
+ color-name@1.1.4: {}
2926
+
2927
+ combined-stream@1.0.8:
2928
+ dependencies:
2929
+ delayed-stream: 1.0.0
2930
+
2931
  commander@4.1.1: {}
2932
 
2933
  convert-source-map@2.0.0: {}
2934
 
2935
  cookie@0.7.2: {}
2936
 
2937
+ core-util-is@1.0.3: {}
2938
+
2939
+ cosmiconfig@9.0.0(typescript@5.9.3):
2940
+ dependencies:
2941
+ env-paths: 2.2.1
2942
+ import-fresh: 3.3.1
2943
+ js-yaml: 4.1.1
2944
+ parse-json: 5.2.0
2945
+ optionalDependencies:
2946
+ typescript: 5.9.3
2947
+
2948
  cron-parser@4.9.0:
2949
  dependencies:
2950
  luxon: 3.7.2
 
2953
 
2954
  csstype@3.2.3: {}
2955
 
2956
+ data-uri-to-buffer@6.0.2: {}
2957
+
2958
  debug@4.4.3:
2959
  dependencies:
2960
  ms: 2.1.3
2961
 
2962
+ degenerator@5.0.1:
2963
+ dependencies:
2964
+ ast-types: 0.13.4
2965
+ escodegen: 2.1.0
2966
+ esprima: 4.0.1
2967
+
2968
+ delayed-stream@1.0.0: {}
2969
+
2970
  denque@2.1.0: {}
2971
 
2972
  detect-libc@2.1.2:
2973
  optional: true
2974
 
2975
+ devtools-protocol@0.0.1312386: {}
2976
+
2977
  didyoumean@1.2.2: {}
2978
 
2979
  dlv@1.1.3: {}
2980
 
2981
  dotenv@16.6.1: {}
2982
 
2983
+ dunder-proto@1.0.1:
2984
+ dependencies:
2985
+ call-bind-apply-helpers: 1.0.2
2986
+ es-errors: 1.3.0
2987
+ gopd: 1.2.0
2988
+
2989
  electron-to-chromium@1.5.302: {}
2990
 
2991
+ emoji-regex@8.0.0: {}
2992
+
2993
+ end-of-stream@1.4.5:
2994
+ dependencies:
2995
+ once: 1.4.0
2996
+
2997
+ env-paths@2.2.1: {}
2998
+
2999
+ error-ex@1.3.4:
3000
+ dependencies:
3001
+ is-arrayish: 0.2.1
3002
+
3003
+ es-define-property@1.0.1: {}
3004
+
3005
+ es-errors@1.3.0: {}
3006
+
3007
+ es-object-atoms@1.1.1:
3008
+ dependencies:
3009
+ es-errors: 1.3.0
3010
+
3011
+ es-set-tostringtag@2.1.0:
3012
+ dependencies:
3013
+ es-errors: 1.3.0
3014
+ get-intrinsic: 1.3.0
3015
+ has-tostringtag: 1.0.2
3016
+ hasown: 2.0.2
3017
+
3018
  esbuild@0.18.20:
3019
  optionalDependencies:
3020
  '@esbuild/android-arm': 0.18.20
 
3068
 
3069
  escalade@3.2.0: {}
3070
 
3071
+ escodegen@2.1.0:
3072
+ dependencies:
3073
+ esprima: 4.0.1
3074
+ estraverse: 5.3.0
3075
+ esutils: 2.0.3
3076
+ optionalDependencies:
3077
+ source-map: 0.6.1
3078
+
3079
+ esprima@4.0.1: {}
3080
+
3081
+ estraverse@5.3.0: {}
3082
+
3083
+ esutils@2.0.3: {}
3084
+
3085
+ event-target-shim@5.0.1: {}
3086
+
3087
+ events-universal@1.0.1:
3088
+ dependencies:
3089
+ bare-events: 2.8.2
3090
+ transitivePeerDependencies:
3091
+ - bare-abort-controller
3092
+
3093
+ extract-zip@2.0.1:
3094
+ dependencies:
3095
+ debug: 4.4.3
3096
+ get-stream: 5.2.0
3097
+ yauzl: 2.10.0
3098
+ optionalDependencies:
3099
+ '@types/yauzl': 2.10.3
3100
+ transitivePeerDependencies:
3101
+ - supports-color
3102
+
3103
  fast-content-type-parse@1.1.0: {}
3104
 
3105
  fast-decode-uri-component@1.0.1: {}
3106
 
3107
  fast-deep-equal@3.1.3: {}
3108
 
3109
+ fast-fifo@1.3.2: {}
3110
+
3111
  fast-glob@3.3.3:
3112
  dependencies:
3113
  '@nodelib/fs.stat': 2.0.5
 
3159
  dependencies:
3160
  reusify: 1.1.0
3161
 
3162
+ fd-slicer@1.1.0:
3163
+ dependencies:
3164
+ pend: 1.2.0
3165
+
3166
  fdir@6.5.0(picomatch@4.0.3):
3167
  optionalDependencies:
3168
  picomatch: 4.0.3
 
3177
  fast-querystring: 1.1.2
3178
  safe-regex2: 3.1.0
3179
 
3180
+ form-data-encoder@1.7.2: {}
3181
+
3182
+ form-data@4.0.5:
3183
+ dependencies:
3184
+ asynckit: 0.4.0
3185
+ combined-stream: 1.0.8
3186
+ es-set-tostringtag: 2.1.0
3187
+ hasown: 2.0.2
3188
+ mime-types: 2.1.35
3189
+
3190
+ formdata-node@4.4.1:
3191
+ dependencies:
3192
+ node-domexception: 1.0.0
3193
+ web-streams-polyfill: 4.0.0-beta.3
3194
+
3195
  forwarded@0.2.0: {}
3196
 
3197
  fraction.js@5.3.4: {}
 
3205
 
3206
  gensync@1.0.0-beta.2: {}
3207
 
3208
+ get-caller-file@2.0.5: {}
3209
+
3210
+ get-intrinsic@1.3.0:
3211
+ dependencies:
3212
+ call-bind-apply-helpers: 1.0.2
3213
+ es-define-property: 1.0.1
3214
+ es-errors: 1.3.0
3215
+ es-object-atoms: 1.1.1
3216
+ function-bind: 1.1.2
3217
+ get-proto: 1.0.1
3218
+ gopd: 1.2.0
3219
+ has-symbols: 1.1.0
3220
+ hasown: 2.0.2
3221
+ math-intrinsics: 1.1.0
3222
+
3223
+ get-proto@1.0.1:
3224
+ dependencies:
3225
+ dunder-proto: 1.0.1
3226
+ es-object-atoms: 1.1.1
3227
+
3228
+ get-stream@5.2.0:
3229
+ dependencies:
3230
+ pump: 3.0.3
3231
+
3232
  get-tsconfig@4.13.6:
3233
  dependencies:
3234
  resolve-pkg-maps: 1.0.0
3235
 
3236
+ get-uri@6.0.5:
3237
+ dependencies:
3238
+ basic-ftp: 5.1.0
3239
+ data-uri-to-buffer: 6.0.2
3240
+ debug: 4.4.3
3241
+ transitivePeerDependencies:
3242
+ - supports-color
3243
+
3244
  glob-parent@5.1.2:
3245
  dependencies:
3246
  is-glob: 4.0.3
 
3257
  minimatch: 5.1.6
3258
  once: 1.4.0
3259
 
3260
+ gopd@1.2.0: {}
3261
+
3262
+ has-symbols@1.1.0: {}
3263
+
3264
+ has-tostringtag@1.0.2:
3265
+ dependencies:
3266
+ has-symbols: 1.1.0
3267
+
3268
  hasown@2.0.2:
3269
  dependencies:
3270
  function-bind: 1.1.2
3271
 
3272
+ http-proxy-agent@7.0.2:
3273
+ dependencies:
3274
+ agent-base: 7.1.4
3275
+ debug: 4.4.3
3276
+ transitivePeerDependencies:
3277
+ - supports-color
3278
+
3279
+ https-proxy-agent@7.0.6:
3280
+ dependencies:
3281
+ agent-base: 7.1.4
3282
+ debug: 4.4.3
3283
+ transitivePeerDependencies:
3284
+ - supports-color
3285
+
3286
+ https@1.0.0: {}
3287
+
3288
+ humanize-ms@1.2.1:
3289
+ dependencies:
3290
+ ms: 2.1.3
3291
+
3292
+ ieee754@1.2.1: {}
3293
+
3294
+ image-size@1.2.1:
3295
+ dependencies:
3296
+ queue: 6.0.2
3297
+
3298
+ immediate@3.0.6: {}
3299
+
3300
+ import-fresh@3.3.1:
3301
+ dependencies:
3302
+ parent-module: 1.0.1
3303
+ resolve-from: 4.0.0
3304
+
3305
  inflight@1.0.6:
3306
  dependencies:
3307
  once: 1.4.0
 
3337
  transitivePeerDependencies:
3338
  - supports-color
3339
 
3340
+ ip-address@10.1.0: {}
3341
+
3342
  ipaddr.js@1.9.1: {}
3343
 
3344
+ is-arrayish@0.2.1: {}
3345
+
3346
  is-binary-path@2.1.0:
3347
  dependencies:
3348
  binary-extensions: 2.3.0
 
3353
 
3354
  is-extglob@2.1.1: {}
3355
 
3356
+ is-fullwidth-code-point@3.0.0: {}
3357
+
3358
  is-glob@4.0.3:
3359
  dependencies:
3360
  is-extglob: 2.1.1
3361
 
3362
  is-number@7.0.0: {}
3363
 
3364
+ isarray@1.0.0: {}
3365
+
3366
  jiti@1.21.7: {}
3367
 
3368
  js-tokens@4.0.0: {}
3369
 
3370
+ js-yaml@4.1.1:
3371
+ dependencies:
3372
+ argparse: 2.0.1
3373
+
3374
  jsesc@3.1.0: {}
3375
 
3376
+ json-parse-even-better-errors@2.3.1: {}
3377
+
3378
  json-schema-ref-resolver@1.0.1:
3379
  dependencies:
3380
  fast-deep-equal: 3.1.3
 
3383
 
3384
  json5@2.2.3: {}
3385
 
3386
+ jszip@3.10.1:
3387
+ dependencies:
3388
+ lie: 3.3.0
3389
+ pako: 1.0.11
3390
+ readable-stream: 2.3.8
3391
+ setimmediate: 1.0.5
3392
+
3393
+ lie@3.3.0:
3394
+ dependencies:
3395
+ immediate: 3.0.6
3396
+
3397
  light-my-request@5.14.0:
3398
  dependencies:
3399
  cookie: 0.7.2
 
3418
  dependencies:
3419
  yallist: 3.1.1
3420
 
3421
+ lru-cache@7.18.3: {}
3422
+
3423
  lucide-react@0.300.0(react@18.3.1):
3424
  dependencies:
3425
  react: 18.3.1
3426
 
3427
  luxon@3.7.2: {}
3428
 
3429
+ math-intrinsics@1.1.0: {}
3430
+
3431
  merge2@1.4.1: {}
3432
 
3433
  micromatch@4.0.8:
 
3435
  braces: 3.0.3
3436
  picomatch: 2.3.1
3437
 
3438
+ mime-db@1.52.0: {}
3439
+
3440
+ mime-types@2.1.35:
3441
+ dependencies:
3442
+ mime-db: 1.52.0
3443
+
3444
  minimatch@5.1.6:
3445
  dependencies:
3446
  brace-expansion: 2.0.2
3447
 
3448
+ mitt@3.0.1: {}
3449
+
3450
  mnemonist@0.39.6:
3451
  dependencies:
3452
  obliterator: 2.0.5
 
3481
 
3482
  nanoid@3.3.11: {}
3483
 
3484
+ netmask@2.0.2: {}
3485
+
3486
  node-abort-controller@3.1.1: {}
3487
 
3488
  node-cron@4.2.1: {}
3489
 
3490
+ node-domexception@1.0.0: {}
3491
+
3492
+ node-fetch@2.7.0:
3493
+ dependencies:
3494
+ whatwg-url: 5.0.0
3495
+
3496
  node-gyp-build-optional-packages@5.2.2:
3497
  dependencies:
3498
  detect-libc: 2.1.2
 
3514
  dependencies:
3515
  wrappy: 1.0.2
3516
 
3517
+ openai@4.104.0(ws@8.19.0)(zod@3.25.76):
3518
+ dependencies:
3519
+ '@types/node': 18.19.130
3520
+ '@types/node-fetch': 2.6.13
3521
+ abort-controller: 3.0.0
3522
+ agentkeepalive: 4.6.0
3523
+ form-data-encoder: 1.7.2
3524
+ formdata-node: 4.4.1
3525
+ node-fetch: 2.7.0
3526
+ optionalDependencies:
3527
+ ws: 8.19.0
3528
+ zod: 3.25.76
3529
+ transitivePeerDependencies:
3530
+ - encoding
3531
+
3532
+ pac-proxy-agent@7.2.0:
3533
+ dependencies:
3534
+ '@tootallnate/quickjs-emscripten': 0.23.0
3535
+ agent-base: 7.1.4
3536
+ debug: 4.4.3
3537
+ get-uri: 6.0.5
3538
+ http-proxy-agent: 7.0.2
3539
+ https-proxy-agent: 7.0.6
3540
+ pac-resolver: 7.0.1
3541
+ socks-proxy-agent: 8.0.5
3542
+ transitivePeerDependencies:
3543
+ - supports-color
3544
+
3545
+ pac-resolver@7.0.1:
3546
+ dependencies:
3547
+ degenerator: 5.0.1
3548
+ netmask: 2.0.2
3549
+
3550
+ pako@1.0.11: {}
3551
+
3552
+ parent-module@1.0.1:
3553
+ dependencies:
3554
+ callsites: 3.1.0
3555
+
3556
+ parse-json@5.2.0:
3557
+ dependencies:
3558
+ '@babel/code-frame': 7.29.0
3559
+ error-ex: 1.3.4
3560
+ json-parse-even-better-errors: 2.3.1
3561
+ lines-and-columns: 1.2.4
3562
+
3563
  path-parse@1.0.7: {}
3564
 
3565
+ pend@1.2.0: {}
3566
+
3567
  picocolors@1.1.1: {}
3568
 
3569
  picomatch@2.3.1: {}
 
3631
  picocolors: 1.1.1
3632
  source-map-js: 1.2.1
3633
 
3634
+ pptxgenjs@3.12.0:
3635
+ dependencies:
3636
+ '@types/node': 18.19.130
3637
+ https: 1.0.0
3638
+ image-size: 1.2.1
3639
+ jszip: 3.10.1
3640
+
3641
  prettier@3.8.1: {}
3642
 
3643
  prisma@5.22.0:
 
3646
  optionalDependencies:
3647
  fsevents: 2.3.3
3648
 
3649
+ process-nextick-args@2.0.1: {}
3650
+
3651
  process-warning@3.0.0: {}
3652
 
3653
  process-warning@5.0.0: {}
3654
 
3655
+ progress@2.0.3: {}
3656
+
3657
  proxy-addr@2.0.7:
3658
  dependencies:
3659
  forwarded: 0.2.0
3660
  ipaddr.js: 1.9.1
3661
 
3662
+ proxy-agent@6.5.0:
3663
+ dependencies:
3664
+ agent-base: 7.1.4
3665
+ debug: 4.4.3
3666
+ http-proxy-agent: 7.0.2
3667
+ https-proxy-agent: 7.0.6
3668
+ lru-cache: 7.18.3
3669
+ pac-proxy-agent: 7.2.0
3670
+ proxy-from-env: 1.1.0
3671
+ socks-proxy-agent: 8.0.5
3672
+ transitivePeerDependencies:
3673
+ - supports-color
3674
+
3675
+ proxy-from-env@1.1.0: {}
3676
+
3677
+ pump@3.0.3:
3678
+ dependencies:
3679
+ end-of-stream: 1.4.5
3680
+ once: 1.4.0
3681
+
3682
+ puppeteer-core@22.15.0:
3683
+ dependencies:
3684
+ '@puppeteer/browsers': 2.3.0
3685
+ chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386)
3686
+ debug: 4.4.3
3687
+ devtools-protocol: 0.0.1312386
3688
+ ws: 8.19.0
3689
+ transitivePeerDependencies:
3690
+ - bare-abort-controller
3691
+ - bare-buffer
3692
+ - bufferutil
3693
+ - react-native-b4a
3694
+ - supports-color
3695
+ - utf-8-validate
3696
+
3697
+ puppeteer@22.15.0(typescript@5.9.3):
3698
+ dependencies:
3699
+ '@puppeteer/browsers': 2.3.0
3700
+ cosmiconfig: 9.0.0(typescript@5.9.3)
3701
+ devtools-protocol: 0.0.1312386
3702
+ puppeteer-core: 22.15.0
3703
+ transitivePeerDependencies:
3704
+ - bare-abort-controller
3705
+ - bare-buffer
3706
+ - bufferutil
3707
+ - react-native-b4a
3708
+ - supports-color
3709
+ - typescript
3710
+ - utf-8-validate
3711
+
3712
  queue-microtask@1.2.3: {}
3713
 
3714
+ queue@6.0.2:
3715
+ dependencies:
3716
+ inherits: 2.0.4
3717
+
3718
  quick-format-unescaped@4.0.4: {}
3719
 
3720
  react-dom@18.3.1(react@18.3.1):
 
3745
  dependencies:
3746
  pify: 2.3.0
3747
 
3748
+ readable-stream@2.3.8:
3749
+ dependencies:
3750
+ core-util-is: 1.0.3
3751
+ inherits: 2.0.4
3752
+ isarray: 1.0.0
3753
+ process-nextick-args: 2.0.1
3754
+ safe-buffer: 5.1.2
3755
+ string_decoder: 1.1.1
3756
+ util-deprecate: 1.0.2
3757
+
3758
  readdirp@3.6.0:
3759
  dependencies:
3760
  picomatch: 2.3.1
 
3767
  dependencies:
3768
  redis-errors: 1.2.0
3769
 
3770
+ require-directory@2.1.1: {}
3771
+
3772
  require-from-string@2.0.2: {}
3773
 
3774
+ resolve-from@4.0.0: {}
3775
+
3776
  resolve-pkg-maps@1.0.0: {}
3777
 
3778
  resolve@1.22.11:
 
3822
  dependencies:
3823
  queue-microtask: 1.2.3
3824
 
3825
+ safe-buffer@5.1.2: {}
3826
+
3827
  safe-regex2@3.1.0:
3828
  dependencies:
3829
  ret: 0.4.3
 
3842
 
3843
  set-cookie-parser@2.7.2: {}
3844
 
3845
+ setimmediate@1.0.5: {}
3846
+
3847
+ smart-buffer@4.2.0: {}
3848
+
3849
+ socks-proxy-agent@8.0.5:
3850
+ dependencies:
3851
+ agent-base: 7.1.4
3852
+ debug: 4.4.3
3853
+ socks: 2.8.7
3854
+ transitivePeerDependencies:
3855
+ - supports-color
3856
+
3857
+ socks@2.8.7:
3858
+ dependencies:
3859
+ ip-address: 10.1.0
3860
+ smart-buffer: 4.2.0
3861
+
3862
  sonic-boom@4.2.1:
3863
  dependencies:
3864
  atomic-sleep: 1.0.0
 
3876
 
3877
  standard-as-callback@2.1.0: {}
3878
 
3879
+ streamx@2.23.0:
3880
+ dependencies:
3881
+ events-universal: 1.0.1
3882
+ fast-fifo: 1.3.2
3883
+ text-decoder: 1.2.7
3884
+ transitivePeerDependencies:
3885
+ - bare-abort-controller
3886
+ - react-native-b4a
3887
+
3888
+ string-width@4.2.3:
3889
+ dependencies:
3890
+ emoji-regex: 8.0.0
3891
+ is-fullwidth-code-point: 3.0.0
3892
+ strip-ansi: 6.0.1
3893
+
3894
+ string_decoder@1.1.1:
3895
+ dependencies:
3896
+ safe-buffer: 5.1.2
3897
+
3898
+ strip-ansi@6.0.1:
3899
+ dependencies:
3900
+ ansi-regex: 5.0.1
3901
+
3902
  sucrase@3.35.1:
3903
  dependencies:
3904
  '@jridgewell/gen-mapping': 0.3.13
 
3939
  - tsx
3940
  - yaml
3941
 
3942
+ tar-fs@3.1.1:
3943
+ dependencies:
3944
+ pump: 3.0.3
3945
+ tar-stream: 3.1.7
3946
+ optionalDependencies:
3947
+ bare-fs: 4.5.4
3948
+ bare-path: 3.0.0
3949
+ transitivePeerDependencies:
3950
+ - bare-abort-controller
3951
+ - bare-buffer
3952
+ - react-native-b4a
3953
+
3954
+ tar-stream@3.1.7:
3955
+ dependencies:
3956
+ b4a: 1.8.0
3957
+ fast-fifo: 1.3.2
3958
+ streamx: 2.23.0
3959
+ transitivePeerDependencies:
3960
+ - bare-abort-controller
3961
+ - react-native-b4a
3962
+
3963
+ teex@1.0.1:
3964
+ dependencies:
3965
+ streamx: 2.23.0
3966
+ transitivePeerDependencies:
3967
+ - bare-abort-controller
3968
+ - react-native-b4a
3969
+ optional: true
3970
+
3971
+ text-decoder@1.2.7:
3972
+ dependencies:
3973
+ b4a: 1.8.0
3974
+ transitivePeerDependencies:
3975
+ - react-native-b4a
3976
+
3977
  thenify-all@1.6.0:
3978
  dependencies:
3979
  thenify: 3.3.1
 
3986
  dependencies:
3987
  real-require: 0.2.0
3988
 
3989
+ through@2.3.8: {}
3990
+
3991
  tinyglobby@0.2.15:
3992
  dependencies:
3993
  fdir: 6.5.0(picomatch@4.0.3)
 
3999
 
4000
  toad-cache@3.7.0: {}
4001
 
4002
+ tr46@0.0.3: {}
4003
+
4004
  ts-interface-checker@0.1.13: {}
4005
 
4006
  tslib@2.8.1: {}
 
4042
 
4043
  typescript@5.9.3: {}
4044
 
4045
+ unbzip2-stream@1.4.3:
4046
+ dependencies:
4047
+ buffer: 5.7.1
4048
+ through: 2.3.8
4049
+
4050
+ undici-types@5.26.5: {}
4051
+
4052
  undici-types@6.21.0: {}
4053
 
4054
  update-browserslist-db@1.2.3(browserslist@4.28.1):
 
4057
  escalade: 3.2.0
4058
  picocolors: 1.1.1
4059
 
4060
+ urlpattern-polyfill@10.0.0: {}
4061
+
4062
  util-deprecate@1.0.2: {}
4063
 
4064
  uuid@11.1.0: {}
4065
 
4066
  uuid@9.0.1: {}
4067
 
4068
+ vite@5.4.21(@types/node@22.19.11):
4069
  dependencies:
4070
  esbuild: 0.21.5
4071
  postcss: 8.5.6
4072
  rollup: 4.57.1
4073
  optionalDependencies:
4074
+ '@types/node': 22.19.11
4075
  fsevents: 2.3.3
4076
 
4077
+ web-streams-polyfill@4.0.0-beta.3: {}
4078
+
4079
+ webidl-conversions@3.0.1: {}
4080
+
4081
+ whatwg-url@5.0.0:
4082
+ dependencies:
4083
+ tr46: 0.0.3
4084
+ webidl-conversions: 3.0.1
4085
+
4086
+ wrap-ansi@7.0.0:
4087
+ dependencies:
4088
+ ansi-styles: 4.3.0
4089
+ string-width: 4.2.3
4090
+ strip-ansi: 6.0.1
4091
+
4092
  wrappy@1.0.2: {}
4093
 
4094
+ ws@8.19.0: {}
4095
+
4096
+ y18n@5.0.8: {}
4097
+
4098
  yallist@3.1.1: {}
4099
 
4100
+ yargs-parser@21.1.1: {}
4101
+
4102
+ yargs@17.7.2:
4103
+ dependencies:
4104
+ cliui: 8.0.1
4105
+ escalade: 3.2.0
4106
+ get-caller-file: 2.0.5
4107
+ require-directory: 2.1.1
4108
+ string-width: 4.2.3
4109
+ y18n: 5.0.8
4110
+ yargs-parser: 21.1.1
4111
+
4112
+ yauzl@2.10.0:
4113
+ dependencies:
4114
+ buffer-crc32: 0.2.13
4115
+ fd-slicer: 1.1.0
4116
+
4117
+ zod@3.23.8: {}
4118
+
4119
  zod@3.25.76: {}