From 33f28a3d739f75b23d38eacf66edbac954486877 Mon Sep 17 00:00:00 2001 From: PageZ948 Date: Tue, 1 Sep 2026 18:02:14 +0000 Subject: [PATCH] feat: publish Alta Local Camera Discovery --- .gitignore | 11 + LICENSE | 21 + README.md | 71 + SECURITY.md | 16 + app.py | 135 ++ assets/icon.ico | Bin 0 -> 83635 bytes assets/icon.png | Bin 0 -> 194146 bytes main.js | 115 + package-lock.json | 3647 ++++++++++++++++++++++++++++++++ package.json | 74 + preload.js | 9 + requirements.txt | 1 + scripts/scan.js | 10 + src/app-protocol.js | 42 + src/discovery.js | 140 ++ src/scan-session.js | 60 + src/url-policy.js | 28 + static/alta-mark.png | Bin 0 -> 3872 bytes static/alta-video-logo.png | Bin 0 -> 7101 bytes static/app.js | 153 ++ static/export-utils.js | 5 + static/index.html | 80 + static/styles.css | 1 + test/app-protocol.test.js | 19 + test/discovery.test.js | 108 + test/electron-contract.test.js | 35 + test/scan-session.test.js | 72 + test/url-policy.test.js | 23 + test_app.py | 37 + test_export_utils.js | 26 + 30 files changed, 4939 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 app.py create mode 100644 assets/icon.ico create mode 100644 assets/icon.png create mode 100644 main.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 preload.js create mode 100644 requirements.txt create mode 100644 scripts/scan.js create mode 100644 src/app-protocol.js create mode 100644 src/discovery.js create mode 100644 src/scan-session.js create mode 100644 src/url-policy.js create mode 100644 static/alta-mark.png create mode 100644 static/alta-video-logo.png create mode 100644 static/app.js create mode 100644 static/export-utils.js create mode 100644 static/index.html create mode 100644 static/styles.css create mode 100644 test/app-protocol.test.js create mode 100644 test/discovery.test.js create mode 100644 test/electron-contract.test.js create mode 100644 test/scan-session.test.js create mode 100644 test/url-policy.test.js create mode 100644 test_app.py create mode 100644 test_export_utils.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ce5e3ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +node_modules/ +dist/ +.venv/ +__pycache__/ +*.py[cod] +.pytest_cache/ +.coverage +*.log +.DS_Store +Thumbs.db +SECURITY-REVIEW.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..228cb8b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Peji + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d3c899c --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# Alta Local Camera Discovery + +Standalone Electron utility for discovering Alta cloud-native cameras on the technician's current LAN. It listens for `_vaioncam._tcp.local` mDNS announcements and reports each camera's Alta Key, IP address, and hostname Web UI URL without Alta credentials or camera configuration changes. + +The original Python web prototype remains available in `app.py`; the Electron app performs discovery directly in its main process through a narrow, isolated preload bridge. `src/scan-session.js` owns the single-flight scan lifecycle, defensive result snapshot, and latest-scan camera URL authorization so Electron bootstrap code remains small and testable. + +## Run the Electron app + +```bash +npm install +npm start +``` + +## Use + +1. Connect the computer to the same LAN/VLAN as the cameras. +2. Select **Start discovery**. +3. Copy an individual Alta Key or select **Export CSV**. +4. Select a camera hostname to open its local HTTPS Web UI. + +The CSV filename is `alta-camera-keys.csv` and its columns are: + +```csv +Alta Key,IP Address,Hostname URL +``` + +## Download + +The current Windows x64 portable release is available from GitPeji: + +- [Download Alta Local Camera Discovery for Windows](https://git.pejicorp.com/peji/AltaNetowrkScanner/releases/download/v1.0.0/AltaLocalCameraDiscovery-1.0.0-portable.exe) +- [View source and release notes](https://git.pejicorp.com/peji/AltaNetowrkScanner) + +No installer or Alta credentials are required. The current Windows release is unsigned and may trigger Microsoft Defender SmartScreen; verify its SHA-256 against the checksum published with the release. + +## Build + +```bash +npm run build:win # Windows x64 portable EXE +npm run build:linux # Linux x64 AppImage +``` + +Artifacts are written under `dist/`. The Electron app icon is `assets/icon.png` / `assets/icon.ico`: the approved radar artwork in the Alta colourway with the Alta A layered above it. Release artifacts are built from clean, tagged source revisions and are not committed to the repository. + +## Verify + +```bash +npm run check +npm run scan +npm run build-test +npm run build-test:win +``` + +`npm run scan` exercises the same Node mDNS engine used by Electron. The legacy Python scanner can still be checked with: + +```bash +.venv/bin/python -m unittest -v test_app.py +``` + +## Security and limits + +- Renderer Node integration is disabled; context isolation and sandboxing are enabled. +- The UI is served from an allowlisted `app://` protocol; arbitrary local files and renderer permissions are denied. +- IPC accepts only the app's main frame at the exact packaged application URL. +- Discovery requires matching Alta Key/hostname, HTTPS port 443, and a valid private or link-local address; scans are concurrency- and result-bounded. +- External navigation is denied except a root HTTPS camera URL from the latest successful scan. +- CSV content is generated in the main process and written only through a native save dialog. +- Release builds are configured to disable Electron's Node/inspection/file-privilege fuses and enable ASAR integrity enforcement. +- mDNS normally does not cross VLANs or routed boundaries. +- mDNS advertisements are not cryptographically authenticated; results are correlated and constrained local announcements, not proof of device identity. +- Only powered, reachable cameras advertising `_vaioncam._tcp.local` are shown. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..ef1d60a --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,16 @@ +# Security + +Alta Local Camera Discovery does not request or store Alta credentials. It listens for local `_vaioncam._tcp.local` mDNS announcements, validates expected Alta camera record structure, and restricts privileged Electron actions to a narrow main-process policy. + +## Trust model + +- mDNS is unauthenticated LAN input. The app correlates service identity, camera key, hostname, port, and local address, but cannot cryptographically prove that an advertiser is a genuine Alta camera. +- Camera Web UI links are HTTPS root URLs authorised only by the latest successful scan. +- The Electron renderer is sandboxed, context-isolated, denied general permissions, and served through an allowlisted `app://` protocol. +- CSV generation and filesystem writes remain in the main process. + +## Release status + +Release assets are produced from tagged GitPeji commits with a locked dependency graph and published SHA-256 checksums. Windows artifacts are currently unsigned internal releases and may trigger Microsoft Defender SmartScreen. + +Report suspected issues through the repository issue tracker or directly to the internal tool owner. Do not include credentials, camera exports, or customer data in reports. diff --git a/app.py b/app.py new file mode 100644 index 0000000..c3dd851 --- /dev/null +++ b/app.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +import argparse +import json +import re +import threading +import time +from http import HTTPStatus +from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path + +from zeroconf import ServiceBrowser, ServiceInfo, ServiceListener, Zeroconf + +ROOT = Path(__file__).resolve().parent +SERVICE_TYPE = "_vaioncam._tcp.local." +KEY_PATTERN = re.compile(r"^[A-Z0-9]{4}(?:-[A-Z0-9]{4}){2}$") + + +def camera_from_service(name: str, hostname: str, addresses: list[str], port: int): + suffix = "." + SERVICE_TYPE + if not name.lower().endswith(suffix.lower()): + return None + alta_key = name[: -len(suffix)].upper() + if not KEY_PATTERN.fullmatch(alta_key): + return None + ipv4 = next((address for address in addresses if ":" not in address), None) + hostname = (hostname or "").rstrip(".") + return { + "alta_key": alta_key, + "hostname": hostname, + "web_ui_url": f"https://{hostname}" if hostname else "", + "ip_address": ipv4 or (addresses[0] if addresses else ""), + "port": port, + "service": SERVICE_TYPE.rstrip("."), + } + + +def normalize_results(rows): + unique = {} + for row in rows: + unique[(row["alta_key"], row.get("ip_address", ""))] = row + return sorted(unique.values(), key=lambda row: (row["alta_key"], row.get("ip_address", ""))) + + +class CameraListener(ServiceListener): + def __init__(self): + self.rows = [] + self.lock = threading.Lock() + + def _capture(self, zeroconf: Zeroconf, service_type: str, name: str): + info: ServiceInfo | None = zeroconf.get_service_info(service_type, name, timeout=2500) + if not info: + return + row = camera_from_service(name, info.server or "", info.parsed_addresses(), info.port) + if row: + with self.lock: + self.rows.append(row) + + def add_service(self, zeroconf, service_type, name): + self._capture(zeroconf, service_type, name) + + def update_service(self, zeroconf, service_type, name): + self._capture(zeroconf, service_type, name) + + def remove_service(self, zeroconf, service_type, name): + pass + + +def scan_cameras(timeout: float = 5.0): + listener = CameraListener() + zeroconf = Zeroconf() + browser = ServiceBrowser(zeroconf, SERVICE_TYPE, listener) + try: + time.sleep(timeout) + with listener.lock: + cameras = normalize_results(listener.rows) + finally: + browser.cancel() + zeroconf.close() + return cameras + + +class Handler(SimpleHTTPRequestHandler): + def __init__(self, *args, **kwargs): + super().__init__(*args, directory=str(ROOT / "static"), **kwargs) + + def log_message(self, fmt, *args): + print(f"{self.client_address[0]} - {fmt % args}") + + def _json(self, payload, status=HTTPStatus.OK): + body = json.dumps(payload).encode() + self.send_response(status) + self.send_header("Content-Type", "application/json; charset=utf-8") + self.send_header("Content-Length", str(len(body))) + self.send_header("Cache-Control", "no-store") + self.send_header("X-Content-Type-Options", "nosniff") + self.send_header("X-Frame-Options", "DENY") + self.end_headers() + self.wfile.write(body) + + def do_GET(self): + if self.path == "/api/health": + return self._json({"ok": True, "service": "Alta Camera Finder"}) + if self.path == "/api/scan": + started = time.monotonic() + try: + cameras = scan_cameras() + return self._json({ + "ok": True, + "count": len(cameras), + "duration_seconds": round(time.monotonic() - started, 1), + "cameras": cameras, + }) + except Exception as exc: + return self._json({"ok": False, "error": str(exc)}, HTTPStatus.INTERNAL_SERVER_ERROR) + if self.path == "/": + self.path = "/index.html" + return super().do_GET() + + +def main(): + parser = argparse.ArgumentParser(description="Discover Alta cloud-native cameras using mDNS") + parser.add_argument("--host", default="0.0.0.0") + parser.add_argument("--port", type=int, default=8787) + parser.add_argument("--scan", action="store_true", help="scan once and print JSON") + args = parser.parse_args() + if args.scan: + print(json.dumps(scan_cameras(), indent=2)) + return + server = ThreadingHTTPServer((args.host, args.port), Handler) + print(f"Alta Camera Finder listening on http://{args.host}:{args.port}", flush=True) + server.serve_forever() + + +if __name__ == "__main__": + main() diff --git a/assets/icon.ico b/assets/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0f0f221faa22dc5d58591021d095a299c7b799b8 GIT binary patch literal 83635 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�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 A(EtDd literal 0 HcmV?d00001 diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..daeb44bcb9c72cdd973e463d538459561abd1130 GIT binary patch literal 194146 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

