Files
YouTubeDL/tests/installed-helper.mjs
T
DepressedCat 5f2aad00f4
Check extension and helper / check (push) Canceled after 0s
Publish YouTubeDL 1.4.5 and website on Gitea
2026-10-10 23:53:17 +03:00

24 lines
1.4 KiB
JavaScript

import assert from "node:assert/strict";
import fs from "node:fs/promises";
import path from "node:path";
import { execFile } from "node:child_process";
import { promisify } from "node:util";
import { HOST_NAME } from "../extension/shared.js";
export async function installedHelperRoot() {
if (process.env.YTDL_INSTALLED_ROOT) return process.env.YTDL_INSTALLED_ROOT;
// A packaged parent process can redirect AppData. Use the registration that
// Edge actually opens, rather than a potentially stale LOCALAPPDATA directory.
assert.match(HOST_NAME, /^[a-z.]+$/);
const command = `$ErrorActionPreference='Stop'; [Console]::OutputEncoding=[Text.UTF8Encoding]::new($false); (Get-Item -LiteralPath 'Registry::HKEY_CURRENT_USER\\Software\\Microsoft\\Edge\\NativeMessagingHosts\\${HOST_NAME}').GetValue('')`;
const registration = (await promisify(execFile)("powershell.exe", ["-NoProfile", "-Command", command])).stdout.trim();
const native = JSON.parse((await fs.readFile(registration, "utf8")).replace(/^\uFEFF/, ""));
assert.equal(native.name, HOST_NAME);
const release = path.dirname(path.dirname(native.path));
const bundle = JSON.parse(await fs.readFile(path.join(release, "bundle.json"), "utf8"));
assert.equal(bundle.product, "YouTubeDL.Helper");
assert.equal(bundle.mode, "autonomous");
assert.equal(path.basename(path.dirname(release)), "releases");
return path.dirname(path.dirname(release));
}