diff --git a/apps/app/.gitignore b/apps/app/.gitignore index cefc9348..cb9812cb 100644 --- a/apps/app/.gitignore +++ b/apps/app/.gitignore @@ -48,3 +48,4 @@ next-env.d.ts # Electron /dist/ +/server-bundle/ diff --git a/apps/app/electron/main.js b/apps/app/electron/main.js index 0fd95d97..a39cc7d4 100644 --- a/apps/app/electron/main.js +++ b/apps/app/electron/main.js @@ -8,21 +8,114 @@ const path = require("path"); const { spawn } = require("child_process"); const fs = require("fs"); - -// Load environment variables from .env file -require("dotenv").config({ path: path.join(__dirname, "../.env") }); - +const http = require("http"); const { app, BrowserWindow, ipcMain, dialog, shell } = require("electron"); +// Load environment variables from .env file (development only) +if (!app.isPackaged) { + try { + require("dotenv").config({ path: path.join(__dirname, "../.env") }); + } catch (error) { + console.warn("[Electron] dotenv not available:", error.message); + } +} + let mainWindow = null; let serverProcess = null; +let staticServer = null; const SERVER_PORT = 3008; +const STATIC_PORT = 3007; -// Get icon path - works in both dev and production +// Get icon path - works in both dev and production, cross-platform function getIconPath() { - return app.isPackaged - ? path.join(process.resourcesPath, "app", "public", "logo.png") - : path.join(__dirname, "../public/logo.png"); + // Different icon formats for different platforms + let iconFile; + if (process.platform === "win32") { + iconFile = "icon.ico"; + } else if (process.platform === "darwin") { + iconFile = "logo_larger.png"; + } else { + // Linux + iconFile = "logo_larger.png"; + } + + const iconPath = path.join(__dirname, "../public", iconFile); + + // Verify the icon exists + if (!fs.existsSync(iconPath)) { + console.warn(`[Electron] Icon not found at: ${iconPath}`); + return null; + } + + return iconPath; +} + +/** + * Start static file server for production builds + */ +async function startStaticServer() { + const staticPath = path.join(__dirname, "../out"); + + staticServer = http.createServer((request, response) => { + // Parse the URL and remove query string + let filePath = path.join(staticPath, request.url.split("?")[0]); + + // Default to index.html for directory requests + if (filePath.endsWith("/")) { + filePath = path.join(filePath, "index.html"); + } else if (!path.extname(filePath)) { + filePath += ".html"; + } + + // Check if file exists + fs.stat(filePath, (err, stats) => { + if (err || !stats.isFile()) { + // Try index.html for SPA fallback + filePath = path.join(staticPath, "index.html"); + } + + // Read and serve the file + fs.readFile(filePath, (error, content) => { + if (error) { + response.writeHead(500); + response.end("Server Error"); + return; + } + + // Set content type based on file extension + const ext = path.extname(filePath); + const contentTypes = { + ".html": "text/html", + ".js": "application/javascript", + ".css": "text/css", + ".json": "application/json", + ".png": "image/png", + ".jpg": "image/jpeg", + ".gif": "image/gif", + ".svg": "image/svg+xml", + ".ico": "image/x-icon", + ".woff": "font/woff", + ".woff2": "font/woff2", + ".ttf": "font/ttf", + ".eot": "application/vnd.ms-fontobject", + }; + + response.writeHead(200, { "Content-Type": contentTypes[ext] || "application/octet-stream" }); + response.end(content); + }); + }); + }); + + return new Promise((resolve, reject) => { + staticServer.listen(STATIC_PORT, (err) => { + if (err) { + reject(err); + } else { + console.log(`[Electron] Static server running at http://localhost:${STATIC_PORT}`); + resolve(); + } + }); + }); } /** @@ -63,18 +156,45 @@ async function startServer() { command = "node"; serverPath = path.join(process.resourcesPath, "server", "index.js"); args = [serverPath]; + + // Verify server files exist + if (!fs.existsSync(serverPath)) { + throw new Error(`Server not found at: ${serverPath}`); + } } // Set environment variables for server + const serverNodeModules = app.isPackaged + ? path.join(process.resourcesPath, "server", "node_modules") + : path.join(__dirname, "../../server/node_modules"); + + // Set default workspace directory to user's Documents/Automaker + const defaultWorkspaceDir = path.join(app.getPath("documents"), "Automaker"); + + // Ensure workspace directory exists + if (!fs.existsSync(defaultWorkspaceDir)) { + try { + fs.mkdirSync(defaultWorkspaceDir, { recursive: true }); + console.log("[Electron] Created workspace directory:", defaultWorkspaceDir); + } catch (error) { + console.error("[Electron] Failed to create workspace directory:", error); + } + } + const env = { ...process.env, PORT: SERVER_PORT.toString(), DATA_DIR: app.getPath("userData"), + NODE_PATH: serverNodeModules, + WORKSPACE_DIR: process.env.WORKSPACE_DIR || defaultWorkspaceDir, }; console.log("[Electron] Starting backend server..."); + console.log("[Electron] Server path:", serverPath); + console.log("[Electron] NODE_PATH:", serverNodeModules); serverProcess = spawn(command, args, { + cwd: path.dirname(serverPath), env, stdio: ["ignore", "pipe", "pipe"], }); @@ -92,6 +212,11 @@ async function startServer() { serverProcess = null; }); + serverProcess.on("error", (err) => { + console.error(`[Server] Failed to start server process:`, err); + serverProcess = null; + }); + // Wait for server to be ready await waitForServer(); } @@ -132,12 +257,12 @@ async function waitForServer(maxAttempts = 30) { * Create the main window */ function createWindow() { - mainWindow = new BrowserWindow({ + const iconPath = getIconPath(); + const windowOptions = { width: 1400, height: 900, minWidth: 1024, minHeight: 700, - icon: getIconPath(), webPreferences: { preload: path.join(__dirname, "preload.js"), contextIsolation: true, @@ -145,17 +270,20 @@ function createWindow() { }, titleBarStyle: "hiddenInset", backgroundColor: "#0a0a0a", - }); + }; - // Load Next.js dev server in development or production build + // Only set icon if it exists + if (iconPath) { + windowOptions.icon = iconPath; + } + + mainWindow = new BrowserWindow(windowOptions); + + // Load Next.js dev server in development or static server in production const isDev = !app.isPackaged; - if (isDev) { - mainWindow.loadURL("http://localhost:3007"); - if (process.env.OPEN_DEVTOOLS === "true") { - mainWindow.webContents.openDevTools(); - } - } else { - mainWindow.loadFile(path.join(__dirname, "../.next/server/app/index.html")); + mainWindow.loadURL(`http://localhost:${STATIC_PORT}`); + if (isDev && process.env.OPEN_DEVTOOLS === "true") { + mainWindow.webContents.openDevTools(); } mainWindow.on("closed", () => { @@ -173,10 +301,22 @@ function createWindow() { app.whenReady().then(async () => { // Set app icon (dock icon on macOS) if (process.platform === "darwin" && app.dock) { - app.dock.setIcon(getIconPath()); + const iconPath = getIconPath(); + if (iconPath) { + try { + app.dock.setIcon(iconPath); + } catch (error) { + console.warn("[Electron] Failed to set dock icon:", error.message); + } + } } try { + // Start static file server in production + if (app.isPackaged) { + await startStaticServer(); + } + // Start backend server await startServer(); @@ -207,6 +347,13 @@ app.on("before-quit", () => { serverProcess.kill(); serverProcess = null; } + + // Close static server + if (staticServer) { + console.log("[Electron] Stopping static server..."); + staticServer.close(); + staticServer = null; + } }); // ============================================ diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index 6211e3b9..7f34a8f1 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -1,6 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { + output: "export", env: { CLAUDE_CODE_OAUTH_TOKEN: process.env.CLAUDE_CODE_OAUTH_TOKEN || "", }, diff --git a/apps/app/package.json b/apps/app/package.json index 98a8b0b4..40510b79 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -20,7 +20,10 @@ "dev:electron": "concurrently \"next dev -p 3007\" \"wait-on http://localhost:3007 && electron .\"", "dev:electron:debug": "concurrently \"next dev -p 3007\" \"wait-on http://localhost:3007 && OPEN_DEVTOOLS=true electron .\"", "build": "next build", - "build:electron": "next build && electron-builder", + "build:electron": "node scripts/prepare-server.js && next build && electron-builder", + "build:electron:win": "node scripts/prepare-server.js && next build && electron-builder --win", + "build:electron:mac": "node scripts/prepare-server.js && next build && electron-builder --mac", + "build:electron:linux": "node scripts/prepare-server.js && next build && electron-builder --linux", "start": "next start", "lint": "eslint", "test": "playwright test", @@ -79,35 +82,46 @@ "@types/react": "^19", "@types/react-dom": "^19", "concurrently": "^9.2.1", - "electron": "^39.2.6", + "electron": "39.2.7", "electron-builder": "^26.0.12", "eslint": "^9", "eslint-config-next": "16.0.7", "tailwindcss": "^4", "tw-animate-css": "^1.4.0", - "typescript": "^5", + "typescript": "5.9.3", "wait-on": "^9.0.3" }, "build": { "appId": "com.automaker.app", "productName": "Automaker", "artifactName": "${productName}-${version}-${arch}.${ext}", + "afterPack": "./scripts/rebuild-server-natives.js", "directories": { "output": "dist" }, "files": [ "electron/**/*", - ".next/**/*", + "out/**/*", "public/**/*", "!node_modules/**/*" ], "extraResources": [ { - "from": ".env", + "from": "server-bundle/dist", + "to": "server" + }, + { + "from": "server-bundle/node_modules", + "to": "server/node_modules" + }, + { + "from": "server-bundle/package.json", + "to": "server/package.json" + }, + { + "from": "../../.env", "to": ".env", - "filter": [ - "**/*" - ] + "filter": ["**/*"] } ], "mac": { @@ -139,7 +153,7 @@ ] } ], - "icon": "public/logo_larger.png" + "icon": "public/icon.ico" }, "linux": { "target": [ diff --git a/apps/app/public/icon.ico b/apps/app/public/icon.ico new file mode 100644 index 00000000..388438d7 Binary files /dev/null and b/apps/app/public/icon.ico differ diff --git a/apps/app/scripts/prepare-server.js b/apps/app/scripts/prepare-server.js new file mode 100644 index 00000000..83c0f055 --- /dev/null +++ b/apps/app/scripts/prepare-server.js @@ -0,0 +1,81 @@ +#!/usr/bin/env node + +/** + * This script prepares the server for bundling with Electron. + * It copies the server dist and installs production dependencies + * in a way that works with npm workspaces. + */ + +import { execSync } from 'child_process'; +import { cpSync, existsSync, mkdirSync, rmSync, writeFileSync, readFileSync } from 'fs'; +import { join, dirname } from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const APP_DIR = join(__dirname, '..'); +const SERVER_DIR = join(APP_DIR, '..', 'server'); +const BUNDLE_DIR = join(APP_DIR, 'server-bundle'); + +console.log('šŸ”§ Preparing server for Electron bundling...\n'); + +// Step 1: Clean up previous bundle +if (existsSync(BUNDLE_DIR)) { + console.log('šŸ—‘ļø Cleaning previous server-bundle...'); + rmSync(BUNDLE_DIR, { recursive: true }); +} +mkdirSync(BUNDLE_DIR, { recursive: true }); + +// Step 2: Build the server TypeScript +console.log('šŸ“¦ Building server TypeScript...'); +execSync('npm run build', { cwd: SERVER_DIR, stdio: 'inherit' }); + +// Step 3: Copy server dist +console.log('šŸ“‹ Copying server dist...'); +cpSync(join(SERVER_DIR, 'dist'), join(BUNDLE_DIR, 'dist'), { recursive: true }); + +// Step 4: Create a minimal package.json for the server +console.log('šŸ“ Creating server package.json...'); +const serverPkg = JSON.parse(readFileSync(join(SERVER_DIR, 'package.json'), 'utf-8')); + +const bundlePkg = { + name: '@automaker/server-bundle', + version: serverPkg.version, + type: 'module', + main: 'dist/index.js', + dependencies: serverPkg.dependencies +}; + +writeFileSync( + join(BUNDLE_DIR, 'package.json'), + JSON.stringify(bundlePkg, null, 2) +); + +// Step 5: Install production dependencies +console.log('šŸ“„ Installing server production dependencies...'); +execSync('npm install --omit=dev', { + cwd: BUNDLE_DIR, + stdio: 'inherit', + env: { + ...process.env, + // Prevent npm from using workspace resolution + npm_config_workspace: '' + } +}); + +// Step 6: Rebuild native modules for current architecture +// This is critical for modules like node-pty that have native bindings +console.log('šŸ”Ø Rebuilding native modules for current architecture...'); +try { + execSync('npm rebuild', { + cwd: BUNDLE_DIR, + stdio: 'inherit' + }); + console.log('āœ… Native modules rebuilt successfully'); +} catch (error) { + console.warn('āš ļø Warning: Failed to rebuild native modules. Terminal functionality may not work.'); + console.warn(' Error:', error.message); +} + +console.log('\nāœ… Server prepared for bundling at:', BUNDLE_DIR); diff --git a/apps/app/scripts/rebuild-server-natives.js b/apps/app/scripts/rebuild-server-natives.js new file mode 100644 index 00000000..c2eef844 --- /dev/null +++ b/apps/app/scripts/rebuild-server-natives.js @@ -0,0 +1,66 @@ +#!/usr/bin/env node + +/** + * Electron-builder afterPack hook + * Rebuilds native modules in the server bundle for the target architecture + */ + +const { exec } = require('child_process'); +const { promisify } = require('util'); +const path = require('path'); + +const execAsync = promisify(exec); + +exports.default = async function(context) { + const { appOutDir, electronPlatformName, arch, packager } = context; + const electronVersion = packager.config.electronVersion; + + // Convert arch to string if it's a number (electron-builder sometimes passes indices) + const archNames = ['ia32', 'x64', 'armv7l', 'arm64', 'universal']; + const archStr = typeof arch === 'number' ? archNames[arch] : arch; + + console.log(`\nšŸ”Ø Rebuilding server native modules for ${electronPlatformName}-${archStr}...`); + + // Path to server node_modules in the packaged app + let serverNodeModulesPath; + if (electronPlatformName === 'darwin') { + serverNodeModulesPath = path.join( + appOutDir, + `${packager.appInfo.productName}.app`, + 'Contents', + 'Resources', + 'server', + 'node_modules' + ); + } else if (electronPlatformName === 'win32') { + serverNodeModulesPath = path.join( + appOutDir, + 'resources', + 'server', + 'node_modules' + ); + } else { + serverNodeModulesPath = path.join( + appOutDir, + 'resources', + 'server', + 'node_modules' + ); + } + + try { + // Rebuild native modules for the target architecture + const rebuildCmd = `npx --yes @electron/rebuild --version=${electronVersion} --arch=${archStr} --force --module-dir="${serverNodeModulesPath}/.."`; + + console.log(` Command: ${rebuildCmd}`); + + const { stdout, stderr } = await execAsync(rebuildCmd); + if (stdout) console.log(stdout); + if (stderr) console.error(stderr); + + console.log(`āœ… Server native modules rebuilt successfully for ${archStr}\n`); + } catch (error) { + console.error(`āŒ Failed to rebuild server native modules:`, error.message); + // Don't fail the build, just warn + } +}; diff --git a/apps/app/src/components/dialogs/file-browser-dialog.tsx b/apps/app/src/components/dialogs/file-browser-dialog.tsx index 29c183f1..e16c2a43 100644 --- a/apps/app/src/components/dialogs/file-browser-dialog.tsx +++ b/apps/app/src/components/dialogs/file-browser-dialog.tsx @@ -113,8 +113,8 @@ export function FileBrowserDialog({ return ( - - + + {title} @@ -124,7 +124,7 @@ export function FileBrowserDialog({ -
+
{/* Drives selector (Windows only) */} {drives.length > 0 && (
@@ -216,7 +216,7 @@ export function FileBrowserDialog({
- + diff --git a/apps/app/src/components/layout/sidebar.tsx b/apps/app/src/components/layout/sidebar.tsx index dce4a435..1f110fb7 100644 --- a/apps/app/src/components/layout/sidebar.tsx +++ b/apps/app/src/components/layout/sidebar.tsx @@ -239,6 +239,25 @@ export function Sidebar() { // Ref for project search input const projectSearchInputRef = useRef(null); + // Auto-collapse sidebar on small screens + useEffect(() => { + const mediaQuery = window.matchMedia('(max-width: 1024px)'); // lg breakpoint + + const handleResize = () => { + if (mediaQuery.matches && sidebarOpen) { + // Auto-collapse on small screens + toggleSidebar(); + } + }; + + // Check on mount + handleResize(); + + // Listen for changes + mediaQuery.addEventListener('change', handleResize); + return () => mediaQuery.removeEventListener('change', handleResize); + }, [sidebarOpen, toggleSidebar]); + // Filtered projects based on search query const filteredProjects = useMemo(() => { if (!projectSearchQuery.trim()) { diff --git a/apps/app/src/components/new-project-modal.tsx b/apps/app/src/components/new-project-modal.tsx index fd1429de..2e54c8f4 100644 --- a/apps/app/src/components/new-project-modal.tsx +++ b/apps/app/src/components/new-project-modal.tsx @@ -198,7 +198,10 @@ export function NewProjectModal({ } }; - const projectPath = workspaceDir && projectName ? `${workspaceDir}/${projectName}` : ""; + // Use platform-specific path separator + const pathSep = typeof window !== 'undefined' && (window as any).electronAPI ? + (navigator.platform.indexOf('Win') !== -1 ? '\\' : '/') : '/'; + const projectPath = workspaceDir && projectName ? `${workspaceDir}${pathSep}${projectName}` : ""; return ( diff --git a/apps/app/src/components/views/interview-view.tsx b/apps/app/src/components/views/interview-view.tsx index 78110faa..75007a8c 100644 --- a/apps/app/src/components/views/interview-view.tsx +++ b/apps/app/src/components/views/interview-view.tsx @@ -305,7 +305,10 @@ export function InterviewView() { try { const api = getElectronAPI(); - const fullProjectPath = `${projectPath}/${projectName}`; + // Use platform-specific path separator + const pathSep = typeof window !== 'undefined' && (window as any).electronAPI ? + (navigator.platform.indexOf('Win') !== -1 ? '\\' : '/') : '/'; + const fullProjectPath = `${projectPath}${pathSep}${projectName}`; // Create project directory await api.mkdir(fullProjectPath); diff --git a/apps/server/src/routes/templates.ts b/apps/server/src/routes/templates.ts index a4f5504c..b3b62622 100644 --- a/apps/server/src/routes/templates.ts +++ b/apps/server/src/routes/templates.ts @@ -34,6 +34,8 @@ export function createTemplatesRoutes(): Router { return; } + console.log(`[Templates] Clone request - Repo: ${repoUrl}, Project: ${projectName}, Parent: ${parentDir}`); + // Validate repo URL is a valid GitHub URL const githubUrlPattern = /^https:\/\/github\.com\/[\w-]+\/[\w.-]+$/; if (!githubUrlPattern.test(repoUrl)) { @@ -79,12 +81,32 @@ export function createTemplatesRoutes(): Router { // Ensure parent directory exists try { - await fs.mkdir(parentDir, { recursive: true }); + // Check if parentDir is a root path (Windows: C:\, D:\, etc. or Unix: /) + const isWindowsRoot = /^[A-Za-z]:\\?$/.test(parentDir); + const isUnixRoot = parentDir === '/' || parentDir === ''; + const isRoot = isWindowsRoot || isUnixRoot; + + if (isRoot) { + // Root paths always exist, just verify access + console.log(`[Templates] Using root path: ${parentDir}`); + await fs.access(parentDir); + } else { + // Check if parent directory exists + const parentExists = await fs.access(parentDir).then(() => true).catch(() => false); + + if (!parentExists) { + console.log(`[Templates] Creating parent directory: ${parentDir}`); + await fs.mkdir(parentDir, { recursive: true }); + } else { + console.log(`[Templates] Parent directory exists: ${parentDir}`); + } + } } catch (error) { - console.error("[Templates] Failed to create parent directory:", error); + const errorMessage = error instanceof Error ? error.message : String(error); + console.error("[Templates] Failed to access parent directory:", parentDir, error); res.status(500).json({ success: false, - error: "Failed to create parent directory", + error: `Failed to access parent directory: ${errorMessage}`, }); return; } diff --git a/package-lock.json b/package-lock.json index 3268efa5..b2bf3f97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,13 +56,13 @@ "@types/react": "^19", "@types/react-dom": "^19", "concurrently": "^9.2.1", - "electron": "^39.2.6", + "electron": "39.2.7", "electron-builder": "^26.0.12", "eslint": "^9", "eslint-config-next": "16.0.7", "tailwindcss": "^4", "tw-animate-css": "^1.4.0", - "typescript": "^5", + "typescript": "5.9.3", "wait-on": "^9.0.3" }, "optionalDependencies": { @@ -419,26 +419,6 @@ "node": ">= 10.0.0" } }, - "apps/app/node_modules/@electron/get": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, "apps/app/node_modules/@electron/node-gyp": { "version": "10.2.0-electron.1", "dev": true, @@ -2467,33 +2447,11 @@ "dev": true, "license": "MIT" }, - "apps/app/node_modules/@sindresorhus/is": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, "apps/app/node_modules/@standard-schema/spec": { "version": "1.0.0", "dev": true, "license": "MIT" }, - "apps/app/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "apps/app/node_modules/@tailwindcss/node": { "version": "4.1.17", "dev": true, @@ -2604,17 +2562,6 @@ "node": ">= 10" } }, - "apps/app/node_modules/@types/cacheable-request": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, "apps/app/node_modules/@types/debug": { "version": "4.1.12", "license": "MIT", @@ -2648,11 +2595,6 @@ "@types/unist": "*" } }, - "apps/app/node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "dev": true, - "license": "MIT" - }, "apps/app/node_modules/@types/json-schema": { "version": "7.0.15", "dev": true, @@ -2663,14 +2605,6 @@ "dev": true, "license": "MIT" }, - "apps/app/node_modules/@types/keyv": { - "version": "3.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "apps/app/node_modules/@types/mdast": { "version": "4.0.4", "license": "MIT", @@ -2707,14 +2641,6 @@ "@types/react": "^19.2.0" } }, - "apps/app/node_modules/@types/responselike": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "apps/app/node_modules/@types/unist": { "version": "3.0.3", "license": "MIT" @@ -2725,15 +2651,6 @@ "license": "MIT", "optional": true }, - "apps/app/node_modules/@types/yauzl": { - "version": "2.10.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "apps/app/node_modules/@typescript-eslint/eslint-plugin": { "version": "8.48.1", "dev": true, @@ -3575,12 +3492,6 @@ "readable-stream": "^3.4.0" } }, - "apps/app/node_modules/boolean": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true - }, "apps/app/node_modules/braces": { "version": "3.0.3", "dev": true, @@ -3647,14 +3558,6 @@ "ieee754": "^1.1.13" } }, - "apps/app/node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "apps/app/node_modules/buffer-from": { "version": "1.1.2", "dev": true, @@ -3857,31 +3760,6 @@ "node": ">=18" } }, - "apps/app/node_modules/cacheable-lookup": { - "version": "5.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "apps/app/node_modules/cacheable-request": { - "version": "7.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "apps/app/node_modules/call-bind": { "version": "1.0.8", "dev": true, @@ -4066,17 +3944,6 @@ "node": ">=0.8" } }, - "apps/app/node_modules/clone-response": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/clsx": { "version": "2.1.1", "license": "MIT", @@ -4338,31 +4205,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "apps/app/node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/app/node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/deep-is": { "version": "0.1.4", "dev": true, @@ -4379,46 +4221,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "apps/app/node_modules/defer-to-connect": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "apps/app/node_modules/define-data-property": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "apps/app/node_modules/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "apps/app/node_modules/delayed-stream": { "version": "1.0.0", "dev": true, @@ -4434,12 +4236,6 @@ "node": ">=6" } }, - "apps/app/node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true - }, "apps/app/node_modules/detect-node-es": { "version": "1.1.0", "license": "MIT" @@ -4587,23 +4383,6 @@ "node": ">=0.10.0" } }, - "apps/app/node_modules/electron": { - "version": "39.2.6", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^22.7.7", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, "apps/app/node_modules/electron-builder": { "version": "26.0.12", "dev": true, @@ -4757,14 +4536,6 @@ "node": ">=6 <7 || >=8" } }, - "apps/app/node_modules/electron/node_modules/@types/node": { - "version": "22.19.1", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, "apps/app/node_modules/encoding": { "version": "0.1.13", "dev": true, @@ -4774,14 +4545,6 @@ "iconv-lite": "^0.6.2" } }, - "apps/app/node_modules/end-of-stream": { - "version": "1.4.5", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "apps/app/node_modules/enhanced-resolve": { "version": "5.18.3", "dev": true, @@ -4794,14 +4557,6 @@ "node": ">=10.13.0" } }, - "apps/app/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "apps/app/node_modules/err-code": { "version": "2.0.3", "dev": true, @@ -4941,12 +4696,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "apps/app/node_modules/es6-error": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, "apps/app/node_modules/escalade": { "version": "3.2.0", "dev": true, @@ -4955,17 +4704,6 @@ "node": ">=6" } }, - "apps/app/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/eslint": { "version": "9.39.1", "dev": true, @@ -5365,25 +5103,6 @@ "version": "3.0.2", "license": "MIT" }, - "apps/app/node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, "apps/app/node_modules/extsprintf": { "version": "1.4.1", "dev": true, @@ -5437,14 +5156,6 @@ "reusify": "^1.0.4" } }, - "apps/app/node_modules/fd-slicer": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, "apps/app/node_modules/file-entry-cache": { "version": "8.0.0", "dev": true, @@ -5600,19 +5311,6 @@ "node": ">= 6" } }, - "apps/app/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, "apps/app/node_modules/fs-minipass": { "version": "2.1.0", "dev": true, @@ -5699,20 +5397,6 @@ "node": ">=6" } }, - "apps/app/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/get-symbol-description": { "version": "1.1.0", "dev": true, @@ -5759,35 +5443,6 @@ "node": ">=10.13.0" } }, - "apps/app/node_modules/global-agent": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "apps/app/node_modules/global-agent/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "apps/app/node_modules/globals": { "version": "14.0.0", "dev": true, @@ -5799,50 +5454,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "apps/app/node_modules/globalthis": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "apps/app/node_modules/got": { - "version": "11.8.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "apps/app/node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, "apps/app/node_modules/graphemer": { "version": "1.4.0", "dev": true, @@ -5859,17 +5470,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "apps/app/node_modules/has-property-descriptors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "apps/app/node_modules/has-proto": { "version": "1.2.0", "dev": true, @@ -5982,11 +5582,6 @@ "url": "https://opencollective.com/unified" } }, - "apps/app/node_modules/http-cache-semantics": { - "version": "4.2.0", - "dev": true, - "license": "BSD-2-Clause" - }, "apps/app/node_modules/http-proxy-agent": { "version": "7.0.2", "dev": true, @@ -5999,18 +5594,6 @@ "node": ">= 14" } }, - "apps/app/node_modules/http2-wrapper": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, "apps/app/node_modules/https-proxy-agent": { "version": "7.0.6", "dev": true, @@ -6711,11 +6294,6 @@ "node": ">=6" } }, - "apps/app/node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, "apps/app/node_modules/json-schema-traverse": { "version": "0.4.1", "dev": true, @@ -6726,12 +6304,6 @@ "dev": true, "license": "MIT" }, - "apps/app/node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "optional": true - }, "apps/app/node_modules/json5": { "version": "2.2.3", "dev": true, @@ -6743,14 +6315,6 @@ "node": ">=6" } }, - "apps/app/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "apps/app/node_modules/jsx-ast-utils": { "version": "3.3.5", "dev": true, @@ -6765,14 +6329,6 @@ "node": ">=4.0" } }, - "apps/app/node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, "apps/app/node_modules/language-subtag-registry": { "version": "0.3.23", "dev": true, @@ -6910,14 +6466,6 @@ "loose-envify": "cli.js" } }, - "apps/app/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "apps/app/node_modules/lru-cache": { "version": "5.1.1", "dev": true, @@ -6970,18 +6518,6 @@ "node": ">=16 || 14 >=14.17" } }, - "apps/app/node_modules/matcher": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "apps/app/node_modules/mdast-util-from-markdown": { "version": "2.0.2", "license": "MIT", @@ -7569,14 +7105,6 @@ "node": ">= 0.6" } }, - "apps/app/node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "apps/app/node_modules/minipass": { "version": "3.3.6", "dev": true, @@ -7911,25 +7439,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "apps/app/node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/app/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "apps/app/node_modules/object.assign": { "version": "4.1.7", "dev": true, @@ -8064,14 +7573,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "apps/app/node_modules/p-cancelable": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "apps/app/node_modules/p-limit": { "version": "3.1.0", "dev": true, @@ -8210,11 +7711,6 @@ "url": "https://github.com/sponsors/jet2jet" } }, - "apps/app/node_modules/pend": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, "apps/app/node_modules/picomatch": { "version": "2.3.1", "dev": true, @@ -8344,14 +7840,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "apps/app/node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "apps/app/node_modules/promise-inflight": { "version": "1.0.1", "dev": true, @@ -8392,15 +7880,6 @@ "dev": true, "license": "MIT" }, - "apps/app/node_modules/pump": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "apps/app/node_modules/queue-microtask": { "version": "1.2.3", "dev": true, @@ -8420,17 +7899,6 @@ ], "license": "MIT" }, - "apps/app/node_modules/quick-lru": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/react-is": { "version": "16.13.1", "dev": true, @@ -8660,11 +8128,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "apps/app/node_modules/resolve-alpn": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, "apps/app/node_modules/resolve-from": { "version": "4.0.0", "dev": true, @@ -8673,17 +8136,6 @@ "node": ">=4" } }, - "apps/app/node_modules/responselike": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/restore-cursor": { "version": "3.1.0", "dev": true, @@ -8727,23 +8179,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "apps/app/node_modules/roarr": { - "version": "2.15.4", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, "apps/app/node_modules/run-parallel": { "version": "1.2.0", "dev": true, @@ -8844,27 +8279,6 @@ "semver": "bin/semver.js" } }, - "apps/app/node_modules/semver-compare": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "apps/app/node_modules/serialize-error": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/set-function-length": { "version": "1.2.2", "dev": true, @@ -9023,12 +8437,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "apps/app/node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause", - "optional": true - }, "apps/app/node_modules/ssri": { "version": "12.0.0", "dev": true, @@ -9287,17 +8695,6 @@ "inline-style-parser": "0.2.7" } }, - "apps/app/node_modules/sumchecker": { - "version": "3.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, "apps/app/node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "dev": true, @@ -9610,18 +9007,6 @@ "node": ">= 0.8.0" } }, - "apps/app/node_modules/type-fest": { - "version": "0.13.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/app/node_modules/typed-array-buffer": { "version": "1.0.3", "dev": true, @@ -9828,14 +9213,6 @@ "url": "https://opencollective.com/unified" } }, - "apps/app/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "apps/app/node_modules/unrs-resolver": { "version": "1.11.1", "dev": true, @@ -10179,15 +9556,6 @@ "node": ">=12" } }, - "apps/app/node_modules/yauzl": { - "version": "2.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "apps/app/node_modules/yocto-queue": { "version": "0.1.0", "dev": true, @@ -10591,6 +9959,63 @@ "resolved": "apps/server", "link": true }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@electron/get/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@emnapi/runtime": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", @@ -11643,6 +11068,19 @@ "node": ">= 10" } }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -11652,6 +11090,19 @@ "tslib": "^2.8.0" } }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tailwindcss/oxide-android-arm64": { "version": "4.1.17", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.17.tgz", @@ -11846,6 +11297,19 @@ "@types/node": "*" } }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -11891,6 +11355,13 @@ "@types/send": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/http-errors": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", @@ -11898,6 +11369,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "20.19.26", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.26.tgz", @@ -11922,6 +11403,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/send": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", @@ -11953,6 +11444,17 @@ "@types/node": "*" } }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@xterm/addon-fit": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.10.0.tgz", @@ -12202,6 +11704,15 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/boxen": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", @@ -12236,6 +11747,16 @@ "concat-map": "0.0.1" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -12245,6 +11766,51 @@ "node": ">= 0.8" } }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -12406,6 +11972,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -12540,6 +12119,35 @@ "ms": "2.0.0" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -12550,6 +12158,52 @@ "node": ">=4.0.0" } }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -12569,6 +12223,14 @@ "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/dotenv": { "version": "17.2.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", @@ -12608,6 +12270,35 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/electron": { + "version": "39.2.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-39.2.7.tgz", + "integrity": "sha512-KU0uFS6LSTh4aOIC3miolcbizOFP7N1M46VTYVfqIgFiuA2ilfNaOHLDS9tCMvwwHRowAsvqBrh9NgMXcTOHCQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^22.7.7", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "22.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.2.tgz", + "integrity": "sha512-LPM2G3Syo1GLzXLGJAKdqoU35XvrWzGJ21/7sgZTUpbkBaOasTj8tjwn6w+hCkqaa1TfJ/w67rJSwYItlJ2mYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -12624,6 +12315,26 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -12654,6 +12365,14 @@ "node": ">= 0.4" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/esbuild": { "version": "0.27.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.1.tgz", @@ -12702,6 +12421,19 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -12839,6 +12571,68 @@ "node": ">= 0.6" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -12846,6 +12640,16 @@ "dev": true, "license": "MIT" }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/finalhandler": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", @@ -12908,6 +12712,21 @@ "node": ">= 0.8" } }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -13004,6 +12823,42 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -13016,6 +12871,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13026,6 +12914,19 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -13050,6 +12951,13 @@ "node": ">= 0.4" } }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -13070,6 +12978,20 @@ "url": "https://opencollective.com/express" } }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -13196,6 +13118,13 @@ "dev": true, "license": "ISC" }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -13203,6 +13132,34 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/lightningcss-darwin-x64": { "version": "1.30.2", "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", @@ -13356,6 +13313,30 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -13435,6 +13416,16 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -13562,6 +13553,19 @@ "node-addon-api": "^7.1.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -13596,6 +13600,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -13643,6 +13657,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13676,6 +13700,13 @@ "dev": true, "license": "MIT" }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -13710,6 +13741,16 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -13723,6 +13764,17 @@ "node": ">= 0.10" } }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -13748,6 +13800,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -13854,6 +13919,13 @@ "node": ">=0.10.0" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -13864,6 +13936,38 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -13959,6 +14063,14 @@ "node": ">=10" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/send": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", @@ -14029,6 +14141,37 @@ "node": ">= 0.6" } }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serve": { "version": "14.2.5", "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz", @@ -14258,6 +14401,14 @@ "node": ">=0.10.0" } }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -14344,6 +14495,44 @@ } } }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/sumchecker/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sumchecker/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14456,6 +14645,16 @@ "dev": true, "license": "MIT" }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -14572,6 +14771,17 @@ } } }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", diff --git a/package.json b/package.json index 5ef7a387..724d9e23 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,9 @@ "build": "npm run build --workspace=apps/app", "build:server": "npm run build --workspace=apps/server", "build:electron": "npm run build:electron --workspace=apps/app", + "build:electron:win": "npm run build:electron:win --workspace=apps/app", + "build:electron:mac": "npm run build:electron:mac --workspace=apps/app", + "build:electron:linux": "npm run build:electron:linux --workspace=apps/app", "start": "npm run start --workspace=apps/app", "start:server": "npm run start --workspace=apps/server", "lint": "npm run lint --workspace=apps/app",