~`dkVtf@cV_Y7RsP{1VJk-*!*KB-w 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

Oz?F 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 literal 0 HcmV?d00001 diff --git a/main.js b/main.js new file mode 100644 index 0000000..f0a2fa4 --- /dev/null +++ b/main.js @@ -0,0 +1,115 @@ +'use strict'; + +const { app, BrowserWindow, clipboard, dialog, ipcMain, net, protocol, shell } = require('electron'); +const fs = require('node:fs/promises'); +const path = require('node:path'); +const { pathToFileURL } = require('node:url'); +const { buildCsv } = require('./static/export-utils'); +const { APP_RENDERER_URL, resolveAppAssetPath } = require('./src/app-protocol'); +const { KEY_PATTERN } = require('./src/discovery'); +const { createScanSession } = require('./src/scan-session'); + +protocol.registerSchemesAsPrivileged([{ + scheme: 'app', + privileges: { standard: true, secure: true, supportFetchAPI: true }, +}]); + +let mainWindow = null; +const scanSession = createScanSession(); + +function isTrustedSender(event) { + if (!mainWindow || mainWindow.isDestroyed() || !event || !event.senderFrame) return false; + return event.sender === mainWindow.webContents && + event.senderFrame === mainWindow.webContents.mainFrame && + event.senderFrame.url === APP_RENDERER_URL; +} + +function registerIpc(channel, handler) { + ipcMain.handle(channel, async (event, ...args) => { + if (!isTrustedSender(event)) throw new Error('Forbidden IPC sender'); + return handler(...args); + }); +} + +async function openCameraUrl(value) { + const url = scanSession.allowedCameraUrl(value); + if (!url) return; + await shell.openExternal(url); +} + +function registerIpcHandlers() { + registerIpc('scan-cameras', scanSession.scanOnce); + registerIpc('copy-text', (value) => { + const text = String(value || ''); + if (!KEY_PATTERN.test(text)) throw new Error('Invalid Alta Key.'); + clipboard.writeText(text); + return { ok: true }; + }); + registerIpc('export-csv', async () => { + const csv = buildCsv(scanSession.getLatestCameras()); + if (Buffer.byteLength(csv, 'utf8') > 1024 * 1024) throw new Error('CSV export is too large.'); + const result = await dialog.showSaveDialog(mainWindow, { + title: 'Export discovered Alta cameras', + defaultPath: 'alta-camera-keys.csv', + filters: [{ name: 'CSV file', extensions: ['csv'] }], + }); + if (result.canceled || !result.filePath) return { ok: false, canceled: true }; + await fs.writeFile(result.filePath, csv, 'utf8'); + return { ok: true, canceled: false }; + }); +} + +function registerAppProtocol() { + const staticDir = path.join(__dirname, 'static'); + protocol.handle('app', (request) => { + const assetPath = resolveAppAssetPath(request.url, staticDir); + if (!assetPath) return new Response('Not found', { status: 404 }); + return net.fetch(pathToFileURL(assetPath).href); + }); +} + +function denyRendererPermissions(targetSession) { + targetSession.setPermissionCheckHandler(() => false); + targetSession.setPermissionRequestHandler((_webContents, _permission, callback) => callback(false)); +} + +function createWindow() { + mainWindow = new BrowserWindow({ + width: 1180, + height: 760, + minWidth: 820, + minHeight: 620, + backgroundColor: '#f5f6f8', + icon: path.join(__dirname, 'assets', 'icon.png'), + title: 'Alta Local Camera Discovery', + autoHideMenuBar: true, + webPreferences: { + nodeIntegration: false, + contextIsolation: true, + sandbox: true, + preload: path.join(__dirname, 'preload.js'), + }, + }); + denyRendererPermissions(mainWindow.webContents.session); + mainWindow.webContents.setWindowOpenHandler(({ url }) => { + openCameraUrl(url).catch(() => {}); + return { action: 'deny' }; + }); + mainWindow.webContents.on('will-navigate', (event) => event.preventDefault()); + mainWindow.loadURL(APP_RENDERER_URL); + if (!app.isPackaged && process.argv.includes('--dev')) mainWindow.webContents.openDevTools(); +} + +app.whenReady().then(() => { + registerAppProtocol(); + registerIpcHandlers(); + createWindow(); +}); + +app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) createWindow(); +}); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') app.quit(); +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9fca720 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3647 @@ +{ + "name": "alta-local-camera-discovery", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "alta-local-camera-discovery", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "bonjour-service": "1.4.4" + }, + "devDependencies": { + "electron": "43.4.1", + "electron-builder": "26.15.3" + } + }, + "node_modules/@electron-internal/extract-zip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.5.tgz", + "integrity": "sha512-+bqFCP98pLI0Tt0XQo1TmlXtwjWchISndDOxCkEcIuUgXWpBnLyRI+2DU+mesvnMMX6L1XDqYNA0lXNDHd/yiA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/asar/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/get": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.1.0.tgz", + "integrity": "sha512-3kSBtG8ObcTVfXanm5vVJ6UnBLEVmVsRk1M+vGqCuMBV+XLCbJYuWQful+yIy0GQDsSlK0kHEriEHn7SPk4EnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", + "progress": "^2.0.3", + "semver": "^7.6.3", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=22.12.0" + }, + "optionalDependencies": { + "undici": "^7.24.4" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/rebuild": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.0.tgz", + "integrity": "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.1.1", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^12.2.0", + "read-binary-file-arch": "^1.0.6" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/universal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.3.1", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=16.4" + } + }, + "node_modules/@electron/universal/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" + }, + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@noble/hashes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.4.0.tgz", + "integrity": "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.4.tgz", + "integrity": "sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.7.1.tgz", + "integrity": "sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "tslib": "^2.8.1", + "webcrypto-core": "^1.9.2" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "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/@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/@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/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "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/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "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/@xmldom/xmldom": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.15.tgz", + "integrity": "sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-lib": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz", + "integrity": "sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "3.4.1", + "@electron/fuses": "^1.8.0", + "@electron/get": "^3.0.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.4", + "@electron/universal": "2.0.3", + "@malept/flatpak-bundler": "^0.4.0", + "@noble/hashes": "^2.2.0", + "@peculiar/webcrypto": "^1.7.1", + "@types/fs-extra": "9.0.13", + "ajv": "^8.18.0", + "asn1js": "^3.0.10", + "async-exit-hook": "^2.0.1", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chromium-pickle-js": "^0.2.0", + "ci-info": "4.3.1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.15.3", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.2.5", + "pkijs": "^3.4.0", + "plist": "3.1.0", + "proper-lockfile": "^4.1.2", + "resedit": "^1.7.0", + "semver": "~7.7.3", + "tar": "^7.5.7", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0", + "unzipper": "^0.12.3", + "which": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.15.3", + "electron-builder-squirrel-windows": "26.15.3" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", + "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": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/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/app-builder-lib/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/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/app-builder-lib/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/app-builder-lib/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/app-builder-lib/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/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/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.4.tgz", + "integrity": "sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "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/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.15.3.tgz", + "integrity": "sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.7.0.tgz", + "integrity": "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "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/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", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "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/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/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", + "optional": true, + "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", + "optional": true, + "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/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "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/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dir-compare/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-compare/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.15.3.tgz", + "integrity": "sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "fs-extra": "^10.1.0", + "js-yaml": "^4.1.0" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "43.4.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-43.4.1.tgz", + "integrity": "sha512-5b+EuiwkgG5iRcsEL34rimgRpkYp15SsfZOa0pC5kXs0Tb82TH4n95rpQzTZa7yRCbA7tm0WoEbuBL6NaAhAcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron-internal/extract-zip": "^1.0.1", + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0" + }, + "bin": { + "electron": "cli.js", + "install-electron": "install.js" + }, + "engines": { + "node": ">= 22.12.0" + } + }, + "node_modules/electron-builder": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz", + "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "dmg-builder": "26.15.3", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", + "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "electron-winstaller": "5.4.0" + } + }, + "node_modules/electron-publish": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz", + "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "aws4": "^1.13.2", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "form-data": "^4.0.5", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" + } + }, + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/electron-winstaller/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", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-winstaller/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", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "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/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz", + "integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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", + "optional": true, + "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", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "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", + "optional": true, + "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", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "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/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "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/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "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/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "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/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.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": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/node-abi": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.35.0.tgz", + "integrity": "sha512-ymk4aIzxdPopw2giv8Fs1Ec6vybGkjmyxUwVqhkI4MCy2tVfXdkOGGWieWVjL0THgH+7a8lRdevyupoYj3Js/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-gyp": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", + "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/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/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/node-gyp/node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.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/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", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "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/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/pkijs/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "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/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", + "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "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/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "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/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/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "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/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "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/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/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.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/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiny-async-pool": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "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/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.5.tgz", + "integrity": "sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "~3.7.2", + "duplexer2": "~0.1.4", + "fs-extra": "11.3.1", + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" + } + }, + "node_modules/unzipper/node_modules/fs-extra": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webcrypto-core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.9.2.tgz", + "integrity": "sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1cee01c --- /dev/null +++ b/package.json @@ -0,0 +1,74 @@ +{ + "name": "alta-local-camera-discovery", + "version": "1.0.0", + "description": "Standalone local discovery utility for Alta cloud-native cameras", + "desktopName": "Alta Local Camera Discovery", + "main": "main.js", + "author": "Peji", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://git.pejicorp.com/peji/AltaNetowrkScanner.git" + }, + "homepage": "https://git.pejicorp.com/peji/AltaNetowrkScanner", + "bugs": { + "url": "https://git.pejicorp.com/peji/AltaNetowrkScanner/issues" + }, + "scripts": { + "start": "electron .", + "dev": "electron . --dev", + "scan": "node scripts/scan.js", + "test": "node --test test/*.test.js && node test_export_utils.js", + "check": "npm test && node --check main.js && node --check preload.js && node --check static/app.js && node --check static/export-utils.js", + "build-test": "electron-builder --linux dir --publish=never", + "build:linux": "electron-builder --linux AppImage --publish=never", + "build-test:win": "electron-builder --win dir --publish=never", + "build:win": "electron-builder --win portable --publish=never" + }, + "build": { + "appId": "com.internal.alta-local-camera-discovery", + "productName": "Alta Local Camera Discovery", + "directories": { + "output": "dist" + }, + "files": [ + "main.js", + "preload.js", + "src/**/*", + "static/**/*", + "assets/**/*", + "package.json" + ], + "electronFuses": { + "runAsNode": false, + "enableCookieEncryption": true, + "enableNodeOptionsEnvironmentVariable": false, + "enableNodeCliInspectArguments": false, + "enableEmbeddedAsarIntegrityValidation": true, + "onlyLoadAppFromAsar": true, + "loadBrowserProcessSpecificV8Snapshot": false, + "grantFileProtocolExtraPrivileges": false + }, + "win": { + "target": "portable", + "icon": "assets/icon.ico" + }, + "portable": { + "artifactName": "AltaLocalCameraDiscovery-${version}-portable.exe" + }, + "linux": { + "target": "AppImage", + "icon": "assets/icon.png", + "category": "Utility", + "syncDesktopName": true, + "artifactName": "AltaLocalCameraDiscovery-${version}.${ext}" + } + }, + "dependencies": { + "bonjour-service": "1.4.4" + }, + "devDependencies": { + "electron": "43.4.1", + "electron-builder": "26.15.3" + } +} diff --git a/preload.js b/preload.js new file mode 100644 index 0000000..59f72e9 --- /dev/null +++ b/preload.js @@ -0,0 +1,9 @@ +'use strict'; + +const { contextBridge, ipcRenderer } = require('electron'); + +contextBridge.exposeInMainWorld('altaDiscovery', Object.freeze({ + scan: () => ipcRenderer.invoke('scan-cameras'), + copyText: (text) => ipcRenderer.invoke('copy-text', text), + exportCsv: () => ipcRenderer.invoke('export-csv'), +})); diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8c28113 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +zeroconf==0.147.0 diff --git a/scripts/scan.js b/scripts/scan.js new file mode 100644 index 0000000..0b81a20 --- /dev/null +++ b/scripts/scan.js @@ -0,0 +1,10 @@ +'use strict'; + +const { scanCameras } = require('../src/discovery'); + +scanCameras().then((cameras) => { + process.stdout.write(`${JSON.stringify(cameras, null, 2)}\n`); +}).catch((error) => { + process.stderr.write(`${error.message}\n`); + process.exitCode = 1; +}); diff --git a/src/app-protocol.js b/src/app-protocol.js new file mode 100644 index 0000000..80645e3 --- /dev/null +++ b/src/app-protocol.js @@ -0,0 +1,42 @@ +'use strict'; + +const path = require('node:path'); + +const APP_ORIGIN = 'app://bundle'; +const APP_RENDERER_URL = `${APP_ORIGIN}/index.html`; +const ALLOWED_RENDERER_ASSETS = new Set([ + 'index.html', + 'styles.css', + 'app.js', + 'export-utils.js', + 'alta-mark.png', + 'alta-video-logo.png', +]); + +function resolveAppAssetPath(value, staticDir) { + try { + const url = new URL(value); + if (url.protocol !== 'app:' || + url.hostname !== 'bundle' || + url.username !== '' || + url.password !== '' || + url.port !== '' || + url.hash !== '') { + return null; + } + const asset = decodeURIComponent(url.pathname).replace(/^\//, ''); + if (!asset || asset.includes('/') || asset.includes('\\') || !ALLOWED_RENDERER_ASSETS.has(asset)) { + return null; + } + return path.join(staticDir, asset); + } catch { + return null; + } +} + +module.exports = { + ALLOWED_RENDERER_ASSETS, + APP_ORIGIN, + APP_RENDERER_URL, + resolveAppAssetPath, +}; diff --git a/src/discovery.js b/src/discovery.js new file mode 100644 index 0000000..aa33ea6 --- /dev/null +++ b/src/discovery.js @@ -0,0 +1,140 @@ +'use strict'; + +const net = require('node:net'); +const { Bonjour } = require('bonjour-service'); + +const SERVICE_TYPE = 'vaioncam'; +const SERVICE_PROTOCOL = 'tcp'; +const SERVICE_PORT = 443; +const DEFAULT_MAX_RESULTS = 256; +const KEY_PATTERN = /^[A-Z0-9]{4}(?:-[A-Z0-9]{4}){2}$/; + +function altaKeyFromName(name) { + const raw = String(name || '').trim(); + const suffix = '._vaioncam._tcp.local'; + const candidate = raw.toLowerCase().endsWith(suffix) + ? raw.slice(0, -suffix.length) + : raw; + const altaKey = candidate.toUpperCase(); + return KEY_PATTERN.test(altaKey) ? altaKey : null; +} + +function normalizeIpAddress(value) { + const address = String(value || '').trim().split('%', 1)[0]; + return net.isIP(address) ? address.toLowerCase() : ''; +} + +function isLocalAddress(value) { + const address = normalizeIpAddress(value); + const family = net.isIP(address); + if (family === 4) { + const [first, second] = address.split('.').map(Number); + return first === 10 || + (first === 172 && second >= 16 && second <= 31) || + (first === 192 && second === 168) || + (first === 169 && second === 254); + } + if (family === 6) { + const firstGroup = Number.parseInt(address.split(':', 1)[0], 16); + return (firstGroup & 0xfe00) === 0xfc00 || (firstGroup & 0xffc0) === 0xfe80; + } + return false; +} + +function cameraFromService(service) { + if (!service || String(service.type || '').toLowerCase() !== SERVICE_TYPE) return null; + if (String(service.protocol || '').toLowerCase() !== SERVICE_PROTOCOL) return null; + if (service.port !== SERVICE_PORT) return null; + + const altaKey = altaKeyFromName(service.name || service.fqdn); + if (!altaKey) return null; + + const hostname = String(service.host || '').trim().replace(/\.$/, '').toLowerCase(); + const expectedHostname = `avacam-${altaKey.toLowerCase()}.local`; + if (hostname !== expectedHostname || hostname.length > 253) return null; + + const addresses = Array.isArray(service.addresses) + ? service.addresses.slice(0, 16).map(normalizeIpAddress).filter(isLocalAddress) + : []; + const ipAddress = addresses.find((address) => net.isIP(address) === 4) || addresses[0] || ''; + if (!ipAddress) return null; + + return { + alta_key: altaKey, + hostname, + web_ui_url: `https://${hostname}`, + ip_address: ipAddress, + port: SERVICE_PORT, + service: '_vaioncam._tcp.local', + }; +} + +function normalizeResults(rows) { + const unique = new Map(); + for (const row of rows) { + if (!row) continue; + unique.set(`${row.alta_key}\0${row.ip_address || ''}`, row); + } + return [...unique.values()].sort((a, b) => + a.alta_key.localeCompare(b.alta_key) || String(a.ip_address).localeCompare(String(b.ip_address)) + ); +} + +function scanCameras({ durationMs = 5000, maxResults = DEFAULT_MAX_RESULTS, BonjourClass = Bonjour } = {}) { + if (!Number.isFinite(durationMs) || durationMs < 1 || durationMs > 30000) { + return Promise.reject(new Error('Scan duration must be between 1 and 30000 milliseconds.')); + } + if (!Number.isInteger(maxResults) || maxResults < 1 || maxResults > 512) { + return Promise.reject(new Error('Maximum results must be between 1 and 512.')); + } + + return new Promise((resolve, reject) => { + const rows = []; + const seen = new Set(); + let bonjour; + let browser; + let timer; + let finished = false; + + const finish = (error) => { + if (finished) return; + finished = true; + if (timer) clearTimeout(timer); + try { if (browser) browser.stop(); } catch {} + try { if (bonjour) bonjour.destroy(); } catch {} + if (error) reject(error); else resolve(normalizeResults(rows)); + }; + + try { + bonjour = new BonjourClass(); + browser = bonjour.find({ type: SERVICE_TYPE, protocol: SERVICE_PROTOCOL }); + browser.on('up', (service) => { + if (finished) return; + const camera = cameraFromService(service); + if (!camera) return; + const identity = `${camera.alta_key}\0${camera.ip_address}`; + if (seen.has(identity)) return; + seen.add(identity); + rows.push(camera); + if (rows.length >= maxResults) finish(); + }); + browser.on('error', finish); + timer = setTimeout(() => finish(), durationMs); + } catch (error) { + finish(error); + } + }); +} + +module.exports = { + DEFAULT_MAX_RESULTS, + KEY_PATTERN, + SERVICE_PORT, + SERVICE_PROTOCOL, + SERVICE_TYPE, + altaKeyFromName, + cameraFromService, + isLocalAddress, + normalizeResults, + scanCameras, +}; diff --git a/src/scan-session.js b/src/scan-session.js new file mode 100644 index 0000000..f446a52 --- /dev/null +++ b/src/scan-session.js @@ -0,0 +1,60 @@ +'use strict'; + +const { performance } = require('node:perf_hooks'); +const { scanCameras } = require('./discovery'); +const { normalizeCameraUrl } = require('./url-policy'); + +function copyCameras(cameras) { + return cameras.map((camera) => ({ ...camera })); +} + +function createScanSession({ scan = scanCameras, now = () => performance.now() } = {}) { + let latestCameras = []; + let allowedCameraUrls = new Set(); + let scanInFlight = null; + + function getLatestCameras() { + return copyCameras(latestCameras); + } + + function allowedCameraUrl(value) { + const normalized = normalizeCameraUrl(value); + return normalized && allowedCameraUrls.has(normalized) ? normalized : null; + } + + function scanOnce() { + if (scanInFlight) return scanInFlight; + + latestCameras = []; + allowedCameraUrls = new Set(); + const started = now(); + let scanResult; + try { + scanResult = Promise.resolve(scan()); + } catch (error) { + scanResult = Promise.reject(error); + } + + let sharedPromise; + sharedPromise = scanResult + .then((cameras) => { + latestCameras = copyCameras(cameras); + allowedCameraUrls = new Set(latestCameras.map((camera) => camera.web_ui_url)); + return { + ok: true, + count: latestCameras.length, + duration_seconds: Number(((now() - started) / 1000).toFixed(1)), + cameras: getLatestCameras(), + }; + }) + .finally(() => { + if (scanInFlight === sharedPromise) scanInFlight = null; + }); + scanInFlight = sharedPromise; + return sharedPromise; + } + + return Object.freeze({ allowedCameraUrl, getLatestCameras, scanOnce }); +} + +module.exports = { createScanSession }; diff --git a/src/url-policy.js b/src/url-policy.js new file mode 100644 index 0000000..115acdc --- /dev/null +++ b/src/url-policy.js @@ -0,0 +1,28 @@ +'use strict'; + +const CAMERA_HOST_PATTERN = /^avacam-[a-z0-9]{4}(?:-[a-z0-9]{4}){2}\.local$/; + +function normalizeCameraUrl(value) { + try { + const url = new URL(value); + if (url.protocol !== 'https:' || + !CAMERA_HOST_PATTERN.test(url.hostname) || + url.username !== '' || + url.password !== '' || + url.port !== '' || + url.pathname !== '/' || + url.search !== '' || + url.hash !== '') { + return null; + } + return `https://${url.hostname}`; + } catch { + return null; + } +} + +function isCameraUrl(value) { + return normalizeCameraUrl(value) !== null; +} + +module.exports = { CAMERA_HOST_PATTERN, isCameraUrl, normalizeCameraUrl }; diff --git a/static/alta-mark.png b/static/alta-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5f461e3868d43674dd3950bc2c5425def71682 GIT binary patch literal 3872 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 { + const copyButton = event.target.closest('.copy-button'); + if (!copyButton) return; + try { + await copyText(copyButton.dataset.altaKey); + copyButton.textContent = 'Copied'; + copyButton.classList.add('copied'); + actionStatus.textContent = `${copyButton.dataset.altaKey} copied to clipboard.`; + window.setTimeout(() => { + copyButton.textContent = 'Copy key'; + copyButton.classList.remove('copied'); + }, 1800); + } catch (error) { + actionStatus.textContent = error.message; + } +}); + +exportButton.addEventListener('click', async () => { + if (window.altaDiscovery) { + try { + const result = await window.altaDiscovery.exportCsv(); + actionStatus.textContent = result.canceled ? 'CSV export canceled.' : 'CSV exported successfully.'; + } catch (error) { + actionStatus.textContent = error.message; + } + return; + } + const csv = AltaExportUtils.buildCsv(currentCameras); + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = 'alta-camera-keys.csv'; + document.body.append(link); + link.click(); + link.remove(); + URL.revokeObjectURL(url); + actionStatus.textContent = 'CSV exported with Alta Keys and camera Web UI URLs.'; +}); + +scanButton.addEventListener('click', async () => { + hidePanels(); + currentCameras = []; + scanButton.disabled = true; + scanButton.classList.add('scanning'); + buttonText.textContent = 'Scanning…'; + try { + let data; + if (window.altaDiscovery) { + data = await window.altaDiscovery.scan(); + } else { + const response = await fetch('/api/scan', { cache: 'no-store' }); + data = await response.json(); + if (!response.ok) throw new Error(data.error || 'The scanner returned an error.'); + } + if (!data.ok) throw new Error(data.error || 'The scanner returned an error.'); + currentCameras = data.cameras; + if (!currentCameras.length) { + empty.hidden = false; + } else { + list.replaceChildren(...currentCameras.map(cameraCard)); + title.textContent = `${data.count} camera${data.count === 1 ? '' : 's'} found`; + meta.textContent = `Scan completed in ${data.duration_seconds}s`; + results.hidden = false; + } + } catch (error) { + errorText.textContent = error.message; + errorBox.hidden = false; + } finally { + scanButton.disabled = false; + scanButton.classList.remove('scanning'); + buttonText.textContent = 'Discover again'; + } +}); diff --git a/static/export-utils.js b/static/export-utils.js new file mode 100644 index 0000000..29a7feb --- /dev/null +++ b/static/export-utils.js @@ -0,0 +1,5 @@ +(function(root,factory){const api=factory();if(typeof module==='object'&&module.exports)module.exports=api;else root.AltaExportUtils=api;})(typeof globalThis!=='undefined'?globalThis:this,function(){ + function csvCell(value){const text=String(value??'');return /[",\r\n]/.test(text)?`"${text.replaceAll('"','""')}"`:text} + function buildCsv(cameras){const rows=[['Alta Key','IP Address','Hostname URL'],...cameras.map(camera=>[camera.alta_key,camera.ip_address,camera.web_ui_url])];return rows.map(row=>row.map(csvCell).join(',')).join('\r\n')+'\r\n'} + return{buildCsv}; +}); diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..d53c136 --- /dev/null +++ b/static/index.html @@ -0,0 +1,80 @@ + + + + + + + Local Alta Camera Discovery + + + + + +

