Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10e7ff078a | ||
|
|
e677fff160 | ||
|
|
63db26611e | ||
|
|
5ec6577b5a | ||
|
|
0359742e70 | ||
|
|
b70f4074e5 | ||
|
|
a4c300407b | ||
|
|
758f64ced4 | ||
|
|
7ab803d4ca | ||
|
|
092697850d | ||
|
|
422e92dd89 | ||
|
|
a15c0fc91d | ||
|
|
358fa3ca9c | ||
|
|
10722fa217 | ||
|
|
7267fafb97 | ||
|
|
b5e95936dc | ||
|
|
047b38a41b | ||
|
|
a93fbb2ad3 | ||
|
|
0b927a3ef6 | ||
|
|
d35cf27de9 |
@@ -41,6 +41,7 @@ If you are running Linux with a graphical user interface (Wayland or X11), you s
|
|||||||
| Raspberry Pi 5 (arm64) | Raspberry Pi OS (64-bit), Wayland, X11 | [ELECROW Portable Monitor 10.1" (1280x800)](https://www.amazon.co.uk/dp/B0BHHQLKPY) | 🟨 |
|
| Raspberry Pi 5 (arm64) | Raspberry Pi OS (64-bit), Wayland, X11 | [ELECROW Portable Monitor 10.1" (1280x800)](https://www.amazon.co.uk/dp/B0BHHQLKPY) | 🟨 |
|
||||||
| Raspberry Pi 5 (arm64) | Raspberry Pi OS (64-bit), Wayland, X11 | Generic Non-Touch | 🟨 |
|
| Raspberry Pi 5 (arm64) | Raspberry Pi OS (64-bit), Wayland, X11 | Generic Non-Touch | 🟨 |
|
||||||
| Generic PC (x64) | Debian KDE (64-bit), Wayland, X11 | Generic Non-Touch | 🟧 |
|
| Generic PC (x64) | Debian KDE (64-bit), Wayland, X11 | Generic Non-Touch | 🟧 |
|
||||||
|
| Generic PC (x64) | Ubuntu XFCE (64-bit), X11 | Generic Non-Touch | 🟧 |
|
||||||
| Generic PC (x64) | Ubuntu GNOME (64-bit), X11 | Generic Non-Touch | 🟧 |
|
| Generic PC (x64) | Ubuntu GNOME (64-bit), X11 | Generic Non-Touch | 🟧 |
|
||||||
| Generic PC (x64) | Ubuntu GNOME (64-bit), Wayland | Generic Non-Touch | 🟥 |
|
| Generic PC (x64) | Ubuntu GNOME (64-bit), Wayland | Generic Non-Touch | 🟥 |
|
||||||
|
|
||||||
|
|||||||
@@ -17,13 +17,14 @@ Moreover, the device running the **kiosk application** also offers several **Hom
|
|||||||
- [x] Configurable browser zoom and theme support.
|
- [x] Configurable browser zoom and theme support.
|
||||||
- [x] Extended touch screen wake-up functionality.
|
- [x] Extended touch screen wake-up functionality.
|
||||||
- [x] Remote controllable via MQTT.
|
- [x] Remote controllable via MQTT.
|
||||||
- [x] Manage kiosk window status.
|
|
||||||
- [x] Toggle the on-screen keyboard.
|
- [x] Toggle the on-screen keyboard.
|
||||||
- [x] Touch display power and brightness.
|
- [x] Touch display power and brightness.
|
||||||
|
- [x] Manage kiosk window status and zoom.
|
||||||
|
- [x] Show network interfaces and addresses.
|
||||||
|
- [x] List all available system package upgrades.
|
||||||
- [x] Multi-webpage switching and url navigation.
|
- [x] Multi-webpage switching and url navigation.
|
||||||
- [x] Monitor temperature, processor and memory usage.
|
- [x] Monitor temperature, processor and memory usage.
|
||||||
- [x] Execute system reboot and shutdown commands.
|
- [x] Execute system reboot and shutdown commands.
|
||||||
- [x] Show available system package upgrades.
|
|
||||||
|
|
||||||
The kiosk application can be executed with command line arguments to load a **Home Assistant dashboard in fullscreen** mode.
|
The kiosk application can be executed with command line arguments to load a **Home Assistant dashboard in fullscreen** mode.
|
||||||
Additionally, a **MQTT endpoint** can be defined, allowing the application to provide controls and sensors for the Linux device and the connected Touch Display.
|
Additionally, a **MQTT endpoint** can be defined, allowing the application to provide controls and sensors for the Linux device and the connected Touch Display.
|
||||||
@@ -91,7 +92,8 @@ yarn build
|
|||||||
#### Update
|
#### Update
|
||||||
If you have already installed TouchKio and want to upgrade to the latest version, simply install the newer version over the existing one.
|
If you have already installed TouchKio and want to upgrade to the latest version, simply install the newer version over the existing one.
|
||||||
|
|
||||||
The [install.sh](https://github.com/leukipp/touchkio/blob/main/install.sh) script can also be run to update an existing installation to the **latest version**. The setup procedure can be skipped to use the existing default arguments from the configuration file:
|
The [install.sh](https://github.com/leukipp/touchkio/blob/main/install.sh) script can also be run to update an existing installation to the **latest version**.
|
||||||
|
The setup procedure can be skipped to use the existing default arguments from the configuration file:
|
||||||
```bash
|
```bash
|
||||||
bash <(wget -qO- https://raw.githubusercontent.com/leukipp/touchkio/main/install.sh) update
|
bash <(wget -qO- https://raw.githubusercontent.com/leukipp/touchkio/main/install.sh) update
|
||||||
```
|
```
|
||||||
@@ -249,9 +251,10 @@ Implementing stronger **security measures** would complicate the setup process a
|
|||||||
When using the kiosk application without initializing the default arguments, you will need to provide them with every command.
|
When using the kiosk application without initializing the default arguments, you will need to provide them with every command.
|
||||||
This means that the password may be stored as plain text in various files, such as `touchkio.service`, `~/.bash_history`, etc.
|
This means that the password may be stored as plain text in various files, such as `touchkio.service`, `~/.bash_history`, etc.
|
||||||
|
|
||||||
To resolve the issue where the first **touch** on a **turned-off screen** triggers a **click event** (which could inadvertently activate Home Assistant actions), a workaround needed to be implemented.
|
To address the problem where the first **touch** on a **turned-off screen** may trigger a **click event** (which could inadvertently activate Home Assistant actions), a workaround needed to be implemented.
|
||||||
When the screen **turns off** the **focus** is removed from the kiosk window.
|
When the screen **turns on/off**, the timestamps of these events are recorded.
|
||||||
This way, the first click only turns the screen on and focuses the window, allowing subsequent clicks to work as expected.
|
If a touch event is detected and the **timestamp** of the **last screen-off** is more recent than the **last screen-on** timestamp, the touch event is discarded and the screen is turned on instead.
|
||||||
|
From that point onward, subsequent touch interactions will function normally as expected.
|
||||||
|
|
||||||
Additionally, to address the problem that scrolling only works with the **web browser scrollbar** on the right, the application is configured to **simulate a touch device** using `Emulation.setEmitTouchEventsForMouse`.
|
Additionally, to address the problem that scrolling only works with the **web browser scrollbar** on the right, the application is configured to **simulate a touch device** using `Emulation.setEmitTouchEventsForMouse`.
|
||||||
This adjustment provides a user experience similar to that of a proper mobile device.
|
This adjustment provides a user experience similar to that of a proper mobile device.
|
||||||
@@ -259,7 +262,7 @@ This adjustment provides a user experience similar to that of a proper mobile de
|
|||||||
</div></details>
|
</div></details>
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
Please have a look into the [hardware](https://github.com/leukipp/touchkio/blob/main/HARDWARE.md) documentation if you ran into any issues.
|
Please review the [hardware](https://github.com/leukipp/touchkio/blob/main/HARDWARE.md) documentation first if you encounter any problems.
|
||||||
|
|
||||||
**Minimal features** are designed to run on any system without issues:
|
**Minimal features** are designed to run on any system without issues:
|
||||||
- A webview kiosk window launched in fullscreen mode and loading the specified `--web-url` website should not cause any problems.
|
- A webview kiosk window launched in fullscreen mode and loading the specified `--web-url` website should not cause any problems.
|
||||||
@@ -267,7 +270,7 @@ Please have a look into the [hardware](https://github.com/leukipp/touchkio/blob/
|
|||||||
**Extended features** become available when the `--mqtt-*` arguments are provided and the hardware is supported:
|
**Extended features** become available when the `--mqtt-*` arguments are provided and the hardware is supported:
|
||||||
- If your hardware is not fully compatible there should be no crashes, but you may miss some sensors.
|
- If your hardware is not fully compatible there should be no crashes, but you may miss some sensors.
|
||||||
- On some Debian based systems (e.g. Ubuntu GNOME), the display status control may only be available when using X11.
|
- On some Debian based systems (e.g. Ubuntu GNOME), the display status control may only be available when using X11.
|
||||||
- The following commands are currently implemented to modify the display status.
|
- The following commands are currently implemented to modify the display status. Make sure that one of these works for your display when you run it directly on the terminal, otherwise the MQTT switch will not work either.
|
||||||
- `wlopm --[on]/[off] *` (Raspberry Pi OS, Wayland)
|
- `wlopm --[on]/[off] *` (Raspberry Pi OS, Wayland)
|
||||||
- `kscreen-doctor --dpms [on]/[off]` (Debian KDE, Wayland)
|
- `kscreen-doctor --dpms [on]/[off]` (Debian KDE, Wayland)
|
||||||
- `xset dpms force [on]/[off]` (Generic, X11)
|
- `xset dpms force [on]/[off]` (Generic, X11)
|
||||||
@@ -282,13 +285,20 @@ Please have a look into the [hardware](https://github.com/leukipp/touchkio/blob/
|
|||||||
- On the terminal you may see some *ERROR:gbm_wrapper.cc* messages.
|
- On the terminal you may see some *ERROR:gbm_wrapper.cc* messages.
|
||||||
- This appears to be a [known issue](https://github.com/electron/electron/issues/42322) that currently lacks a fix, but the webview still works.
|
- This appears to be a [known issue](https://github.com/electron/electron/issues/42322) that currently lacks a fix, but the webview still works.
|
||||||
|
|
||||||
For debugging, stop the service and run `touchkio` directly on the terminal to view the log outputs.
|
For debugging, stop the service and launch `touchkio` directly on the terminal to monitor the log output in real-time.
|
||||||
If you encounter any problems, please [create an issue](https://github.com/leukipp/touchkio/issues) and include the output of `touchkio --version` along with your system setup and any additional terminal logs.
|
This output is also written into `~/.config/touchkio/logs/main.log` for review.
|
||||||
|
|
||||||
|
If you encounter any problems, please [create an issue](https://github.com/leukipp/touchkio/issues) and include the output of `touchkio --version`, additional information's about your system (such as operating system, hardware specs, etc.) and any relevant log files.
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
Thanks to Sebastian ([@pdsccode](https://github.com/pdsccode)) for his contributions on issues and [community](https://community.home-assistant.io/t/kiosk-mode-for-raspberry-pi-with-touch-display/821196) discussions.
|
|
||||||
|
|
||||||
[Inspired by](https://www.jeffgeerling.com/blog/2024/home-assistant-and-carplay-pi-touch-display-2) the one and only Raspberry Pi Master, Jeff Geerling ([@geerlingguy](https://github.com/geerlingguy)).
|
[Inspired by](https://www.jeffgeerling.com/blog/2024/home-assistant-and-carplay-pi-touch-display-2) the one and only Raspberry Pi Master, Jeff Geerling ([@geerlingguy](https://github.com/geerlingguy)).
|
||||||
|
|
||||||
|
Thanks to Sebastian ([@pdsccode](https://github.com/pdsccode)) for his contributions on issues and [community](https://community.home-assistant.io/t/kiosk-mode-for-raspberry-pi-with-touch-display/821196) discussions.
|
||||||
|
|
||||||
|
If you are looking for hardware or a well-designed mounting solution for the Raspberry Pi Display, check out the [blog post](https://www.thestockpot.net/videos/home-assistant-wall-display) from Dillan Stock ([@TheStockPot-AU](https://www.youtube.com/channel/UCmlzNHg8QiWVutUyFOV2UdQ)).
|
||||||
|
|
||||||
|
[](https://www.youtube.com/watch?v=uTxURzmrVtA)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
[MIT](https://github.com/leukipp/touchkio/blob/main/LICENSE)
|
[MIT](https://github.com/leukipp/touchkio/blob/main/LICENSE)
|
||||||
|
|||||||
+4
-4
@@ -62,13 +62,13 @@ module.exports = {
|
|||||||
for (const result of results) {
|
for (const result of results) {
|
||||||
const artifacts = [];
|
const artifacts = [];
|
||||||
for (const artifact of result.artifacts) {
|
for (const artifact of result.artifacts) {
|
||||||
// Currently disabled for zip files as it seems to corrupt them
|
if (artifact.includes(".zip")) {
|
||||||
if (artifact.includes(".zip") && false) {
|
|
||||||
const [name, platform, arch] = path.basename(artifact).split("-");
|
const [name, platform, arch] = path.basename(artifact).split("-");
|
||||||
const buildFile = path.join(`${name}-${platform}-${arch}`, "resources", "app", "build.json");
|
const buildFile = path.join(`${name}-${platform}-${arch}`, "resources", "app", "build.json");
|
||||||
const zip = await jszip.loadAsync(fs.readFileSync(artifact, "utf8"));
|
const options = { type: "nodebuffer", compression: "DEFLATE", compressionOptions: { level: 9 } };
|
||||||
|
const zip = await jszip.loadAsync(fs.readFileSync(artifact));
|
||||||
zip.file(buildFile, generateBuildFile(platform, arch, "zip"));
|
zip.file(buildFile, generateBuildFile(platform, arch, "zip"));
|
||||||
fs.writeFileSync(artifact, await zip.generateAsync({ type: "nodebuffer" }));
|
fs.writeFileSync(artifact, await zip.generateAsync(options));
|
||||||
}
|
}
|
||||||
if (artifact.includes("amd64")) {
|
if (artifact.includes("amd64")) {
|
||||||
const renamed = artifact.replace("amd64", "x64");
|
const renamed = artifact.replace("amd64", "x64");
|
||||||
|
|||||||
@@ -5,10 +5,13 @@ const readline = require("readline/promises");
|
|||||||
const integration = require("./js/integration");
|
const integration = require("./js/integration");
|
||||||
const hardware = require("./js/hardware");
|
const hardware = require("./js/hardware");
|
||||||
const webview = require("./js/webview");
|
const webview = require("./js/webview");
|
||||||
|
const log = require("electron-log");
|
||||||
const { app } = require("electron");
|
const { app } = require("electron");
|
||||||
|
const Events = require("events");
|
||||||
|
|
||||||
global.APP = global.APP || {};
|
global.APP = global.APP || {};
|
||||||
global.ARGS = global.ARGS || {};
|
global.ARGS = global.ARGS || {};
|
||||||
|
global.EVENTS = global.EVENTS || new Events();
|
||||||
|
|
||||||
if (!process.env.DISPLAY) {
|
if (!process.env.DISPLAY) {
|
||||||
console.error(`\n$DISPLAY variable not set to run the GUI application, are you connected via SSH?\n`);
|
console.error(`\n$DISPLAY variable not set to run the GUI application, are you connected via SSH?\n`);
|
||||||
@@ -24,12 +27,16 @@ if (!process.env.DISPLAY) {
|
|||||||
* initialization tasks.
|
* initialization tasks.
|
||||||
*/
|
*/
|
||||||
app.whenReady().then(async () => {
|
app.whenReady().then(async () => {
|
||||||
if (!(await initApp()) || !(await initArgs())) {
|
if (!(await initApp()) || !(await initArgs()) || !(await initLog())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show used arguments
|
// Show used arguments
|
||||||
console.log(`Arguments: ${JSON.stringify(ARGS, null, 2)}`);
|
const args = Object.assign({}, ARGS);
|
||||||
|
if ("mqtt_password" in args) {
|
||||||
|
args.mqtt_password = "*".repeat((args.mqtt_password || "").length);
|
||||||
|
}
|
||||||
|
console.log(`Arguments: ${JSON.stringify(args, null, 2)}`);
|
||||||
|
|
||||||
// Chained init functions
|
// Chained init functions
|
||||||
const chained = [webview.init, hardware.init, integration.init];
|
const chained = [webview.init, hardware.init, integration.init];
|
||||||
@@ -58,6 +65,7 @@ const initApp = async () => {
|
|||||||
APP.version = app.getVersion();
|
APP.version = app.getVersion();
|
||||||
APP.path = app.getAppPath();
|
APP.path = app.getAppPath();
|
||||||
APP.config = app.getPath("userData");
|
APP.config = app.getPath("userData");
|
||||||
|
APP.log = path.join(app.getPath("logs"), "main.log");
|
||||||
|
|
||||||
// Set additional update infos
|
// Set additional update infos
|
||||||
APP.homepage = `https://github.com/${packageJson.author}/${packageJson.name}`;
|
APP.homepage = `https://github.com/${packageJson.author}/${packageJson.name}`;
|
||||||
@@ -133,6 +141,29 @@ const initArgs = async () => {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the global log object.
|
||||||
|
*
|
||||||
|
* @returns {bool} Returns true if the initialization was successful.
|
||||||
|
*/
|
||||||
|
const initLog = async () => {
|
||||||
|
try {
|
||||||
|
if (fs.existsSync(APP.log)) {
|
||||||
|
fs.unlinkSync(APP.log);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to delete log file:", error.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Overwrite console log settings
|
||||||
|
log.transports.file.resolvePathFn = () => {
|
||||||
|
return APP.log;
|
||||||
|
};
|
||||||
|
Object.assign(console, log.functions);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses command-line arguments from the given process object.
|
* Parses command-line arguments from the given process object.
|
||||||
*
|
*
|
||||||
|
|||||||
+29
-26
@@ -3,13 +3,11 @@ const fs = require("fs");
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const fsp = require("fs/promises");
|
const fsp = require("fs/promises");
|
||||||
const cpr = require("child_process");
|
const cpr = require("child_process");
|
||||||
const Events = require("events");
|
|
||||||
|
|
||||||
global.HARDWARE = global.HARDWARE || {
|
global.HARDWARE = global.HARDWARE || {
|
||||||
initialized: false,
|
initialized: false,
|
||||||
events: new Events(),
|
|
||||||
session: {},
|
|
||||||
support: {},
|
support: {},
|
||||||
|
session: {},
|
||||||
battery: {
|
battery: {
|
||||||
level: {
|
level: {
|
||||||
path: null,
|
path: null,
|
||||||
@@ -39,7 +37,7 @@ global.HARDWARE = global.HARDWARE || {
|
|||||||
*/
|
*/
|
||||||
const init = async () => {
|
const init = async () => {
|
||||||
if (!compatibleSystem()) {
|
if (!compatibleSystem()) {
|
||||||
console.warn("Operating system is not supported\n");
|
console.error("Operating system is not supported");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,33 +54,35 @@ const init = async () => {
|
|||||||
HARDWARE.initialized = true;
|
HARDWARE.initialized = true;
|
||||||
|
|
||||||
// Show supported features
|
// Show supported features
|
||||||
console.log(`\nSupported: ${JSON.stringify(HARDWARE.support, null, 2)}`);
|
process.stdout.write("\n");
|
||||||
|
console.log(`Supported: ${JSON.stringify(HARDWARE.support, null, 2)}`);
|
||||||
|
|
||||||
// Show session infos
|
// Show session infos
|
||||||
console.log("\nUser:", HARDWARE.session.user);
|
process.stdout.write("\n");
|
||||||
|
console.log("User:", HARDWARE.session.user);
|
||||||
console.log("Session:", HARDWARE.session.type);
|
console.log("Session:", HARDWARE.session.type);
|
||||||
console.log("Desktop:", HARDWARE.session.desktop);
|
console.log("Desktop:", HARDWARE.session.desktop);
|
||||||
|
|
||||||
// Show device infos
|
// Show device infos
|
||||||
console.log("\nModel:", getModel());
|
process.stdout.write("\n");
|
||||||
|
console.log("Model:", getModel());
|
||||||
console.log("Vendor:", getVendor());
|
console.log("Vendor:", getVendor());
|
||||||
console.log("Serial Number:", getSerialNumber());
|
console.log("Serial Number:", getSerialNumber());
|
||||||
console.log("Network Addresses:", getNetworkAddresses());
|
console.log("Network Addresses:", getNetworkAddresses());
|
||||||
console.log("Host Name:", getHostName());
|
console.log("Host Name:", getHostName());
|
||||||
|
|
||||||
// Show system infos
|
// Show system infos
|
||||||
console.log("\nUp Time:", getUpTime());
|
process.stdout.write("\n");
|
||||||
|
console.log("Up Time:", getUpTime());
|
||||||
console.log("Memory Size:", getMemorySize());
|
console.log("Memory Size:", getMemorySize());
|
||||||
console.log("Memory Usage:", getMemoryUsage());
|
console.log("Memory Usage:", getMemoryUsage());
|
||||||
console.log("Processor Usage:", getProcessorUsage());
|
console.log("Processor Usage:", getProcessorUsage());
|
||||||
console.log("Processor Temperature:", getProcessorTemperature());
|
console.log("Processor Temperature:", getProcessorTemperature());
|
||||||
|
|
||||||
// Show hardware infos
|
// Show hardware infos
|
||||||
|
process.stdout.write("\n");
|
||||||
const unsupported = "unsupported";
|
const unsupported = "unsupported";
|
||||||
console.log(
|
console.log(`Battery Level [${HARDWARE.battery.level.path || unsupported}]:`, `${getBatteryLevel() || unsupported}`);
|
||||||
`\nBattery Level [${HARDWARE.battery.level.path || unsupported}]:`,
|
|
||||||
`${getBatteryLevel() || unsupported}`,
|
|
||||||
);
|
|
||||||
console.log(
|
console.log(
|
||||||
`Display Status [${HARDWARE.display.status.path || unsupported}]:`,
|
`Display Status [${HARDWARE.display.status.path || unsupported}]:`,
|
||||||
`${getDisplayStatus() || unsupported} (${HARDWARE.display.status.command || unsupported})`,
|
`${getDisplayStatus() || unsupported} (${HARDWARE.display.status.command || unsupported})`,
|
||||||
@@ -93,10 +93,11 @@ const init = async () => {
|
|||||||
);
|
);
|
||||||
console.log(
|
console.log(
|
||||||
`Keyboard Visibility [${HARDWARE.support.keyboardVisibility ? "squeekboard" : unsupported}]:`,
|
`Keyboard Visibility [${HARDWARE.support.keyboardVisibility ? "squeekboard" : unsupported}]:`,
|
||||||
`${getKeyboardVisibility() || unsupported}\n`,
|
`${getKeyboardVisibility() || unsupported}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check for keyboard visibility
|
// Check for keyboard visibility
|
||||||
|
process.stdout.write("\n");
|
||||||
setKeyboardVisibility("OFF", (reply, error) => {
|
setKeyboardVisibility("OFF", (reply, error) => {
|
||||||
if (!reply || error) {
|
if (!reply || error) {
|
||||||
return;
|
return;
|
||||||
@@ -106,12 +107,14 @@ const init = async () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HARDWARE.keyboard.visibility = property.Visible === "true";
|
HARDWARE.keyboard.visibility = property.Visible === "true";
|
||||||
HARDWARE.events.emit("updateKeyboard");
|
EVENTS.emit("updateKeyboard");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Check for display changes
|
// Check for display changes
|
||||||
|
setDisplayStatus("ON", () => {
|
||||||
interval(update, 1000);
|
interval(update, 1000);
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
@@ -130,7 +133,7 @@ const update = async () => {
|
|||||||
if (status !== HARDWARE.display.status.value) {
|
if (status !== HARDWARE.display.status.value) {
|
||||||
console.log("Update Display Status:", getDisplayStatus());
|
console.log("Update Display Status:", getDisplayStatus());
|
||||||
HARDWARE.display.status.value = status;
|
HARDWARE.display.status.value = status;
|
||||||
HARDWARE.events.emit("updateDisplay");
|
EVENTS.emit("updateDisplay");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +143,7 @@ const update = async () => {
|
|||||||
if (brightness !== HARDWARE.display.brightness.value) {
|
if (brightness !== HARDWARE.display.brightness.value) {
|
||||||
console.log("Update Display Brightness:", getDisplayBrightness());
|
console.log("Update Display Brightness:", getDisplayBrightness());
|
||||||
HARDWARE.display.brightness.value = brightness;
|
HARDWARE.display.brightness.value = brightness;
|
||||||
HARDWARE.events.emit("updateDisplay");
|
EVENTS.emit("updateDisplay");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -369,7 +372,7 @@ const getProcessorTemperature = () => {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const type = fs.readFileSync(typeFile, "utf8").trim();
|
const type = fs.readFileSync(typeFile, "utf8").trim();
|
||||||
if (["cpu-thermal", "x86_pkg_temp", "k10temp", "acpitz"].includes(type)) {
|
if (["cpu-thermal", "x86_pkg_temp", "k10temp", "acpitz", "cpu"].includes(type)) {
|
||||||
return parseFloat(fs.readFileSync(tempFile, "utf8").trim()) / 1000;
|
return parseFloat(fs.readFileSync(tempFile, "utf8").trim()) / 1000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -796,24 +799,24 @@ const execAsyncCommand = (cmd, args = [], callback = null) => {
|
|||||||
* @returns {Object} The spawned process object.
|
* @returns {Object} The spawned process object.
|
||||||
*/
|
*/
|
||||||
const execScriptCommand = (cmd, args = [], callback = null) => {
|
const execScriptCommand = (cmd, args = [], callback = null) => {
|
||||||
let progress = 10;
|
let progress = 1;
|
||||||
let proc = cpr.spawn(cmd, args);
|
let proc = cpr.spawn(cmd, args);
|
||||||
if (typeof callback === "function") callback(progress, null);
|
if (typeof callback === "function") callback(progress, null);
|
||||||
proc.stdout.on("data", (data) => {
|
proc.stdout.on("data", (data) => {
|
||||||
if (data) {
|
if (data) {
|
||||||
const lines = data.toString().trim();
|
const output = data.toString().trim();
|
||||||
const output = lines.replace(/\n+/g, "\n").replace(/^\n+|\n+$|\0/g, "");
|
const lines = output.replace(/\n+/g, "\n").replace(/^\n+|\n+$|\0/g, "");
|
||||||
if (output) {
|
for (const line of lines.split("\n").filter(Boolean)) {
|
||||||
console.log(output);
|
console.log(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
proc.stderr.on("data", (data) => {
|
proc.stderr.on("data", (data) => {
|
||||||
if (data) {
|
if (data) {
|
||||||
const lines = data.toString().trim();
|
const output = data.toString().trim();
|
||||||
const output = lines.replace(/\n+/g, "\n").replace(/^\n+|\n+$|\0/g, "");
|
const lines = output.replace(/\n+/g, "\n").replace(/^\n+|\n+$|\0/g, "");
|
||||||
if (output) {
|
for (const line of lines.split("\n").filter(Boolean)) {
|
||||||
const matches = output.match(/(\d{1,3})%/g);
|
const matches = line.match(/(\d{1,3})%/g);
|
||||||
if (matches) {
|
if (matches) {
|
||||||
const match = Math.max(...matches.map((p) => parseInt(p)));
|
const match = Math.max(...matches.map((p) => parseInt(p)));
|
||||||
const percent = Math.floor(match / 10) * 10;
|
const percent = Math.floor(match / 10) * 10;
|
||||||
|
|||||||
+86
-52
@@ -1,11 +1,9 @@
|
|||||||
const mqtt = require("mqtt");
|
const mqtt = require("mqtt");
|
||||||
const hardware = require("./hardware");
|
const hardware = require("./hardware");
|
||||||
const { app } = require("electron");
|
const { app } = require("electron");
|
||||||
const Events = require("events");
|
|
||||||
|
|
||||||
global.INTEGRATION = global.INTEGRATION || {
|
global.INTEGRATION = global.INTEGRATION || {
|
||||||
initialized: false,
|
initialized: false,
|
||||||
events: new Events(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,15 +49,17 @@ const init = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Connection settings
|
// Connection settings
|
||||||
const options = user === null || password === null ? null : { username: user, password: password };
|
const masked = password === null ? null : "*".repeat(password.length);
|
||||||
const masked = password === null ? "null" : "*".repeat(password.length);
|
const options = user === null || password === null ? {} : { username: user, password: password };
|
||||||
|
options.rejectUnauthorized = !("ignore_certificate_errors" in ARGS);
|
||||||
console.log("MQTT Connecting:", `${user}:${masked}@${url.toString()}`);
|
console.log("MQTT Connecting:", `${user}:${masked}@${url.toString()}`);
|
||||||
INTEGRATION.client = mqtt.connect(url.toString(), options);
|
INTEGRATION.client = mqtt.connect(url.toString(), options);
|
||||||
|
|
||||||
// Client connected
|
// Client connected
|
||||||
INTEGRATION.client
|
INTEGRATION.client
|
||||||
.once("connect", () => {
|
.once("connect", () => {
|
||||||
console.log(`MQTT Connected: ${url.toString()}\n`);
|
console.log(`MQTT Connected: ${url.toString()}`);
|
||||||
|
process.stdout.write("\n");
|
||||||
|
|
||||||
// Init client controls
|
// Init client controls
|
||||||
initApp();
|
initApp();
|
||||||
@@ -96,8 +96,8 @@ const init = async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Update sensor states from events
|
// Update sensor states from events
|
||||||
HARDWARE.events.on("updateDisplay", updateDisplay);
|
EVENTS.on("updateDisplay", updateDisplay);
|
||||||
HARDWARE.events.on("updateKeyboard", updateKeyboard);
|
EVENTS.on("updateKeyboard", updateKeyboard);
|
||||||
|
|
||||||
// Update time sensors periodically (30s)
|
// Update time sensors periodically (30s)
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
@@ -141,6 +141,22 @@ const update = async () => {
|
|||||||
updateBatteryLevel();
|
updateBatteryLevel();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the auto-discovery config via the mqtt connection.
|
||||||
|
*
|
||||||
|
* @param {string} type - The entity type name.
|
||||||
|
* @param {Object} config - The configuration object.
|
||||||
|
* @returns {Object} Instance of the mqtt client.
|
||||||
|
*/
|
||||||
|
const removeConfig = (type, config) => {
|
||||||
|
if (type === null || config === null) {
|
||||||
|
return INTEGRATION.client;
|
||||||
|
}
|
||||||
|
const path = config.unique_id.replace(`${INTEGRATION.node}_`, "");
|
||||||
|
const root = `${INTEGRATION.discovery}/${type}/${INTEGRATION.node}/${path}/config`;
|
||||||
|
return INTEGRATION.client.publish(root, null, { qos: 1, retain: true });
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Publishes the auto-discovery config via the mqtt connection.
|
* Publishes the auto-discovery config via the mqtt connection.
|
||||||
*
|
*
|
||||||
@@ -191,9 +207,6 @@ const publishState = (path, state) => {
|
|||||||
* Initializes the app update entity and handles the execute logic.
|
* Initializes the app update entity and handles the execute logic.
|
||||||
*/
|
*/
|
||||||
const initApp = () => {
|
const initApp = () => {
|
||||||
if (!HARDWARE.support.appUpdate) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const root = `${INTEGRATION.root}/app`;
|
const root = `${INTEGRATION.root}/app`;
|
||||||
const config = {
|
const config = {
|
||||||
name: "App",
|
name: "App",
|
||||||
@@ -203,15 +216,23 @@ const initApp = () => {
|
|||||||
payload_install: "update",
|
payload_install: "update",
|
||||||
device: INTEGRATION.device,
|
device: INTEGRATION.device,
|
||||||
};
|
};
|
||||||
|
if (!HARDWARE.support.appUpdate) {
|
||||||
|
removeConfig("update", config);
|
||||||
|
return;
|
||||||
|
}
|
||||||
publishConfig("update", config)
|
publishConfig("update", config)
|
||||||
.on("message", (topic, message) => {
|
.on("message", (topic, message) => {
|
||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
console.log("Update App...");
|
console.log("Update App...");
|
||||||
hardware.setDisplayStatus("ON");
|
hardware.setDisplayStatus("ON", () => {
|
||||||
const args = ["-c", `bash <(wget -qO- ${APP.scripts.install}) update`];
|
const args = ["-c", `bash <(wget -qO- ${APP.scripts.install}) update`];
|
||||||
hardware.execScriptCommand("bash", args, (progress, error) => {
|
hardware.execScriptCommand("bash", args, (progress, error) => {
|
||||||
|
if (progress) {
|
||||||
|
console.log(`Progress: ${progress}%`);
|
||||||
|
}
|
||||||
updateApp(progress);
|
updateApp(progress);
|
||||||
});
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -223,14 +244,15 @@ const initApp = () => {
|
|||||||
*/
|
*/
|
||||||
const updateApp = async (progress = 0) => {
|
const updateApp = async (progress = 0) => {
|
||||||
const latest = APP.releases.latest;
|
const latest = APP.releases.latest;
|
||||||
if (!latest) {
|
if (!HARDWARE.support.appUpdate || !latest || !latest.summary) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const summary = latest.summary.length > 250 ? latest.summary.slice(0, 250) + "..." : latest.summary;
|
||||||
const version = {
|
const version = {
|
||||||
title: latest.title,
|
title: latest.title,
|
||||||
latest_version: latest.version,
|
latest_version: latest.version,
|
||||||
installed_version: APP.version,
|
installed_version: APP.version,
|
||||||
release_summary: latest.summary.slice(0, 250) + "...",
|
release_summary: summary,
|
||||||
release_url: latest.url,
|
release_url: latest.url,
|
||||||
update_percentage: progress || null,
|
update_percentage: progress || null,
|
||||||
in_progress: progress && progress > 0 && progress < 100,
|
in_progress: progress && progress > 0 && progress < 100,
|
||||||
@@ -242,9 +264,6 @@ const updateApp = async (progress = 0) => {
|
|||||||
* Initializes the shutdown button and handles the execute logic.
|
* Initializes the shutdown button and handles the execute logic.
|
||||||
*/
|
*/
|
||||||
const initShutdown = () => {
|
const initShutdown = () => {
|
||||||
if (!HARDWARE.support.sudoRights) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const root = `${INTEGRATION.root}/shutdown`;
|
const root = `${INTEGRATION.root}/shutdown`;
|
||||||
const config = {
|
const config = {
|
||||||
name: "Shutdown",
|
name: "Shutdown",
|
||||||
@@ -253,12 +272,17 @@ const initShutdown = () => {
|
|||||||
icon: "mdi:power",
|
icon: "mdi:power",
|
||||||
device: INTEGRATION.device,
|
device: INTEGRATION.device,
|
||||||
};
|
};
|
||||||
|
if (!HARDWARE.support.sudoRights) {
|
||||||
|
removeConfig("button", config);
|
||||||
|
return;
|
||||||
|
}
|
||||||
publishConfig("button", config)
|
publishConfig("button", config)
|
||||||
.on("message", (topic, message) => {
|
.on("message", (topic, message) => {
|
||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
console.log("Shutdown system...");
|
console.log("Shutdown system...");
|
||||||
hardware.setDisplayStatus("ON");
|
hardware.setDisplayStatus("ON", () => {
|
||||||
hardware.shutdownSystem();
|
hardware.shutdownSystem();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -268,9 +292,6 @@ const initShutdown = () => {
|
|||||||
* Initializes the reboot button and handles the execute logic.
|
* Initializes the reboot button and handles the execute logic.
|
||||||
*/
|
*/
|
||||||
const initReboot = () => {
|
const initReboot = () => {
|
||||||
if (!HARDWARE.support.sudoRights) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const root = `${INTEGRATION.root}/reboot`;
|
const root = `${INTEGRATION.root}/reboot`;
|
||||||
const config = {
|
const config = {
|
||||||
name: "Reboot",
|
name: "Reboot",
|
||||||
@@ -279,12 +300,17 @@ const initReboot = () => {
|
|||||||
icon: "mdi:restart",
|
icon: "mdi:restart",
|
||||||
device: INTEGRATION.device,
|
device: INTEGRATION.device,
|
||||||
};
|
};
|
||||||
|
if (!HARDWARE.support.sudoRights) {
|
||||||
|
removeConfig("button", config);
|
||||||
|
return;
|
||||||
|
}
|
||||||
publishConfig("button", config)
|
publishConfig("button", config)
|
||||||
.on("message", (topic, message) => {
|
.on("message", (topic, message) => {
|
||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
console.log("Rebooting system...");
|
console.log("Rebooting system...");
|
||||||
hardware.setDisplayStatus("ON");
|
hardware.setDisplayStatus("ON", () => {
|
||||||
hardware.rebootSystem();
|
hardware.rebootSystem();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -306,8 +332,9 @@ const initRefresh = () => {
|
|||||||
.on("message", (topic, message) => {
|
.on("message", (topic, message) => {
|
||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
console.log("Refreshing webview...");
|
console.log("Refreshing webview...");
|
||||||
hardware.setDisplayStatus("ON");
|
hardware.setDisplayStatus("ON", () => {
|
||||||
WEBVIEW.events.emit("reloadView");
|
EVENTS.emit("reloadView");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -333,7 +360,7 @@ const initKiosk = () => {
|
|||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
const status = message.toString();
|
const status = message.toString();
|
||||||
console.log("Set Kiosk Status:", status);
|
console.log("Set Kiosk Status:", status);
|
||||||
hardware.setDisplayStatus("ON");
|
hardware.setDisplayStatus("ON", () => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "Framed":
|
case "Framed":
|
||||||
WEBVIEW.window.restore();
|
WEBVIEW.window.restore();
|
||||||
@@ -358,6 +385,7 @@ const initKiosk = () => {
|
|||||||
case "Terminated":
|
case "Terminated":
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -368,7 +396,7 @@ const initKiosk = () => {
|
|||||||
* Updates the kiosk status via the mqtt connection.
|
* Updates the kiosk status via the mqtt connection.
|
||||||
*/
|
*/
|
||||||
const updateKiosk = async () => {
|
const updateKiosk = async () => {
|
||||||
const kiosk = WEBVIEW.status;
|
const kiosk = WEBVIEW.tracker.status;
|
||||||
publishState("kiosk", kiosk);
|
publishState("kiosk", kiosk);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -376,9 +404,6 @@ const updateKiosk = async () => {
|
|||||||
* Initializes the display status, brightness and handles the execute logic.
|
* Initializes the display status, brightness and handles the execute logic.
|
||||||
*/
|
*/
|
||||||
const initDisplay = () => {
|
const initDisplay = () => {
|
||||||
if (!HARDWARE.support.displayStatus) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const root = `${INTEGRATION.root}/display`;
|
const root = `${INTEGRATION.root}/display`;
|
||||||
const config = {
|
const config = {
|
||||||
name: "Display",
|
name: "Display",
|
||||||
@@ -394,26 +419,30 @@ const initDisplay = () => {
|
|||||||
brightness_scale: 100,
|
brightness_scale: 100,
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
if (!HARDWARE.support.displayStatus) {
|
||||||
|
removeConfig("light", config);
|
||||||
|
return;
|
||||||
|
}
|
||||||
publishConfig("light", config)
|
publishConfig("light", config)
|
||||||
.on("message", (topic, message) => {
|
.on("message", (topic, message) => {
|
||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
const status = message.toString();
|
const status = message.toString();
|
||||||
console.log("Set Display Status:", status);
|
console.log("Set Display Status:", status);
|
||||||
hardware.setDisplayStatus(status, (reply, error) => {
|
hardware.setDisplayStatus(status, (reply, error) => {
|
||||||
if (error) {
|
if (!error) {
|
||||||
console.warn("Failed:", error);
|
|
||||||
} else {
|
|
||||||
hardware.update();
|
hardware.update();
|
||||||
|
} else {
|
||||||
|
console.warn("Failed:", error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (topic === config.brightness_command_topic) {
|
} else if (topic === config.brightness_command_topic) {
|
||||||
const brightness = parseInt(message, 10);
|
const brightness = parseInt(message, 10);
|
||||||
console.log("Set Display Brightness:", brightness);
|
console.log("Set Display Brightness:", brightness);
|
||||||
hardware.setDisplayBrightness(brightness, (reply, error) => {
|
hardware.setDisplayBrightness(brightness, (reply, error) => {
|
||||||
if (error) {
|
if (!error) {
|
||||||
console.warn("Failed:", error);
|
|
||||||
} else {
|
|
||||||
hardware.update();
|
hardware.update();
|
||||||
|
} else {
|
||||||
|
console.warn("Failed:", error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -437,9 +466,6 @@ const updateDisplay = async () => {
|
|||||||
* Initializes the keyboard visibility and handles the execute logic.
|
* Initializes the keyboard visibility and handles the execute logic.
|
||||||
*/
|
*/
|
||||||
const initKeyboard = () => {
|
const initKeyboard = () => {
|
||||||
if (!HARDWARE.support.keyboardVisibility) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const root = `${INTEGRATION.root}/keyboard`;
|
const root = `${INTEGRATION.root}/keyboard`;
|
||||||
const config = {
|
const config = {
|
||||||
name: "Keyboard",
|
name: "Keyboard",
|
||||||
@@ -449,12 +475,16 @@ const initKeyboard = () => {
|
|||||||
icon: "mdi:keyboard-close-outline",
|
icon: "mdi:keyboard-close-outline",
|
||||||
device: INTEGRATION.device,
|
device: INTEGRATION.device,
|
||||||
};
|
};
|
||||||
|
if (!HARDWARE.support.keyboardVisibility) {
|
||||||
|
removeConfig("switch", config);
|
||||||
|
return;
|
||||||
|
}
|
||||||
publishConfig("switch", config)
|
publishConfig("switch", config)
|
||||||
.on("message", (topic, message) => {
|
.on("message", (topic, message) => {
|
||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
const status = message.toString();
|
const status = message.toString();
|
||||||
console.log("Set Keyboard Visibility:", status);
|
console.log("Set Keyboard Visibility:", status);
|
||||||
hardware.setKeyboardVisibility(status);
|
hardware.setDisplayStatus("ON", () => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "OFF":
|
case "OFF":
|
||||||
WEBVIEW.window.restore();
|
WEBVIEW.window.restore();
|
||||||
@@ -467,6 +497,8 @@ const initKeyboard = () => {
|
|||||||
WEBVIEW.window.maximize();
|
WEBVIEW.window.maximize();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
hardware.setKeyboardVisibility(status);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -485,9 +517,6 @@ const updateKeyboard = async () => {
|
|||||||
* Initializes the page number and handles the execute logic.
|
* Initializes the page number and handles the execute logic.
|
||||||
*/
|
*/
|
||||||
const initPageNumber = () => {
|
const initPageNumber = () => {
|
||||||
if (WEBVIEW.viewUrls.length <= 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const root = `${INTEGRATION.root}/page_number`;
|
const root = `${INTEGRATION.root}/page_number`;
|
||||||
const config = {
|
const config = {
|
||||||
name: "Page Number",
|
name: "Page Number",
|
||||||
@@ -502,13 +531,17 @@ const initPageNumber = () => {
|
|||||||
icon: "mdi:page-next",
|
icon: "mdi:page-next",
|
||||||
device: INTEGRATION.device,
|
device: INTEGRATION.device,
|
||||||
};
|
};
|
||||||
|
if (WEBVIEW.viewUrls.length <= 2) {
|
||||||
|
removeConfig("number", config);
|
||||||
|
return;
|
||||||
|
}
|
||||||
publishConfig("number", config)
|
publishConfig("number", config)
|
||||||
.on("message", (topic, message) => {
|
.on("message", (topic, message) => {
|
||||||
if (topic === config.command_topic) {
|
if (topic === config.command_topic) {
|
||||||
const number = parseInt(message, 10);
|
const number = parseInt(message, 10);
|
||||||
console.log("Set Page Number:", number);
|
console.log("Set Page Number:", number);
|
||||||
WEBVIEW.viewActive = number || 1;
|
WEBVIEW.viewActive = number || 1;
|
||||||
WEBVIEW.events.emit("updateView");
|
EVENTS.emit("updateView");
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -519,7 +552,7 @@ const initPageNumber = () => {
|
|||||||
* Updates the page number via the mqtt connection.
|
* Updates the page number via the mqtt connection.
|
||||||
*/
|
*/
|
||||||
const updatePageNumber = async () => {
|
const updatePageNumber = async () => {
|
||||||
const pageNumber = WEBVIEW.viewActive || 1;
|
const pageNumber = WEBVIEW.viewUrls.length <= 2 ? null : WEBVIEW.viewActive || 1;
|
||||||
publishState("page_number", pageNumber);
|
publishState("page_number", pageNumber);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -547,7 +580,7 @@ const initPageZoom = () => {
|
|||||||
const zoom = parseInt(message, 10);
|
const zoom = parseInt(message, 10);
|
||||||
console.log("Set Page Zoom:", zoom);
|
console.log("Set Page Zoom:", zoom);
|
||||||
WEBVIEW.views[WEBVIEW.viewActive || 1].webContents.setZoomFactor(zoom / 100.0);
|
WEBVIEW.views[WEBVIEW.viewActive || 1].webContents.setZoomFactor(zoom / 100.0);
|
||||||
WEBVIEW.events.emit("updateView");
|
EVENTS.emit("updateView");
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribe(config.command_topic);
|
.subscribe(config.command_topic);
|
||||||
@@ -840,9 +873,6 @@ const updateProcessorTemperature = async () => {
|
|||||||
* Initializes the battery level sensor.
|
* Initializes the battery level sensor.
|
||||||
*/
|
*/
|
||||||
const initBatteryLevel = () => {
|
const initBatteryLevel = () => {
|
||||||
if (!HARDWARE.support.batteryLevel) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const root = `${INTEGRATION.root}/battery_level`;
|
const root = `${INTEGRATION.root}/battery_level`;
|
||||||
const config = {
|
const config = {
|
||||||
name: "Battery Level",
|
name: "Battery Level",
|
||||||
@@ -853,6 +883,10 @@ const initBatteryLevel = () => {
|
|||||||
icon: "mdi:battery-medium",
|
icon: "mdi:battery-medium",
|
||||||
device: INTEGRATION.device,
|
device: INTEGRATION.device,
|
||||||
};
|
};
|
||||||
|
if (!HARDWARE.support.batteryLevel) {
|
||||||
|
removeConfig("sensor", config);
|
||||||
|
return;
|
||||||
|
}
|
||||||
publishConfig("sensor", config);
|
publishConfig("sensor", config);
|
||||||
updateBatteryLevel();
|
updateBatteryLevel();
|
||||||
};
|
};
|
||||||
@@ -888,12 +922,12 @@ const initPackageUpgrades = () => {
|
|||||||
*/
|
*/
|
||||||
const updatePackageUpgrades = async () => {
|
const updatePackageUpgrades = async () => {
|
||||||
const packages = hardware.checkPackageUpgrades();
|
const packages = hardware.checkPackageUpgrades();
|
||||||
const attributes = {
|
const upgrades = {
|
||||||
total: packages.length,
|
total: packages.length,
|
||||||
packages: packages.map((pkg) => pkg.replace(/\s*\[.*?\]\s*/g, "").trim()),
|
packages: packages.map((pkg) => pkg.replace(/\s*\[.*?\]\s*/g, "").trim()),
|
||||||
};
|
};
|
||||||
publishState("package_upgrades", attributes.total);
|
publishState("package_upgrades", upgrades.total);
|
||||||
publishAttributes("package_upgrades", attributes);
|
publishAttributes("package_upgrades", upgrades);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -946,8 +980,8 @@ const initLastActive = () => {
|
|||||||
*/
|
*/
|
||||||
const updateLastActive = async () => {
|
const updateLastActive = async () => {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const then = WEBVIEW.pointer.time;
|
const then = WEBVIEW.tracker.pointer.time;
|
||||||
const lastActive = Math.abs(now - then) / (1000 * 60);
|
const lastActive = (now - then) / (1000 * 60);
|
||||||
publishState("last_active", lastActive);
|
publishState("last_active", lastActive);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+65
-45
@@ -1,18 +1,20 @@
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const axios = require("axios");
|
const axios = require("axios");
|
||||||
|
const https = require("https");
|
||||||
const hardware = require("./hardware");
|
const hardware = require("./hardware");
|
||||||
const integration = require("./integration");
|
const integration = require("./integration");
|
||||||
const { app, nativeTheme, globalShortcut, ipcMain, session, BaseWindow, WebContentsView } = require("electron");
|
const { app, nativeTheme, globalShortcut, ipcMain, session, BaseWindow, WebContentsView } = require("electron");
|
||||||
const Events = require("events");
|
|
||||||
|
|
||||||
global.WEBVIEW = global.WEBVIEW || {
|
global.WEBVIEW = global.WEBVIEW || {
|
||||||
initialized: false,
|
initialized: false,
|
||||||
events: new Events(),
|
tracker: {
|
||||||
status: null,
|
|
||||||
locked: false,
|
|
||||||
pointer: {
|
pointer: {
|
||||||
|
position: {},
|
||||||
time: new Date(),
|
time: new Date(),
|
||||||
},
|
},
|
||||||
|
display: {},
|
||||||
|
status: null,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,8 +51,6 @@ const init = async () => {
|
|||||||
WEBVIEW.navigationTheme = theme;
|
WEBVIEW.navigationTheme = theme;
|
||||||
WEBVIEW.navigationEnabled = widget;
|
WEBVIEW.navigationEnabled = widget;
|
||||||
nativeTheme.themeSource = WEBVIEW.viewTheme;
|
nativeTheme.themeSource = WEBVIEW.viewTheme;
|
||||||
WEBVIEW.events.on("reloadView", reloadView);
|
|
||||||
WEBVIEW.events.on("updateView", updateView);
|
|
||||||
|
|
||||||
// Init global root window
|
// Init global root window
|
||||||
WEBVIEW.window = new BaseWindow({
|
WEBVIEW.window = new BaseWindow({
|
||||||
@@ -117,7 +117,17 @@ const init = async () => {
|
|||||||
WEBVIEW.window.contentView.addChildView(WEBVIEW.navigation);
|
WEBVIEW.window.contentView.addChildView(WEBVIEW.navigation);
|
||||||
WEBVIEW.navigation.webContents.loadFile(path.join(APP.path, "html", "navigation.html"));
|
WEBVIEW.navigation.webContents.loadFile(path.join(APP.path, "html", "navigation.html"));
|
||||||
|
|
||||||
// Register events
|
// Register global events
|
||||||
|
EVENTS.on("reloadView", reloadView);
|
||||||
|
EVENTS.on("updateView", updateView);
|
||||||
|
EVENTS.on("updateDisplay", () => {
|
||||||
|
const status = hardware.getDisplayStatus();
|
||||||
|
if (status) {
|
||||||
|
WEBVIEW.tracker.display[status.toLowerCase()] = new Date();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Register local events
|
||||||
await windowEvents();
|
await windowEvents();
|
||||||
await widgetEvents();
|
await widgetEvents();
|
||||||
await navigationEvents();
|
await navigationEvents();
|
||||||
@@ -135,15 +145,15 @@ const update = async () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update windows status
|
// Update window status
|
||||||
if (WEBVIEW.window.isFullScreen()) {
|
if (WEBVIEW.window.isFullScreen()) {
|
||||||
WEBVIEW.status = "Fullscreen";
|
WEBVIEW.tracker.status = "Fullscreen";
|
||||||
} else if (WEBVIEW.window.isMinimized()) {
|
} else if (WEBVIEW.window.isMinimized()) {
|
||||||
WEBVIEW.status = "Minimized";
|
WEBVIEW.tracker.status = "Minimized";
|
||||||
} else if (WEBVIEW.window.isMaximized()) {
|
} else if (WEBVIEW.window.isMaximized()) {
|
||||||
WEBVIEW.status = "Maximized";
|
WEBVIEW.tracker.status = "Maximized";
|
||||||
} else {
|
} else {
|
||||||
WEBVIEW.status = "Framed";
|
WEBVIEW.tracker.status = "Framed";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update widget status
|
// Update widget status
|
||||||
@@ -153,7 +163,7 @@ const update = async () => {
|
|||||||
updateNavigation();
|
updateNavigation();
|
||||||
|
|
||||||
// Update integration sensor
|
// Update integration sensor
|
||||||
console.log("Update Kiosk Status:", WEBVIEW.status);
|
console.log("Update Kiosk Status:", WEBVIEW.tracker.status);
|
||||||
integration.update();
|
integration.update();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -433,21 +443,6 @@ const windowEvents = async () => {
|
|||||||
WEBVIEW.window.on("resize", resizeView);
|
WEBVIEW.window.on("resize", resizeView);
|
||||||
resizeView();
|
resizeView();
|
||||||
|
|
||||||
// Handle window focus events
|
|
||||||
WEBVIEW.window.on("focus", () => {
|
|
||||||
if (WEBVIEW.locked) {
|
|
||||||
hardware.setDisplayStatus("ON");
|
|
||||||
WEBVIEW.window.blur();
|
|
||||||
}
|
|
||||||
WEBVIEW.locked = false;
|
|
||||||
});
|
|
||||||
HARDWARE.events.on("updateDisplay", () => {
|
|
||||||
WEBVIEW.locked = hardware.getDisplayStatus() === "OFF";
|
|
||||||
if (WEBVIEW.locked) {
|
|
||||||
WEBVIEW.window.blur();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle window status updates
|
// Handle window status updates
|
||||||
WEBVIEW.window.on("minimize", update);
|
WEBVIEW.window.on("minimize", update);
|
||||||
WEBVIEW.window.on("restore", update);
|
WEBVIEW.window.on("restore", update);
|
||||||
@@ -479,8 +474,8 @@ const windowEvents = async () => {
|
|||||||
// Check for window touch events (1s)
|
// Check for window touch events (1s)
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const then = WEBVIEW.pointer.time;
|
const then = WEBVIEW.tracker.pointer.time;
|
||||||
const delta = Math.abs(now - then) / 1000;
|
const delta = (now - then) / 1000;
|
||||||
|
|
||||||
// Auto-hide navigation
|
// Auto-hide navigation
|
||||||
if (delta > 60) {
|
if (delta > 60) {
|
||||||
@@ -740,18 +735,38 @@ const viewEvents = async () => {
|
|||||||
// Handle webview mouse events
|
// Handle webview mouse events
|
||||||
view.webContents.on("before-mouse-event", (e, mouse) => {
|
view.webContents.on("before-mouse-event", (e, mouse) => {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const then = WEBVIEW.pointer.time;
|
const then = WEBVIEW.tracker.pointer.time;
|
||||||
const delta = Math.abs(now - then) / 1000;
|
const delta = (now - then) / 1000;
|
||||||
WEBVIEW.pointer.time = now;
|
|
||||||
switch (mouse.type) {
|
switch (mouse.type) {
|
||||||
case "mouseMove":
|
case "mouseMove":
|
||||||
|
const posNew = { x: mouse.globalX, y: mouse.globalY };
|
||||||
|
if (posNew.x < 0 || posNew.y < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Update last active on pointer position change
|
||||||
|
const posOld = WEBVIEW.tracker.pointer.position;
|
||||||
|
if (posOld.x !== posNew.x || posOld.y !== posNew.y) {
|
||||||
|
WEBVIEW.tracker.pointer.time = now;
|
||||||
|
WEBVIEW.tracker.pointer.position = posNew;
|
||||||
if (delta > 30) {
|
if (delta > 30) {
|
||||||
console.log("Update Last Active");
|
console.log("Update Last Active");
|
||||||
integration.update();
|
integration.update();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "mouseDown":
|
case "mouseDown":
|
||||||
switch (mouse.button) {
|
switch (mouse.button) {
|
||||||
|
case "left":
|
||||||
|
// Ignore touch event if display was off
|
||||||
|
if (WEBVIEW.tracker.display.off > WEBVIEW.tracker.display.on) {
|
||||||
|
console.log("Display Touch Event: Ignored");
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
// Turn display on if it was off
|
||||||
|
if (hardware.getDisplayStatus() === "OFF") {
|
||||||
|
hardware.setDisplayStatus("ON");
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "back":
|
case "back":
|
||||||
historyBackward();
|
historyBackward();
|
||||||
break;
|
break;
|
||||||
@@ -769,13 +784,6 @@ const viewEvents = async () => {
|
|||||||
* Register app events and handler.
|
* Register app events and handler.
|
||||||
*/
|
*/
|
||||||
const appEvents = async () => {
|
const appEvents = async () => {
|
||||||
// Handle signal and exit events
|
|
||||||
process.on("SIGINT", app.quit);
|
|
||||||
app.on("before-quit", () => {
|
|
||||||
WEBVIEW.status = "Terminated";
|
|
||||||
integration.update();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle multiple instances
|
// Handle multiple instances
|
||||||
app.on("second-instance", () => {
|
app.on("second-instance", () => {
|
||||||
if (WEBVIEW.window.isMinimized()) {
|
if (WEBVIEW.window.isMinimized()) {
|
||||||
@@ -784,14 +792,22 @@ const appEvents = async () => {
|
|||||||
WEBVIEW.window.focus();
|
WEBVIEW.window.focus();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Handle signal and exit events
|
||||||
|
app.on("before-quit", () => {
|
||||||
|
WEBVIEW.tracker.status = "Terminated";
|
||||||
|
console.warn(`${APP.title} Terminated`);
|
||||||
|
integration.update();
|
||||||
|
});
|
||||||
|
process.on("SIGINT", app.quit);
|
||||||
|
|
||||||
|
// Webview initialized
|
||||||
|
WEBVIEW.initialized = true;
|
||||||
|
|
||||||
// Check for latest release infos (2h)
|
// Check for latest release infos (2h)
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
latestRelease();
|
latestRelease();
|
||||||
}, 7200 * 1000);
|
}, 7200 * 1000);
|
||||||
await latestRelease();
|
await latestRelease();
|
||||||
|
|
||||||
// Webview initialized
|
|
||||||
WEBVIEW.initialized = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -799,7 +815,7 @@ const appEvents = async () => {
|
|||||||
*/
|
*/
|
||||||
const latestRelease = async () => {
|
const latestRelease = async () => {
|
||||||
try {
|
try {
|
||||||
const response = await axios.get(`${APP.releases.url}/latest`);
|
const response = await axios.get(`${APP.releases.url}/latest`, { timeout: 10000 });
|
||||||
const data = response ? response.data : null;
|
const data = response ? response.data : null;
|
||||||
if (!data || data.draft || data.prerelease) {
|
if (!data || data.draft || data.prerelease) {
|
||||||
return;
|
return;
|
||||||
@@ -830,7 +846,8 @@ const onlineStatus = (url, interval = 1000, timeout = 60000) => {
|
|||||||
const elapsed = Date.now() - start;
|
const elapsed = Date.now() - start;
|
||||||
try {
|
try {
|
||||||
if (!url.startsWith("data:")) {
|
if (!url.startsWith("data:")) {
|
||||||
await axios.get(url, { timeout: 10000 });
|
const agent = new https.Agent({ rejectUnauthorized: !("ignore_certificate_errors" in ARGS) });
|
||||||
|
await axios.get(url, { httpsAgent: agent, timeout: 10000 });
|
||||||
}
|
}
|
||||||
resolve(true);
|
resolve(true);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -838,6 +855,9 @@ const onlineStatus = (url, interval = 1000, timeout = 60000) => {
|
|||||||
console.warn(`Checking Connection: ${url}`, error.message);
|
console.warn(`Checking Connection: ${url}`, error.message);
|
||||||
}
|
}
|
||||||
if (elapsed >= timeout) {
|
if (elapsed >= timeout) {
|
||||||
|
if (error.message?.includes("certificate")) {
|
||||||
|
console.error("Certificate Error: See https://github.com/leukipp/touchkio/issues/76");
|
||||||
|
}
|
||||||
resolve(false);
|
resolve(false);
|
||||||
} else {
|
} else {
|
||||||
setTimeout(check, interval);
|
setTimeout(check, interval);
|
||||||
|
|||||||
+9
-8
@@ -4,27 +4,28 @@
|
|||||||
"description": "Home Assistant Touch Kiosk",
|
"description": "Home Assistant Touch Kiosk",
|
||||||
"homepage": "https://github.com/leukipp/touchkio",
|
"homepage": "https://github.com/leukipp/touchkio",
|
||||||
"author": "leukipp",
|
"author": "leukipp",
|
||||||
"version": "1.3.0",
|
"version": "1.3.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "electron . --web-url=https://demo.home-assistant.io,https://demo.immichkiosk.app --app-debug=false --trace-warnings",
|
"start": "electron . --web-url=https://demo.home-assistant.io,https://demo.immichkiosk.app --app-debug=false --trace-warnings --ignore-certificate-errors",
|
||||||
"build": "electron-forge make"
|
"build": "electron-forge make"
|
||||||
},
|
},
|
||||||
"prettier": {
|
"prettier": {
|
||||||
"printWidth": 120
|
"printWidth": 120
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@electron-forge/cli": "^7.8.3",
|
"@electron-forge/cli": "^7.9.0",
|
||||||
"@electron-forge/maker-deb": "^7.8.3",
|
"@electron-forge/maker-deb": "^7.9.0",
|
||||||
"@electron-forge/maker-zip": "^7.8.3",
|
"@electron-forge/maker-zip": "^7.9.0",
|
||||||
"@electron-forge/publisher-github": "^7.8.3",
|
"@electron-forge/publisher-github": "^7.9.0",
|
||||||
"electron": "^38.0.0",
|
"electron": "^38.1.2",
|
||||||
"jszip": "^3.10.1",
|
"jszip": "^3.10.1",
|
||||||
"prettier": "^3.6.2"
|
"prettier": "^3.6.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.11.0",
|
"axios": "^1.12.2",
|
||||||
|
"electron-log": "^5.4.3",
|
||||||
"mqtt": "^5.14.1"
|
"mqtt": "^5.14.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,15 +7,17 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326"
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326"
|
||||||
integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==
|
integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==
|
||||||
|
|
||||||
"@electron-forge/cli@^7.8.3":
|
"@electron-forge/cli@^7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-7.8.3.tgz#22eb1409047f747a9f2a8b697c1e2c5f461d2d84"
|
resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-7.9.0.tgz#de79184bbcdceaa5a8beb35c27bf15f4ba022ab7"
|
||||||
integrity sha512-BSAjGGfVf0yp3NQhXYmyCw9T//YCQHuktMv4HXfDVfo7AoV6DA1oEhqldI4Q7aHKeRob5+yBkvRRYPiu5ayCPw==
|
integrity sha512-FIs9rV6gN1v8rY73j/dvhQWF8tht035bN2LatY/z99H2KpWr0lhD03MOkIM2lRgrPEqVTExA4JEl9ja9yXBD3Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/core" "7.8.3"
|
"@electron-forge/core" "7.9.0"
|
||||||
"@electron-forge/core-utils" "7.8.3"
|
"@electron-forge/core-utils" "7.9.0"
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@electron/get" "^3.0.0"
|
"@electron/get" "^3.0.0"
|
||||||
|
"@inquirer/prompts" "^6.0.1"
|
||||||
|
"@listr2/prompt-adapter-inquirer" "^2.0.22"
|
||||||
chalk "^4.0.0"
|
chalk "^4.0.0"
|
||||||
commander "^11.1.0"
|
commander "^11.1.0"
|
||||||
debug "^4.3.1"
|
debug "^4.3.1"
|
||||||
@@ -24,12 +26,12 @@
|
|||||||
log-symbols "^4.0.0"
|
log-symbols "^4.0.0"
|
||||||
semver "^7.2.1"
|
semver "^7.2.1"
|
||||||
|
|
||||||
"@electron-forge/core-utils@7.8.3":
|
"@electron-forge/core-utils@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/core-utils/-/core-utils-7.8.3.tgz#8aac92271fbf5de3e1f657179db5e027ea5dd48a"
|
resolved "https://registry.yarnpkg.com/@electron-forge/core-utils/-/core-utils-7.9.0.tgz#0c9fa40460182ad03e6eb392d72e7a65f3c04471"
|
||||||
integrity sha512-8jhK7AvUKEqDyTMMuRhvS1TkE73YEnHYAxVvkJq35e1KdCwGbGnSRhaEs7OOqRfkKxfepdJ7BMKFSoKFeP+z0Q==
|
integrity sha512-votOf1+20cUJim0smYZW7OylXrl89JlpuFTgFpn5WFpDfAV6C0iH9202K1sa33v9OQ989JnpWDZtQNQzQHHNtg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@electron/rebuild" "^3.7.0"
|
"@electron/rebuild" "^3.7.0"
|
||||||
"@malept/cross-spawn-promise" "^2.0.0"
|
"@malept/cross-spawn-promise" "^2.0.0"
|
||||||
chalk "^4.0.0"
|
chalk "^4.0.0"
|
||||||
@@ -39,26 +41,27 @@
|
|||||||
log-symbols "^4.0.0"
|
log-symbols "^4.0.0"
|
||||||
semver "^7.2.1"
|
semver "^7.2.1"
|
||||||
|
|
||||||
"@electron-forge/core@7.8.3":
|
"@electron-forge/core@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-7.8.3.tgz#d7a715e9cef80b083e898b4c6b941178276d4a36"
|
resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-7.9.0.tgz#96e7b0990cc661b2344648be8108c45a815a910c"
|
||||||
integrity sha512-qX2vi/LP3HcSqSfLfzMeH2ll8SFZQnOk8VN/b3bq6XrBCbrfrSsTYYWakN6mmfalLJcQRm4jCEc6gcyuGO4i6Q==
|
integrity sha512-S5uFv9sFAVYSO80/K4HZsJL9L2Bs51IxCqR0a2Lk4NdKr9Fpzp6txwuALSJzM1bIpohtqbjmgut49o95wg30ZA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/core-utils" "7.8.3"
|
"@electron-forge/core-utils" "7.9.0"
|
||||||
"@electron-forge/maker-base" "7.8.3"
|
"@electron-forge/maker-base" "7.9.0"
|
||||||
"@electron-forge/plugin-base" "7.8.3"
|
"@electron-forge/plugin-base" "7.9.0"
|
||||||
"@electron-forge/publisher-base" "7.8.3"
|
"@electron-forge/publisher-base" "7.9.0"
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@electron-forge/template-base" "7.8.3"
|
"@electron-forge/template-base" "7.9.0"
|
||||||
"@electron-forge/template-vite" "7.8.3"
|
"@electron-forge/template-vite" "7.9.0"
|
||||||
"@electron-forge/template-vite-typescript" "7.8.3"
|
"@electron-forge/template-vite-typescript" "7.9.0"
|
||||||
"@electron-forge/template-webpack" "7.8.3"
|
"@electron-forge/template-webpack" "7.9.0"
|
||||||
"@electron-forge/template-webpack-typescript" "7.8.3"
|
"@electron-forge/template-webpack-typescript" "7.9.0"
|
||||||
"@electron-forge/tracer" "7.8.3"
|
"@electron-forge/tracer" "7.9.0"
|
||||||
"@electron/get" "^3.0.0"
|
"@electron/get" "^3.0.0"
|
||||||
"@electron/packager" "^18.3.5"
|
"@electron/packager" "^18.3.5"
|
||||||
"@electron/rebuild" "^3.7.0"
|
"@electron/rebuild" "^3.7.0"
|
||||||
"@malept/cross-spawn-promise" "^2.0.0"
|
"@malept/cross-spawn-promise" "^2.0.0"
|
||||||
|
"@vscode/sudo-prompt" "^9.3.1"
|
||||||
chalk "^4.0.0"
|
chalk "^4.0.0"
|
||||||
debug "^4.3.1"
|
debug "^4.3.1"
|
||||||
fast-glob "^3.2.7"
|
fast-glob "^3.2.7"
|
||||||
@@ -76,60 +79,59 @@
|
|||||||
rechoir "^0.8.0"
|
rechoir "^0.8.0"
|
||||||
semver "^7.2.1"
|
semver "^7.2.1"
|
||||||
source-map-support "^0.5.13"
|
source-map-support "^0.5.13"
|
||||||
sudo-prompt "^9.1.1"
|
|
||||||
username "^5.1.0"
|
username "^5.1.0"
|
||||||
|
|
||||||
"@electron-forge/maker-base@7.8.3":
|
"@electron-forge/maker-base@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-7.8.3.tgz#e500ebe3eacfa84d3f02faac2aa3b2773c27250a"
|
resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-7.9.0.tgz#0bcdac4573f88ba493beb2c42b382fc6f010f095"
|
||||||
integrity sha512-WmF66cHdziaK8Asi7IRTLxZjCZ8IqXXHr6IPl4d5oatN6s5RG+HHzG1hiJ7LzlOEntqdSpE8Wh2nB2TmyR4huQ==
|
integrity sha512-u0jo2kaYRxh/Rai6DyFSGJcNLRVWxiKaGUjMhX1LrKolufUkCxxR4TEmv4Hvl03WTr9pQb06umlIrVMaNb+j9A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
fs-extra "^10.0.0"
|
fs-extra "^10.0.0"
|
||||||
which "^2.0.2"
|
which "^2.0.2"
|
||||||
|
|
||||||
"@electron-forge/maker-deb@^7.8.3":
|
"@electron-forge/maker-deb@^7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/maker-deb/-/maker-deb-7.8.3.tgz#940427f406a107eca6bc80029c62d259833f9b9b"
|
resolved "https://registry.yarnpkg.com/@electron-forge/maker-deb/-/maker-deb-7.9.0.tgz#6309d8e6b78010a32a55f2eb51a5e952f233b7e3"
|
||||||
integrity sha512-GZHJU06LRFJkv1wMc3bjMVzedQhyxnyMZqgDJjE9TIlXXZkN2EqGmKLw/HxwNRA1R8yuQeA4Ih6/dEB4bZTevg==
|
integrity sha512-b1TRMKkeuZ2PTKVsTMWLY+82O6UQVPQ17x5hkWe0lyIxRyCfJr6hD+AqYbvEJ50ncDkvyCtENBT6GnhfbKOGxA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/maker-base" "7.8.3"
|
"@electron-forge/maker-base" "7.9.0"
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
electron-installer-debian "^3.2.0"
|
electron-installer-debian "^3.2.0"
|
||||||
|
|
||||||
"@electron-forge/maker-zip@^7.8.3":
|
"@electron-forge/maker-zip@^7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/maker-zip/-/maker-zip-7.8.3.tgz#450b17d6517633bbdeb82397600db61abd8461d6"
|
resolved "https://registry.yarnpkg.com/@electron-forge/maker-zip/-/maker-zip-7.9.0.tgz#bf198f8b6316649f33f83d77ae539c904136636f"
|
||||||
integrity sha512-ytao285wKAjKBO6eULzLeqUDP5Zh7beQlGyHjgOMknk7FI0sNy+zGdh3CrCGIhkXSHU/DpukPwRu2SiKvIaIGA==
|
integrity sha512-UGeziReiz8yuDTjliOjvbdyulIHpKAWkDeW3kOcMTUmRcCgrCkBNr+Pp6ih8Q3aBhG+CCd4++oe2rDnnuVvxFw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/maker-base" "7.8.3"
|
"@electron-forge/maker-base" "7.9.0"
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
cross-zip "^4.0.0"
|
cross-zip "^4.0.0"
|
||||||
fs-extra "^10.0.0"
|
fs-extra "^10.0.0"
|
||||||
got "^11.8.5"
|
got "^11.8.5"
|
||||||
|
|
||||||
"@electron-forge/plugin-base@7.8.3":
|
"@electron-forge/plugin-base@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-7.8.3.tgz#2def4cf41aca2f63c3486e651487571efafc284b"
|
resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-7.9.0.tgz#a39f0e0a9e406686f298e0595ee514091e6144f9"
|
||||||
integrity sha512-0CzPQlO3BGu5bLCrx2Xqo6B1yoHhA9wG9boZE58ANr8Qma1NQfAWZU3LnMmF3EdWNTX76PxpZeeb3QbPNcxSuA==
|
integrity sha512-2cnShgfes0sqH7A3+54fWhfJEfU++1OC2HE50a4sWtWEDwyWLGbwW7tp9BgSXrvIexO2AGKHQ1pKIjpZYVC0fA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
|
|
||||||
"@electron-forge/publisher-base@7.8.3":
|
"@electron-forge/publisher-base@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-7.8.3.tgz#a90ef4532e2a319c2ee44de741dd1968b5b42735"
|
resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-7.9.0.tgz#f129cc24d916c27adbee35f5cdf868172b5cc263"
|
||||||
integrity sha512-kurRKVNyLsK2JgmVl88UHu0+qSH+PysMtk/xP0YX5sYNMVxRay8+S1T10tAh6Qom94KwpF3CLYtkebvxb/fq+A==
|
integrity sha512-z3eH4+C++LiDqlKmri04IbSNNWLRYLvc49uNiOgfvnejplLsos720TTbwgruyI3D2fbpmhrVmz9kp9H9YzXdVg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
|
|
||||||
"@electron-forge/publisher-github@^7.8.3":
|
"@electron-forge/publisher-github@^7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/publisher-github/-/publisher-github-7.8.3.tgz#45e51d7d91e63e8c7872217e3b5d16111fd8a3e7"
|
resolved "https://registry.yarnpkg.com/@electron-forge/publisher-github/-/publisher-github-7.9.0.tgz#759f44a7cbc8c7fcd524ccc5cc57a99f9ad3a4fc"
|
||||||
integrity sha512-hFZMDAWXkNrvJA/dA64m2+uLVz1cVyMbX94YXqu9zbW6sMWJzT96om1Gr+c1CnK+mmj5E/ZqVu0846Rq+rcfEQ==
|
integrity sha512-kJzRLRaYmRa9D0e/PCnnhDChWhs3nipYgx3b4QFDVUFmbQ1ytBCmZnCO2vH0NXr7HZE3ozcAHm+Zw0TvEpXmeA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/publisher-base" "7.8.3"
|
"@electron-forge/publisher-base" "7.9.0"
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@octokit/core" "^5.2.1"
|
"@octokit/core" "^5.2.1"
|
||||||
"@octokit/plugin-retry" "^6.1.0"
|
"@octokit/plugin-retry" "^6.1.0"
|
||||||
"@octokit/request-error" "^5.1.1"
|
"@octokit/request-error" "^5.1.1"
|
||||||
@@ -141,68 +143,69 @@
|
|||||||
log-symbols "^4.0.0"
|
log-symbols "^4.0.0"
|
||||||
mime-types "^2.1.25"
|
mime-types "^2.1.25"
|
||||||
|
|
||||||
"@electron-forge/shared-types@7.8.3":
|
"@electron-forge/shared-types@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-7.8.3.tgz#0b7c54b3fa09bfdc931e22d254b70f1685744fde"
|
resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-7.9.0.tgz#ac3dd22da586957fcd6fb1c035155bd65bf2ffd3"
|
||||||
integrity sha512-gkZtD7ALXHPDOthJo1rQYLDNfG09fdDRMWvjEgaXdF3Z69xXFfnOWPNuOkRUODNalMnuuGs6l7jDl+QFQgHlDg==
|
integrity sha512-6jZF+zq3SYMnweQpgr5fwlSgOd2yOZ5qlfz/CgXyVljiv0e0UThzpOjfTLuwuVgZX7a60xV+h0mg1h82Glu3wQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/tracer" "7.8.3"
|
"@electron-forge/tracer" "7.9.0"
|
||||||
"@electron/packager" "^18.3.5"
|
"@electron/packager" "^18.3.5"
|
||||||
"@electron/rebuild" "^3.7.0"
|
"@electron/rebuild" "^3.7.0"
|
||||||
listr2 "^7.0.2"
|
listr2 "^7.0.2"
|
||||||
|
|
||||||
"@electron-forge/template-base@7.8.3":
|
"@electron-forge/template-base@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-7.8.3.tgz#009ba783b3e214fb8a0ed23386cc2ff7c514f796"
|
resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-7.9.0.tgz#1716913b7485f61a8a1ec73132b9e91c7cfb1ea4"
|
||||||
integrity sha512-C0tVODDNKoqhCf7T1HRONJs9DKAmjmk8Of0t8rVjT0ERDzMvLGlBByd785v5lFlKbGERyoaXsYltxPAu92G3aA==
|
integrity sha512-DvXdJHh4qP+LBX6xNBlO0nfljvJNTmiQNfLRfSouRdYCWbr5hC7wyWAX803HqwRsVLRZj2oiLYZjmyG3jESp8Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/core-utils" "7.8.3"
|
"@electron-forge/core-utils" "7.9.0"
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@malept/cross-spawn-promise" "^2.0.0"
|
"@malept/cross-spawn-promise" "^2.0.0"
|
||||||
debug "^4.3.1"
|
debug "^4.3.1"
|
||||||
fs-extra "^10.0.0"
|
fs-extra "^10.0.0"
|
||||||
|
semver "^7.2.1"
|
||||||
username "^5.1.0"
|
username "^5.1.0"
|
||||||
|
|
||||||
"@electron-forge/template-vite-typescript@7.8.3":
|
"@electron-forge/template-vite-typescript@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.8.3.tgz#57194eb6faa4e154118b4ac49ae6091f784eb0d3"
|
resolved "https://registry.yarnpkg.com/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.9.0.tgz#1c5cedc3392e1dc2fdec2eec4549b0dea06d1d27"
|
||||||
integrity sha512-HJjjY9xmlpl0vx10mrXdWn2RYHExfazACxmDNNmGO1eq3eqrQk/3R+NDGyqMJ7ajBsRVbkQNt+wayH7HkRJUjA==
|
integrity sha512-qGK649YnC3iOVrj/hHUu/TXG7Nn/a7QykEOPrCrxROWL7mtw8CMUE+FOVETd+eew7/4ldUNzl+5b9ebP8jHOmg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@electron-forge/template-base" "7.8.3"
|
"@electron-forge/template-base" "7.9.0"
|
||||||
fs-extra "^10.0.0"
|
fs-extra "^10.0.0"
|
||||||
|
|
||||||
"@electron-forge/template-vite@7.8.3":
|
"@electron-forge/template-vite@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/template-vite/-/template-vite-7.8.3.tgz#ecc651c9641747b71becc740522ef0cf15c28bf5"
|
resolved "https://registry.yarnpkg.com/@electron-forge/template-vite/-/template-vite-7.9.0.tgz#0233840a305280efbecf8d8a4930a6f031594895"
|
||||||
integrity sha512-tDL5h+UO5iOzdEYNVsSu4zkUVN4RTxti5iXzcBquKd9Kgt/A/M7xHeuKj7g1Ds7Ul/n2XcFvcfgLcRmiXQeVDA==
|
integrity sha512-m8Fi40XaF7YDJo7YqmfJbkjRRsttN9EEHkmq+McLrDUbln15Ppm59RAwUhizDQzs4enmLcNQPaFllbAg/2t8vQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@electron-forge/template-base" "7.8.3"
|
"@electron-forge/template-base" "7.9.0"
|
||||||
fs-extra "^10.0.0"
|
fs-extra "^10.0.0"
|
||||||
|
|
||||||
"@electron-forge/template-webpack-typescript@7.8.3":
|
"@electron-forge/template-webpack-typescript@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.8.3.tgz#f79276aa60463a8cc45c85e17bec9c42779ac12b"
|
resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.9.0.tgz#ea4d31626d7790960857d119a3f1687bcbb69ada"
|
||||||
integrity sha512-Xz3X7YJvot08Xm+0BLIS28GJH+0z9vEN9xYX76SOL4jqDcHH8lRFpNWcE2HsxxxRbCVH+s0etVmACZcWoujUrw==
|
integrity sha512-z7PB72sI11LBSPz9w9nwwk0le/lZ3VT8TrLc0NYh4F4LbZ19Z+lxcraaAdf21efvWzodhWx8khAyA8WvkNxVSw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@electron-forge/template-base" "7.8.3"
|
"@electron-forge/template-base" "7.9.0"
|
||||||
fs-extra "^10.0.0"
|
fs-extra "^10.0.0"
|
||||||
|
|
||||||
"@electron-forge/template-webpack@7.8.3":
|
"@electron-forge/template-webpack@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-7.8.3.tgz#b82b47e8b5e3b2716a0afe4fa1c263b46b4c5271"
|
resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-7.9.0.tgz#2e48610cf28508c13f5b7adb64e743590df267bc"
|
||||||
integrity sha512-1zkji5px1kDXbigFN5959anCf3HAVBvam3bHh2VejnCScegLQP3JBjAn2Nw2ILWq6ej5JNuA/V99b1dr11hPOw==
|
integrity sha512-ser22QczYGor7N6bnMUwexdWbLMNApr6zpBoT+Xfn6P4Ks67ttzcfkAges7GXHNjXwox4ePYZ3+D7cWQem5C4g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron-forge/shared-types" "7.8.3"
|
"@electron-forge/shared-types" "7.9.0"
|
||||||
"@electron-forge/template-base" "7.8.3"
|
"@electron-forge/template-base" "7.9.0"
|
||||||
fs-extra "^10.0.0"
|
fs-extra "^10.0.0"
|
||||||
|
|
||||||
"@electron-forge/tracer@7.8.3":
|
"@electron-forge/tracer@7.9.0":
|
||||||
version "7.8.3"
|
version "7.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@electron-forge/tracer/-/tracer-7.8.3.tgz#c2c27fb9b2bd770b39f02bc3ae6e254064421af6"
|
resolved "https://registry.yarnpkg.com/@electron-forge/tracer/-/tracer-7.9.0.tgz#a512ea5e0c4564ace978546b50e8ec1aa150fa68"
|
||||||
integrity sha512-YVVDaPEUOvR1z+DDdj8wR/vO9OSlC91wz4/2Iqe9rqQz8sztnnQBClMAZTqu9bkDTFyHrns8j8v7tPVuVS6ULQ==
|
integrity sha512-7itsjW1WJQADg7Ly61ggI5CCRt+QDVx3HOZC1w69jMUtnipKyPRCbvTBf1oplsNqbIzZxceXdfex6W53YNehvA==
|
||||||
dependencies:
|
dependencies:
|
||||||
chrome-trace-event "^1.0.3"
|
chrome-trace-event "^1.0.3"
|
||||||
|
|
||||||
@@ -357,6 +360,158 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
|
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
|
||||||
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
|
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
|
||||||
|
|
||||||
|
"@inquirer/checkbox@^3.0.1":
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-3.0.1.tgz#0a57f704265f78c36e17f07e421b98efb4b9867b"
|
||||||
|
integrity sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/figures" "^1.0.6"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
ansi-escapes "^4.3.2"
|
||||||
|
yoctocolors-cjs "^2.1.2"
|
||||||
|
|
||||||
|
"@inquirer/confirm@^4.0.1":
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-4.0.1.tgz#9106d6bffa0b2fdd0e4f60319b6f04f2e06e6e25"
|
||||||
|
integrity sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
|
||||||
|
"@inquirer/core@^9.2.1":
|
||||||
|
version "9.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1"
|
||||||
|
integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/figures" "^1.0.6"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
"@types/mute-stream" "^0.0.4"
|
||||||
|
"@types/node" "^22.5.5"
|
||||||
|
"@types/wrap-ansi" "^3.0.0"
|
||||||
|
ansi-escapes "^4.3.2"
|
||||||
|
cli-width "^4.1.0"
|
||||||
|
mute-stream "^1.0.0"
|
||||||
|
signal-exit "^4.1.0"
|
||||||
|
strip-ansi "^6.0.1"
|
||||||
|
wrap-ansi "^6.2.0"
|
||||||
|
yoctocolors-cjs "^2.1.2"
|
||||||
|
|
||||||
|
"@inquirer/editor@^3.0.1":
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-3.0.1.tgz#d109f21e050af6b960725388cb1c04214ed7c7bc"
|
||||||
|
integrity sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
external-editor "^3.1.0"
|
||||||
|
|
||||||
|
"@inquirer/expand@^3.0.1":
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-3.0.1.tgz#aed9183cac4d12811be47a4a895ea8e82a17e22c"
|
||||||
|
integrity sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
yoctocolors-cjs "^2.1.2"
|
||||||
|
|
||||||
|
"@inquirer/figures@^1.0.6":
|
||||||
|
version "1.0.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45"
|
||||||
|
integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==
|
||||||
|
|
||||||
|
"@inquirer/input@^3.0.1":
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-3.0.1.tgz#de63d49e516487388508d42049deb70f2cb5f28e"
|
||||||
|
integrity sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
|
||||||
|
"@inquirer/number@^2.0.1":
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-2.0.1.tgz#b9863080d02ab7dc2e56e16433d83abea0f2a980"
|
||||||
|
integrity sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
|
||||||
|
"@inquirer/password@^3.0.1":
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-3.0.1.tgz#2a9a9143591088336bbd573bcb05d5bf080dbf87"
|
||||||
|
integrity sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
ansi-escapes "^4.3.2"
|
||||||
|
|
||||||
|
"@inquirer/prompts@^6.0.1":
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-6.0.1.tgz#43f5c0ed35c5ebfe52f1d43d46da2d363d950071"
|
||||||
|
integrity sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/checkbox" "^3.0.1"
|
||||||
|
"@inquirer/confirm" "^4.0.1"
|
||||||
|
"@inquirer/editor" "^3.0.1"
|
||||||
|
"@inquirer/expand" "^3.0.1"
|
||||||
|
"@inquirer/input" "^3.0.1"
|
||||||
|
"@inquirer/number" "^2.0.1"
|
||||||
|
"@inquirer/password" "^3.0.1"
|
||||||
|
"@inquirer/rawlist" "^3.0.1"
|
||||||
|
"@inquirer/search" "^2.0.1"
|
||||||
|
"@inquirer/select" "^3.0.1"
|
||||||
|
|
||||||
|
"@inquirer/rawlist@^3.0.1":
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-3.0.1.tgz#729def358419cc929045f264131878ed379e0af3"
|
||||||
|
integrity sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
yoctocolors-cjs "^2.1.2"
|
||||||
|
|
||||||
|
"@inquirer/search@^2.0.1":
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721"
|
||||||
|
integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/figures" "^1.0.6"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
yoctocolors-cjs "^2.1.2"
|
||||||
|
|
||||||
|
"@inquirer/select@^3.0.1":
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-3.0.1.tgz#1df9ed27fb85a5f526d559ac5ce7cc4e9dc4e7ec"
|
||||||
|
integrity sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/core" "^9.2.1"
|
||||||
|
"@inquirer/figures" "^1.0.6"
|
||||||
|
"@inquirer/type" "^2.0.0"
|
||||||
|
ansi-escapes "^4.3.2"
|
||||||
|
yoctocolors-cjs "^2.1.2"
|
||||||
|
|
||||||
|
"@inquirer/type@^1.5.5":
|
||||||
|
version "1.5.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b"
|
||||||
|
integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==
|
||||||
|
dependencies:
|
||||||
|
mute-stream "^1.0.0"
|
||||||
|
|
||||||
|
"@inquirer/type@^2.0.0":
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6"
|
||||||
|
integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==
|
||||||
|
dependencies:
|
||||||
|
mute-stream "^1.0.0"
|
||||||
|
|
||||||
|
"@listr2/prompt-adapter-inquirer@^2.0.22":
|
||||||
|
version "2.0.22"
|
||||||
|
resolved "https://registry.yarnpkg.com/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz#95f7730de62089be79a87a80aa333f5f4644f3c5"
|
||||||
|
integrity sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ==
|
||||||
|
dependencies:
|
||||||
|
"@inquirer/type" "^1.5.5"
|
||||||
|
|
||||||
"@malept/cross-spawn-promise@^1.0.0":
|
"@malept/cross-spawn-promise@^1.0.0":
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
|
resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
|
||||||
@@ -570,17 +725,24 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/mute-stream@^0.0.4":
|
||||||
version "24.3.1"
|
version "0.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.1.tgz#b0a3fb2afed0ef98e8d7f06d46ef6349047709f3"
|
resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478"
|
||||||
integrity sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==
|
integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types "~7.10.0"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/node@^22.7.7":
|
"@types/node@*":
|
||||||
version "22.18.1"
|
version "24.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.1.tgz#cc85ee6999b2a2928739281d2f56ff410a140c52"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.2.tgz#52ceb83f50fe0fcfdfbd2a9fab6db2e9e7ef6446"
|
||||||
integrity sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==
|
integrity sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==
|
||||||
|
dependencies:
|
||||||
|
undici-types "~7.12.0"
|
||||||
|
|
||||||
|
"@types/node@^22.5.5", "@types/node@^22.7.7":
|
||||||
|
version "22.18.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.6.tgz#38172ef0b65e09d1a4fc715eb09a7d5decfdc748"
|
||||||
|
integrity sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types "~6.21.0"
|
undici-types "~6.21.0"
|
||||||
|
|
||||||
@@ -598,6 +760,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/wrap-ansi@^3.0.0":
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd"
|
||||||
|
integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==
|
||||||
|
|
||||||
"@types/ws@^8.18.1":
|
"@types/ws@^8.18.1":
|
||||||
version "8.18.1"
|
version "8.18.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9"
|
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9"
|
||||||
@@ -612,6 +779,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@vscode/sudo-prompt@^9.3.1":
|
||||||
|
version "9.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vscode/sudo-prompt/-/sudo-prompt-9.3.1.tgz#c562334bc6647733649fd42afc96c0eea8de3b65"
|
||||||
|
integrity sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==
|
||||||
|
|
||||||
"@xmldom/xmldom@^0.8.8":
|
"@xmldom/xmldom@^0.8.8":
|
||||||
version "0.8.11"
|
version "0.8.11"
|
||||||
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.11.tgz#b79de2d67389734c57c52595f7a7305e30c2d608"
|
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.11.tgz#b79de2d67389734c57c52595f7a7305e30c2d608"
|
||||||
@@ -651,6 +823,13 @@ aggregate-error@^3.0.0:
|
|||||||
clean-stack "^2.0.0"
|
clean-stack "^2.0.0"
|
||||||
indent-string "^4.0.0"
|
indent-string "^4.0.0"
|
||||||
|
|
||||||
|
ansi-escapes@^4.3.2:
|
||||||
|
version "4.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
|
||||||
|
integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
|
||||||
|
dependencies:
|
||||||
|
type-fest "^0.21.3"
|
||||||
|
|
||||||
ansi-escapes@^5.0.0:
|
ansi-escapes@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6"
|
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6"
|
||||||
@@ -664,9 +843,9 @@ ansi-regex@^5.0.1:
|
|||||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||||
|
|
||||||
ansi-regex@^6.0.1:
|
ansi-regex@^6.0.1:
|
||||||
version "6.2.0"
|
version "6.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.0.tgz#2f302e7550431b1b7762705fffb52cf1ffa20447"
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
|
||||||
integrity sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==
|
integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
|
||||||
|
|
||||||
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
@@ -676,9 +855,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
|||||||
color-convert "^2.0.1"
|
color-convert "^2.0.1"
|
||||||
|
|
||||||
ansi-styles@^6.0.0, ansi-styles@^6.1.0:
|
ansi-styles@^6.0.0, ansi-styles@^6.1.0:
|
||||||
version "6.2.1"
|
version "6.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
|
||||||
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
|
integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
|
||||||
|
|
||||||
asynckit@^0.4.0:
|
asynckit@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
@@ -695,10 +874,10 @@ author-regex@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450"
|
resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450"
|
||||||
integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==
|
integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==
|
||||||
|
|
||||||
axios@^1.11.0:
|
axios@^1.12.2:
|
||||||
version "1.11.0"
|
version "1.12.2"
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.11.0.tgz#c2ec219e35e414c025b2095e8b8280278478fdb6"
|
resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7"
|
||||||
integrity sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==
|
integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects "^1.15.6"
|
follow-redirects "^1.15.6"
|
||||||
form-data "^4.0.4"
|
form-data "^4.0.4"
|
||||||
@@ -869,6 +1048,11 @@ chalk@^4.0.0, chalk@^4.1.0:
|
|||||||
ansi-styles "^4.1.0"
|
ansi-styles "^4.1.0"
|
||||||
supports-color "^7.1.0"
|
supports-color "^7.1.0"
|
||||||
|
|
||||||
|
chardet@^0.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||||
|
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
||||||
|
|
||||||
chownr@^2.0.0:
|
chownr@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||||
@@ -911,6 +1095,11 @@ cli-truncate@^3.1.0:
|
|||||||
slice-ansi "^5.0.0"
|
slice-ansi "^5.0.0"
|
||||||
string-width "^5.0.0"
|
string-width "^5.0.0"
|
||||||
|
|
||||||
|
cli-width@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5"
|
||||||
|
integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==
|
||||||
|
|
||||||
cliui@^7.0.2:
|
cliui@^7.0.2:
|
||||||
version "7.0.4"
|
version "7.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
|
||||||
@@ -1041,9 +1230,9 @@ cross-zip@^4.0.0:
|
|||||||
integrity sha512-n63i0lZ0rvQ6FXiGQ+/JFCKAUyPFhLQYJIqKaa+tSJtfKeULF/IDNDAbdnSIxgS4NTuw2b0+lj8LzfITuq+ZxQ==
|
integrity sha512-n63i0lZ0rvQ6FXiGQ+/JFCKAUyPFhLQYJIqKaa+tSJtfKeULF/IDNDAbdnSIxgS4NTuw2b0+lj8LzfITuq+ZxQ==
|
||||||
|
|
||||||
debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@^4.4.1:
|
debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@^4.4.1:
|
||||||
version "4.4.1"
|
version "4.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
|
||||||
integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
|
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "^2.1.3"
|
ms "^2.1.3"
|
||||||
|
|
||||||
@@ -1102,9 +1291,9 @@ deprecation@^2.0.0:
|
|||||||
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
|
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
|
||||||
|
|
||||||
detect-libc@^2.0.1:
|
detect-libc@^2.0.1:
|
||||||
version "2.0.4"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8"
|
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.0.tgz#3ca811f60a7b504b0480e5008adacc660b0b8c4f"
|
||||||
integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==
|
integrity sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==
|
||||||
|
|
||||||
detect-node@^2.0.4:
|
detect-node@^2.0.4:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
@@ -1164,10 +1353,15 @@ electron-installer-debian@^3.2.0:
|
|||||||
word-wrap "^1.2.3"
|
word-wrap "^1.2.3"
|
||||||
yargs "^16.0.2"
|
yargs "^16.0.2"
|
||||||
|
|
||||||
electron@^38.0.0:
|
electron-log@^5.4.3:
|
||||||
version "38.0.0"
|
version "5.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/electron/-/electron-38.0.0.tgz#e51803f62c8d4c368f77642a1b1b05444c687fba"
|
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.4.3.tgz#02a90baf4256950ca416095db6e5745268584d20"
|
||||||
integrity sha512-egljptiPJqbL/oamFCEY+g3RNeONWTVxZSGeyLqzK8xq106JhzuxnhJZ3sxt4DzJFaofbGyGJA37Oe9d+gVzYw==
|
integrity sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ==
|
||||||
|
|
||||||
|
electron@^38.1.2:
|
||||||
|
version "38.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron/-/electron-38.1.2.tgz#3509999a1b635fb92e99a8e5eaf239110a9a7734"
|
||||||
|
integrity sha512-WXUcN3W8h8NTTZViA3KNX0rV2YBU0X0mEUM3ubupXTDY4QtIN7tmiqYVOKSKpR2LckTmBWGuEeY4D6xVoffwKQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@electron/get" "^2.0.0"
|
"@electron/get" "^2.0.0"
|
||||||
"@types/node" "^22.7.7"
|
"@types/node" "^22.7.7"
|
||||||
@@ -1208,9 +1402,9 @@ err-code@^2.0.2:
|
|||||||
integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
|
integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
|
||||||
|
|
||||||
error-ex@^1.2.0:
|
error-ex@^1.2.0:
|
||||||
version "1.3.2"
|
version "1.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414"
|
||||||
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
|
integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish "^0.2.1"
|
is-arrayish "^0.2.1"
|
||||||
|
|
||||||
@@ -1294,6 +1488,15 @@ exponential-backoff@^3.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91"
|
resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91"
|
||||||
integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==
|
integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==
|
||||||
|
|
||||||
|
external-editor@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
|
||||||
|
integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
|
||||||
|
dependencies:
|
||||||
|
chardet "^0.7.0"
|
||||||
|
iconv-lite "^0.4.24"
|
||||||
|
tmp "^0.0.33"
|
||||||
|
|
||||||
extract-zip@^2.0.0, extract-zip@^2.0.1:
|
extract-zip@^2.0.0, extract-zip@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
||||||
@@ -1408,9 +1611,9 @@ fs-extra@^10.0.0, fs-extra@^10.1.0:
|
|||||||
universalify "^2.0.0"
|
universalify "^2.0.0"
|
||||||
|
|
||||||
fs-extra@^11.1.0, fs-extra@^11.1.1:
|
fs-extra@^11.1.0, fs-extra@^11.1.1:
|
||||||
version "11.3.1"
|
version "11.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz#ba7a1f97a85f94c6db2e52ff69570db3671d5a74"
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4"
|
||||||
integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==
|
integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==
|
||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs "^4.2.0"
|
graceful-fs "^4.2.0"
|
||||||
jsonfile "^6.0.1"
|
jsonfile "^6.0.1"
|
||||||
@@ -1689,6 +1892,13 @@ humanize-ms@^1.2.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "^2.0.0"
|
ms "^2.0.0"
|
||||||
|
|
||||||
|
iconv-lite@^0.4.24:
|
||||||
|
version "0.4.24"
|
||||||
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||||
|
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||||
|
dependencies:
|
||||||
|
safer-buffer ">= 2.1.2 < 3"
|
||||||
|
|
||||||
iconv-lite@^0.6.2:
|
iconv-lite@^0.6.2:
|
||||||
version "0.6.3"
|
version "0.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
||||||
@@ -2190,6 +2400,11 @@ ms@^2.0.0, ms@^2.1.3:
|
|||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||||
|
|
||||||
|
mute-stream@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e"
|
||||||
|
integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==
|
||||||
|
|
||||||
negotiator@^0.6.3:
|
negotiator@^0.6.3:
|
||||||
version "0.6.4"
|
version "0.6.4"
|
||||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
|
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
|
||||||
@@ -2292,6 +2507,11 @@ ora@^5.1.0:
|
|||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
wcwidth "^1.0.1"
|
wcwidth "^1.0.1"
|
||||||
|
|
||||||
|
os-tmpdir@~1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||||
|
integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
|
||||||
|
|
||||||
p-cancelable@^2.0.0:
|
p-cancelable@^2.0.0:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
|
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
|
||||||
@@ -2669,7 +2889,7 @@ safe-buffer@~5.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||||
|
|
||||||
"safer-buffer@>= 2.1.2 < 3.0.0":
|
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
@@ -2735,6 +2955,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||||
|
|
||||||
|
signal-exit@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
|
||||||
|
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
|
||||||
|
|
||||||
slice-ansi@^5.0.0:
|
slice-ansi@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
|
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
|
||||||
@@ -2861,9 +3086,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
|||||||
ansi-regex "^5.0.1"
|
ansi-regex "^5.0.1"
|
||||||
|
|
||||||
strip-ansi@^7.0.1:
|
strip-ansi@^7.0.1:
|
||||||
version "7.1.0"
|
version "7.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba"
|
||||||
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
|
integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex "^6.0.1"
|
ansi-regex "^6.0.1"
|
||||||
|
|
||||||
@@ -2884,11 +3109,6 @@ strip-outer@^1.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
escape-string-regexp "^1.0.2"
|
escape-string-regexp "^1.0.2"
|
||||||
|
|
||||||
sudo-prompt@^9.1.1:
|
|
||||||
version "9.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd"
|
|
||||||
integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==
|
|
||||||
|
|
||||||
sumchecker@^3.0.1:
|
sumchecker@^3.0.1:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
|
resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
|
||||||
@@ -2932,6 +3152,13 @@ tmp-promise@^3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tmp "^0.2.0"
|
tmp "^0.2.0"
|
||||||
|
|
||||||
|
tmp@^0.0.33:
|
||||||
|
version "0.0.33"
|
||||||
|
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||||
|
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
|
||||||
|
dependencies:
|
||||||
|
os-tmpdir "~1.0.2"
|
||||||
|
|
||||||
tmp@^0.2.0:
|
tmp@^0.2.0:
|
||||||
version "0.2.5"
|
version "0.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
|
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
|
||||||
@@ -2966,6 +3193,11 @@ type-fest@^0.13.1:
|
|||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
|
||||||
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
|
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
|
||||||
|
|
||||||
|
type-fest@^0.21.3:
|
||||||
|
version "0.21.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
|
||||||
|
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
|
||||||
|
|
||||||
type-fest@^1.0.2:
|
type-fest@^1.0.2:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
|
||||||
@@ -2981,10 +3213,10 @@ undici-types@~6.21.0:
|
|||||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
|
||||||
integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
|
integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
|
||||||
|
|
||||||
undici-types@~7.10.0:
|
undici-types@~7.12.0:
|
||||||
version "7.10.0"
|
version "7.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350"
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb"
|
||||||
integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==
|
integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==
|
||||||
|
|
||||||
unique-filename@^2.0.0:
|
unique-filename@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
@@ -3114,6 +3346,15 @@ worker-timers@^8.0.23:
|
|||||||
worker-timers-broker "^8.0.10"
|
worker-timers-broker "^8.0.10"
|
||||||
worker-timers-worker "^9.0.10"
|
worker-timers-worker "^9.0.10"
|
||||||
|
|
||||||
|
wrap-ansi@^6.2.0:
|
||||||
|
version "6.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
|
||||||
|
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.0.0"
|
||||||
|
string-width "^4.1.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
wrap-ansi@^7.0.0:
|
wrap-ansi@^7.0.0:
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
@@ -3205,3 +3446,8 @@ yocto-queue@^0.1.0:
|
|||||||
version "0.1.0"
|
version "0.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||||
|
|
||||||
|
yoctocolors-cjs@^2.1.2:
|
||||||
|
version "2.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa"
|
||||||
|
integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==
|
||||||
|
|||||||
Reference in New Issue
Block a user