From 21ec46ef91227ff19618df95a2a07ffbeafa0ba7 Mon Sep 17 00:00:00 2001 From: jliddev Date: Sun, 19 Jul 2026 17:32:58 -0500 Subject: [PATCH] Move Warcraft platform detection to the main process Phase 1 of the UI-decoupling migration: adds WarcraftController and WarcraftPlatform (win/mac/linux) in app/, wires them up via registerControllers(), and replaces the renderer's warcraft.service.{impl,win,mac,linux}.ts with a thin warcraft-api.service.ts over IPC. Also included: CurseForge download auth headers, a couple of TS lint fixes, a globrex/minimist import fix, CLAUDE.md plus commit/patch-notes skills, and the 2.23.0-beta.1 version bump. Co-Authored-By: Claude Sonnet 5 --- .claude/skills/commit/SKILL.md | 62 + .claude/skills/patch-notes/SKILL.md | 93 + .vscode/tasks.json | 2 +- CLAUDE.md | 83 + wowup-electron/app/controllers/index.ts | 16 +- .../warcraft/warcraft.controller.ts | 57 + wowup-electron/app/ipc-events.ts | 12 +- wowup-electron/app/main.ts | 2 +- .../warcraft/warcraft-platform.linux.ts} | 158 +- .../warcraft/warcraft-platform.mac.ts} | 42 +- .../warcraft/warcraft-platform.service.ts | 85 + .../warcraft/warcraft-platform.win.ts} | 128 +- wowup-electron/app/tsconfig.json | 3 + wowup-electron/package-lock.json | 3691 ++++++++--------- wowup-electron/package.json | 25 +- .../addon-providers/curse-addon-provider.ts | 12 +- .../wow-client-options.component.ts | 23 +- .../services/addons/addon-install.service.ts | 5 +- .../src/app/services/addons/addon.service.ts | 2 +- .../app/services/api/warcraft-api.service.ts | 44 + .../app/services/electron/electron.service.ts | 2 +- .../warcraft/warcraft-installation.service.ts | 11 +- .../warcraft/warcraft.service.impl.ts | 11 - .../app/services/warcraft/warcraft.service.ts | 151 +- .../app/services/wowup/patch-notes.service.ts | 10 + wowup-electron/src/common/constants.ts | 8 + 26 files changed, 2509 insertions(+), 2229 deletions(-) create mode 100644 .claude/skills/commit/SKILL.md create mode 100644 .claude/skills/patch-notes/SKILL.md create mode 100644 CLAUDE.md create mode 100644 wowup-electron/app/controllers/warcraft/warcraft.controller.ts rename wowup-electron/{src/app/services/warcraft/warcraft.service.linux.ts => app/services/warcraft/warcraft-platform.linux.ts} (56%) rename wowup-electron/{src/app/services/warcraft/warcraft.service.mac.ts => app/services/warcraft/warcraft-platform.mac.ts} (73%) create mode 100644 wowup-electron/app/services/warcraft/warcraft-platform.service.ts rename wowup-electron/{src/app/services/warcraft/warcraft.service.win.ts => app/services/warcraft/warcraft-platform.win.ts} (51%) create mode 100644 wowup-electron/app/tsconfig.json create mode 100644 wowup-electron/src/app/services/api/warcraft-api.service.ts delete mode 100644 wowup-electron/src/app/services/warcraft/warcraft.service.impl.ts diff --git a/.claude/skills/commit/SKILL.md b/.claude/skills/commit/SKILL.md new file mode 100644 index 00000000..2e2b5b2f --- /dev/null +++ b/.claude/skills/commit/SKILL.md @@ -0,0 +1,62 @@ +--- +name: commit +description: "Commit whatever is currently staged, with a message drafted from the staged diff and this repo's commit style." +--- + +# Commit Staged Changes + +Commit **only what's already staged** — never stage anything yourself (`git add`, `git add -A`, +`git add .`) unless the user explicitly asks for that in this same turn. If the user wants +different files included, tell them to stage them (or ask which files) rather than guessing. + +## Step 1 — Look at what's staged + +Run these in parallel: +- `git status` — see staged vs. unstaged/untracked, so you don't confuse the two +- `git diff --staged` — the actual content to summarize +- `git log --oneline -10` — recent commit style to match + +If `git diff --staged` is empty, stop and tell the user nothing is staged. Don't stage +anything for them, don't commit an empty change. + +## Step 2 — Sanity-check what's staged + +Before drafting a message: +- If any staged file looks like it could hold secrets (`.env`, `credentials.json`, `*.pem`, + API keys, tokens) even from an innocuous-looking name, open it and check before proceeding. + Warn the user and ask before committing if it looks sensitive. +- If the staged diff mixes clearly unrelated changes (e.g. an unrelated formatting pass bundled + with a real fix), flag it to the user instead of silently writing one message that papers over + two different changes. + +## Step 3 — Draft the message + +Follow this repo's convention from `CLAUDE.md`: +- Present tense, imperative mood ("Add raiderio provider", not "Added raiderio provider") +- Subject line under 72 characters +- Focus on *why*, not a restatement of the diff — 1-2 sentences is enough; only add a body if the + reasoning isn't obvious from the subject alone +- Match the tone/format of the last few `git log` entries rather than inventing a new style + +## Step 4 — Commit + +``` +git commit -m "$(cat <<'EOF' + + + + +Co-Authored-By: Claude Sonnet 5 +EOF +)" +``` + +Then run `git status` to confirm the commit succeeded and the working tree is what's expected. + +If a pre-commit hook fails: fix the underlying issue, re-stage the fix, and create a **new** +commit — never `--amend` (the failed commit never happened, so amend would rewrite the prior +commit instead) and never `--no-verify` to skip the hook. + +## Step 5 — Hand off + +Report the commit hash and subject line. Don't push — that's a separate, explicit ask. diff --git a/.claude/skills/patch-notes/SKILL.md b/.claude/skills/patch-notes/SKILL.md new file mode 100644 index 00000000..564b5410 --- /dev/null +++ b/.claude/skills/patch-notes/SKILL.md @@ -0,0 +1,93 @@ +--- +name: patch-notes +description: "Generate an in-app patch notes entry for the current wowup-electron version, if one isn't already present in CHANGELOGS." +--- + +# Generate Patch Notes + +WowUp's in-app "What's New" dialog is driven by the `CHANGELOGS` array at the top of +[`wowup-electron/src/app/services/wowup/patch-notes.service.ts`](../../../wowup-electron/src/app/services/wowup/patch-notes.service.ts). +Each entry is `{ Version: string, html: string }`, newest first. Do **not** touch +`wowup-electron/src/assets/changelog.json` — that's a legacy file for pre-2.1.0 releases and is no longer +extended. + +## Step 1 — Determine the target version + +Read `version` from `wowup-electron/package.json`. Strip any pre-release/build suffix +(`-beta.1`, `-alpha.2`, etc.) — every existing `CHANGELOGS` entry uses a bare `X.Y.Z`, never a +pre-release tag. + +## Step 2 — Check if it already exists + +Search the `CHANGELOGS` array for an entry whose `Version` matches. If found, **stop** — tell the +user the entry already exists (quote it) and do not modify the file. + +## Step 3 — Find the source material + +The current top entry of `CHANGELOGS` is the previous released version. Find its git tag with +`git tag --list "v*" --sort=-v:refname` (tags follow `v2.22.1`, or +`v2.22.1-beta.N` if no stable tag was ever cut). Use the most relevant tag as the base and diff +to `HEAD`: + +``` +git log --oneline ..HEAD -- wowup-electron/src wowup-electron/app +``` + +If no matching tag exists at all, ask the user for the right base ref instead of guessing. + +If that tag *does* exist but the range is empty (`HEAD` is the tagged commit, i.e. everything +interesting is still uncommitted — this happens mid-release), fall back to +`git diff -- wowup-electron/src wowup-electron/app` and `git status` instead of +stopping. Don't ask the user to commit first; just work from the working tree. + +## Step 4 — Draft the entry + +Read the actual commits/diffs (not just messages) for anything non-obvious. Group into +whichever of these sections apply — skip empty ones, keep existing entries' ordering: + +1. `Features` (new user-facing capability) +2. `Changes` (behavior/UX tweaks, non-breaking) +3. `Fixes` (bug fixes) + +Write each bullet as a short, user-facing sentence (not a commit message) — no ticket numbers, +no internal file paths, no "refactor"/"chore" noise. Skip commits/diff hunks that are purely +internal (lint, tests, CI, dependency bumps, config/build tooling, the ongoing UI-decoupling +migration) unless they fix a user-visible bug. Match the plain style of the two most recent +entries (`2.22.1`, `2.22.0`) — no inline `style=` attributes, just: + +```html +

Features

+
    +
  • ...
  • +
+

Fixes

+
    +
  • ...
  • +
+``` + +**If nothing user-facing survives that filter** (everything found is internal refactor, tooling, +or config), don't stop and ask what to write. Fall back to a minimal default entry instead — +this mirrors how past releases with a quiet cycle were actually written (see `2.22.1`'s own +"Various bug fixes"): + +```html +

Fixes

+
    +
  • Various bug fixes and improvements
  • +