+
+ +
+
+ +
+
+

Local Alta Camera Discovery

+

Locate cloud-native Alta cameras available on this network and recover the information required for deployment.

+
+ +
+
+ +
+

Discover cameras on this network

+

The scan uses local mDNS announcements and does not access or modify camera configuration.

+
+
+
+ + Usually completes in 5 seconds +
+
+ + + + + + +
+ + + + diff --git a/static/styles.css b/static/styles.css new file mode 100644 index 0000000..2671696 --- /dev/null +++ b/static/styles.css @@ -0,0 +1 @@ +:root{color-scheme:light;--page:#f5f6f8;--surface:#fff;--surface-subtle:#f8f9fa;--ink:#171c26;--graphite:#3f444c;--muted:#697180;--line:#dfe3e8;--line-strong:#c9cfd7;--blue:#2457d6;--blue-hover:#1948bf;--success:#158267;--danger:#b4232c;--shadow:0 1px 2px rgba(19,27,38,.05),0 5px 18px rgba(19,27,38,.035)}*{box-sizing:border-box}html,body{min-height:100%}body{margin:0;background:var(--page);color:var(--ink);font-family:Inter,Arial,"Helvetica Neue",sans-serif;font-size:14px;-webkit-font-smoothing:antialiased}.topbar{height:88px;padding:0 40px;background:var(--surface);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.product-brand{height:100%;display:flex;align-items:center}.alta-logo{display:block;width:47px;height:auto;object-fit:contain}.environment-badge{display:flex;align-items:center;gap:8px;padding:7px 11px;border:1px solid var(--line);border-radius:4px;background:var(--surface-subtle);color:var(--muted);font-size:12px;font-weight:600}.environment-badge span{width:7px;height:7px;border-radius:50%;background:var(--success)}.app-shell{width:min(1120px,calc(100% - 56px));min-height:calc(100vh - 151px);margin:0 auto;padding:46px 0 64px}.page-heading{max-width:760px;margin-bottom:30px}.section-label{margin:0 0 11px;color:var(--muted);font-size:10px;font-weight:750;letter-spacing:.13em}.page-heading h1{margin:0 0 10px;font-size:32px;line-height:1.2;letter-spacing:-.026em;font-weight:680}.page-heading>p:last-child{max-width:690px;margin:0;color:var(--muted);font-size:15px;line-height:1.6}.discovery-panel{display:flex;align-items:center;justify-content:space-between;gap:30px;padding:25px 26px;background:var(--surface);border:1px solid var(--line);border-radius:7px;box-shadow:var(--shadow)}.discovery-copy{display:flex;align-items:center;gap:18px}.discovery-copy h2,.state-panel h2{margin:0 0 6px;font-size:17px;line-height:1.35;font-weight:680}.discovery-copy p,.state-panel p{margin:0;color:var(--muted);line-height:1.55}.network-icon{width:58px;height:58px;display:grid;place-items:center;flex:0 0 58px}.network-icon svg{width:54px;height:54px;fill:none;stroke:var(--blue);stroke-linecap:round;stroke-linejoin:round}.network-icon .radar-field{fill:rgba(36,87,214,.22);stroke-width:2.3}.network-icon .radar-sector{fill:#eef0f3;stroke:none}.network-icon .radar-ring,.network-icon .radar-sweep{stroke-width:2.15}.network-icon .radar-target{fill:#eef0f3;stroke:var(--blue);stroke-width:2.5}.scan-action{display:flex;align-items:center;gap:14px}.scan-action>span{white-space:nowrap;color:var(--muted);font-size:12px}.primary-button,.secondary-button,.copy-button{font:inherit;border-radius:5px;font-weight:650;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.primary-button{display:flex;align-items:center;justify-content:center;gap:9px;padding:11px 16px;border:1px solid var(--blue);background:var(--blue);color:#fff}.primary-button:hover{background:var(--blue-hover);border-color:var(--blue-hover)}.primary-button:focus-visible,.secondary-button:focus-visible,.copy-button:focus-visible{outline:3px solid rgba(36,87,214,.2);outline-offset:2px}.primary-button:disabled{opacity:.62;cursor:wait}.radar{width:12px;height:12px;border:2px solid currentColor;border-radius:50%;position:relative}.scanning .radar:after{content:"";position:absolute;inset:-6px;border:1px solid currentColor;border-radius:50%;animation:pulse 1.1s infinite}@keyframes pulse{to{transform:scale(1.45);opacity:0}}.results-panel,.state-panel{margin-top:24px;background:var(--surface);border:1px solid var(--line);border-radius:7px;box-shadow:var(--shadow)}.panel-header{padding:21px 24px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.panel-header h2{display:inline;margin:0 9px 0 0;font-size:18px;font-weight:680}.panel-header>div>span{font-size:12px;color:var(--muted)}.secondary-button,.copy-button{border:1px solid var(--line-strong);background:var(--surface);color:var(--ink)}.secondary-button{padding:9px 13px}.secondary-button:hover,.copy-button:hover{border-color:#8f99a8;background:var(--surface-subtle)}.table-head{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(180px,.7fr) 96px;gap:20px;padding:11px 24px;background:var(--surface-subtle);border-bottom:1px solid var(--line);color:var(--muted);font-size:10px;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.camera-list{display:grid}.camera{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(180px,.7fr) 96px;gap:20px;align-items:center;padding:18px 24px;border-bottom:1px solid var(--line)}.camera:last-child{border-bottom:0}.camera-key{font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:14px;font-weight:700;letter-spacing:.025em}.camera-host{display:inline-block;margin-top:6px;color:var(--blue);font-size:12px;text-decoration:none}.camera-host:hover{text-decoration:underline}.network-data{display:grid;gap:5px}.camera-ip{font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:12px}.network-label{color:var(--muted);font-size:11px}.copy-button{justify-self:end;padding:8px 12px;font-size:12px}.copy-button.copied{border-color:#8dc9ba;background:#f1faf7;color:#08715d}.panel-footer{min-height:43px;padding:12px 24px;border-top:1px solid var(--line);color:var(--muted);font-size:12px}.state-panel{padding:28px}.state-panel.error{border-left:3px solid var(--danger)}.state-panel.error h2{color:var(--danger)}.footer{height:63px;padding:0 40px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;color:#858c98;font-size:11px;background:#f8f9fa}@media(max-width:760px){.topbar{height:76px;padding:0 18px}.alta-logo{width:42px}.app-shell{width:min(100% - 28px,1120px);min-height:calc(100vh - 125px);padding-top:30px}.page-heading h1{font-size:27px}.discovery-panel,.scan-action{align-items:flex-start;flex-direction:column}.scan-action{width:100%}.primary-button{width:100%}.table-head{display:none}.camera{grid-template-columns:1fr auto;gap:14px}.network-data{grid-column:1}.copy-button{grid-column:2;grid-row:1 / span 2}.panel-header{align-items:flex-start;gap:14px}.panel-header h2{display:block}.panel-header>div>span{display:block;margin-top:4px}.footer{height:auto;padding:18px;gap:8px;align-items:flex-start;flex-direction:column}} diff --git a/test/app-protocol.test.js b/test/app-protocol.test.js new file mode 100644 index 0000000..728a48e --- /dev/null +++ b/test/app-protocol.test.js @@ -0,0 +1,19 @@ +'use strict'; + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const path = require('node:path'); +const { resolveAppAssetPath } = require('../src/app-protocol'); + +const staticDir = path.join(__dirname, '..', 'static'); + +test('app protocol resolves only explicitly packaged renderer assets', () => { + assert.equal(resolveAppAssetPath('app://bundle/index.html', staticDir), path.join(staticDir, 'index.html')); + assert.equal(resolveAppAssetPath('app://bundle/styles.css?v=12', staticDir), path.join(staticDir, 'styles.css')); + assert.equal(resolveAppAssetPath('app://bundle/alta-mark.png', staticDir), path.join(staticDir, 'alta-mark.png')); + assert.equal(resolveAppAssetPath('app://other/index.html', staticDir), null); + assert.equal(resolveAppAssetPath('app://bundle/../main.js', staticDir), null); + assert.equal(resolveAppAssetPath('app://bundle/%2e%2e/main.js', staticDir), null); + assert.equal(resolveAppAssetPath('file:///etc/passwd', staticDir), null); + assert.equal(resolveAppAssetPath('app://bundle/not-packaged.js', staticDir), null); +}); diff --git a/test/discovery.test.js b/test/discovery.test.js new file mode 100644 index 0000000..93b244f --- /dev/null +++ b/test/discovery.test.js @@ -0,0 +1,108 @@ +'use strict'; + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const { EventEmitter } = require('node:events'); +const { + altaKeyFromName, + cameraFromService, + isLocalAddress, + normalizeResults, + scanCameras, +} = require('../src/discovery'); + +const validService = (overrides = {}) => ({ + name: 'ABH7-C62U-GC3E', + type: 'vaioncam', + protocol: 'tcp', + host: 'avacam-abh7-c62u-gc3e.local.', + addresses: ['fe80::1', '10.0.0.223'], + port: 443, + ...overrides, +}); + +test('extracts an Alta Key from service names', () => { + assert.equal(altaKeyFromName('abh7-c62u-gc3e'), 'ABH7-C62U-GC3E'); + assert.equal(altaKeyFromName('ABH7-C62U-GC3E._vaioncam._tcp.local'), 'ABH7-C62U-GC3E'); + assert.equal(altaKeyFromName('not-a-key'), null); +}); + +test('projects a correlated local Bonjour service into a safe camera row', () => { + assert.deepEqual(cameraFromService(validService()), { + alta_key: 'ABH7-C62U-GC3E', + hostname: 'avacam-abh7-c62u-gc3e.local', + web_ui_url: 'https://avacam-abh7-c62u-gc3e.local', + ip_address: '10.0.0.223', + port: 443, + service: '_vaioncam._tcp.local', + }); +}); + +test('rejects uncorrelated or non-local service announcements', () => { + assert.equal(cameraFromService(validService({ type: undefined })), null); + assert.equal(cameraFromService(validService({ protocol: undefined })), null); + assert.equal(cameraFromService(validService({ host: 'avacam-attacker.local.' })), null); + assert.equal(cameraFromService(validService({ port: 8443 })), null); + assert.equal(cameraFromService(validService({ addresses: ['203.0.113.10'] })), null); + assert.equal(cameraFromService(validService({ addresses: [] })), null); +}); + +test('recognizes supported private and link-local IP scopes', () => { + for (const address of ['10.0.0.1', '172.16.0.1', '172.31.255.254', '192.168.1.1', '169.254.1.1', 'fe80::1', 'fc00::1', 'fd12::1']) { + assert.equal(isLocalAddress(address), true, address); + } + for (const address of ['8.8.8.8', '172.32.0.1', '2001:4860:4860::8888', 'not-an-ip']) { + assert.equal(isLocalAddress(address), false, address); + } +}); + +test('deduplicates and sorts cameras', () => { + const a = { alta_key: 'AHG2-Z4ND-FVRN', ip_address: '10.0.0.192' }; + const b = { alta_key: 'ABH7-C62U-GC3E', ip_address: '10.0.0.223' }; + assert.deepEqual(normalizeResults([a, b, a]), [b, a]); +}); + +test('scans through the Bonjour adapter and closes resources', async () => { + let browserStopped = false; + let bonjourDestroyed = false; + class FakeBonjour { + find(query) { + assert.deepEqual(query, { type: 'vaioncam', protocol: 'tcp' }); + const browser = new EventEmitter(); + browser.stop = () => { browserStopped = true; }; + process.nextTick(() => browser.emit('up', validService())); + return browser; + } + destroy() { bonjourDestroyed = true; } + } + const rows = await scanCameras({ durationMs: 5, BonjourClass: FakeBonjour }); + assert.equal(rows.length, 1); + assert.equal(rows[0].alta_key, 'ABH7-C62U-GC3E'); + assert.equal(browserStopped, true); + assert.equal(bonjourDestroyed, true); +}); + +test('caps scan results and closes discovery immediately at the cap', async () => { + let browserStopped = false; + class FakeBonjour { + find() { + const browser = new EventEmitter(); + browser.stop = () => { browserStopped = true; }; + process.nextTick(() => { + for (let index = 0; index < 10; index += 1) { + const key = `AAAA-BBBB-${String(index).padStart(4, '0')}`; + browser.emit('up', validService({ + name: key, + host: `avacam-${key.toLowerCase()}.local.`, + addresses: [`10.0.0.${index + 1}`], + })); + } + }); + return browser; + } + destroy() {} + } + const rows = await scanCameras({ durationMs: 1000, maxResults: 3, BonjourClass: FakeBonjour }); + assert.equal(rows.length, 3); + assert.equal(browserStopped, true); +}); diff --git a/test/electron-contract.test.js b/test/electron-contract.test.js new file mode 100644 index 0000000..e806c27 --- /dev/null +++ b/test/electron-contract.test.js @@ -0,0 +1,35 @@ +'use strict'; + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); + +const root = path.join(__dirname, '..'); + +test('Electron boundary stays isolated and packaged files are declared', () => { + const main = fs.readFileSync(path.join(root, 'main.js'), 'utf8'); + const preload = fs.readFileSync(path.join(root, 'preload.js'), 'utf8'); + const appProtocol = fs.readFileSync(path.join(root, 'src', 'app-protocol.js'), 'utf8'); + const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')); + assert.match(main, /nodeIntegration:\s*false/); + assert.match(main, /contextIsolation:\s*true/); + assert.match(main, /sandbox:\s*true/); + assert.match(main, /isTrustedSender/); + assert.match(main, /setPermissionCheckHandler/); + assert.match(main, /setPermissionRequestHandler/); + assert.match(main, /registerSchemesAsPrivileged/); + assert.match(appProtocol, /app:\/\/bundle/); + assert.doesNotMatch(main, /\.loadFile\s*\(/); + assert.doesNotMatch(preload, /require\(['"](?:node:)?(?:fs|child_process|dgram)/); + assert.match(preload, /exportCsv:\s*\(\)\s*=>\s*ipcRenderer\.invoke\('export-csv'\)/); + assert.ok(pkg.build.files.includes('src/**/*')); + assert.ok(pkg.build.files.includes('static/**/*')); + assert.equal(pkg.build.win.icon, 'assets/icon.ico'); + assert.equal(pkg.build.electronFuses.runAsNode, false); + assert.equal(pkg.build.electronFuses.enableNodeOptionsEnvironmentVariable, false); + assert.equal(pkg.build.electronFuses.enableNodeCliInspectArguments, false); + assert.equal(pkg.build.electronFuses.enableEmbeddedAsarIntegrityValidation, true); + assert.equal(pkg.build.electronFuses.onlyLoadAppFromAsar, true); + assert.equal(pkg.build.electronFuses.grantFileProtocolExtraPrivileges, false); +}); diff --git a/test/scan-session.test.js b/test/scan-session.test.js new file mode 100644 index 0000000..cab6f9a --- /dev/null +++ b/test/scan-session.test.js @@ -0,0 +1,72 @@ +'use strict'; + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const { createScanSession } = require('../src/scan-session'); + +const camera = { + alta_key: 'ABH7-C62U-GC3E', + hostname: 'avacam-abh7-c62u-gc3e.local', + web_ui_url: 'https://avacam-abh7-c62u-gc3e.local', + ip_address: '10.0.0.223', + port: 443, + service: '_vaioncam._tcp.local', +}; + +test('shares one scan, publishes defensive state, and binds camera URLs', async () => { + let scanCalls = 0; + let releaseScan; + const scan = () => { + scanCalls += 1; + return new Promise((resolve) => { releaseScan = resolve; }); + }; + const times = [1000, 2345]; + const session = createScanSession({ scan, now: () => times.shift() }); + + const first = session.scanOnce(); + const second = session.scanOnce(); + assert.strictEqual(first, second); + assert.equal(scanCalls, 1); + assert.equal(session.allowedCameraUrl(camera.web_ui_url), null); + assert.deepEqual(session.getLatestCameras(), []); + + releaseScan([camera]); + assert.deepEqual(await first, { + ok: true, + count: 1, + duration_seconds: 1.3, + cameras: [camera], + }); + assert.equal(session.allowedCameraUrl(camera.web_ui_url), camera.web_ui_url); + assert.equal(session.allowedCameraUrl(`${camera.web_ui_url}/?secret=value`), null); + assert.equal(session.allowedCameraUrl('https://avacam-ahg2-z4nd-fvrn.local'), null); + + const exposed = session.getLatestCameras(); + exposed[0].alta_key = 'MUTATED'; + assert.equal(session.getLatestCameras()[0].alta_key, camera.alta_key); +}); + +test('revokes prior state at rescan and permits retry after failure', async () => { + let call = 0; + let releaseSecondScan; + const scan = () => { + call += 1; + if (call === 1) return Promise.resolve([camera]); + if (call === 2) return new Promise((_resolve, reject) => { releaseSecondScan = reject; }); + return Promise.resolve([camera]); + }; + const session = createScanSession({ scan, now: () => 0 }); + + await session.scanOnce(); + assert.equal(session.allowedCameraUrl(camera.web_ui_url), camera.web_ui_url); + + const failed = session.scanOnce(); + assert.equal(session.allowedCameraUrl(camera.web_ui_url), null); + assert.deepEqual(session.getLatestCameras(), []); + releaseSecondScan(new Error('network failed')); + await assert.rejects(failed, /network failed/); + + const retried = await session.scanOnce(); + assert.equal(call, 3); + assert.equal(retried.count, 1); +}); diff --git a/test/url-policy.test.js b/test/url-policy.test.js new file mode 100644 index 0000000..75db008 --- /dev/null +++ b/test/url-policy.test.js @@ -0,0 +1,23 @@ +'use strict'; + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const { isCameraUrl, normalizeCameraUrl } = require('../src/url-policy'); + +const cameraUrl = 'https://avacam-abh7-c62u-gc3e.local'; + +test('permits only root local Alta camera HTTPS URLs', () => { + assert.equal(isCameraUrl(cameraUrl), true); + assert.equal(isCameraUrl('http://avacam-abh7-c62u-gc3e.local'), false); + assert.equal(isCameraUrl('https://example.com'), false); + assert.equal(isCameraUrl('https://user:pass@avacam-abh7-c62u-gc3e.local'), false); + assert.equal(isCameraUrl('https://avacam-abh7-c62u-gc3e.local:8443'), false); + assert.equal(isCameraUrl(`${cameraUrl}/anything`), false); + assert.equal(isCameraUrl(`${cameraUrl}/?secret=value`), false); + assert.equal(isCameraUrl(`${cameraUrl}/#fragment`), false); +}); + +test('normalizes camera URLs to their canonical form', () => { + assert.equal(normalizeCameraUrl(`${cameraUrl}/`), cameraUrl); + assert.equal(normalizeCameraUrl(`${cameraUrl.toUpperCase()}/`), cameraUrl); +}); diff --git a/test_app.py b/test_app.py new file mode 100644 index 0000000..6d6e2b8 --- /dev/null +++ b/test_app.py @@ -0,0 +1,37 @@ +import unittest + +from app import camera_from_service, normalize_results + + +class CameraDiscoveryTests(unittest.TestCase): + def test_extracts_alta_key_and_hostname(self): + camera = camera_from_service( + "ABH7-C62U-GC3E._vaioncam._tcp.local.", + "avacam-abh7-c62u-gc3e.local.", + ["10.0.0.223"], + 443, + ) + self.assertEqual(camera["alta_key"], "ABH7-C62U-GC3E") + self.assertEqual(camera["hostname"], "avacam-abh7-c62u-gc3e.local") + self.assertEqual(camera["web_ui_url"], "https://avacam-abh7-c62u-gc3e.local") + self.assertEqual(camera["ip_address"], "10.0.0.223") + + def test_rejects_non_camera_service(self): + self.assertIsNone(camera_from_service( + "printer._ipp._tcp.local.", "printer.local.", ["10.0.0.50"], 631 + )) + + def test_deduplicates_and_sorts_results(self): + rows = [ + {"alta_key": "BBBB-BBBB-BBBB", "ip_address": "10.0.0.2"}, + {"alta_key": "AAAA-AAAA-AAAA", "ip_address": "10.0.0.3"}, + {"alta_key": "BBBB-BBBB-BBBB", "ip_address": "10.0.0.2"}, + ] + self.assertEqual( + [row["alta_key"] for row in normalize_results(rows)], + ["AAAA-AAAA-AAAA", "BBBB-BBBB-BBBB"], + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/test_export_utils.js b/test_export_utils.js new file mode 100644 index 0000000..6eb9969 --- /dev/null +++ b/test_export_utils.js @@ -0,0 +1,26 @@ +const assert = require('node:assert/strict'); +const { buildCsv } = require('./static/export-utils.js'); + +const cameras = [ + { + alta_key: 'ABH7-C62U-GC3E', + hostname: 'avacam-abh7-c62u-gc3e.local', + web_ui_url: 'https://avacam-abh7-c62u-gc3e.local', + ip_address: '10.0.0.223', + }, + { + alta_key: 'AHG2-Z4ND-FVRN', + hostname: 'avacam-ahg2-z4nd-fvrn.local', + web_ui_url: 'https://avacam-ahg2-z4nd-fvrn.local', + ip_address: '10.0.0.192', + }, +]; + +assert.equal(require('./static/export-utils.js').buildKeyPaste, undefined); +assert.equal( + buildCsv(cameras), + 'Alta Key,IP Address,Hostname URL\r\n' + + 'ABH7-C62U-GC3E,10.0.0.223,https://avacam-abh7-c62u-gc3e.local\r\n' + + 'AHG2-Z4ND-FVRN,10.0.0.192,https://avacam-ahg2-z4nd-fvrn.local\r\n' +); +console.log('export-utils tests passed');