+``` + +Flag clearly in the hand-off (Step 6) that the default was used and why, so it's obvious this is +a placeholder rather than a researched entry. + +## Step 5 — Insert + +Add the new `{ Version, html }` object as the **first** element of the `CHANGELOGS` array +(right after `const CHANGELOGS: ChangeLog[] = [`), preserving the descending-version order of +every entry after it. + +## Step 6 — Hand off + +Show the user the diff. This is a first draft of customer-facing release copy — tell them to +proofread wording/ordering before it ships, don't present it as final. diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 0d269391..e9e3c77c 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -110,7 +110,7 @@ "endsPattern": "^.*Terminal will be reused by tasks, press any key to close it.*" } }, - "dependsOn": ["Build.Lib"] + "dependsOn": ["Build.Lib", "Build.Main.OW.Simple"] }, { "label": "Build.Renderer", diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..39e3deab --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,83 @@ +# WowUp Monorepo — Developer Architecture & Style Guide + +WowUp is a World of Warcraft addon manager. This monorepo separates platform targets, core business logic, and shared TypeScript libraries. + +--- + +## 📂 Repository Structure + +| Package | Tech Stack | Purpose | +| :--- | :--- | :--- | +| [`wowup-electron/`](file:///d:/GitHub/WowUp-Dev/wowup-electron) | Electron 40 + Angular 17 | The main desktop client application (Active/Primary). | +| [`wowup-lib/`](file:///d:/GitHub/WowUp-Dev/wowup-lib) | TypeScript + Parcel | Shared core library (`wowup-lib-core`) consumed by the Electron app. | +| [`v3/`](file:///d:/GitHub/WowUp-Dev/v3) | TypeScript | Next-generation client version (In early development). | + +--- + +## 🏛️ Baseline Architecture (Coupled UI, mid-migration) + +The application still runs a **coupled renderer architecture** where Node capabilities are fully integrated into the browser process, but a UI-decoupling migration (below) is actively moving domain logic into the main process one vertical slice at a time: + +- **Node Integration Enabled**: `nodeIntegration: true` and `contextIsolation: false` are configured in `app/main.ts`. The Angular UI imports Node native APIs (`fs`, `path`, etc.) directly. +- **Business Logic in Renderer (not yet migrated)**: + - Addon Providers (`src/app/addon-providers/`) execute all HTTP calls and metadata scraping in the browser context. + - Warcraft installation CRUD, TOC parsing, addon scan/sync, and install/remove (`src/app/services/warcraft/`, `src/app/services/addons/`) still run on the Angular side. +- **Main Process (`app/`)**: Was a thin window manager routed through the legacy [`app/ipc-events.ts`](file:///d:/GitHub/WowUp-Dev/wowup-electron/app/ipc-events.ts) registry; now also hosts a growing set of **Controllers** (`app/controllers/`, implementing `IpcController`, registered in `app/controllers/index.ts`) and main-process **services** (`app/services/`) for logic that has already been migrated — e.g. Warcraft platform/executable detection (`WarcraftController`). +- **Renderer API wrappers**: Migrated domains get a thin Angular service under `src/app/services/api/` (e.g. `warcraft-api.service.ts`) that just wraps `ipcRenderer.invoke()` for the new IPC channels — no business logic. + +--- + +## 🚀 UI Decoupling Plan (in progress) + +Goal: move business logic out of the Angular renderer into the Electron main process so a future UI swap (e.g. React) only has to replace thin API-wrapper services. Each domain becomes a Controller in `app/controllers/` exposed via `ipcMain.handle()`; the renderer gets a thin API service in `src/app/services/api/`; shared request/response types will live in `src/common/api/contracts/`. + +Full phase-by-phase checklist: [`wowup-electron/UI_DECOUPLING_PLAN.md`](file:///d:/GitHub/WowUp-Dev/wowup-electron/UI_DECOUPLING_PLAN.md) — keep that file, not this section, as the source of truth for what's done vs. pending; update its checkboxes as phases complete. + +Status snapshot: +1. **Phase 1 — Warcraft Platform Detection**: ✅ done. `WarcraftPlatform` (`app/services/warcraft/`) + `WarcraftController` + `warcraft-api.service.ts`; old `warcraft.service.{impl,win,mac,linux}.ts` deleted from the renderer. +2. **Phase 2 — Warcraft Installation CRUD**: 🚧 in progress. +3. **Phases 3–6 — TOC parsing/addon folder listing, addon scan/sync, install/remove pipeline, `ipc-events.ts` cleanup**: ⏳ not started. + +Note: there is no `Procedure` / `EventChannel

` primitive layer — the actual pattern is the simpler `IpcController` interface + per-channel `ipcMain.handle()` calls, wired up in `registerControllers()`. + +--- + +## 🛠️ Operations & Execution Playbook + +### Build Order Requirement +Because `wowup-electron` depends on the local `wowup-lib-core` package, **`wowup-lib` must be compiled first**. + +```bash +# 1. Compile the shared library +cd wowup-lib +npm install +npm run build + +# 2. Setup the Electron workspace +cd ../wowup-electron +npm install +npm run build:lib # Syncs and links the shared library locally + +# 3. Serve the application +npm start # Serve default flavor (wago) +npm run ow:start # Serve Overwolf flavor (ow) +``` + +### Common Commands (wowup-electron/) +- **Lint Code**: `npm run lint` +- **Run Tests**: `npm test` +- **Format Code**: `npm run pretty` + +--- + +## 📝 Branching & Style Guidelines + +- **Branching Policy**: + - Primary development branch: `master`. + - Release branches: `release/X.Y.Z`. + - Target all PRs at `master` unless explicitly working on a specific release. +- **Code Formatting**: + - TypeScript strictly throughout the workspace. + - Formatted via Prettier (`npx prettier --write .`). +- **Commit Messages**: + - Present tense, imperative mood, under 72 characters (e.g. *"Add raiderio provider"* not *"Added raiderio provider"*). diff --git a/wowup-electron/app/controllers/index.ts b/wowup-electron/app/controllers/index.ts index f4640983..9ea5ee73 100644 --- a/wowup-electron/app/controllers/index.ts +++ b/wowup-electron/app/controllers/index.ts @@ -3,16 +3,30 @@ import * as Store from "electron-store"; import { AddonController } from "./addon.controller"; import { IpcController } from "./ipc-controller"; +import { WarcraftController } from "./warcraft/warcraft.controller"; +import { WarcraftPlatformWin } from "../services/warcraft/warcraft-platform.win"; +import { WarcraftPlatformMac } from "../services/warcraft/warcraft-platform.mac"; +import { WarcraftPlatformLinux } from "../services/warcraft/warcraft-platform.linux"; +import { WarcraftPlatform } from "../services/warcraft/warcraft-platform.service"; +import * as platform from "../platform"; export interface ControllerDeps { window: BrowserWindow; addonStore: Store; + preferenceStore: Store; +} + +function getPlatformImpl(): WarcraftPlatform { + if (platform.isWin) return new WarcraftPlatformWin(); + if (platform.isMac) return new WarcraftPlatformMac(); + if (platform.isLinux) return new WarcraftPlatformLinux(); + throw new Error("Unsupported platform"); } export function registerControllers(deps: ControllerDeps): void { const controllers: IpcController[] = [ new AddonController(deps.addonStore), - // Add new controllers here as domains grow + new WarcraftController(getPlatformImpl(), deps.preferenceStore), ]; for (const controller of controllers) { diff --git a/wowup-electron/app/controllers/warcraft/warcraft.controller.ts b/wowup-electron/app/controllers/warcraft/warcraft.controller.ts new file mode 100644 index 00000000..682df056 --- /dev/null +++ b/wowup-electron/app/controllers/warcraft/warcraft.controller.ts @@ -0,0 +1,57 @@ +import { ipcMain } from "electron"; +import * as Store from "electron-store"; + +import { + BLIZZARD_AGENT_PATH_KEY, + IPC_WARCRAFT_GET_BLIZZARD_AGENT_PATH, + IPC_WARCRAFT_GET_CLIENT_TYPE_FOR_BINARY, + IPC_WARCRAFT_GET_EXECUTABLE_EXTENSION, + IPC_WARCRAFT_GET_EXECUTABLE_NAME, + IPC_WARCRAFT_GET_INSTALLED_PRODUCTS, + IPC_WARCRAFT_IS_WOW_APPLICATION, +} from "../../../src/common/constants"; +import { InstalledProduct, WowClientType } from "wowup-lib-core"; + +import { IpcController } from "../ipc-controller"; +import { decodeProducts, WarcraftPlatform } from "../../services/warcraft/warcraft-platform.service"; + +export class WarcraftController implements IpcController { + public constructor( + private readonly platform: WarcraftPlatform, + private readonly prefStore: Store, + ) {} + + public register(): void { + ipcMain.handle(IPC_WARCRAFT_GET_BLIZZARD_AGENT_PATH, () => this.getBlizzardAgentPath()); + ipcMain.handle(IPC_WARCRAFT_GET_INSTALLED_PRODUCTS, (_evt, agentPath: string) => this.getInstalledProducts(agentPath)); + ipcMain.handle(IPC_WARCRAFT_GET_EXECUTABLE_NAME, (_evt, clientType: WowClientType) => this.platform.getExecutableName(clientType)); + ipcMain.handle(IPC_WARCRAFT_GET_CLIENT_TYPE_FOR_BINARY, (_evt, binaryPath: string) => this.platform.getClientType(binaryPath)); + ipcMain.handle(IPC_WARCRAFT_IS_WOW_APPLICATION, (_evt, appName: string) => this.platform.isWowApplication(appName)); + ipcMain.handle(IPC_WARCRAFT_GET_EXECUTABLE_EXTENSION, () => this.platform.getExecutableExtension()); + } + + public async getBlizzardAgentPath(): Promise { + const stored = this.prefStore.get(BLIZZARD_AGENT_PATH_KEY) as string | undefined; + if (stored) { + return stored; + } + + const agentPath = await this.platform.getBlizzardAgentPath(); + if (agentPath) { + this.prefStore.set(BLIZZARD_AGENT_PATH_KEY, agentPath); + } + + return agentPath; + } + + public async getInstalledProducts(agentPath: string): Promise> { + const decoded = await decodeProducts(agentPath); + const resolved = this.platform.resolveProducts(decoded, agentPath); + + const result = new Map(); + for (const product of resolved) { + result.set(product.clientType, product); + } + return result; + } +} diff --git a/wowup-electron/app/ipc-events.ts b/wowup-electron/app/ipc-events.ts index a7f3d222..0db606a5 100644 --- a/wowup-electron/app/ipc-events.ts +++ b/wowup-electron/app/ipc-events.ts @@ -12,7 +12,7 @@ import { systemPreferences, } from "electron"; import * as log from "electron-log/main"; -import * as globrex from "globrex"; +import globrex = require("globrex"); import * as _ from "lodash"; import { nanoid } from "nanoid"; import * as nodeDiskInfo from "node-disk-info"; @@ -110,7 +110,6 @@ import { createTray } from "./system-tray"; import { WowUpFolderScanner } from "./wowup-folder-scanner"; import * as push from "./push"; import { GetDirectoryTreeRequest } from "../src/common/models/ipc-request"; -import { ProductDb } from "../src/common/wowup/product-db"; import { restoreWindow } from "./window-state"; import { firstValueFrom, from, mergeMap, toArray } from "rxjs"; import { CurseFolderScanner } from "./curse-folder-scanner"; @@ -475,15 +474,6 @@ export function initializeIpcHandlers(window: BrowserWindow): void { return await fsp.readFile(filePath); }); - handle("decode-product-db", async (evt, filePath: string) => { - const productDbData = await fsp.readFile(filePath); - const productDb = ProductDb.decode(productDbData); - setTimeout(() => { - console.log("productDb", JSON.stringify(productDb)); - },1); - - return productDb; - }); handle(IPC_WRITE_FILE_CHANNEL, async (evt, filePath: string, contents: string) => { return await fsp.writeFile(filePath, contents, { encoding: "utf-8", mode: DEFAULT_FILE_MODE }); diff --git a/wowup-electron/app/main.ts b/wowup-electron/app/main.ts index af3ba293..3381296f 100644 --- a/wowup-electron/app/main.ts +++ b/wowup-electron/app/main.ts @@ -325,7 +325,7 @@ function createWindow(): BrowserWindow { initializeIpcHandlers(win); initializeStoreIpcHandlers(); - registerControllers({ window: win, addonStore: getAddonStore() }); + registerControllers({ window: win, addonStore: getAddonStore(), preferenceStore: getPreferenceStore() }); if (AppEnv.buildFlavor === "wago") { wagoHandler.initialize(win); diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.linux.ts b/wowup-electron/app/services/warcraft/warcraft-platform.linux.ts similarity index 56% rename from wowup-electron/src/app/services/warcraft/warcraft.service.linux.ts rename to wowup-electron/app/services/warcraft/warcraft-platform.linux.ts index 9be13bf3..e51fdcec 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.linux.ts +++ b/wowup-electron/app/services/warcraft/warcraft-platform.linux.ts @@ -1,15 +1,16 @@ +import * as fsp from "fs/promises"; +import * as os from "os"; import * as path from "path"; -import { WowClientType } from "wowup-lib-core"; -import { InstalledProduct } from "wowup-lib-core"; + import { WOW_ANNIVERSARY_FOLDER, WOW_CLASSIC_ERA_FOLDER, WOW_CLASSIC_ERA_PTR_FOLDER, WOW_RETAIL_XPTR_FOLDER, -} from "../../../common/constants"; -import { ElectronService } from "../electron/electron.service"; -import { FileService } from "../files/file.service"; -import { WarcraftServiceImpl } from "./warcraft.service.impl"; +} from "../../../src/common/constants"; +import { InstalledProduct, WowClientType } from "wowup-lib-core"; + +import { WarcraftPlatform } from "./warcraft-platform.service"; const WOW_RETAIL_NAME = "Wow.exe"; const WOW_RETAIL_PTR_NAME = "WowT.exe"; @@ -28,22 +29,12 @@ const WOW_APP_NAMES = [ ]; const LUTRIS_CONFIG_PATH = "/.config/lutris/system.yml"; -// Search in this order until products are found on one. -// All WoW products can be found under any or all of them, -// since each of them are essentially just Battle.net -// launchers with a different install path. const LUTRIS_WOW_DIRS = ["battlenet/drive_c", "world-of-warcraft/drive_c", "world-of-warcraft-classic/drive_c"]; -// BLIZZARD STRINGS const WINDOWS_BLIZZARD_AGENT_PATH = "ProgramData/Battle.net/Agent"; const BLIZZARD_PRODUCT_DB_NAME = "product.db"; -export class WarcraftServiceLinux implements WarcraftServiceImpl { - public constructor( - private _electronService: ElectronService, - private _fileService: FileService, - ) {} - +export class WarcraftPlatformLinux implements WarcraftPlatform { public getExecutableExtension(): string { return "exe"; } @@ -52,9 +43,6 @@ export class WarcraftServiceLinux implements WarcraftServiceImpl { return WOW_APP_NAMES.includes(appName); } - /** - * On Linux players could be using Lutris to install the Battle.net launcher or WoW - */ public async getBlizzardAgentPath(): Promise { try { const lutrisLibraryPath = await this.getLutrisWowPath(); @@ -63,9 +51,7 @@ export class WarcraftServiceLinux implements WarcraftServiceImpl { } const agentPath = path.join(lutrisLibraryPath, WINDOWS_BLIZZARD_AGENT_PATH, BLIZZARD_PRODUCT_DB_NAME); - const agentPathExists = await this._fileService.pathExists(agentPath); - - if (agentPathExists) { + if (await pathExists(agentPath)) { console.log(`Found WoW products at ${agentPath}`); return agentPath; } @@ -76,59 +62,6 @@ export class WarcraftServiceLinux implements WarcraftServiceImpl { return ""; } - public resolveProducts(decodedProducts: InstalledProduct[], agentPath: string): InstalledProduct[] { - const resolvedProducts: InstalledProduct[] = []; - const agentPathPrefixRegex = new RegExp(`(.*drive_c)`); - for (const product of decodedProducts) { - console.log(`location: ${location.toString()} agentPath: ${agentPath}`); - const regexResults = agentPathPrefixRegex.exec(agentPath); - if (regexResults === null) { - console.warn("No agentPath match found"); - continue; - } - - const agentPathPrefix = regexResults[1].trim(); - resolvedProducts.push({ - ...product, - location: path.join(agentPathPrefix, product.location.substr(3)), - } as InstalledProduct); - } - return resolvedProducts; - } - - public async getLutrisWowPath(): Promise { - const homeDir = await this._fileService.getHomeDir(); - const resolvedPath = path.join(homeDir, LUTRIS_CONFIG_PATH); - try { - const lutrisConfigExists = await this._fileService.pathExists(resolvedPath); - if (lutrisConfigExists) { - const lutrisConfig = await this._fileService.readFile(resolvedPath); - const libraryPathRegex = new RegExp(`game_path: (.*)`); - const regexResults = libraryPathRegex.exec(lutrisConfig); - if (regexResults === null) { - throw new Error("No matching game_path found"); - } - - const libraryPath = regexResults[1].trim(); - const libraryPathExists = await this._fileService.pathExists(libraryPath); - if (libraryPathExists) { - for (const wowDir of LUTRIS_WOW_DIRS) { - const productPath = path.join(libraryPath, wowDir); - const productPathExists = await this._fileService.pathExists(productPath); - if (productPathExists) { - console.log(`Found WoW product in Lutris library at ${productPath}`); - return productPath; - } - } - } - } - throw new Error(); - } catch (e) { - console.error("Failed to search for Lutris library location", e); - } - return ""; - } - public getExecutableName(clientType: WowClientType): string { switch (clientType) { case WowClientType.Retail: @@ -166,17 +99,13 @@ export class WarcraftServiceLinux implements WarcraftServiceImpl { return WowClientType.Classic; } case WOW_RETAIL_PTR_NAME: - if (binaryPath.toLowerCase().includes(WOW_RETAIL_XPTR_FOLDER)) { - return WowClientType.RetailXPtr; - } else { - return WowClientType.RetailPtr; - } + return binaryPath.toLowerCase().includes(WOW_RETAIL_XPTR_FOLDER) + ? WowClientType.RetailXPtr + : WowClientType.RetailPtr; case WOW_CLASSIC_PTR_NAME: - if (binaryPath.toLowerCase().includes(WOW_CLASSIC_ERA_PTR_FOLDER)) { - return WowClientType.ClassicEraPtr; - } else { - return WowClientType.ClassicPtr; - } + return binaryPath.toLowerCase().includes(WOW_CLASSIC_ERA_PTR_FOLDER) + ? WowClientType.ClassicEraPtr + : WowClientType.ClassicPtr; case WOW_RETAIL_BETA_NAME: return WowClientType.Beta; case WOW_CLASSIC_BETA_NAME: @@ -185,4 +114,61 @@ export class WarcraftServiceLinux implements WarcraftServiceImpl { return WowClientType.None; } } + + public resolveProducts(decodedProducts: InstalledProduct[], agentPath: string): InstalledProduct[] { + const agentPathPrefixRegex = /.*drive_c/; + const resolvedProducts: InstalledProduct[] = []; + + for (const product of decodedProducts) { + const match = agentPathPrefixRegex.exec(agentPath); + if (match === null) { + console.warn("No agentPath match found"); + continue; + } + + const agentPathPrefix = match[0].trim(); + resolvedProducts.push({ + ...product, + location: path.join(agentPathPrefix, product.location.substring(3)), + }); + } + + return resolvedProducts; + } + + private async getLutrisWowPath(): Promise { + const resolvedPath = path.join(os.homedir(), LUTRIS_CONFIG_PATH); + try { + if (!(await pathExists(resolvedPath))) { + throw new Error("Lutris config not found"); + } + + const lutrisConfig = await fsp.readFile(resolvedPath, "utf-8"); + const match = /game_path: (.*)/.exec(lutrisConfig); + if (match === null) { + throw new Error("No matching game_path found"); + } + + const libraryPath = match[1].trim(); + if (!(await pathExists(libraryPath))) { + throw new Error("Lutris library path does not exist"); + } + + for (const wowDir of LUTRIS_WOW_DIRS) { + const productPath = path.join(libraryPath, wowDir); + if (await pathExists(productPath)) { + console.log(`Found WoW product in Lutris library at ${productPath}`); + return productPath; + } + } + } catch (e) { + console.error("Failed to search for Lutris library location", e); + } + + return ""; + } +} + +async function pathExists(filePath: string): Promise { + return fsp.access(filePath).then(() => true).catch(() => false); } diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.mac.ts b/wowup-electron/app/services/warcraft/warcraft-platform.mac.ts similarity index 73% rename from wowup-electron/src/app/services/warcraft/warcraft.service.mac.ts rename to wowup-electron/app/services/warcraft/warcraft-platform.mac.ts index 3d1967d9..1876d7d9 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.mac.ts +++ b/wowup-electron/app/services/warcraft/warcraft-platform.mac.ts @@ -1,15 +1,15 @@ +import * as fsp from "fs/promises"; import * as path from "path"; -import { WowClientType } from "wowup-lib-core"; -import { InstalledProduct } from "wowup-lib-core"; import { WOW_ANNIVERSARY_FOLDER, WOW_CLASSIC_ERA_FOLDER, WOW_CLASSIC_ERA_PTR_FOLDER, WOW_RETAIL_XPTR_FOLDER, -} from "../../../common/constants"; -import { FileService } from "../files/file.service"; -import { WarcraftServiceImpl } from "./warcraft.service.impl"; +} from "../../../src/common/constants"; +import { InstalledProduct, WowClientType } from "wowup-lib-core"; + +import { WarcraftPlatform } from "./warcraft-platform.service"; const WOW_RETAIL_NAME = "World of Warcraft.app"; const WOW_RETAIL_PTR_NAME = "World of Warcraft Test.app"; @@ -30,9 +30,7 @@ const WOW_APP_NAMES = [ const BLIZZARD_AGENT_PATH = "/Users/Shared/Battle.net/Agent"; const BLIZZARD_PRODUCT_DB_NAME = "product.db"; -export class WarcraftServiceMac implements WarcraftServiceImpl { - public constructor(private _fileService: FileService) {} - +export class WarcraftPlatformMac implements WarcraftPlatform { public getExecutableExtension(): string { return "app"; } @@ -41,13 +39,9 @@ export class WarcraftServiceMac implements WarcraftServiceImpl { return WOW_APP_NAMES.includes(appName); } - /** - * Attempt to figure out where the blizzard agent was installed at - */ public async getBlizzardAgentPath(): Promise { const agentPath = path.join(BLIZZARD_AGENT_PATH, BLIZZARD_PRODUCT_DB_NAME); - const exists = await this._fileService.pathExists(agentPath); - return exists ? agentPath : ""; + return (await pathExists(agentPath)) ? agentPath : ""; } public getExecutableName(clientType: WowClientType): string { @@ -60,7 +54,7 @@ export class WarcraftServiceMac implements WarcraftServiceImpl { return WOW_CLASSIC_NAME; case WowClientType.RetailPtr: case WowClientType.RetailXPtr: - return WOW_RETAIL_NAME; + return WOW_RETAIL_PTR_NAME; case WowClientType.ClassicPtr: case WowClientType.ClassicEraPtr: return WOW_CLASSIC_PTR_NAME; @@ -87,17 +81,13 @@ export class WarcraftServiceMac implements WarcraftServiceImpl { return WowClientType.Classic; } case WOW_RETAIL_PTR_NAME: - if (binaryPath.toLowerCase().includes(WOW_RETAIL_XPTR_FOLDER)) { - return WowClientType.RetailXPtr; - } else { - return WowClientType.RetailPtr; - } + return binaryPath.toLowerCase().includes(WOW_RETAIL_XPTR_FOLDER) + ? WowClientType.RetailXPtr + : WowClientType.RetailPtr; case WOW_CLASSIC_PTR_NAME: - if (binaryPath.toLowerCase().includes(WOW_CLASSIC_ERA_PTR_FOLDER)) { - return WowClientType.ClassicEraPtr; - } else { - return WowClientType.ClassicPtr; - } + return binaryPath.toLowerCase().includes(WOW_CLASSIC_ERA_PTR_FOLDER) + ? WowClientType.ClassicEraPtr + : WowClientType.ClassicPtr; case WOW_RETAIL_BETA_NAME: return WowClientType.Beta; case WOW_CLASSIC_BETA_NAME: @@ -111,3 +101,7 @@ export class WarcraftServiceMac implements WarcraftServiceImpl { return decodedProducts; } } + +async function pathExists(filePath: string): Promise { + return fsp.access(filePath).then(() => true).catch(() => false); +} diff --git a/wowup-electron/app/services/warcraft/warcraft-platform.service.ts b/wowup-electron/app/services/warcraft/warcraft-platform.service.ts new file mode 100644 index 00000000..69043e20 --- /dev/null +++ b/wowup-electron/app/services/warcraft/warcraft-platform.service.ts @@ -0,0 +1,85 @@ +import * as fsp from "fs/promises"; +import * as log from "electron-log/main"; + +import { InstalledProduct, WowClientType } from "wowup-lib-core"; + +import { + WOW_ANNIVERSARY_FOLDER, + WOW_BETA_FOLDER, + WOW_CLASSIC_BETA_FOLDER, + WOW_CLASSIC_ERA_FOLDER, + WOW_CLASSIC_ERA_PTR_FOLDER, + WOW_CLASSIC_FOLDER, + WOW_CLASSIC_PTR_FOLDER, + WOW_RETAIL_FOLDER, + WOW_RETAIL_PTR_FOLDER, + WOW_RETAIL_XPTR_FOLDER, +} from "../../../src/common/constants"; +import { ProductDb } from "../../../src/common/wowup/product-db"; + +export interface WarcraftPlatform { + getExecutableExtension(): string; + isWowApplication(appName: string): boolean; + getBlizzardAgentPath(): Promise; + getExecutableName(clientType: WowClientType): string; + getClientType(binaryPath: string): WowClientType; + resolveProducts(decodedProducts: InstalledProduct[], agentPath: string): InstalledProduct[]; +} + +function getClientTypeForFolderName(folderName: string): WowClientType { + switch (folderName) { + case WOW_RETAIL_FOLDER: + return WowClientType.Retail; + case WOW_RETAIL_PTR_FOLDER: + return WowClientType.RetailPtr; + case WOW_RETAIL_XPTR_FOLDER: + return WowClientType.RetailXPtr; + case WOW_CLASSIC_ERA_FOLDER: + return WowClientType.ClassicEra; + case WOW_CLASSIC_FOLDER: + return WowClientType.Classic; + case WOW_CLASSIC_PTR_FOLDER: + return WowClientType.ClassicPtr; + case WOW_BETA_FOLDER: + return WowClientType.Beta; + case WOW_CLASSIC_BETA_FOLDER: + return WowClientType.ClassicBeta; + case WOW_CLASSIC_ERA_PTR_FOLDER: + return WowClientType.ClassicEraPtr; + case WOW_ANNIVERSARY_FOLDER: + return WowClientType.Anniversary; + default: + return WowClientType.None; + } +} + +export async function decodeProducts(productDbPath: string): Promise { + if (!productDbPath) { + return []; + } + + try { + const data = await fsp.readFile(productDbPath); + const productDb = ProductDb.decode(data); + log.debug("productDb", JSON.stringify(productDb)); + + const wowProducts: InstalledProduct[] = productDb.products + .filter((p) => p.family === "wow") + .map((p) => ({ + location: p.client.location, + name: p.client.name, + clientType: getClientTypeForFolderName(p.client.name), + })); + + return wowProducts.filter((wp) => { + if (wp.clientType === WowClientType.None) { + log.warn("Invalid client type detected", wp); + return false; + } + return true; + }); + } catch (e) { + log.error(`Failed to decode product db at ${productDbPath}`, e); + return []; + } +} diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.win.ts b/wowup-electron/app/services/warcraft/warcraft-platform.win.ts similarity index 51% rename from wowup-electron/src/app/services/warcraft/warcraft.service.win.ts rename to wowup-electron/app/services/warcraft/warcraft-platform.win.ts index ae6b80c5..4d5e2179 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.win.ts +++ b/wowup-electron/app/services/warcraft/warcraft-platform.win.ts @@ -1,16 +1,16 @@ +import * as fsp from "fs/promises"; +import * as nodeDiskInfo from "node-disk-info"; import * as path from "path"; -import { ElectronService } from "../electron/electron.service"; -import { FileService } from "../files/file.service"; -import { WarcraftServiceImpl } from "./warcraft.service.impl"; + import { - IPC_LIST_DISKS_WIN32, WOW_ANNIVERSARY_FOLDER, WOW_CLASSIC_ERA_FOLDER, WOW_CLASSIC_ERA_PTR_FOLDER, WOW_RETAIL_XPTR_FOLDER, -} from "../../../common/constants"; -import { WowClientType } from "wowup-lib-core"; -import { InstalledProduct } from "wowup-lib-core"; +} from "../../../src/common/constants"; +import { InstalledProduct, WowClientType } from "wowup-lib-core"; + +import { WarcraftPlatform } from "./warcraft-platform.service"; const WOW_RETAIL_NAME = "Wow.exe"; const WOW_RETAIL_PTR_NAME = "WowT.exe"; @@ -44,39 +44,29 @@ const WOW_APP_NAMES_ARM64 = [ WOW_CLASSIC_BETA_NAME_ARM64, ]; -// BLIZZARD STRINGS const WINDOWS_BLIZZARD_AGENT_PATH = "ProgramData/Battle.net/Agent"; const BLIZZARD_PRODUCT_DB_NAME = "product.db"; -export class WarcraftServiceWin implements WarcraftServiceImpl { - public constructor( - private _electronService: ElectronService, - private _fileService: FileService, - ) {} +export class WarcraftPlatformWin implements WarcraftPlatform { + private get isArm64(): boolean { + return process.arch === "arm64"; + } public getExecutableExtension(): string { return "exe"; } public isWowApplication(appName: string): boolean { - const nameList = this._electronService.isArm64 ? WOW_APP_NAMES_ARM64 : WOW_APP_NAMES; + const nameList = this.isArm64 ? WOW_APP_NAMES_ARM64 : WOW_APP_NAMES; return nameList.includes(appName); } - /** - * Attempt to figure out where the blizzard agent was installed at - */ public async getBlizzardAgentPath(): Promise { try { - const diskInfo = await this._electronService.invoke(IPC_LIST_DISKS_WIN32); - console.debug("diskInfo", diskInfo); - const driveNames: string[] = diskInfo.map((i) => i.mounted); - - for (const name of driveNames) { - const agentPath = path.join(name, WINDOWS_BLIZZARD_AGENT_PATH, BLIZZARD_PRODUCT_DB_NAME); - const exists = await this._fileService.pathExists(agentPath); - - if (exists) { + const diskInfos = await nodeDiskInfo.getDiskInfo(); + for (const disk of diskInfos) { + const agentPath = path.join(disk.mounted, WINDOWS_BLIZZARD_AGENT_PATH, BLIZZARD_PRODUCT_DB_NAME); + if (await pathExists(agentPath)) { console.log(`Found products at ${agentPath}`); return agentPath; } @@ -91,21 +81,21 @@ export class WarcraftServiceWin implements WarcraftServiceImpl { public getExecutableName(clientType: WowClientType): string { switch (clientType) { case WowClientType.Retail: - return this.getRetailName(); + return this.isArm64 ? WOW_RETAIL_NAME_ARM64 : WOW_RETAIL_NAME; case WowClientType.ClassicEra: case WowClientType.Classic: case WowClientType.Anniversary: - return this.getClassicName(); + return this.isArm64 ? WOW_CLASSIC_NAME_ARM64 : WOW_CLASSIC_NAME; case WowClientType.RetailPtr: case WowClientType.RetailXPtr: - return this.getRetailPtrName(); + return this.isArm64 ? WOW_RETAIL_PTR_NAME_ARM64 : WOW_RETAIL_PTR_NAME; case WowClientType.ClassicPtr: case WowClientType.ClassicEraPtr: - return this.getClassicPtrName(); + return this.isArm64 ? WOW_CLASSIC_PTR_NAME_ARM64 : WOW_CLASSIC_PTR_NAME; case WowClientType.Beta: - return this.getRetailBetaName(); + return this.isArm64 ? WOW_RETAIL_BETA_NAME_ARM64 : WOW_RETAIL_BETA_NAME; case WowClientType.ClassicBeta: - return this.getClassicBetaName(); + return this.isArm64 ? WOW_CLASSIC_BETA_NAME_ARM64 : WOW_CLASSIC_BETA_NAME; default: return ""; } @@ -113,69 +103,61 @@ export class WarcraftServiceWin implements WarcraftServiceImpl { public getClientType(binaryPath: string): WowClientType { const binaryName = path.basename(binaryPath); + let clientType: WowClientType = WowClientType.None; switch (binaryName) { case WOW_RETAIL_NAME: case WOW_RETAIL_NAME_ARM64: - return WowClientType.Retail; + clientType = WowClientType.Retail; + break; case WOW_CLASSIC_NAME: case WOW_CLASSIC_NAME_ARM64: if (binaryPath.toLowerCase().includes(WOW_CLASSIC_ERA_FOLDER)) { - return WowClientType.ClassicEra; + clientType = WowClientType.ClassicEra; } else if (binaryPath.toLowerCase().includes(WOW_ANNIVERSARY_FOLDER)) { - return WowClientType.Anniversary; + clientType = WowClientType.Anniversary; } else { - return WowClientType.Classic; + clientType = WowClientType.Classic; } + break; case WOW_RETAIL_PTR_NAME: case WOW_RETAIL_PTR_NAME_ARM64: - if (binaryPath.toLowerCase().includes(WOW_RETAIL_XPTR_FOLDER)) { - return WowClientType.RetailXPtr; - } else { - return WowClientType.RetailPtr; - } + clientType = binaryPath.toLowerCase().includes(WOW_RETAIL_XPTR_FOLDER) + ? WowClientType.RetailXPtr + : WowClientType.RetailPtr; + break; case WOW_CLASSIC_PTR_NAME: case WOW_CLASSIC_PTR_NAME_ARM64: - if (binaryPath.toLowerCase().includes(WOW_CLASSIC_ERA_PTR_FOLDER)) { - return WowClientType.ClassicEraPtr; - } else { - return WowClientType.ClassicPtr; - } + clientType = binaryPath.toLowerCase().includes(WOW_CLASSIC_ERA_PTR_FOLDER) + ? WowClientType.ClassicEraPtr + : WowClientType.ClassicPtr; + break; case WOW_RETAIL_BETA_NAME: case WOW_RETAIL_BETA_NAME_ARM64: - return WowClientType.Beta; + clientType = WowClientType.Beta; + break; case WOW_CLASSIC_BETA_NAME: case WOW_CLASSIC_BETA_NAME_ARM64: - return WowClientType.ClassicBeta; + clientType = WowClientType.ClassicBeta; + break; default: - return WowClientType.None; + clientType = WowClientType.None; } + + if (clientType === WowClientType.None) { + console.warn(`Unknown client type for binary path: ${binaryPath}`); + } + + return clientType; } public resolveProducts(decodedProducts: InstalledProduct[]): InstalledProduct[] { return decodedProducts; } - - private getRetailName(): string { - return this._electronService.isArm64 ? WOW_RETAIL_NAME_ARM64 : WOW_RETAIL_NAME; - } - - private getClassicName(): string { - return this._electronService.isArm64 ? WOW_CLASSIC_NAME_ARM64 : WOW_CLASSIC_NAME; - } - - private getRetailPtrName(): string { - return this._electronService.isArm64 ? WOW_RETAIL_PTR_NAME_ARM64 : WOW_RETAIL_PTR_NAME; - } - - private getClassicPtrName(): string { - return this._electronService.isArm64 ? WOW_CLASSIC_PTR_NAME_ARM64 : WOW_CLASSIC_PTR_NAME; - } - - private getRetailBetaName(): string { - return this._electronService.isArm64 ? WOW_RETAIL_BETA_NAME_ARM64 : WOW_RETAIL_BETA_NAME; - } - - private getClassicBetaName(): string { - return this._electronService.isArm64 ? WOW_CLASSIC_BETA_NAME_ARM64 : WOW_CLASSIC_BETA_NAME; - } +} + +async function pathExists(filePath: string): Promise { + return fsp + .access(filePath) + .then(() => true) + .catch(() => false); } diff --git a/wowup-electron/app/tsconfig.json b/wowup-electron/app/tsconfig.json new file mode 100644 index 00000000..2be8084a --- /dev/null +++ b/wowup-electron/app/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../tsconfig.serve.json" +} diff --git a/wowup-electron/package-lock.json b/wowup-electron/package-lock.json index 545266d3..61063ae6 100644 --- a/wowup-electron/package-lock.json +++ b/wowup-electron/package-lock.json @@ -1,19 +1,19 @@ { "name": "wowup-cf", - "version": "2.22.1-beta.2", + "version": "2.23.0-beta.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wowup-cf", - "version": "2.22.1-beta.2", + "version": "2.23.0-beta.1", "hasInstallScript": true, "dependencies": { "adm-zip": "0.5.12", "auto-launch": "5.0.6", - "electron-log": "5.4.3", + "electron-log": "5.4.4", "electron-store": "8.2.0", - "electron-updater": "6.8.3", + "electron-updater": "6.8.9", "globrex": "0.1.2", "handlebars": "4.7.8", "lodash": "4.17.21", @@ -25,7 +25,7 @@ "rxjs": "7.8.1", "win-ca": "3.5.1", "wowup-lib-core": "file:../wowup-lib", - "yauzl": "2.10.0" + "yauzl": "3.4.0" }, "devDependencies": { "@angular-builders/custom-webpack": "17.0.2", @@ -57,8 +57,8 @@ "@microsoft/applicationinsights-web": "3.0.5", "@ngx-translate/core": "15.0.0", "@ngx-translate/http-loader": "8.0.0", - "@overwolf/ow-electron": "37.10.3", - "@overwolf/ow-electron-builder": "26.0.12", + "@overwolf/ow-electron": "39.8.10", + "@overwolf/ow-electron-builder": "26.9.0", "@types/adm-zip": "0.5.1", "@types/flat": "5.0.2", "@types/globrex": "0.1.2", @@ -80,11 +80,11 @@ "chai": "4.3.8", "core-js": "3.38.1", "cross-env": "7.0.3", - "curseforge-v2": "1.4.0", + "curseforge-v2": "1.5.0", "del": "7.1.0", "dotenv": "16.4.5", - "electron": "40.6.0", - "electron-builder": "26.8.1", + "electron": "43.1.1", + "electron-builder": "26.15.3", "electron-notarize": "1.2.2", "electron-reload": "2.0.0-alpha.1", "eslint": "^8.57.0", @@ -130,41 +130,6 @@ "node": ">=16.0.0" } }, - "../../WowUp.Lib/Core": { - "name": "wowup-lib-core", - "version": "1.1.1", - "extraneous": true, - "license": "ISC", - "dependencies": { - "lodash": "^4.17.21", - "markdown-it": "^13.0.1", - "string-similarity": "^4.0.4", - "ts-custom-error": "^3.3.1", - "uuid": "^11.1.0" - }, - "devDependencies": { - "@parcel/packager-ts": "^2.15.2", - "@parcel/transformer-typescript-types": "^2.15.2", - "@types/jest": "^29.5.12", - "@types/lodash": "^4.17.0", - "@types/markdown-it": "^12.2.3", - "@types/node": "^22.15.31", - "@types/string-similarity": "^4.0.2", - "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^8.34.0", - "@typescript-eslint/parser": "^8.34.0", - "cross-env": "^7.0.3", - "eslint": "^9.28.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-fetch-mock": "^3.0.3", - "parcel": "^2.15.2", - "prettier": "^3.2.5", - "ts-jest": "^29.1.2", - "typescript": "^5.8.3", - "typescript-eslint": "^8.34.0" - } - }, "../wowup-lib": { "name": "wowup-lib-core", "version": "1.2.0", @@ -2715,6 +2680,16 @@ "node": ">=10.0.0" } }, + "node_modules/@electron-internal/extract-zip": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.4.tgz", + "integrity": "sha512-Zr1Vs7E9tpCNhZHDAbFVXc2gEVCG9RqPDjrno5+bdgB6LRAuvgyMHJut4NCVyYwtAieapMzc3fiQ3CSTi75ARg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=22.12.0" + } + }, "node_modules/@electron/asar": { "version": "3.4.1", "dev": true, @@ -2822,315 +2797,6 @@ "node": ">= 4.0.0" } }, - "node_modules/@electron/node-gyp": { - "version": "10.2.0-electron.1", - "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "integrity": "sha512-4MSBTT8y07YUDqf69/vSh80Hh791epYqGtWHO3zSKhYFwQg+gx9wi1PqbqP6YqC4WMsNxZ5l9oDmnWdK5pfCKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^8.1.0", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.2.1", - "nopt": "^6.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/@npmcli/fs": { - "version": "2.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/@electron/node-gyp/node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@electron/node-gyp/node_modules/cacache": { - "version": "16.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@electron/node-gyp/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@electron/node-gyp/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@electron/node-gyp/node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@electron/node-gyp/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@electron/node-gyp/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@electron/node-gyp/node_modules/make-fetch-happen": { - "version": "10.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@electron/node-gyp/node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@electron/node-gyp/node_modules/minipass-fetch": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/@electron/node-gyp/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@electron/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@electron/node-gyp/node_modules/proc-log": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@electron/node-gyp/node_modules/ssri": { - "version": "9.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/unique-filename": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/unique-slug": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@electron/notarize": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-3.1.1.tgz", @@ -3146,7 +2812,9 @@ } }, "node_modules/@electron/osx-sign": { - "version": "1.3.1", + "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": { @@ -3166,130 +2834,6 @@ } }, "node_modules/@electron/osx-sign/node_modules/fs-extra": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/@electron/rebuild": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", - "integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "@malept/cross-spawn-promise": "^2.0.0", - "chalk": "^4.0.0", - "debug": "^4.1.1", - "detect-libc": "^2.0.1", - "fs-extra": "^10.0.0", - "got": "^11.7.0", - "node-abi": "^3.45.0", - "node-api-version": "^0.2.0", - "ora": "^5.1.0", - "read-binary-file-arch": "^1.0.6", - "semver": "^7.3.5", - "tar": "^6.0.5", - "yargs": "^17.0.1" - }, - "bin": { - "electron-rebuild": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@electron/rebuild/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/@electron/rebuild/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/@electron/rebuild/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/@electron/rebuild/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/@electron/rebuild/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/@electron/rebuild/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==", @@ -3304,105 +2848,185 @@ "node": ">=12" } }, - "node_modules/@electron/rebuild/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==", + "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": { - "pump": "^3.0.0" + "@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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=22.12.0" } }, - "node_modules/@electron/rebuild/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/@electron/rebuild/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": "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" - }, + "license": "ISC", "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@electron/rebuild/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/@electron/rebuild/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": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@electron/rebuild/node_modules/mimic-response": { + "node_modules/@electron/rebuild/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/@electron/rebuild/node_modules/minizlib": { "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/@electron/rebuild/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/@electron/rebuild/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/@electron/rebuild/node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { - "lowercase-keys": "^2.0.0" + "minipass": "^7.1.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 18" + } + }, + "node_modules/@electron/rebuild/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/@electron/rebuild/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/@electron/rebuild/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/@electron/rebuild/node_modules/tar": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", + "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/@electron/rebuild/node_modules/undici": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz", + "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/@electron/rebuild/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/@electron/rebuild/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/@electron/remote": { @@ -3414,11 +3038,13 @@ } }, "node_modules/@electron/universal": { - "version": "2.0.1", + "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.2.7", + "@electron/asar": "^3.3.1", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "dir-compare": "^4.2.0", @@ -3430,8 +3056,20 @@ "node": ">=16.4" } }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "11.3.0", + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz", + "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==", "dev": true, "license": "MIT", "dependencies": { @@ -3444,11 +3082,13 @@ } }, "node_modules/@electron/universal/node_modules/minimatch": { - "version": "9.0.5", + "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.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3714,11 +3354,6 @@ "node": ">=6" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, "node_modules/@hapi/hoek": { "version": "9.3.0", "dev": true, @@ -3782,29 +3417,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -5058,6 +4670,19 @@ "rxjs": "^6.5.5 || ^7.4.0" } }, + "node_modules/@noble/hashes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "dev": true, @@ -5113,18 +4738,6 @@ "node": ">= 14" } }, - "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/@npmcli/agent/node_modules/lru-cache": { "version": "10.4.3", "dev": true, @@ -5218,29 +4831,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", "dev": true, @@ -5552,87 +5142,126 @@ "node": ">= 10" } }, - "node_modules/@overwolf/ow-app-builder-lib": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/@overwolf/ow-app-builder-lib/-/ow-app-builder-lib-26.0.12.tgz", - "integrity": "sha512-qEpMGbqzP3Afj4W2FNSYR71toOS9djFLF6vGtrRw5/x3djRuixL4+VATjnqEzr1TSee2uN0olrMUXbwKDTDoJw==", + "node_modules/@overwolf/app-builder-lib": { + "version": "26.9.0", + "resolved": "https://registry.npmjs.org/@overwolf/app-builder-lib/-/app-builder-lib-26.9.0.tgz", + "integrity": "sha512-Oyul/45PwU7m10UvSsgoHaZ8f/lT3sDNeN7Wkq20CRsAzqyk4thWLwNFtwbh8BgN3J0naUwu7RG27LDYXj5ZOw==", "dev": true, "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", - "@electron/asar": "3.2.18", + "@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.1", - "@electron/rebuild": "3.7.0", - "@electron/universal": "2.0.1", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.3", + "@electron/universal": "2.0.3", "@malept/flatpak-bundler": "^0.4.0", + "@overwolf/builder-util-runtime": "9.5.1", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "builder-util": "26.8.1", "chromium-pickle-js": "^0.2.0", - "config-file-ts": "0.2.8-rc1", + "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.0.11", + "electron-publish": "26.8.1", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", - "is-ci": "^3.0.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.0.0", + "minimatch": "^10.0.3", "plist": "3.1.0", + "proper-lockfile": "^4.1.2", "resedit": "^1.7.0", - "semver": "^7.3.8", - "tar": "^6.1.12", + "semver": "~7.7.3", + "tar": "^7.5.7", "temp-file": "^3.4.0", - "tiny-async-pool": "1.3.0" + "tiny-async-pool": "1.3.0", + "which": "^5.0.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "dmg-builder": "26.0.11", - "electron-builder-squirrel-windows": "26.0.11" + "dmg-builder": "26.8.2", + "electron-builder-squirrel-windows": "26.8.2" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/@electron/asar": { - "version": "3.2.18", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.18.tgz", - "integrity": "sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==", + "node_modules/@overwolf/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": { - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" + "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": ">=10.12.0" + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/@electron/asar/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@overwolf/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/@overwolf/app-builder-lib/node_modules/@electron/get/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/@overwolf/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", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/@electron/notarize": { + "node_modules/@overwolf/app-builder-lib/node_modules/@electron/get/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/@overwolf/app-builder-lib/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==", @@ -5647,7 +5276,7 @@ "node": ">= 10.0.0" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/@electron/notarize/node_modules/fs-extra": { + "node_modules/@overwolf/app-builder-lib/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==", @@ -5663,18 +5292,127 @@ "node": ">=10" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/dotenv-expand": { + "node_modules/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/node_modules/dotenv-expand": { "version": "11.0.7", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", @@ -5690,7 +5428,7 @@ "url": "https://dotenvx.com" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/fs-extra": { + "node_modules/@overwolf/app-builder-lib/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==", @@ -5705,55 +5443,259 @@ "node": ">=12" } }, - "node_modules/@overwolf/ow-app-builder-lib/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "node_modules/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/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/@overwolf/app-builder-lib/node_modules/tar": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", + "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/@overwolf/app-builder-lib/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/@overwolf/app-builder-lib/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/@overwolf/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@overwolf/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-jP5osXKG/kL57DAOxgXrLaVasi2zouwJeL93XUnIQmL9qAbX4jAsgDzbYGI00WixxTxO6AUZFSNALWOGTUI/Lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/@overwolf/ow-electron": { - "version": "37.10.3", - "resolved": "https://registry.npmjs.org/@overwolf/ow-electron/-/ow-electron-37.10.3.tgz", - "integrity": "sha512-64k4m7PnvEumxfnOMzypsdAtMHH2Ibu0QplY3KtoMGTKXBxUp7w+2rXsdVff29XtGNXdDHgoXJn/YdjBdBSDng==", + "version": "39.8.10", + "resolved": "https://registry.npmjs.org/@overwolf/ow-electron/-/ow-electron-39.8.10.tgz", + "integrity": "sha512-qDlXfUrliYAsB5ZblLZiYzZaih9yi6QJ51KCn8Jh/hJEfLK+BpTK1PSi7GwpLyGKvMP1Fxs+Td4xJh6to3W6iw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@electron/get": "^1.14.1", - "@types/node": "^16.11.26", - "extract-zip": "^1.0.3" + "@electron/get": "^2.0.0", + "@types/node": "^22.7.7", + "extract-zip": "^2.0.1" }, "bin": { "ow-electron": "cli.js" }, "engines": { - "node": ">= 10.17.0" + "node": ">= 12.20.55" } }, "node_modules/@overwolf/ow-electron-builder": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/@overwolf/ow-electron-builder/-/ow-electron-builder-26.0.12.tgz", - "integrity": "sha512-nx8qHbVwi4E2em03TpZweS/QTjgauAjWt53aQOUEEBQ8LT5QUSPbMgG6YJ3/C3uPJWNWJlQqZMPB0EuglXV0sw==", + "version": "26.9.0", + "resolved": "https://registry.npmjs.org/@overwolf/ow-electron-builder/-/ow-electron-builder-26.9.0.tgz", + "integrity": "sha512-PmDHBhpKL8+KShVP6RS9bHskFKCVnXLi7/Q9wYWFpcMHsnXR0VemEhLdA1G+tRYQfG1oI2aDNO/UVw3+CGQSdA==", "dev": true, "license": "MIT", "dependencies": { - "@overwolf/ow-app-builder-lib": "26.0.12", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "@overwolf/app-builder-lib": "26.9.0", + "@overwolf/builder-util-runtime": "9.5.1", + "builder-util": "26.8.1", "chalk": "^4.1.2", - "dmg-builder": "26.0.11", + "ci-info": "^4.2.0", + "dmg-builder": "26.8.2", "fs-extra": "^10.1.0", - "is-ci": "^3.0.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" @@ -5779,10 +5721,317 @@ "node": ">=12" } }, - "node_modules/@overwolf/ow-electron/node_modules/@types/node": { - "version": "16.18.126", + "node_modules/@overwolf/ow-electron/node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@overwolf/ow-electron/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/@peculiar/asn1-schema": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", + "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema/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/@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/utils/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/@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/@peculiar/webcrypto/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/@pkgjs/parseargs": { "version": "0.11.0", @@ -6013,14 +6262,6 @@ "node": ">=6" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "dev": true, @@ -7559,17 +7800,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "4.0.1", "dev": true, @@ -7739,83 +7969,122 @@ "license": "MIT" }, "node_modules/app-builder-lib": { - "version": "26.0.11", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.0.11.tgz", - "integrity": "sha512-bsfSjSZp9dg7q28+4NPLJ2ldq3j1ESP2LJ+8AibaPqQb2lTIJeQW1JmgdAs9KuYTtkswiZ/+PMyokC9M7hwnjQ==", + "version": "26.8.2", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.8.2.tgz", + "integrity": "sha512-z3ptLzJwNl35fyR0wxv4qWOfZuU36VysYHnbs8PDtf8S0QzIl2OWimdDFVmCxYMkIV1k/RT9CeTgcP7oUznFOw==", "dev": true, "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", - "@electron/asar": "3.2.18", + "@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.1", - "@electron/rebuild": "3.7.0", - "@electron/universal": "2.0.1", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.3", + "@electron/universal": "2.0.3", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "builder-util": "26.8.1", + "builder-util-runtime": "9.5.1", "chromium-pickle-js": "^0.2.0", - "config-file-ts": "0.2.8-rc1", + "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.0.11", + "electron-publish": "26.8.1", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", - "is-ci": "^3.0.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.0.0", + "minimatch": "^10.0.3", "plist": "3.1.0", + "proper-lockfile": "^4.1.2", "resedit": "^1.7.0", - "semver": "^7.3.8", - "tar": "^6.1.12", + "semver": "~7.7.3", + "tar": "^7.5.7", "temp-file": "^3.4.0", - "tiny-async-pool": "1.3.0" + "tiny-async-pool": "1.3.0", + "which": "^5.0.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "dmg-builder": "26.0.11", - "electron-builder-squirrel-windows": "26.0.11" + "dmg-builder": "26.8.2", + "electron-builder-squirrel-windows": "26.8.2" } }, - "node_modules/app-builder-lib/node_modules/@electron/asar": { - "version": "3.2.18", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.18.tgz", - "integrity": "sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==", + "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": { - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" + "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": ">=10.12.0" + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" } }, - "node_modules/app-builder-lib/node_modules/@electron/asar/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": "*" + "node": ">=6 <7 || >=8" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/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/@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/@electron/get/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/app-builder-lib/node_modules/@electron/notarize": { @@ -7849,15 +8118,124 @@ "node": ">=10" } }, - "node_modules/app-builder-lib/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/app-builder-lib/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/app-builder-lib/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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/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/app-builder-lib/node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/app-builder-lib/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/app-builder-lib/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/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/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/app-builder-lib/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/app-builder-lib/node_modules/dotenv-expand": { @@ -7891,22 +8269,212 @@ "node": ">=12" } }, + "node_modules/app-builder-lib/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/app-builder-lib/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/app-builder-lib/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/app-builder-lib/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/app-builder-lib/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/app-builder-lib/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/app-builder-lib/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/app-builder-lib/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/app-builder-lib/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/app-builder-lib/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/app-builder-lib/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/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/tar": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", + "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/app-builder-lib/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/app-builder-lib/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/append-buffer": { "version": "1.0.2", "dev": true, @@ -8281,6 +8849,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/asn1js/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/assert-plus": { "version": "1.0.0", "dev": true, @@ -8471,6 +9061,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/axios": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", @@ -8617,7 +9214,6 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/base": { @@ -8650,7 +9246,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -8718,7 +9313,6 @@ }, "node_modules/bl": { "version": "4.1.0", - "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -8726,6 +9320,13 @@ "readable-stream": "^3.4.0" } }, + "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/body-parser": { "version": "1.20.3", "dev": true, @@ -8850,7 +9451,6 @@ }, "node_modules/buffer": { "version": "5.7.1", - "dev": true, "funding": [ { "type": "github", @@ -8873,6 +9473,7 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -8891,25 +9492,25 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "dev": true, "license": "MIT" }, "node_modules/builder-util": { - "version": "26.0.11", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.8.1.tgz", + "integrity": "sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==", "dev": true, "license": "MIT", "dependencies": { "@types/debug": "^4.1.6", "7zip-bin": "~5.2.0", "app-builder-bin": "5.0.0-alpha.12", - "builder-util-runtime": "9.3.1", + "builder-util-runtime": "9.5.1", "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", - "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "sanitize-filename": "^1.6.3", "source-map-support": "^0.5.19", @@ -8919,7 +9520,9 @@ } }, "node_modules/builder-util-runtime": { - "version": "9.3.1", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8930,16 +9533,10 @@ "node": ">=12.0.0" } }, - "node_modules/builder-util/node_modules/agent-base": { - "version": "7.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, "node_modules/builder-util/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": { @@ -8951,18 +9548,6 @@ "node": ">=12" } }, - "node_modules/builder-util/node_modules/http-proxy-agent": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/builtin-modules": { "version": "3.3.0", "dev": true, @@ -8982,6 +9567,16 @@ "node": ">= 0.8" } }, + "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/cacache": { "version": "18.0.4", "dev": true, @@ -9367,7 +9962,9 @@ "license": "MIT" }, "node_modules/ci-info": { - "version": "3.9.0", + "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": [ { @@ -9824,7 +10421,6 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/concat-stream": { @@ -9913,60 +10509,6 @@ "license": "ISC", "optional": true }, - "node_modules/config-file-ts": { - "version": "0.2.8-rc1", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^10.3.12", - "typescript": "^5.4.3" - } - }, - "node_modules/config-file-ts/node_modules/glob": { - "version": "10.4.5", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/config-file-ts/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/config-file-ts/node_modules/typescript": { - "version": "5.8.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/connect": { "version": "3.7.0", "dev": true, @@ -10368,9 +10910,9 @@ } }, "node_modules/curseforge-v2": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/curseforge-v2/-/curseforge-v2-1.4.0.tgz", - "integrity": "sha512-6t7PXv727A9kLvZ5wHspMIKlcNe+dzuI9RWcJAk8AIGP7xn6ovYOAjGdxsfPMIYkeRD9g/RuIFALBvb/KL6nQg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/curseforge-v2/-/curseforge-v2-1.5.0.tgz", + "integrity": "sha512-jokU4/qiyp2RH0ot5ACx/DUyGUpnvk8Tb6VgV0A8e9wtfHf64jmnuHYxHVwqf6/hYvYuNPMW4IkvrhE2o5+QVA==", "dev": true, "license": "ISC", "dependencies": { @@ -10728,14 +11270,6 @@ "node": ">=0.10.0" } }, - "node_modules/detect-libc": { - "version": "2.0.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, "node_modules/detect-node": { "version": "2.1.0", "dev": true, @@ -10888,15 +11422,14 @@ } }, "node_modules/dmg-builder": { - "version": "26.0.11", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.0.11.tgz", - "integrity": "sha512-C+SaRneQ11OxG99EeGp3TvPrlkW9ZaiukxB9Z7+OhhO1ge0nAtq9uD0ILt1JpvNAQ1de3gzX7TFRYJrSGsNe+Q==", + "version": "26.8.2", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.8.2.tgz", + "integrity": "sha512-DaWI+p4DOqiFVZFMovdGYammBOyJAiHHFWUTQ0Z7gNc0twfdIN0LvyJ+vFsgZEDR1fjgbpCj690IVtbYIsZObQ==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "26.0.11", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "app-builder-lib": "26.8.2", + "builder-util": "26.8.1", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -11240,37 +11773,37 @@ } }, "node_modules/electron": { - "version": "40.6.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-40.6.0.tgz", - "integrity": "sha512-ett8W+yOFGDuM0vhJMamYSkrbV3LoaffzJd9GfjI96zRAxyrNqUSKqBpf/WGbQCweDxX2pkUCUfrv4wwKpsFZA==", + "version": "43.1.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-43.1.1.tgz", + "integrity": "sha512-I5c5vfuVvaXpWx3IZdwvXgxQW44+e7OP1wXGVQkogLeSFSkUZ6sLCcWV05AdEcs65AO5tAIJJwbp7ixw+LdarA==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^24.9.0", - "extract-zip": "^2.0.1" + "@electron-internal/extract-zip": "^1.0.1", + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0" }, "bin": { - "electron": "cli.js" + "electron": "cli.js", + "install-electron": "install.js" }, "engines": { - "node": ">= 12.20.55" + "node": ">= 22.12.0" } }, "node_modules/electron-builder": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.8.1.tgz", - "integrity": "sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==", + "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.8.1", - "builder-util": "26.8.1", - "builder-util-runtime": "9.5.1", + "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.8.1", + "dmg-builder": "26.15.3", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", @@ -11285,15 +11818,15 @@ } }, "node_modules/electron-builder-squirrel-windows": { - "version": "26.0.11", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.0.11.tgz", - "integrity": "sha512-LM3VDospLXCY6leWPhoJngDlP2GGOPzje/qZbCwX5g9ZeuYhcsVfm5NDDrjS3H6yC4PzHI9U2mnhJxc3bpIMGw==", + "version": "26.8.2", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.8.2.tgz", + "integrity": "sha512-kXhajX6DzdIQcTlctVTKoG1oO39JhWcTG0lH7ZEJ4FzPaKJy7KFNfNJUd5BoEmLjv5GlrRZpEOYnniD+LcwNJA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "app-builder-lib": "26.0.11", - "builder-util": "26.0.11", + "app-builder-lib": "26.8.2", + "builder-util": "26.8.1", "electron-winstaller": "5.4.0" } }, @@ -11395,119 +11928,6 @@ "node": ">=10" } }, - "node_modules/electron-builder/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-builder/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-builder/node_modules/@electron/rebuild": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.0.3.tgz", - "integrity": "sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@malept/cross-spawn-promise": "^2.0.0", - "debug": "^4.1.1", - "detect-libc": "^2.0.1", - "got": "^11.7.0", - "graceful-fs": "^4.2.11", - "node-abi": "^4.2.0", - "node-api-version": "^0.2.1", - "node-gyp": "^11.2.0", - "ora": "^5.1.0", - "read-binary-file-arch": "^1.0.6", - "semver": "^7.3.5", - "tar": "^7.5.6", - "yargs": "^17.0.1" - }, - "bin": { - "electron-rebuild": "lib/cli.js" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "node_modules/electron-builder/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-builder/node_modules/@electron/universal/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "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-builder/node_modules/@electron/universal/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/electron-builder/node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -11534,43 +11954,53 @@ "node": ">=10" } }, - "node_modules/electron-builder/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/electron-builder/node_modules/app-builder-lib": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.8.1.tgz", - "integrity": "sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==", + "node_modules/electron-builder/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/electron-builder/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": { - "@develar/schema-utils": "~2.6.5", "@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.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.8.1", - "builder-util-runtime": "9.5.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.8.1", + "electron-publish": "26.15.3", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "isbinaryfile": "^5.0.0", @@ -11578,7 +12008,8 @@ "js-yaml": "^4.1.0", "json5": "^2.2.3", "lazy-val": "^1.0.5", - "minimatch": "^10.0.3", + "minimatch": "^10.2.5", + "pkijs": "^3.4.0", "plist": "3.1.0", "proper-lockfile": "^4.1.2", "resedit": "^1.7.0", @@ -11586,53 +12017,49 @@ "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.8.1", - "electron-builder-squirrel-windows": "26.8.1" - } - }, - "node_modules/electron-builder/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" + "dmg-builder": "26.15.3", + "electron-builder-squirrel-windows": "26.15.3" } }, "node_modules/electron-builder/node_modules/balanced-match": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", - "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "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": "20 || >=22" + "node": "18 || 20 || >=22" + } + }, + "node_modules/electron-builder/node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/electron-builder/node_modules/builder-util": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.8.1.tgz", - "integrity": "sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==", + "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", - "7zip-bin": "~5.2.0", - "app-builder-bin": "5.0.0-alpha.12", - "builder-util-runtime": "9.5.1", + "builder-util-runtime": "9.7.0", "chalk": "^4.1.2", "cross-spawn": "^7.0.6", "debug": "^4.3.4", @@ -11645,12 +12072,15 @@ "stat-mode": "^1.0.0", "temp-file": "^3.4.0", "tiny-async-pool": "1.3.0" + }, + "engines": { + "node": ">=14.0.0" } }, "node_modules/electron-builder/node_modules/builder-util-runtime": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", - "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "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": { @@ -11691,9 +12121,9 @@ } }, "node_modules/electron-builder/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==", + "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": [ { @@ -11733,20 +12163,16 @@ } }, "node_modules/electron-builder/node_modules/dmg-builder": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.8.1.tgz", - "integrity": "sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==", + "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.8.1", - "builder-util": "26.8.1", + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", "fs-extra": "^10.1.0", - "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" - }, - "optionalDependencies": { - "dmg-license": "^1.0.11" } }, "node_modules/electron-builder/node_modules/dotenv-expand": { @@ -11766,28 +12192,29 @@ } }, "node_modules/electron-builder/node_modules/electron-builder-squirrel-windows": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.8.1.tgz", - "integrity": "sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==", + "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.8.1", - "builder-util": "26.8.1", + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", "electron-winstaller": "5.4.0" } }, "node_modules/electron-builder/node_modules/electron-publish": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.8.1.tgz", - "integrity": "sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==", + "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", - "builder-util": "26.8.1", - "builder-util-runtime": "9.5.1", + "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", @@ -11852,20 +12279,6 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/electron-builder/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/electron-builder/node_modules/isexe": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", @@ -11877,9 +12290,9 @@ } }, "node_modules/electron-builder/node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "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": { @@ -11910,13 +12323,13 @@ } }, "node_modules/electron-builder/node_modules/minimatch": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", - "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" @@ -11925,19 +12338,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/electron-builder/node_modules/minimatch/node_modules/brace-expansion": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", - "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/electron-builder/node_modules/minizlib": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", @@ -11951,19 +12351,6 @@ "node": ">= 18" } }, - "node_modules/electron-builder/node_modules/node-abi": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.26.0.tgz", - "integrity": "sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - }, - "engines": { - "node": ">=22.12.0" - } - }, "node_modules/electron-builder/node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -12014,9 +12401,9 @@ } }, "node_modules/electron-builder/node_modules/tar": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", - "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -12072,43 +12459,10 @@ "node": ">=10.12.0" } }, - "node_modules/electron-chromedriver/node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/electron-chromedriver/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/electron-log": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.4.3.tgz", - "integrity": "sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.4.4.tgz", + "integrity": "sha512-istWgaXjBfURBSS8LWVW9C3jsc6+ac+tY1lXrQEOTp0lVj+a4OlO1Tmqb36GgnEUDv92DGC9VI1HNXwJinWpgA==", "license": "MIT", "engines": { "node": ">= 14" @@ -12116,6 +12470,9 @@ }, "node_modules/electron-notarize": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.2.2.tgz", + "integrity": "sha512-ZStVWYcWI7g87/PgjPJSIIhwQXOaw4/XeXU+pWqMMktSLHaGMLHdyPPN7Cmao7+Cr7fYufA16npdtMndYciHNw==", + "deprecated": "Please use @electron/notarize moving forward. There is no API change, just a package name change", "dev": true, "license": "MIT", "dependencies": { @@ -12127,15 +12484,17 @@ } }, "node_modules/electron-publish": { - "version": "26.0.11", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.8.1.tgz", + "integrity": "sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==", "dev": true, "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "builder-util": "26.8.1", + "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", - "form-data": "^4.0.0", + "form-data": "^4.0.5", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "mime": "^2.5.2" @@ -12143,6 +12502,8 @@ }, "node_modules/electron-publish/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": { @@ -12181,12 +12542,12 @@ "license": "ISC" }, "node_modules/electron-updater": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.8.3.tgz", - "integrity": "sha512-Z6sgw3jgbikWKXei1ENdqFOxBP0WlXg3TtKfz0rgw2vIZFJUyI4pD7ZN7jrkm7EoMK+tcm/qTnPUdqfZukBlBQ==", + "version": "6.8.9", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.8.9.tgz", + "integrity": "sha512-ZhVxM9iGONUpZGI1FxdMRgJjUFXi7AYGVa5PwKlO1tV1/4zDxQmfKpXOHVztKrd6L9rLcFjERvi1Mf2vxyTkig==", "license": "MIT", "dependencies": { - "builder-util-runtime": "9.5.1", + "builder-util-runtime": "9.7.0", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", @@ -12197,9 +12558,9 @@ } }, "node_modules/electron-updater/node_modules/builder-util-runtime": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", - "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "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==", "license": "MIT", "dependencies": { "debug": "^4.3.4", @@ -12286,45 +12647,24 @@ } }, "node_modules/electron/node_modules/@electron/get": { - "version": "2.0.3", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz", + "integrity": "sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", "progress": "^2.0.3", - "semver": "^6.2.0", + "semver": "^7.6.3", "sumchecker": "^3.0.1" }, "engines": { - "node": ">=12" + "node": ">=22.12.0" }, "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/electron/node_modules/@sindresorhus/is": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/electron/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "undici": "^7.24.4" } }, "node_modules/electron/node_modules/@types/node": { @@ -12337,178 +12677,41 @@ "undici-types": "~7.16.0" } }, - "node_modules/electron/node_modules/cacheable-request": { - "version": "7.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron/node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron/node_modules/defer-to-connect": { - "version": "2.0.1", + "node_modules/electron/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": ">=10" - } - }, - "node_modules/electron/node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/electron/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/electron/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron/node_modules/got": { - "version": "11.8.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/electron/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/electron/node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron/node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron/node_modules/p-cancelable": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/electron/node_modules/responselike": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/electron/node_modules/semver": { - "version": "6.3.1", + "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/electron/node_modules/undici": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.18.1" } }, "node_modules/electron/node_modules/undici-types": { @@ -12518,14 +12721,6 @@ "dev": true, "license": "MIT" }, - "node_modules/electron/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "dev": true, @@ -12547,9 +12742,18 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", - "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -14176,31 +14380,52 @@ } }, "node_modules/extract-zip": { - "version": "1.7.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", + "debug": "^4.1.1", + "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "bin": { "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/extract-zip/node_modules/debug": { - "version": "2.6.9", + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.0.0", + "node_modules/extract-zip/node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } }, "node_modules/extsprintf": { "version": "1.4.1", @@ -14246,7 +14471,6 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { @@ -14254,6 +14478,23 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz", + "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.19.1", "dev": true, @@ -14275,6 +14516,9 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, "license": "MIT", "dependencies": { "pend": "~1.2.0" @@ -14848,7 +15092,6 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, "license": "ISC" }, "node_modules/function-bind": { @@ -15001,7 +15244,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -15399,7 +15641,6 @@ }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -15408,7 +15649,6 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -16328,16 +16568,27 @@ } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", + "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": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/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/http-proxy-middleware": { @@ -16403,14 +16654,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/i18next-json-sync": { "version": "3.1.2", "dev": true, @@ -16473,7 +16716,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -16565,7 +16807,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -16582,14 +16823,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "license": "ISC" - }, "node_modules/inflight": { "version": "1.0.6", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -16598,7 +16833,6 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -16842,17 +17076,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.16.1", "dev": true, @@ -19845,11 +20068,26 @@ "license": "MIT" }, "node_modules/node-abi": { - "version": "3.75.0", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.33.0.tgz", + "integrity": "sha512-vLBWCKb+7LWsX+TbfzWOkw0W81m377tyx3hOweBTjO43CXZnRGS1/JPWs20fr0PgZyDXk6ROYrylsEycK8raDA==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "semver": "^7.6.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/node-abi/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" @@ -19896,7 +20134,6 @@ }, "node_modules/node-fetch": { "version": "2.6.7", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -20051,20 +20288,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/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/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -20284,6 +20507,13 @@ "node": ">=18" } }, + "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/node-machine-id": { "version": "1.1.12", "dev": true, @@ -21218,7 +21448,6 @@ }, "node_modules/once": { "version": "1.4.0", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -21735,6 +21964,8 @@ }, "node_modules/pend": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "license": "MIT" }, "node_modules/picocolors": { @@ -21970,6 +22201,44 @@ "node": ">=4" } }, + "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/pkijs/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/plist": { "version": "3.1.0", "dev": true, @@ -22248,7 +22517,6 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "dev": true, "license": "MIT" }, "node_modules/progress": { @@ -22349,7 +22617,6 @@ }, "node_modules/pump": { "version": "3.0.2", - "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -22423,39 +22690,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/puppeteer-core/node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/puppeteer-core/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/puppeteer-core/node_modules/https-proxy-agent": { "version": "5.0.1", "dev": true, @@ -22528,87 +22762,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/pushy-electron/node_modules/ajv/node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/base64-js": { - "version": "1.5.1", - "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/pushy-electron/node_modules/bl": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/pushy-electron/node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pushy-electron/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/pushy-electron/node_modules/buffer": { - "version": "5.7.1", - "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", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/pushy-electron/node_modules/buffer-from": { - "version": "1.1.1", - "license": "MIT" - }, "node_modules/pushy-electron/node_modules/commist": { "version": "1.1.0", "license": "MIT", @@ -22617,10 +22770,6 @@ "minimist": "^1.1.0" } }, - "node_modules/pushy-electron/node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, "node_modules/pushy-electron/node_modules/conf": { "version": "6.2.0", "license": "MIT", @@ -22660,21 +22809,6 @@ "node": ">=8" } }, - "node_modules/pushy-electron/node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/pushy-electron/node_modules/dot-prop": { "version": "5.2.0", "license": "MIT", @@ -22695,18 +22829,6 @@ "stream-shift": "^1.0.0" } }, - "node_modules/pushy-electron/node_modules/duplexify/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/pushy-electron/node_modules/electron-store": { "version": "5.1.0", "license": "MIT", @@ -22722,46 +22844,6 @@ "node": ">=8" } }, - "node_modules/pushy-electron/node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/pushy-electron/node_modules/env-paths": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pushy-electron/node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/pushy-electron/node_modules/glob": { - "version": "7.2.3", - "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/pushy-electron/node_modules/help-me": { "version": "3.0.0", "license": "MIT", @@ -22770,55 +22852,6 @@ "readable-stream": "^3.6.0" } }, - "node_modules/pushy-electron/node_modules/help-me/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pushy-electron/node_modules/ieee754": { - "version": "1.2.1", - "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": "BSD-3-Clause" - }, - "node_modules/pushy-electron/node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/pushy-electron/node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/pushy-electron/node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, "node_modules/pushy-electron/node_modules/is-typedarray": { "version": "1.0.0", "license": "MIT" @@ -22865,20 +22898,6 @@ "node": ">=6" } }, - "node_modules/pushy-electron/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/pushy-electron/node_modules/minimist": { - "version": "1.2.6", - "license": "MIT" - }, "node_modules/pushy-electron/node_modules/mqtt": { "version": "4.3.7", "license": "MIT", @@ -22932,40 +22951,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/pushy-electron/node_modules/mqtt/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pushy-electron/node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/node-fetch": { - "version": "2.6.7", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/pushy-electron/node_modules/number-allocator": { "version": "1.0.10", "license": "MIT", @@ -22974,64 +22959,13 @@ "js-sdsl": "^2.1.2" } }, - "node_modules/pushy-electron/node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/pushy-electron/node_modules/onetime": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/pushy-electron/node_modules/packpath": { "version": "0.1.0" }, - "node_modules/pushy-electron/node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pushy-electron/node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pushy-electron/node_modules/punycode": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/pushy-electron/node_modules/reinterval": { "version": "1.1.0", "license": "MIT" }, - "node_modules/pushy-electron/node_modules/rfdc": { - "version": "1.3.0", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, "node_modules/pushy-electron/node_modules/semver": { "version": "6.3.0", "license": "ISC", @@ -23039,10 +22973,6 @@ "semver": "bin/semver.js" } }, - "node_modules/pushy-electron/node_modules/signal-exit": { - "version": "3.0.2", - "license": "ISC" - }, "node_modules/pushy-electron/node_modules/split2": { "version": "3.2.2", "license": "ISC", @@ -23050,37 +22980,6 @@ "readable-stream": "^3.0.0" } }, - "node_modules/pushy-electron/node_modules/split2/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pushy-electron/node_modules/stream-shift": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/pushy-electron/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/typedarray": { - "version": "0.0.6", - "license": "MIT" - }, "node_modules/pushy-electron/node_modules/typedarray-to-buffer": { "version": "3.1.5", "license": "MIT", @@ -23088,33 +22987,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/pushy-electron/node_modules/uri-js": { - "version": "4.2.2", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/pushy-electron/node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/pushy-electron/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/pushy-electron/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/pushy-electron/node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, "node_modules/pushy-electron/node_modules/ws": { "version": "7.5.8", "license": "MIT", @@ -23134,17 +23006,37 @@ } } }, - "node_modules/pushy-electron/node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/pushy-electron/node_modules/yallist": { "version": "4.0.0", "license": "ISC" }, + "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/pvtsutils/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/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/qjobs": { "version": "1.2.0", "dev": true, @@ -23498,7 +23390,6 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -23935,7 +23826,6 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "dev": true, "license": "MIT" }, "node_modules/rgb2hex": { @@ -24350,7 +24240,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -24956,7 +24845,6 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "dev": true, "license": "ISC" }, "node_modules/sigstore": { @@ -25708,7 +25596,6 @@ }, "node_modules/stream-shift": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/streamroller": { @@ -25755,7 +25642,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -26458,7 +26344,6 @@ }, "node_modules/tr46": { "version": "0.0.3", - "dev": true, "license": "MIT" }, "node_modules/tree-kill": { @@ -26918,7 +26803,6 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "dev": true, "license": "MIT" }, "node_modules/typescript": { @@ -27215,6 +27099,85 @@ "node": ">=4" } }, + "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/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/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/unzipper/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/unzipper/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/unzipper/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/unzipper/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/upath": { "version": "1.2.0", "dev": true, @@ -27298,7 +27261,6 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -28093,6 +28055,27 @@ "defaults": "^1.0.3" } }, + "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/webcrypto-core/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/webdriver": { "version": "7.16.13", "dev": true, @@ -28368,7 +28351,6 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/webpack": { @@ -28658,7 +28640,6 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -28848,7 +28829,6 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, "license": "ISC" }, "node_modules/ws": { @@ -28881,7 +28861,6 @@ }, "node_modules/xtend": { "version": "4.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4" @@ -28959,11 +28938,15 @@ } }, "node_modules/yauzl": { - "version": "2.10.0", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.4.0.tgz", + "integrity": "sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==", "license": "MIT", "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/yn": { diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 458b1b1c..a637236a 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { - "name": "wowup", - "productName": "WowUp", - "version": "2.22.1-beta.3", + "name": "wowup-cf", + "productName": "WowUpCf", + "version": "2.23.0-beta.1", "private": true, "description": "World of Warcraft addon updater", "keywords": [ @@ -11,7 +11,7 @@ "homepage": "https://wowup.io", "repository": { "type": "git", - "url": "https://github.com/WowUp/WowUp.git" + "url": "https://github.com/WowUp/WowUp.CF.git" }, "author": { "name": "WowUp LLC", @@ -73,9 +73,9 @@ "dependencies": { "adm-zip": "0.5.12", "auto-launch": "5.0.6", - "electron-log": "5.4.3", + "electron-log": "5.4.4", "electron-store": "8.2.0", - "electron-updater": "6.8.3", + "electron-updater": "6.8.9", "globrex": "0.1.2", "handlebars": "4.7.8", "lodash": "4.17.21", @@ -87,8 +87,9 @@ "rxjs": "7.8.1", "win-ca": "3.5.1", "wowup-lib-core": "file:../wowup-lib", - "yauzl": "2.10.0" + "yauzl": "3.4.0" }, + "overrides": {}, "devDependencies": { "@angular-builders/custom-webpack": "17.0.2", "@angular-devkit/build-angular": "17.3.4", @@ -119,8 +120,8 @@ "@microsoft/applicationinsights-web": "3.0.5", "@ngx-translate/core": "15.0.0", "@ngx-translate/http-loader": "8.0.0", - "@overwolf/ow-electron": "37.10.3", - "@overwolf/ow-electron-builder": "26.0.12", + "@overwolf/ow-electron": "39.8.10", + "@overwolf/ow-electron-builder": "26.9.0", "@types/adm-zip": "0.5.1", "@types/flat": "5.0.2", "@types/globrex": "0.1.2", @@ -142,11 +143,11 @@ "chai": "4.3.8", "core-js": "3.38.1", "cross-env": "7.0.3", - "curseforge-v2": "1.4.0", + "curseforge-v2": "1.5.0", "del": "7.1.0", "dotenv": "16.4.5", - "electron": "40.6.0", - "electron-builder": "26.8.1", + "electron": "43.1.1", + "electron-builder": "26.15.3", "electron-notarize": "1.2.2", "electron-reload": "2.0.0-alpha.1", "eslint": "^8.57.0", diff --git a/wowup-electron/src/app/addon-providers/curse-addon-provider.ts b/wowup-electron/src/app/addon-providers/curse-addon-provider.ts index bfba7122..554f3376 100644 --- a/wowup-electron/src/app/addon-providers/curse-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/curse-addon-provider.ts @@ -14,6 +14,7 @@ import { AddonSearchResultFile, AddonWarningType, AdPageOptions, + DownloadAuth, GetAllBatchResult, GetAllResult, getEnumName, @@ -95,6 +96,7 @@ const GAME_TYPE_LISTS = [ export class CurseAddonProvider extends AddonProvider { private readonly _circuitBreaker: CircuitBreakerWrapper; private readonly _cf2Client: cfv2.CFV2Client; + private readonly _cf2ApiKey = AppConfig.curseforge.apiKey; public readonly name = ADDON_PROVIDER_CURSEFORGE; public readonly forceIgnore = false; @@ -120,7 +122,7 @@ export class CurseAddonProvider extends AddonProvider { ); this._cf2Client = new cfv2.CFV2Client({ - apiKey: AppConfig.curseforge.apiKey, + apiKey: this._cf2ApiKey, }); } @@ -488,6 +490,14 @@ export class CurseAddonProvider extends AddonProvider { }; } + public override getDownloadAuth(): Promise { + return Promise.resolve({ + headers: { + "X-Api-Key": this._cf2ApiKey, + }, + }); + } + private isCfFileCompatible(clientType: WowClientType, file: cfv2.CF2File): boolean { if (Array.isArray(file.sortableGameVersions) && file.sortableGameVersions.length > 0) { const gameVersionTypeId = this.getGameVersionTypeId(clientType); diff --git a/wowup-electron/src/app/components/options/wow-client-options/wow-client-options.component.ts b/wowup-electron/src/app/components/options/wow-client-options/wow-client-options.component.ts index 4de0a1b2..5ea8dcd0 100644 --- a/wowup-electron/src/app/components/options/wow-client-options/wow-client-options.component.ts +++ b/wowup-electron/src/app/components/options/wow-client-options/wow-client-options.component.ts @@ -1,5 +1,5 @@ import { dirname } from "path"; -import { BehaviorSubject, from, of, Subscription } from "rxjs"; +import { BehaviorSubject, from, Observable, of, Subscription } from "rxjs"; import { filter, map, switchMap } from "rxjs/operators"; import { Component, Input, OnDestroy, OnInit } from "@angular/core"; @@ -43,11 +43,10 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { public selectedAddonChannelType: AddonChannelType = AddonChannelType.Stable; public editMode$ = this._editModeSrc.asObservable(); public isBusy$ = this._isBusySrc.asObservable(); - public installationCount$ = this._warcraftInstallationService.wowInstallations$.pipe( - map((installations) => installations.length), - ); + public installationCount$: Observable; public clientAutoUpdate = false; + public executableName = ""; public set isBusy(enabled: boolean) { this._isBusySrc.next(enabled); @@ -63,14 +62,6 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { } } - public get executableName(): string { - if (!this.installation) { - return ""; - } - - return this._warcraftService.getExecutableName(this.installation.clientType); - } - public get wowLogoImage(): string { if (!this.installation) { return ""; @@ -106,6 +97,7 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { private _electronService: ElectronService, ) { this.addonChannelInfos = this.getAddonChannelInfos(); + this.installationCount$ = this._warcraftInstallationService.wowInstallations$.pipe(map((i) => i.length)); const editingSub = this._sessionService.editingWowInstallationId$ .pipe(filter((installationId) => this.installationId !== installationId)) @@ -122,6 +114,11 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { throw new Error(`Failed to find installation: ${this.installationId}`); } + this._warcraftService + .getExecutableName(this.installation.clientType) + .then((name) => (this.executableName = name)) + .catch(console.error); + this.resetInstallationModel(); this.selectedAddonChannelType = this.installation.defaultAddonChannelType; @@ -231,6 +228,8 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { if (this.installation) { return from(this._warcraftInstallationService.removeWowInstallation(this.installation)); } + + return of(undefined); }), ) .subscribe(); diff --git a/wowup-electron/src/app/services/addons/addon-install.service.ts b/wowup-electron/src/app/services/addons/addon-install.service.ts index 904d0a84..169e3213 100644 --- a/wowup-electron/src/app/services/addons/addon-install.service.ts +++ b/wowup-electron/src/app/services/addons/addon-install.service.ts @@ -43,7 +43,7 @@ export interface InstallQueueItem { const IGNORED_FOLDER_NAMES = ["__MACOSX"]; -const ADDON_PROVIDER_TOC_EXTERNAL_ID_MAP = { +const ADDON_PROVIDER_TOC_EXTERNAL_ID_MAP: Record = { [ADDON_PROVIDER_WOWINTERFACE]: "wowInterfaceId", [ADDON_PROVIDER_TUKUI]: "tukUiProjectId", [ADDON_PROVIDER_WAGO]: "wagoAddonId", @@ -123,6 +123,7 @@ export class AddonInstallService { try { const downloadAuth = await addonProvider.getDownloadAuth(); + console.debug(`Download auth for ${addon.name}:`, downloadAuth); let retryCt = 0; while (downloadedFilePath.length === 0) { @@ -479,7 +480,7 @@ export class AddonInstallService { // Remove external ids that are not valid that we may have saved previously _.remove( newAddon.externalIds ?? [], - (extId) => !this._addonProviderService.getProvider(extId.providerName)?.isValidAddonId(extId.id) ?? false, + (extId) => !this._addonProviderService.getProvider(extId.providerName)?.isValidAddonId(extId.id), ); await this.saveAddon(newAddon); diff --git a/wowup-electron/src/app/services/addons/addon.service.ts b/wowup-electron/src/app/services/addons/addon.service.ts index 5139f16a..0cb4060a 100644 --- a/wowup-electron/src/app/services/addons/addon.service.ts +++ b/wowup-electron/src/app/services/addons/addon.service.ts @@ -89,7 +89,7 @@ export interface AddonActionEvent { const IGNORED_FOLDER_NAMES = ["__MACOSX"]; -const ADDON_PROVIDER_TOC_EXTERNAL_ID_MAP = { +const ADDON_PROVIDER_TOC_EXTERNAL_ID_MAP: Record = { [ADDON_PROVIDER_WOWINTERFACE]: "wowInterfaceId", [ADDON_PROVIDER_TUKUI]: "tukUiProjectId", [ADDON_PROVIDER_CURSEFORGE]: "curseProjectId", diff --git a/wowup-electron/src/app/services/api/warcraft-api.service.ts b/wowup-electron/src/app/services/api/warcraft-api.service.ts new file mode 100644 index 00000000..a6e129f2 --- /dev/null +++ b/wowup-electron/src/app/services/api/warcraft-api.service.ts @@ -0,0 +1,44 @@ +import { Injectable } from "@angular/core"; + +import { + IPC_WARCRAFT_GET_BLIZZARD_AGENT_PATH, + IPC_WARCRAFT_GET_CLIENT_TYPE_FOR_BINARY, + IPC_WARCRAFT_GET_EXECUTABLE_EXTENSION, + IPC_WARCRAFT_GET_EXECUTABLE_NAME, + IPC_WARCRAFT_GET_INSTALLED_PRODUCTS, + IPC_WARCRAFT_IS_WOW_APPLICATION, +} from "../../../common/constants"; +import { InstalledProduct, WowClientType } from "wowup-lib-core"; + +import { ElectronService } from "../electron/electron.service"; + +@Injectable({ + providedIn: "root", +}) +export class WarcraftApiService { + public constructor(private readonly _electronService: ElectronService) {} + + public getBlizzardAgentPath(): Promise { + return this._electronService.invoke(IPC_WARCRAFT_GET_BLIZZARD_AGENT_PATH); + } + + public getInstalledProducts(agentPath: string): Promise> { + return this._electronService.invoke(IPC_WARCRAFT_GET_INSTALLED_PRODUCTS, agentPath); + } + + public getExecutableName(clientType: WowClientType): Promise { + return this._electronService.invoke(IPC_WARCRAFT_GET_EXECUTABLE_NAME, clientType); + } + + public getClientTypeForBinary(binaryPath: string): Promise { + return this._electronService.invoke(IPC_WARCRAFT_GET_CLIENT_TYPE_FOR_BINARY, binaryPath); + } + + public isWowApplication(appName: string): Promise { + return this._electronService.invoke(IPC_WARCRAFT_IS_WOW_APPLICATION, appName); + } + + public getExecutableExtension(): Promise { + return this._electronService.invoke(IPC_WARCRAFT_GET_EXECUTABLE_EXTENSION); + } +} diff --git a/wowup-electron/src/app/services/electron/electron.service.ts b/wowup-electron/src/app/services/electron/electron.service.ts index 560408e9..ae146104 100644 --- a/wowup-electron/src/app/services/electron/electron.service.ts +++ b/wowup-electron/src/app/services/electron/electron.service.ts @@ -3,7 +3,7 @@ import { IpcRendererEvent, OpenDialogOptions, OpenDialogReturnValue, OpenExternalOptions, Settings } from "electron"; import { LoginItemSettings } from "electron/main"; import { find } from "lodash"; -import * as minimist from "minimist"; +import minimist from "minimist"; import { BehaviorSubject, ReplaySubject, Subject } from "rxjs"; import { v4 as uuidv4 } from "uuid"; diff --git a/wowup-electron/src/app/services/warcraft/warcraft-installation.service.ts b/wowup-electron/src/app/services/warcraft/warcraft-installation.service.ts index e56b93df..89c1d13f 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft-installation.service.ts +++ b/wowup-electron/src/app/services/warcraft/warcraft-installation.service.ts @@ -160,7 +160,7 @@ export class WarcraftInstallationService { public async selectWowClientPath(): Promise { const selectionName = this._translateService.instant("COMMON.WOW_EXE_SELECTION_NAME"); - const extensionFilter = this._warcraftService.getExecutableExtension(); + const extensionFilter = await this._warcraftService.getExecutableExtension(); let dialogResult: Electron.OpenDialogReturnValue; if (extensionFilter) { dialogResult = await this._electronService.showOpenDialog({ @@ -217,7 +217,7 @@ export class WarcraftInstallationService { } public async createWowInstallationForPath(applicationPath: string): Promise { - const clientType = this._warcraftService.getClientTypeForBinary(applicationPath); + const clientType = await this._warcraftService.getClientTypeForBinary(applicationPath); const typeName = getEnumName(WowClientType, clientType); const currentInstallations = await this.getWowInstallationsByClientType(clientType); @@ -260,7 +260,7 @@ export class WarcraftInstallationService { : DEFAULT_NAME_TOKEN; const displayName = await this.getDisplayName(label, typeName); - const fullProductPath = this.getFullProductPath(product.location, product.clientType); + const fullProductPath = await this.getFullProductPath(product.location, product.clientType); if (currentInstallations.some((inst) => inst.location === fullProductPath)) { continue; @@ -292,7 +292,6 @@ export class WarcraftInstallationService { const defaultName: string = await firstValueFrom( this._translateService.get(`COMMON.CLIENT_TYPES.${typeName.toUpperCase()}`), ); - console.debug("getDisplayName", defaultName, label, typeName); const finalLabel = label.replace(DEFAULT_NAME_TOKEN, defaultName); if (finalLabel.includes(DEFAULT_NAME_TOKEN)) { @@ -302,9 +301,9 @@ export class WarcraftInstallationService { return finalLabel; } - private getFullProductPath(location: string, clientType: WowClientType): string { + private async getFullProductPath(location: string, clientType: WowClientType): Promise { const clientFolderName = getWowClientFolderName(clientType); - const executableName = this._warcraftService.getExecutableName(clientType); + const executableName = await this._warcraftService.getExecutableName(clientType); return path.join(location, clientFolderName, executableName); } } diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.impl.ts b/wowup-electron/src/app/services/warcraft/warcraft.service.impl.ts deleted file mode 100644 index 537901c7..00000000 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.impl.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { WowClientType } from "wowup-lib-core"; -import { InstalledProduct } from "wowup-lib-core"; - -export interface WarcraftServiceImpl { - getExecutableExtension(): string; - isWowApplication(appName: string): boolean; - getBlizzardAgentPath(): Promise; - getExecutableName(clientType: WowClientType): string; - getClientType(binaryPath: string): WowClientType; - resolveProducts(decodedProducts: InstalledProduct[], agentPath: string): InstalledProduct[]; -} diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.ts b/wowup-electron/src/app/services/warcraft/warcraft.service.ts index 9d3c5009..97f05000 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.ts +++ b/wowup-electron/src/app/services/warcraft/warcraft.service.ts @@ -4,18 +4,12 @@ import { filter, map } from "rxjs/operators"; import { Injectable } from "@angular/core"; -import { ElectronService } from "../electron/electron.service"; import * as constants from "../../../common/constants"; import { SelectItem } from "../../models/wowup/select-item"; import { getEnumName, getEnumList } from "wowup-lib-core"; import { FileService } from "../files/file.service"; -import { PreferenceStorageService } from "../storage/preference-storage.service"; import { TocService } from "../toc/toc.service"; -import { WarcraftServiceImpl } from "./warcraft.service.impl"; -import { WarcraftServiceLinux } from "./warcraft.service.linux"; -import { WarcraftServiceMac } from "./warcraft.service.mac"; -import { WarcraftServiceWin } from "./warcraft.service.win"; -import { ProductDb } from "../../../common/wowup/product-db"; +import { WarcraftApiService } from "../api/warcraft-api.service"; import { AddonFolder, Toc, WowClientType } from "wowup-lib-core"; import { InstalledProduct, WowInstallation } from "wowup-lib-core"; @@ -23,7 +17,6 @@ import { InstalledProduct, WowInstallation } from "wowup-lib-core"; providedIn: "root", }) export class WarcraftService { - private readonly _impl: WarcraftServiceImpl; private readonly _productsSrc = new BehaviorSubject([]); private readonly _installedClientTypesSrc = new BehaviorSubject(undefined); private readonly _allClientTypes = getEnumList(WowClientType).filter( @@ -34,7 +27,6 @@ export class WarcraftService { public readonly productsReady$ = this.products$.pipe(filter((products) => Array.isArray(products))); public readonly installedClientTypes$ = this._installedClientTypesSrc.asObservable(); - // Map the client types so that we can localize them public installedClientTypesSelectItems$ = this._installedClientTypesSrc.pipe( filter((clientTypes) => clientTypes !== undefined), map((clientTypes) => { @@ -53,20 +45,17 @@ export class WarcraftService { ); public constructor( - private _electronService: ElectronService, - private _fileService: FileService, - private _preferenceStorageService: PreferenceStorageService, - private _tocService: TocService, - ) { - this._impl = this.getImplementation(); + private readonly _warcraftApiService: WarcraftApiService, + private readonly _fileService: FileService, + private readonly _tocService: TocService, + ) {} + + public getExecutableName(clientType: WowClientType): Promise { + return this._warcraftApiService.getExecutableName(clientType); } - public getExecutableName(clientType: WowClientType): string { - return this._impl.getExecutableName(clientType); - } - - public getExecutableExtension(): string { - return this._impl.getExecutableExtension(); + public getExecutableExtension(): Promise { + return this._warcraftApiService.getExecutableExtension(); } public async isWowApplication(appPath: string): Promise { @@ -76,7 +65,7 @@ export class WarcraftService { } const fileName = path.basename(appPath); - return this._impl.isWowApplication(fileName); + return this._warcraftApiService.isWowApplication(fileName); } public getAllClientTypes(): WowClientType[] { @@ -91,19 +80,8 @@ export class WarcraftService { return clientLocation?.location ?? ""; } - /** - * Scan the local blizzard product db for install WoW instances - */ - public async getInstalledProducts(blizzardAgentPath: string): Promise> { - const decodedProducts = await this.decodeProducts(blizzardAgentPath); - const resolvedProducts = this._impl.resolveProducts(decodedProducts, blizzardAgentPath); - const dictionary = new Map(); - - for (const product of resolvedProducts) { - dictionary.set(product.clientType, product); - } - - return dictionary; + public getInstalledProducts(blizzardAgentPath: string): Promise> { + return this._warcraftApiService.getInstalledProducts(blizzardAgentPath); } public getAddonFolderPath(installation: WowInstallation): string { @@ -119,7 +97,6 @@ export class WarcraftService { const addonFolderPath = this.getAddonFolderPath(installation); - // Folder may not exist if no addons have been installed const addonFolderExists = await this._fileService.pathExists(addonFolderPath); if (!addonFolderExists) { return addonFolders; @@ -129,8 +106,7 @@ export class WarcraftService { const dirPaths = directories.map((dir) => path.join(addonFolderPath, dir)); const dirStats = await this._fileService.statFiles(dirPaths); - for (let i = 0; i < directories.length; i += 1) { - const dir = directories[i]; + for (const dir of directories) { const addonFolder = await this.getAddonFolder(addonFolderPath, dir); if (!addonFolder) { console.warn(`Failed to get addonFolder, no toc found: ${dir}`); @@ -138,9 +114,7 @@ export class WarcraftService { } addonFolder.fileStats = dirStats[path.join(addonFolderPath, dir)]; - if (addonFolder) { - addonFolders.push(addonFolder); - } + addonFolders.push(addonFolder); } return addonFolders; @@ -174,24 +148,15 @@ export class WarcraftService { } } - public async getBlizzardAgentPath(): Promise { - const storedAgentPath = await this._preferenceStorageService.getAsync(constants.BLIZZARD_AGENT_PATH_KEY); - if (storedAgentPath) { - return storedAgentPath; - } - - const agentPath = await this._impl.getBlizzardAgentPath(); - await this._preferenceStorageService.setAsync(constants.BLIZZARD_AGENT_PATH_KEY, agentPath); - - return agentPath; + public getBlizzardAgentPath(): Promise { + return this._warcraftApiService.getBlizzardAgentPath(); } - public getClientTypeForBinary(binaryPath: string): WowClientType { - return this._impl.getClientType(binaryPath); + public getClientTypeForBinary(binaryPath: string): Promise { + return this._warcraftApiService.getClientTypeForBinary(binaryPath); } /** - * Get the old style preference key for a WoW client type * @deprecated */ public getLegacyClientLocationKey(clientType: WowClientType): string { @@ -212,82 +177,4 @@ export class WarcraftService { throw new Error(`Failed to get client location key: ${clientType}, ${getEnumName(WowClientType, clientType)}`); } } - - private async decodeProducts(productDbPath: string) { - if (!productDbPath) { - return []; - } - - try { - const productDb = await this._electronService.invoke("decode-product-db", productDbPath); - console.log("productDb", productDb); - - let wowProducts: InstalledProduct[] = productDb.products - .filter((p) => p.family === "wow") - .map((p) => ({ - location: p.client.location, - name: p.client.name, - clientType: this.getClientTypeForFolderName(p.client.name), - })); - - wowProducts = wowProducts.filter((wp) => { - const hasClientType = wp.clientType != WowClientType.None; - if (!hasClientType) { - console.warn("Invalid client type detected", wp); - } - return hasClientType; - }); - - console.log("wowProducts", wowProducts); - - return wowProducts; - } catch (e) { - console.error(`failed to decode product db at ${productDbPath}`); - console.error(e); - return []; - } - } - - private getImplementation(): WarcraftServiceImpl { - if (this._electronService.isWin) { - return new WarcraftServiceWin(this._electronService, this._fileService); - } - - if (this._electronService.isMac) { - return new WarcraftServiceMac(this._fileService); - } - - if (this._electronService.isLinux) { - return new WarcraftServiceLinux(this._electronService, this._fileService); - } - - throw new Error("No warcraft service implementation found"); - } - - private getClientTypeForFolderName(folderName: string): WowClientType { - switch (folderName) { - case constants.WOW_RETAIL_FOLDER: - return WowClientType.Retail; - case constants.WOW_RETAIL_PTR_FOLDER: - return WowClientType.RetailPtr; - case constants.WOW_RETAIL_XPTR_FOLDER: - return WowClientType.RetailXPtr; - case constants.WOW_CLASSIC_ERA_FOLDER: - return WowClientType.ClassicEra; - case constants.WOW_CLASSIC_FOLDER: - return WowClientType.Classic; - case constants.WOW_CLASSIC_PTR_FOLDER: - return WowClientType.ClassicPtr; - case constants.WOW_BETA_FOLDER: - return WowClientType.Beta; - case constants.WOW_CLASSIC_BETA_FOLDER: - return WowClientType.ClassicBeta; - case constants.WOW_CLASSIC_ERA_PTR_FOLDER: - return WowClientType.ClassicEraPtr; - case constants.WOW_ANNIVERSARY_FOLDER: - return WowClientType.Anniversary; - default: - return WowClientType.None; - } - } } diff --git a/wowup-electron/src/app/services/wowup/patch-notes.service.ts b/wowup-electron/src/app/services/wowup/patch-notes.service.ts index 0c271bff..b2f78b38 100644 --- a/wowup-electron/src/app/services/wowup/patch-notes.service.ts +++ b/wowup-electron/src/app/services/wowup/patch-notes.service.ts @@ -15,6 +15,16 @@ export class PatchNotesService { } const CHANGELOGS: ChangeLog[] = [ + { + Version: "2.23.0", + html: ` +

Fixes

+
    +
  • Add support for CurseForge download authentication
  • +
  • Various bug fixes and improvements
  • +
+ `, + }, { Version: "2.22.1", html: ` diff --git a/wowup-electron/src/common/constants.ts b/wowup-electron/src/common/constants.ts index 68a56c2a..76939eea 100644 --- a/wowup-electron/src/common/constants.ts +++ b/wowup-electron/src/common/constants.ts @@ -110,6 +110,14 @@ export const IPC_PUSH_UNREGISTER = "push-unregister"; export const IPC_PUSH_SUBSCRIBE = "push-subscribe"; export const IPC_PUSH_NOTIFICATION = "push-notification"; +// WARCRAFT CONTROLLER +export const IPC_WARCRAFT_GET_BLIZZARD_AGENT_PATH = "warcraft-get-blizzard-agent-path"; +export const IPC_WARCRAFT_GET_INSTALLED_PRODUCTS = "warcraft-get-installed-products"; +export const IPC_WARCRAFT_GET_EXECUTABLE_NAME = "warcraft-get-executable-name"; +export const IPC_WARCRAFT_GET_CLIENT_TYPE_FOR_BINARY = "warcraft-get-client-type-for-binary"; +export const IPC_WARCRAFT_IS_WOW_APPLICATION = "warcraft-is-wow-application"; +export const IPC_WARCRAFT_GET_EXECUTABLE_EXTENSION = "warcraft-get-executable-extension"; + // IPC STORAGE export const IPC_STORE_GET_OBJECT = "store-get-object"; export const IPC_STORE_GET_OBJECT_SYNC = "store-get-object-sync";