diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index d6c9537..92d403a 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -11,7 +11,7 @@ module.exports = {
plugins: ['react-refresh'],
rules: {
'react-refresh/only-export-components': [
- 'warn',
+ 'off',
{ allowConstantExport: true },
],
},
diff --git a/.gitignore b/.gitignore
index e7e5b37..e494b90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,4 @@ dist-ssr
*.sln
*.sw?
release-builds/
+.env
\ No newline at end of file
diff --git a/README.md b/README.md
index 0d6babe..25f4e90 100644
--- a/README.md
+++ b/README.md
@@ -1,30 +1,21 @@
-# React + TypeScript + Vite
+# Qortal Hub - Desktop Interface for Qortal
-This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+Qortal Hub is the newest interface for Qortal, part of the 'Qortal Trifecta' series of new User Interfaces for the platform/network.
-Currently, two official plugins are available:
+It is likely that Qortal Hub will become the new 'primary interface' for Qortal, and that the primary development focus surrounding Qortal Interface development, will be focused here instead of the previous 'qortal-ui' repo.
-- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
-- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+## Qortal Hub - Next-Level Secure Communications and More
-## Expanding the ESLint configuration
+Qortal Hub came along with the new Group Encryption methodologies applied, which provide **encrypted chat in Q-Chat for private groups.** Qortal Hub was the first to implement the new method of group encryption, which allows new users to see previously published data, unlike the previous group encryption methodology of things like 'threads' in Q-Mail.
-If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
+Allowing new users to view older messages also comes along with a massive boost to the usability of the group encryption, and as such has been leveraged in multiple places inside Qortal Hub, Qortal Extension, and Qortal Go.
-- Configure the top-level `parserOptions` property like this:
+## Ease of Use Expanded
+
+Qortal Hub has a focus on ease of use for new users. Providing both the ability to utlilize Qortal without needing to run a local node (though running a local node is still the recommended method to access Qortal), and multiple built-in (QDN-published) walk-thru videos (by Qortal Justin) that explain the various basics of any given section of the application. This allows new users to 'jump right in' to utilizing Qortal Hub, and Qortal overall, in a much more streamlined fashion than that which was previously required by the 'legacy UI' (qortal-ui).
+
+Leveraging a redundant set of publicly accessible nodes provided by crowetic, Qortal Hub, Qortal Go, and Qortal Extension, all allow the use of Qortal without running a node, making it very simple to 'install and go' and start making use of the extensive functionality provided within the Qortal Ecosystem.
+
+Many additional details and a fully featured wiki will be created over time. Reach out on the chat on https://qortal.dev or in any of the community locations for Qortal, if you have any issues. Thank you!
-```js
-export default {
- // other rules...
- parserOptions: {
- ecmaVersion: 'latest',
- sourceType: 'module',
- project: ['./tsconfig.json', './tsconfig.node.json'],
- tsconfigRootDir: __dirname,
- },
-}
-```
-- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
-- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
-- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
diff --git a/capacitor.config.ts b/capacitor.config.ts
index d64b8cd..c7f641f 100644
--- a/capacitor.config.ts
+++ b/capacitor.config.ts
@@ -1,8 +1,8 @@
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
- appId: 'com.example.app',
- appName: 'Qortal ',
+ appId: 'org.Qortal.Qortal-Hub',
+ appName: 'Qortal-Hub',
webDir: 'dist',
"plugins": {
"LocalNotifications": {
diff --git a/electron/assets/mac/appIcon.icns b/electron/assets/mac/appIcon.icns
new file mode 100644
index 0000000..5c1296e
Binary files /dev/null and b/electron/assets/mac/appIcon.icns differ
diff --git a/electron/assets/png/1024x1024.png b/electron/assets/png/1024x1024.png
new file mode 100644
index 0000000..94e2fa3
Binary files /dev/null and b/electron/assets/png/1024x1024.png differ
diff --git a/electron/assets/png/128x128.png b/electron/assets/png/128x128.png
new file mode 100644
index 0000000..ff31fee
Binary files /dev/null and b/electron/assets/png/128x128.png differ
diff --git a/electron/assets/png/16x16.png b/electron/assets/png/16x16.png
new file mode 100644
index 0000000..34dbb9b
Binary files /dev/null and b/electron/assets/png/16x16.png differ
diff --git a/electron/assets/png/24x24.png b/electron/assets/png/24x24.png
new file mode 100644
index 0000000..f4870a9
Binary files /dev/null and b/electron/assets/png/24x24.png differ
diff --git a/electron/assets/png/256x256.png b/electron/assets/png/256x256.png
new file mode 100644
index 0000000..11e8b5c
Binary files /dev/null and b/electron/assets/png/256x256.png differ
diff --git a/electron/assets/png/32x32.png b/electron/assets/png/32x32.png
new file mode 100644
index 0000000..50256a2
Binary files /dev/null and b/electron/assets/png/32x32.png differ
diff --git a/electron/assets/png/48x48.png b/electron/assets/png/48x48.png
new file mode 100644
index 0000000..f7d98a4
Binary files /dev/null and b/electron/assets/png/48x48.png differ
diff --git a/electron/assets/png/512x512.png b/electron/assets/png/512x512.png
new file mode 100644
index 0000000..9ad9dcb
Binary files /dev/null and b/electron/assets/png/512x512.png differ
diff --git a/electron/assets/png/64x64.png b/electron/assets/png/64x64.png
new file mode 100644
index 0000000..96c9fdf
Binary files /dev/null and b/electron/assets/png/64x64.png differ
diff --git a/electron/assets/png/96x96.png b/electron/assets/png/96x96.png
new file mode 100644
index 0000000..8776f6e
Binary files /dev/null and b/electron/assets/png/96x96.png differ
diff --git a/electron/buildmac/entitlements.mac.plist b/electron/buildmac/entitlements.mac.plist
new file mode 100644
index 0000000..d6b93bc
--- /dev/null
+++ b/electron/buildmac/entitlements.mac.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+
+
diff --git a/electron/buildmac/logo-hub.png b/electron/buildmac/logo-hub.png
new file mode 100644
index 0000000..c9e096c
Binary files /dev/null and b/electron/buildmac/logo-hub.png differ
diff --git a/electron/capacitor.config.ts b/electron/capacitor.config.ts
index d64b8cd..c7f641f 100644
--- a/electron/capacitor.config.ts
+++ b/electron/capacitor.config.ts
@@ -1,8 +1,8 @@
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
- appId: 'com.example.app',
- appName: 'Qortal ',
+ appId: 'org.Qortal.Qortal-Hub',
+ appName: 'Qortal-Hub',
webDir: 'dist',
"plugins": {
"LocalNotifications": {
diff --git a/electron/electron-builder.config.arm.json b/electron/electron-builder.config.arm.json
new file mode 100644
index 0000000..1490123
--- /dev/null
+++ b/electron/electron-builder.config.arm.json
@@ -0,0 +1,47 @@
+{
+ "appId": "org.qortal.Qortal-Hub",
+ "productName": "Qortal Hub",
+ "copyright": "Copyright © 2021 - 2025 Qortal",
+ "compression": "normal",
+ "asar": "true",
+ "afterPack": "scripts/afterPack.js",
+ "files": [
+ "assets/**/*",
+ "build/**/*",
+ "capacitor.config.*",
+ "app/**/*",
+ "scripts/**/*"
+ ],
+ "linux": {
+ "target": [
+ "AppImage",
+ "deb"
+ ],
+ "category": "Network",
+ "packageCategory": "Network",
+ "desktop": {
+ "StartupWMClass": "qortal-hub"
+ },
+ "executableName": "Qortal Hub",
+ "icon": "assets/png"
+ },
+ "appImage": {
+ "artifactName": "Qortal-Hub-arm64_${version}.${ext}"
+ },
+ "deb": {
+ "artifactName": "Qortal-Hub-Setup-arm64_${version}.${ext}",
+ "synopsis": "Qortal Hub for Linux",
+ },
+ "directories": {
+ "output": "dist",
+ "buildResources": "resources"
+ },
+ "publish": [
+ {
+ "provider": "github",
+ "owner": "Qortal",
+ "repo": "Qortal-Hub",
+ "releaseType": "draft"
+ }
+ ]
+}
diff --git a/electron/electron-builder.config.json b/electron/electron-builder.config.json
index 055d483..6f3bf7c 100644
--- a/electron/electron-builder.config.json
+++ b/electron/electron-builder.config.json
@@ -1,14 +1,9 @@
{
- "appId": "com.github.Qortal.Qortal-Hub",
+ "appId": "org.Qortal.Qortal-Hub",
"directories": {
"buildResources": "resources"
},
- "files": [
- "assets/**/*",
- "build/**/*",
- "capacitor.config.*",
- "app/**/*"
- ],
+ "files": ["assets/**/*", "build/**/*", "capacitor.config.*", "app/**/*"],
"nsis": {
"allowElevation": true,
"oneClick": false,
@@ -17,23 +12,43 @@
"publish": [
{
"provider": "github",
- "owner": "Qortal",
- "repo": "Qortal-Hub",
+ "owner": "Qortal",
+ "repo": "Qortal-Hub",
"releaseType": "draft"
}
],
"win": {
- "target": "nsis",
- "icon": "assets/appIcon.ico"
+ "target": ["nsis", "portable"],
+ "icon": "assets/appIcon.ico",
+ "artifactName": "Qortal-Hub-Setup_${version}.exe",
},
"linux": {
"target": ["AppImage"],
- "category": "Utility",
- "executableName": "Qortal",
- "icon": "assets/qortal.png"
+ "category": "Network",
+ "packageCategory": "Network",
+ "desktop": {
+ "StartupWMClass": "qortal-hub"
+ },
+ "executableName": "Qortal-Hub",
+ "icon": "assets/png",
+ "asar": true
+ },
+ "deb": {
+ "artifactName": "Qortal-Hub-Setup_${version}.${ext}",
+ "synopsis": "Qortal Hub for Linux"
+ },
+ "appImage": {
+ "artifactName": "Qortal-Hub.${ext}"
+ },
+
+ "snap": {
+ "artifactName": "Qortal-Hub-Setup_${version}.${ext}",
+ "synopsis": "Qortal Hub for Linux"
},
"mac": {
- "category": "your.app.category.type",
- "target": "dmg"
- }
+ "icon": "assets/mac/appIcon.icns",
+ "category": "public.app-category.utilities",
+ "target": ["dmg"]
+ },
+ "productName": "Qortal Hub"
}
diff --git a/electron/electron-builder.config.lin.json b/electron/electron-builder.config.lin.json
new file mode 100644
index 0000000..863557d
--- /dev/null
+++ b/electron/electron-builder.config.lin.json
@@ -0,0 +1,58 @@
+{
+ "appId": "org.qortal.Qortal-Hub",
+ "productName": "Qortal Hub",
+ "copyright": "Copyright © 2021 - 2025 Qortal",
+ "compression": "normal",
+ "asar": "true",
+ "afterPack": "scripts/afterPack.js",
+ "files": [
+ "assets/**/*",
+ "build/**/*",
+ "capacitor.config.*",
+ "app/**/*",
+ "scripts/**/*"
+ ],
+ "linux": {
+ "target": [
+ "AppImage",
+ "deb",
+ "snap",
+ "rpm"
+ ],
+ "category": "Network",
+ "packageCategory": "Network",
+ "desktop": {
+ "StartupWMClass": "qortal-hub"
+ },
+ "executableName": "Qortal Hub",
+ "icon": "assets/png"
+ },
+ "appImage": {
+ "artifactName": "Qortal-Hub_${version}.${ext}"
+ },
+ "deb": {
+ "artifactName": "Qortal-Hub-Setup_${version}.${ext}",
+ "synopsis": "Qortal Hub for Linux",
+ "afterInstall": "scripts/add-debian-apt-repo.sh"
+ },
+ "snap": {
+ "artifactName": "Qortal-Hub-Setup_${version}.${ext}",
+ "synopsis": "Qortal Hub for Linux"
+ },
+ "rpm": {
+ "artifactName": "Qortal-Hub-Setup_${version}.${ext}",
+ "synopsis": "Qortal Hub for Linux"
+ },
+ "directories": {
+ "output": "dist",
+ "buildResources": "resources"
+ },
+ "publish": [
+ {
+ "provider": "github",
+ "owner": "Qortal",
+ "repo": "Qortal-Hub",
+ "releaseType": "draft"
+ }
+ ]
+}
diff --git a/electron/electron-builder.config.mac.json b/electron/electron-builder.config.mac.json
new file mode 100644
index 0000000..056babc
--- /dev/null
+++ b/electron/electron-builder.config.mac.json
@@ -0,0 +1,81 @@
+{
+ "appId": "org.Qortal.Qortal-Hub",
+ "productName": "Qortal Hub",
+ "copyright": "Copyright © 2021 - 2025 Qortal",
+ "artifactName": "Qortal-Hub-Setup-macOS_${version}.${ext}",
+
+ "compression": "normal",
+
+ "asar": true,
+
+ "afterPack": "scripts/afterPack.js",
+
+ "afterSign": "scripts/notarize.js",
+
+ "files": [
+ "assets/**/*",
+ "build/**/*",
+ "capacitor.config.*",
+ "app/**/*",
+ "scripts/**/*"
+ ],
+
+ "mac": {
+ "icon": "assets/mac/appIcon.icns",
+ "hardenedRuntime": true,
+ "gatekeeperAssess": false,
+ "entitlements": "buildmac/entitlements.mac.plist",
+ "entitlementsInherit": "buildmac/entitlements.mac.plist",
+ "category": "public.app-category.utilities",
+ "asarUnpack": ["**/*.node"],
+ "target": ["dmg", "pkg"]
+ },
+
+ "dmg": {
+ "sign": false,
+ "artifactName": "Qortal-Hub-Setup-macOS_${version}.${ext}",
+ "icon": "assets/mac/appIcon.icns",
+ "iconSize": 100,
+ "contents": [
+ {
+ "x": 130,
+ "y": 220
+ },
+ {
+ "x": 410,
+ "y": 220,
+ "type": "link",
+ "path": "/Applications"
+ }
+ ]
+ },
+
+ "pkg": {
+ "artifactName": "Qortal-Hub-Setup-macOS_${version}.${ext}",
+ "installLocation": "/Applications",
+ "background": {
+ "file": "buildmac/logo-hub.png",
+ "alignment": "bottomleft",
+ "scaling": "none"
+ },
+ "allowAnywhere": true,
+ "allowCurrentUserHome": true,
+ "allowRootDirectory": true,
+ "isVersionChecked": true,
+ "isRelocatable": false,
+ "overwriteAction": "upgrade"
+ },
+
+ "directories": {
+ "buildResources": "resources"
+ },
+
+ "publish": [
+ {
+ "provider": "github",
+ "owner": "Qortal",
+ "repo": "Qortal-Hub",
+ "releaseType": "draft"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/electron/electron-builder.config.win.json b/electron/electron-builder.config.win.json
new file mode 100644
index 0000000..4097af6
--- /dev/null
+++ b/electron/electron-builder.config.win.json
@@ -0,0 +1,44 @@
+{
+ "appId": "org.qortal.Qortal-Hub",
+ "productName": "Qortal Hub",
+ "copyright": "Copyright © 2021 - 2025 Qortal",
+ "compression": "normal",
+ "asar": "true",
+ "files": [
+ "assets/**/*",
+ "build/**/*",
+ "capacitor.config.*",
+ "app/**/*"
+ ],
+ "win": {
+ "legalTrademarks": "QORTAL.ORG",
+ "icon": "assets/appIcon.ico",
+ "target": [
+ "nsis",
+ "portable"
+ ]
+ },
+ "nsis": {
+ "artifactName": "Qortal-Hub-Setup-win64_${version}.${ext}",
+ "allowElevation": true,
+ "oneClick": false,
+ "allowToChangeInstallationDirectory": true,
+ "perMachine": true,
+ "runAfterFinish": true,
+ "deleteAppDataOnUninstall": true,
+ "createDesktopShortcut": true,
+ "createStartMenuShortcut": true
+ },
+ "directories": {
+ "output": "dist",
+ "buildResources": "resources"
+ },
+ "publish": [
+ {
+ "provider": "github",
+ "owner": "Qortal",
+ "repo": "Qortal-Hub",
+ "releaseType": "draft"
+ }
+ ]
+}
diff --git a/electron/package-lock.json b/electron/package-lock.json
index 6642e13..b3b1a6b 100644
--- a/electron/package-lock.json
+++ b/electron/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "qortal-hub",
- "version": "0.3.3",
+ "version": "0.5.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "qortal-hub",
- "version": "0.3.3",
+ "version": "0.5.2",
"license": "MIT",
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
@@ -19,9 +19,10 @@
"electron-window-state": "^5.0.3"
},
"devDependencies": {
- "electron": "^26.2.2",
- "electron-builder": "~23.6.0",
- "electron-rebuild": "^3.2.9",
+ "@electron/notarize": "^2.5.0",
+ "electron": "^32.3.1",
+ "electron-builder": "^25.1.8",
+ "shelljs": "^0.8.5",
"typescript": "^5.0.4"
}
},
@@ -44,14 +45,13 @@
}
},
"node_modules/@capacitor/cli": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.1.2.tgz",
- "integrity": "sha512-HKCNGE0RP8U7aiEF2vg5wTivJROS8BVfu8a3yYJb1mRQvzv+czpmtHNsTWS/WukvwoxUjyjRmsNQSAACHfMTmQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.2.0.tgz",
+ "integrity": "sha512-EWcXG39mZh35zrHhOqzN1ILeSyMRyEqWVtQDXqMGjCXYRH6b6p5TvyvLDN8ZNy26tbhI3i79gfrgirt+mNwuuw==",
"license": "MIT",
"dependencies": {
"@ionic/cli-framework-output": "^2.2.5",
"@ionic/utils-fs": "^3.1.6",
- "@ionic/utils-process": "^2.1.11",
"@ionic/utils-subprocess": "2.1.11",
"@ionic/utils-terminal": "^2.3.3",
"commander": "^9.3.0",
@@ -77,9 +77,9 @@
}
},
"node_modules/@capacitor/core": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.1.2.tgz",
- "integrity": "sha512-xFy1/4qLFLp5WCIzIhtwUuVNNoz36+V7/BzHmLqgVJcvotc4MMjswW/TshnPQaLLujEOaLkA4h8ZJ0uoK3ImGg==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.0.tgz",
+ "integrity": "sha512-B9IlJtDpUqhhYb+T8+cp2Db/3RETX36STgjeU2kQZBs/SLAcFiMama227o+msRjLeo3DO+7HJjWVA1+XlyyPEg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.1.0"
@@ -103,6 +103,56 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/@electron/asar": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.3.1.tgz",
+ "integrity": "sha512-WtpC/+34p0skWZiarRjLAyqaAX78DofhDxnREy/V5XHfu1XEXbFCSSMcDQ6hNCPJFaPy8/NnUgYuf9uiCkvKPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^5.0.0",
+ "glob": "^7.1.6",
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "asar": "bin/asar.js"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/@electron/asar/node_modules/commander": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
+ "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@electron/asar/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@electron/get": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz",
@@ -160,26 +210,22 @@
"node": ">= 4.0.0"
}
},
- "node_modules/@electron/universal": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz",
- "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==",
+ "node_modules/@electron/notarize": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz",
+ "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@malept/cross-spawn-promise": "^1.1.0",
- "asar": "^3.1.0",
- "debug": "^4.3.1",
- "dir-compare": "^2.4.0",
+ "debug": "^4.1.1",
"fs-extra": "^9.0.1",
- "minimatch": "^3.0.4",
- "plist": "^3.0.4"
+ "promise-retry": "^2.0.1"
},
"engines": {
- "node": ">=8.6"
+ "node": ">= 10.0.0"
}
},
- "node_modules/@electron/universal/node_modules/fs-extra": {
+ "node_modules/@electron/notarize/node_modules/fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
"integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
@@ -195,7 +241,7 @@
"node": ">=10"
}
},
- "node_modules/@electron/universal/node_modules/jsonfile": {
+ "node_modules/@electron/notarize/node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
@@ -208,6 +254,114 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/@electron/osx-sign": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz",
+ "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "compare-version": "^0.1.2",
+ "debug": "^4.3.4",
+ "fs-extra": "^10.0.0",
+ "isbinaryfile": "^4.0.8",
+ "minimist": "^1.2.6",
+ "plist": "^3.0.5"
+ },
+ "bin": {
+ "electron-osx-flat": "bin/electron-osx-flat.js",
+ "electron-osx-sign": "bin/electron-osx-sign.js"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@electron/osx-sign/node_modules/fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@electron/osx-sign/node_modules/isbinaryfile": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
+ "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/gjtorikian/"
+ }
+ },
+ "node_modules/@electron/osx-sign/node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/@electron/universal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz",
+ "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@electron/asar": "^3.2.7",
+ "@malept/cross-spawn-promise": "^2.0.0",
+ "debug": "^4.3.1",
+ "dir-compare": "^4.2.0",
+ "fs-extra": "^11.1.1",
+ "minimatch": "^9.0.3",
+ "plist": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=16.4"
+ }
+ },
+ "node_modules/@electron/universal/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@electron/universal/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@gar/promisify": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
@@ -285,33 +439,53 @@
}
},
"node_modules/@ionic/utils-object": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz",
- "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz",
+ "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==",
"license": "MIT",
"dependencies": {
"debug": "^4.0.0",
"tslib": "^2.0.1"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=10.3.0"
}
},
"node_modules/@ionic/utils-process": {
- "version": "2.1.12",
- "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz",
- "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==",
+ "version": "2.1.10",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz",
+ "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==",
"license": "MIT",
"dependencies": {
- "@ionic/utils-object": "2.1.6",
- "@ionic/utils-terminal": "2.3.5",
+ "@ionic/utils-object": "2.1.5",
+ "@ionic/utils-terminal": "2.3.3",
"debug": "^4.0.0",
"signal-exit": "^3.0.3",
"tree-kill": "^1.2.2",
"tslib": "^2.0.1"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=10.3.0"
+ }
+ },
+ "node_modules/@ionic/utils-process/node_modules/@ionic/utils-terminal": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz",
+ "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/slice-ansi": "^4.0.0",
+ "debug": "^4.0.0",
+ "signal-exit": "^3.0.3",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "tslib": "^2.0.1",
+ "untildify": "^4.0.0",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10.3.0"
}
},
"node_modules/@ionic/utils-stream": {
@@ -361,36 +535,6 @@
"node": ">=10.3.0"
}
},
- "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-object": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz",
- "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=10.3.0"
- }
- },
- "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": {
- "version": "2.1.10",
- "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz",
- "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==",
- "license": "MIT",
- "dependencies": {
- "@ionic/utils-object": "2.1.5",
- "@ionic/utils-terminal": "2.3.3",
- "debug": "^4.0.0",
- "signal-exit": "^3.0.3",
- "tree-kill": "^1.2.2",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=10.3.0"
- }
- },
"node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-terminal": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz",
@@ -458,10 +602,113 @@
"node": ">=16.0.0"
}
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/@malept/cross-spawn-promise": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz",
- "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz",
+ "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==",
"dev": true,
"funding": [
{
@@ -478,7 +725,7 @@
"cross-spawn": "^7.0.1"
},
"engines": {
- "node": ">= 10"
+ "node": ">= 12.13.0"
}
},
"node_modules/@malept/flatpak-bundler": {
@@ -555,6 +802,28 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
+ "node_modules/@npmcli/move-file/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@npmcli/move-file/node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -585,6 +854,17 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
@@ -653,18 +933,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
"node_modules/@types/http-cache-semantics": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
@@ -682,28 +950,20 @@
"@types/node": "*"
}
},
- "node_modules/@types/minimatch": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
- "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/@types/ms": {
- "version": "0.7.34",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
- "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.8.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz",
- "integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==",
+ "version": "22.10.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz",
+ "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==",
"license": "MIT",
"dependencies": {
- "undici-types": "~6.19.8"
+ "undici-types": "~6.20.0"
}
},
"node_modules/@types/plist": {
@@ -748,23 +1008,6 @@
"license": "MIT",
"optional": true
},
- "node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@types/yargs-parser": {
- "version": "21.0.3",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
- "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/yauzl": {
"version": "2.10.3",
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
@@ -786,9 +1029,9 @@
}
},
"node_modules/7zip-bin": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz",
- "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz",
+ "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==",
"dev": true,
"license": "MIT"
},
@@ -803,6 +1046,7 @@
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
"integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
+ "license": "MIT",
"engines": {
"node": ">=12.0"
}
@@ -912,48 +1156,121 @@
}
},
"node_modules/app-builder-bin": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz",
- "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==",
+ "version": "5.0.0-alpha.10",
+ "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz",
+ "integrity": "sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==",
"dev": true,
"license": "MIT"
},
"node_modules/app-builder-lib": {
- "version": "23.6.0",
- "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz",
- "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==",
+ "version": "25.1.8",
+ "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-25.1.8.tgz",
+ "integrity": "sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@develar/schema-utils": "~2.6.5",
- "@electron/universal": "1.2.1",
+ "@electron/notarize": "2.5.0",
+ "@electron/osx-sign": "1.3.1",
+ "@electron/rebuild": "3.6.1",
+ "@electron/universal": "2.0.1",
"@malept/flatpak-bundler": "^0.4.0",
- "7zip-bin": "~5.1.1",
+ "@types/fs-extra": "9.0.13",
"async-exit-hook": "^2.0.1",
"bluebird-lst": "^1.0.9",
- "builder-util": "23.6.0",
- "builder-util-runtime": "9.1.1",
+ "builder-util": "25.1.7",
+ "builder-util-runtime": "9.2.10",
"chromium-pickle-js": "^0.2.0",
+ "config-file-ts": "0.2.8-rc1",
"debug": "^4.3.4",
- "ejs": "^3.1.7",
- "electron-osx-sign": "^0.6.0",
- "electron-publish": "23.6.0",
+ "dotenv": "^16.4.5",
+ "dotenv-expand": "^11.0.6",
+ "ejs": "^3.1.8",
+ "electron-publish": "25.1.7",
"form-data": "^4.0.0",
"fs-extra": "^10.1.0",
"hosted-git-info": "^4.1.0",
"is-ci": "^3.0.0",
- "isbinaryfile": "^4.0.10",
+ "isbinaryfile": "^5.0.0",
"js-yaml": "^4.1.0",
+ "json5": "^2.2.3",
"lazy-val": "^1.0.5",
- "minimatch": "^3.1.2",
- "read-config-file": "6.2.0",
+ "minimatch": "^10.0.0",
+ "resedit": "^1.7.0",
"sanitize-filename": "^1.6.3",
- "semver": "^7.3.7",
- "tar": "^6.1.11",
+ "semver": "^7.3.8",
+ "tar": "^6.1.12",
"temp-file": "^3.4.0"
},
"engines": {
"node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "dmg-builder": "25.1.8",
+ "electron-builder-squirrel-windows": "25.1.8"
+ }
+ },
+ "node_modules/app-builder-lib/node_modules/@electron/rebuild": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.1.tgz",
+ "integrity": "sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@malept/cross-spawn-promise": "^2.0.0",
+ "chalk": "^4.0.0",
+ "debug": "^4.1.1",
+ "detect-libc": "^2.0.1",
+ "fs-extra": "^10.0.0",
+ "got": "^11.7.0",
+ "node-abi": "^3.45.0",
+ "node-api-version": "^0.2.0",
+ "node-gyp": "^9.0.0",
+ "ora": "^5.1.0",
+ "read-binary-file-arch": "^1.0.6",
+ "semver": "^7.3.5",
+ "tar": "^6.0.5",
+ "yargs": "^17.0.1"
+ },
+ "bin": {
+ "electron-rebuild": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=12.13.0"
+ }
+ },
+ "node_modules/app-builder-lib/node_modules/@types/fs-extra": {
+ "version": "9.0.13",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
+ "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/app-builder-lib/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/app-builder-lib/node_modules/builder-util-runtime": {
+ "version": "9.2.10",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz",
+ "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
"node_modules/app-builder-lib/node_modules/fs-extra": {
@@ -984,6 +1301,22 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/app-builder-lib/node_modules/minimatch": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+ "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/aproba": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
@@ -991,6 +1324,108 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/archiver": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz",
+ "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "async": "^3.2.4",
+ "buffer-crc32": "^0.2.1",
+ "readable-stream": "^3.6.0",
+ "readdir-glob": "^1.1.2",
+ "tar-stream": "^2.2.0",
+ "zip-stream": "^4.1.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/archiver-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/archiver-utils/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/are-we-there-yet": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
@@ -1012,39 +1447,6 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"license": "Python-2.0"
},
- "node_modules/asar": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz",
- "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==",
- "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chromium-pickle-js": "^0.2.0",
- "commander": "^5.0.0",
- "glob": "^7.1.6",
- "minimatch": "^3.0.4"
- },
- "bin": {
- "asar": "bin/asar.js"
- },
- "engines": {
- "node": ">=10.12.0"
- },
- "optionalDependencies": {
- "@types/glob": "^7.1.1"
- }
- },
- "node_modules/asar/node_modules/commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
@@ -1241,24 +1643,6 @@
"ieee754": "^1.1.13"
}
},
- "node_modules/buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "node_modules/buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -1268,23 +1652,6 @@
"node": "*"
}
},
- "node_modules/buffer-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
- "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -1293,24 +1660,23 @@
"license": "MIT"
},
"node_modules/builder-util": {
- "version": "23.6.0",
- "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz",
- "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==",
+ "version": "25.1.7",
+ "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-25.1.7.tgz",
+ "integrity": "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/debug": "^4.1.6",
- "@types/fs-extra": "^9.0.11",
- "7zip-bin": "~5.1.1",
- "app-builder-bin": "4.0.0",
+ "7zip-bin": "~5.2.0",
+ "app-builder-bin": "5.0.0-alpha.10",
"bluebird-lst": "^1.0.9",
- "builder-util-runtime": "9.1.1",
- "chalk": "^4.1.1",
+ "builder-util-runtime": "9.2.10",
+ "chalk": "^4.1.2",
"cross-spawn": "^7.0.3",
"debug": "^4.3.4",
- "fs-extra": "^10.0.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
+ "fs-extra": "^10.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.0",
"is-ci": "^3.0.0",
"js-yaml": "^4.1.0",
"source-map-support": "^0.5.19",
@@ -1331,14 +1697,28 @@
"node": ">=12.0.0"
}
},
- "node_modules/builder-util/node_modules/@types/fs-extra": {
- "version": "9.0.13",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
- "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
+ "node_modules/builder-util/node_modules/agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/builder-util/node_modules/builder-util-runtime": {
+ "version": "9.2.10",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz",
+ "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
"node_modules/builder-util/node_modules/fs-extra": {
@@ -1356,6 +1736,34 @@
"node": ">=12"
}
},
+ "node_modules/builder-util/node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/builder-util/node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/builder-util/node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -1399,37 +1807,6 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
- "node_modules/cacache/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/cacache/node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/cacache/node_modules/lru-cache": {
"version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
@@ -1440,19 +1817,6 @@
"node": ">=12"
}
},
- "node_modules/cacache/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/cacache/node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -1483,17 +1847,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/cacache/node_modules/rimraf/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/cacache/node_modules/rimraf/node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -1516,19 +1869,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/cacache/node_modules/rimraf/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -1558,6 +1898,20 @@
"node": ">=8"
}
},
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1578,6 +1932,7 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -1761,16 +2116,6 @@
"color-support": "bin.js"
}
},
- "node_modules/colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.1.90"
- }
- },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -1803,6 +2148,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/compress-commons": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz",
+ "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "buffer-crc32": "^0.2.13",
+ "crc32-stream": "^4.0.2",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1810,6 +2172,74 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/config-file-ts": {
+ "version": "0.2.8-rc1",
+ "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz",
+ "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glob": "^10.3.12",
+ "typescript": "^5.4.3"
+ }
+ },
+ "node_modules/config-file-ts/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/config-file-ts/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/config-file-ts/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/config-file-ts/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
@@ -1822,8 +2252,7 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
"dev": true,
- "license": "MIT",
- "optional": true
+ "license": "MIT"
},
"node_modules/crc": {
"version": "3.8.0",
@@ -1836,10 +2265,39 @@
"buffer": "^5.1.0"
}
},
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/crc32-stream": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz",
+ "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "crc-32": "^1.2.0",
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -1851,9 +2309,9 @@
}
},
"node_modules/debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -2001,58 +2459,27 @@
"optional": true
},
"node_modules/dir-compare": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz",
- "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz",
+ "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "buffer-equal": "1.0.0",
- "colors": "1.0.3",
- "commander": "2.9.0",
- "minimatch": "3.0.4"
- },
- "bin": {
- "dircompare": "src/cli/dircompare.js"
- }
- },
- "node_modules/dir-compare/node_modules/commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-readlink": ">= 1.0.0"
- },
- "engines": {
- "node": ">= 0.6.x"
- }
- },
- "node_modules/dir-compare/node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
+ "minimatch": "^3.0.5",
+ "p-limit": "^3.1.0 "
}
},
"node_modules/dmg-builder": {
- "version": "23.6.0",
- "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz",
- "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==",
+ "version": "25.1.8",
+ "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-25.1.8.tgz",
+ "integrity": "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "app-builder-lib": "23.6.0",
- "builder-util": "23.6.0",
- "builder-util-runtime": "9.1.1",
- "fs-extra": "^10.0.0",
+ "app-builder-lib": "25.1.8",
+ "builder-util": "25.1.7",
+ "builder-util-runtime": "9.2.10",
+ "fs-extra": "^10.1.0",
"iconv-lite": "^0.6.2",
"js-yaml": "^4.1.0"
},
@@ -2060,6 +2487,20 @@
"dmg-license": "^1.0.11"
}
},
+ "node_modules/dmg-builder/node_modules/builder-util-runtime": {
+ "version": "9.2.10",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz",
+ "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/dmg-builder/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -2116,21 +2557,55 @@
}
},
"node_modules/dotenv": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz",
- "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==",
+ "version": "16.4.7",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
- "node": ">=10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
}
},
"node_modules/dotenv-expand": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
- "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
+ "version": "11.0.7",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz",
+ "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==",
"dev": true,
- "license": "BSD-2-Clause"
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dotenv": "^16.4.5"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ejs": {
"version": "3.1.10",
@@ -2149,15 +2624,14 @@
}
},
"node_modules/electron": {
- "version": "26.6.10",
- "resolved": "https://registry.npmjs.org/electron/-/electron-26.6.10.tgz",
- "integrity": "sha512-pV2SD0RXzAiNRb/2yZrsVmVkBOMrf+DVsPulIgRjlL0+My9BL5spFuhHVMQO9yHl9tFpWtuRpQv0ofM/i9P8xg==",
+ "version": "32.3.1",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-32.3.1.tgz",
+ "integrity": "sha512-gjHN9NagNajvllKrTZVwGuCqX1hPF7OI6hkCDFRCbqT5Zr05d17qjDhjyTNBmTca2DpvZIYQMRbqieNCcglVYQ==",
"dev": true,
"hasInstallScript": true,
- "license": "MIT",
"dependencies": {
"@electron/get": "^2.0.0",
- "@types/node": "^18.11.18",
+ "@types/node": "^20.9.0",
"extract-zip": "^2.0.1"
},
"bin": {
@@ -2168,24 +2642,22 @@
}
},
"node_modules/electron-builder": {
- "version": "23.6.0",
- "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz",
- "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==",
+ "version": "25.1.8",
+ "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-25.1.8.tgz",
+ "integrity": "sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/yargs": "^17.0.1",
- "app-builder-lib": "23.6.0",
- "builder-util": "23.6.0",
- "builder-util-runtime": "9.1.1",
- "chalk": "^4.1.1",
- "dmg-builder": "23.6.0",
- "fs-extra": "^10.0.0",
+ "app-builder-lib": "25.1.8",
+ "builder-util": "25.1.7",
+ "builder-util-runtime": "9.2.10",
+ "chalk": "^4.1.2",
+ "dmg-builder": "25.1.8",
+ "fs-extra": "^10.1.0",
"is-ci": "^3.0.0",
"lazy-val": "^1.0.5",
- "read-config-file": "6.2.0",
- "simple-update-notifier": "^1.0.7",
- "yargs": "^17.5.1"
+ "simple-update-notifier": "2.0.0",
+ "yargs": "^17.6.2"
},
"bin": {
"electron-builder": "cli.js",
@@ -2195,6 +2667,64 @@
"node": ">=14.0.0"
}
},
+ "node_modules/electron-builder-squirrel-windows": {
+ "version": "25.1.8",
+ "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-25.1.8.tgz",
+ "integrity": "sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "app-builder-lib": "25.1.8",
+ "archiver": "^5.3.1",
+ "builder-util": "25.1.7",
+ "fs-extra": "^10.1.0"
+ }
+ },
+ "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/electron-builder-squirrel-windows/node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/electron-builder/node_modules/builder-util-runtime": {
+ "version": "9.2.10",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz",
+ "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/electron-builder/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -2232,71 +2762,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/electron-osx-sign": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz",
- "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==",
- "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "bluebird": "^3.5.0",
- "compare-version": "^0.1.2",
- "debug": "^2.6.8",
- "isbinaryfile": "^3.0.2",
- "minimist": "^1.2.0",
- "plist": "^3.0.1"
- },
- "bin": {
- "electron-osx-flat": "bin/electron-osx-flat.js",
- "electron-osx-sign": "bin/electron-osx-sign.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/electron-osx-sign/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/electron-osx-sign/node_modules/isbinaryfile": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
- "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-alloc": "^1.2.0"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/electron-osx-sign/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/electron-publish": {
- "version": "23.6.0",
- "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz",
- "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==",
+ "version": "25.1.7",
+ "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-25.1.7.tgz",
+ "integrity": "sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/fs-extra": "^9.0.11",
- "builder-util": "23.6.0",
- "builder-util-runtime": "9.1.1",
- "chalk": "^4.1.1",
- "fs-extra": "^10.0.0",
+ "builder-util": "25.1.7",
+ "builder-util-runtime": "9.2.10",
+ "chalk": "^4.1.2",
+ "fs-extra": "^10.1.0",
"lazy-val": "^1.0.5",
"mime": "^2.5.2"
}
@@ -2311,6 +2788,20 @@
"@types/node": "*"
}
},
+ "node_modules/electron-publish/node_modules/builder-util-runtime": {
+ "version": "9.2.10",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz",
+ "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/electron-publish/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -2339,87 +2830,6 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/electron-rebuild": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-3.2.9.tgz",
- "integrity": "sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw==",
- "deprecated": "Please use @electron/rebuild moving forward. There is no API change, just a package name change",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@malept/cross-spawn-promise": "^2.0.0",
- "chalk": "^4.0.0",
- "debug": "^4.1.1",
- "detect-libc": "^2.0.1",
- "fs-extra": "^10.0.0",
- "got": "^11.7.0",
- "lzma-native": "^8.0.5",
- "node-abi": "^3.0.0",
- "node-api-version": "^0.1.4",
- "node-gyp": "^9.0.0",
- "ora": "^5.1.0",
- "semver": "^7.3.5",
- "tar": "^6.0.5",
- "yargs": "^17.0.1"
- },
- "bin": {
- "electron-rebuild": "lib/src/cli.js"
- },
- "engines": {
- "node": ">=12.13.0"
- }
- },
- "node_modules/electron-rebuild/node_modules/@malept/cross-spawn-promise": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz",
- "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/malept"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund"
- }
- ],
- "license": "Apache-2.0",
- "dependencies": {
- "cross-spawn": "^7.0.1"
- },
- "engines": {
- "node": ">= 12.13.0"
- }
- },
- "node_modules/electron-rebuild/node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/electron-rebuild/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
"node_modules/electron-serve": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/electron-serve/-/electron-serve-1.1.0.tgz",
@@ -2499,21 +2909,19 @@
}
},
"node_modules/electron/node_modules/@types/node": {
- "version": "18.19.62",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.62.tgz",
- "integrity": "sha512-UOGhw+yZV/icyM0qohQVh3ktpY40Sp7tdTW7HxG3pTd7AiMrlFlAJNUrGK9t5mdW0+ViQcFV74zCSIx9ZJpncA==",
+ "version": "20.17.19",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz",
+ "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.19.2"
}
},
"node_modules/electron/node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true,
- "license": "MIT"
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true
},
"node_modules/elementtree": {
"version": "0.1.7",
@@ -2586,15 +2994,11 @@
"license": "MIT"
},
"node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true,
"license": "MIT",
- "optional": true,
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
"engines": {
"node": ">= 0.4"
}
@@ -2605,7 +3009,35 @@
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"dev": true,
"license": "MIT",
- "optional": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
"engines": {
"node": ">= 0.4"
}
@@ -2758,21 +3190,60 @@
"node": ">=8"
}
},
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/form-data": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
"dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/fs-extra": {
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
@@ -2837,7 +3308,6 @@
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"license": "MIT",
- "optional": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -2874,18 +3344,22 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"license": "MIT",
- "optional": true,
"dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -2894,6 +3368,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
@@ -2911,9 +3399,9 @@
}
},
"node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"license": "ISC",
@@ -2921,12 +3409,11 @@
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
},
"engines": {
- "node": "*"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -2944,6 +3431,29 @@
"node": ">= 6"
}
},
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/global-agent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
@@ -3013,14 +3523,13 @@
}
},
"node_modules/gopd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
"license": "MIT",
- "optional": true,
- "dependencies": {
- "get-intrinsic": "^1.1.3"
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3058,13 +3567,6 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
- "node_modules/graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3088,13 +3590,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-proto": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
- "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true,
"license": "MIT",
- "optional": true,
"engines": {
"node": ">= 0.4"
},
@@ -3102,13 +3603,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"license": "MIT",
- "optional": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -3129,7 +3632,6 @@
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"license": "MIT",
- "optional": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -3315,6 +3817,16 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/ip-address": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
@@ -3354,6 +3866,22 @@
"is-ci": "bin.js"
}
},
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -3448,14 +3976,22 @@
"node": ">=8"
}
},
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/isbinaryfile": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
- "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.4.tgz",
+ "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 8.0.0"
+ "node": ">= 18.0.0"
},
"funding": {
"url": "https://github.com/sponsors/gjtorikian/"
@@ -3467,6 +4003,22 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"license": "ISC"
},
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"node_modules/jake": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
@@ -3572,6 +4124,56 @@
"integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==",
"license": "MIT"
},
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lazystream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/lazystream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lazystream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -3585,18 +4187,58 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"license": "MIT"
},
+ "node_modules/lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lodash.difference": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+ "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/lodash.escaperegexp": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
"integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==",
"license": "MIT"
},
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
"license": "MIT"
},
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lodash.union": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -3636,32 +4278,6 @@
"node": ">=10"
}
},
- "node_modules/lzma-native": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/lzma-native/-/lzma-native-8.0.6.tgz",
- "integrity": "sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "node-addon-api": "^3.1.0",
- "node-gyp-build": "^4.2.1",
- "readable-stream": "^3.6.0"
- },
- "bin": {
- "lzmajs": "bin/lzmajs"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/lzma-native/node_modules/node-addon-api": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
- "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/make-fetch-happen": {
"version": "10.2.1",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz",
@@ -3714,6 +4330,16 @@
"node": ">=10"
}
},
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/mime": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
@@ -3959,9 +4585,9 @@
"optional": true
},
"node_modules/node-api-version": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz",
- "integrity": "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.0.tgz",
+ "integrity": "sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3994,16 +4620,26 @@
"node": "^12.13 || ^14.13 || >=16"
}
},
- "node_modules/node-gyp-build": {
- "version": "4.8.2",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz",
- "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==",
+ "node_modules/node-gyp/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
- "license": "MIT",
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/node-gyp/node_modules/rimraf": {
@@ -4164,6 +4800,22 @@
"node": ">=8"
}
},
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
@@ -4180,6 +4832,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -4199,6 +4858,13 @@
"node": ">=8"
}
},
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/path-scurry": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
@@ -4230,6 +4896,21 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/pe-library": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz",
+ "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/jet2jet"
+ }
+ },
"node_modules/pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -4262,6 +4943,14 @@
"node": ">=10.4.0"
}
},
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -4349,21 +5038,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/read-config-file": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz",
- "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==",
+ "node_modules/read-binary-file-arch": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz",
+ "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "dotenv": "^9.0.2",
- "dotenv-expand": "^5.1.0",
- "js-yaml": "^4.1.0",
- "json5": "^2.2.0",
- "lazy-val": "^1.0.4"
+ "debug": "^4.3.4"
},
- "engines": {
- "node": ">=12.0.0"
+ "bin": {
+ "read-binary-file-arch": "cli.js"
}
},
"node_modules/readable-stream": {
@@ -4380,6 +5065,42 @@
"node": ">= 6"
}
},
+ "node_modules/readdir-glob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
+ "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "minimatch": "^5.1.0"
+ }
+ },
+ "node_modules/readdir-glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/readdir-glob/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -4392,6 +5113,18 @@
"node": ">=8.10.0"
}
},
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -4402,6 +5135,45 @@
"node": ">=0.10.0"
}
},
+ "node_modules/resedit": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz",
+ "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pe-library": "^0.4.1"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/jet2jet"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/resolve-alpn": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
@@ -4649,6 +5421,46 @@
"node": ">=8"
}
},
+ "node_modules/shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ },
+ "bin": {
+ "shjs": "bin/shjs"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/shelljs/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -4656,26 +5468,16 @@
"license": "ISC"
},
"node_modules/simple-update-notifier": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
- "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "semver": "~7.0.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/simple-update-notifier/node_modules/semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
+ "node": ">=10"
}
},
"node_modules/sisteransi": {
@@ -4825,6 +5627,22 @@
"node": ">=8"
}
},
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -4837,6 +5655,20 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/sumchecker": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
@@ -4862,6 +5694,19 @@
"node": ">=8"
}
},
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/tar": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
@@ -4879,6 +5724,24 @@
"node": ">=10"
}
},
+ "node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/tar/node_modules/minipass": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
@@ -5000,9 +5863,9 @@
}
},
"node_modules/tslib": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz",
- "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
"node_modules/type-fest": {
@@ -5027,9 +5890,9 @@
}
},
"node_modules/typescript": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
- "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
+ "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -5041,9 +5904,9 @@
}
},
"node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
"license": "MIT"
},
"node_modules/unique-filename": {
@@ -5180,6 +6043,25 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -5272,6 +6154,81 @@
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
}
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zip-stream": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz",
+ "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "archiver-utils": "^3.0.4",
+ "compress-commons": "^4.1.2",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/zip-stream/node_modules/archiver-utils": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz",
+ "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "glob": "^7.2.3",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/zip-stream/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
}
}
}
diff --git a/electron/package.json b/electron/package.json
index 78de618..b520190 100644
--- a/electron/package.json
+++ b/electron/package.json
@@ -1,16 +1,18 @@
{
"name": "qortal-hub",
- "version": "0.3.7",
+ "version": "0.5.2",
"description": "A desktop app that gives you access to the Qortal network",
"author": {
- "name": ""
+ "name": "",
+ "email": "qortalblockchain@gmail.com"
},
+ "homepage": "https://qortal.dev",
"repository": {
"type": "git",
- "url": ""
+ "url": "git+https://github.com/Qortal/Qortal-Hub.git"
},
"build": {
- "appId": "com.github.Qortal.Qortal-Hub",
+ "appId": "org.Qortal.Qortal-Hub",
"publish": [
{
"provider": "github",
@@ -27,7 +29,12 @@
"electron:start": "npm run build && electron --inspect=5858 ./",
"electron:pack": "npm run build && electron-builder build --dir -c ./electron-builder.config.json",
"electron:make": "npm run build && electron-builder build -c ./electron-builder.config.json -p always",
- "electron:make-local": "npm run build && electron-builder build -c ./electron-builder.config.json --publish=never"
+ "electron:make-local": "npm run build && electron-builder build -c ./electron-builder.config.json --publish=never",
+ "electron:make-lin": "npm run build && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l",
+ "electron:make-mac": "npm run build && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac dmg && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac pkg && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac zip",
+ "electron:make-win": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w",
+ "electron:make-arm": "npm run build && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64",
+ "electron:make-all": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64"
},
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
@@ -40,13 +47,14 @@
"electron-window-state": "^5.0.3"
},
"devDependencies": {
- "electron": "^26.2.2",
- "electron-builder": "~23.6.0",
- "electron-rebuild": "^3.2.9",
- "typescript": "^5.0.4"
+ "electron": "^32.3.1",
+ "electron-builder": "^25.1.8",
+ "@electron/notarize": "^2.5.0",
+ "typescript": "^5.0.4",
+ "shelljs": "^0.8.5"
},
"keywords": [
"capacitor",
"electron"
]
-}
+}
\ No newline at end of file
diff --git a/electron/scripts/add-debian-apt-repo.sh b/electron/scripts/add-debian-apt-repo.sh
new file mode 100755
index 0000000..ca56444
--- /dev/null
+++ b/electron/scripts/add-debian-apt-repo.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Make necessary config and add Qortal Hub apt repo
+
+# SCript to run HUB without sandbox
+echo \'/opt/${productFilename}/qortal-hub\' --no-sandbox > '/opt/${productFilename}/run-hub'
+chmod +x '/opt/${productFilename}/run-hub'
+
+# Link to run-ui
+ln -sf '/opt/${productFilename}/run-hub' '/usr/bin/${executable}'
+
+# SUID chrome-sandbox for Electron 5+
+sudo chown root '/opt/${productFilename}/chrome-sandbox' || true
+sudo chmod 4755 '/opt/${productFilename}/chrome-sandbox' || true
+
+update-mime-database /usr/share/mime || true
+update-desktop-database /usr/share/applications || true
+
+# Install curl if not installed on the system
+if ! which curl; then sudo apt-get --yes install curl; fi
+
+# Install apt repository source list if it does not exist
+if ! grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep qortal-hub.list; then
+ curl -sS https://update.qortal-hub.org/qortal-hub.gpg | sudo apt-key add -
+ sudo rm -rf /usr/share/keyrings/qortal-hub.gpg
+ sudo apt-key export E191E7C3 | sudo gpg --dearmour -o /usr/share/keyrings/qortal-hub.gpg
+ sudo rm -rf /etc/apt/sources.list.d/qortal-hub.list
+ echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/qortal-hub.gpg] https://update.qortal-hub.org/ ./ ' | sudo tee /etc/apt/sources.list.d/qortal-hub.list
+fi
diff --git a/electron/scripts/afterPack.js b/electron/scripts/afterPack.js
new file mode 100644
index 0000000..f7084bd
--- /dev/null
+++ b/electron/scripts/afterPack.js
@@ -0,0 +1,39 @@
+const path = require('path')
+const shell = require("shelljs")
+
+const runShellCommand = (appOutDir) => {
+ shell.exec(
+ `chmod 4755 ${path.join(appOutDir, "chrome-sandbox")}`,
+
+ function (code, stdout, stderr) {
+ console.log('runShellCommand ==> Exit code:', code)
+ if (stderr) {
+ console.log('runShellCommand ==> Program stderr:', stderr)
+ }
+ }
+ )
+}
+
+async function doLinux(context) {
+ console.log("Running doLinux ==> ")
+
+ const { targets, appOutDir } = context
+
+ targets.forEach(async target => {
+ if (!["appimage", "snap"].includes(target.name.toLowerCase())) {
+ await runShellCommand(appOutDir)
+ }
+ })
+}
+
+async function afterPack(context) {
+ console.log("Running AfterPack")
+
+ const electronPlatformName = context.electronPlatformName.toLowerCase()
+
+ if (electronPlatformName.includes("linux")) {
+ await doLinux(context)
+ }
+}
+
+module.exports = afterPack
\ No newline at end of file
diff --git a/electron/scripts/notarize.js b/electron/scripts/notarize.js
new file mode 100644
index 0000000..d09de36
--- /dev/null
+++ b/electron/scripts/notarize.js
@@ -0,0 +1,21 @@
+require('dotenv').config()
+const { notarize } = require('@electron/notarize')
+
+exports.default = async function notarizing(context) {
+ const { electronPlatformName, appOutDir } = context
+
+ if (electronPlatformName !== 'darwin') {
+ return
+ }
+
+ const appName = context.packager.appInfo.productFilename
+
+ return await notarize({
+ appBundleId: 'org.qortal.Qortal-Hub',
+ appPath: `${appOutDir}/${appName}.app`,
+ tool: "notarytool",
+ teamId: process.env.APPLETEAMID,
+ appleId: process.env.APPLEID,
+ appleIdPassword: process.env.APPLEIDPASS
+ })
+}
\ No newline at end of file
diff --git a/electron/scripts/uninstall-debian-conf.sh b/electron/scripts/uninstall-debian-conf.sh
new file mode 100644
index 0000000..9b3ff50
--- /dev/null
+++ b/electron/scripts/uninstall-debian-conf.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+# Remove all conf made by Qortal Hub
+
+# Remove apt repository source list when user uninstalls app
+if grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep qortal-hub.list; then
+ sudo rm /etc/apt/sources.list.d/qortal-hub.list;
+fi
+
+# Get the root user
+if [ $SUDO_USER ];
+ then getSudoUser=$SUDO_USER;
+ else getSudoUser=`whoami`;
+fi
+
+getDesktopEntry=/home/$getSudoUser/.config/autostart/qortal-hub.desktop;
+
+# Remove desktop entry if exists
+if [ -f $getDesktopEntry ]; then
+ sudo rm $getDesktopEntry;
+fi
+
+# App directory which contains all the config and settings files
+appDirectory=/home/$getSudoUser/.config/qortal-hub/;
+
+if [ -d $appDirectory ]; then
+ sudo rm -rf $appDirectory;
+fi
+
+# Delete the link to the binary
+rm -f '/usr/bin/${executable}'
+
+# Delete run-hub
+rm -f '/opt/${productFilename}/run-hub'
diff --git a/electron/src/index.ts b/electron/src/index.ts
index 9b729b8..31c8981 100644
--- a/electron/src/index.ts
+++ b/electron/src/index.ts
@@ -16,6 +16,7 @@ const trayMenuTemplate: (MenuItemConstructorOptions | MenuItem)[] = [new MenuIte
const appMenuBarMenuTemplate: (MenuItemConstructorOptions | MenuItem)[] = [
{ role: process.platform === 'darwin' ? 'appMenu' : 'fileMenu' },
{ role: 'viewMenu' },
+ { role: 'editMenu' },
];
// Get Config options from capacitor.config
diff --git a/electron/src/setup.ts b/electron/src/setup.ts
index 2e85c55..6fab164 100644
--- a/electron/src/setup.ts
+++ b/electron/src/setup.ts
@@ -80,6 +80,7 @@ export class ElectronCapacitorApp {
private AppMenuBarMenuTemplate: (MenuItem | MenuItemConstructorOptions)[] = [
{ role: process.platform === 'darwin' ? 'appMenu' : 'fileMenu' },
{ role: 'viewMenu' },
+ { role: 'editMenu' },
];
private mainWindowState;
private loadWebApp;
@@ -324,7 +325,9 @@ export function setupContentSecurityPolicy(customScheme: string): void {
// IPC listener for updating allowed domains
ipcMain.on('set-allowed-domains', (event, domains: string[]) => {
-
+ if (!Array.isArray(domains)) {
+ return;
+ }
// Validate and transform user-provided domains
const validatedUserDomains = domains
.flatMap((domain) => {
diff --git a/package-lock.json b/package-lock.json
index 9cd9a63..e8c249f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -72,6 +72,7 @@
"react-infinite-scroller": "^1.2.6",
"react-intersection-observer": "^9.13.0",
"react-json-view-lite": "^2.0.1",
+ "react-loader-spinner": "^6.1.6",
"react-qr-code": "^2.0.15",
"react-quill": "^2.0.0",
"react-redux": "^9.1.2",
@@ -83,6 +84,7 @@
"slate-react": "^0.109.0",
"tippy.js": "^6.3.7",
"tiptap-extension-resize-image": "^1.1.8",
+ "ts-key-enum": "^2.0.12",
"vite-plugin-top-level-await": "^1.4.4",
"vite-plugin-wasm": "^3.3.0"
},
@@ -4449,6 +4451,11 @@
"resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ=="
},
+ "node_modules/@types/stylis": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
+ "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw=="
+ },
"node_modules/@types/trusted-types": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
@@ -5898,6 +5905,14 @@
"node": ">=6"
}
},
+ "node_modules/camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/caniuse-lite": {
"version": "1.0.30001674",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz",
@@ -6677,6 +6692,24 @@
"node": ">= 8"
}
},
+ "node_modules/css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/css-to-react-native": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
+ "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+ "dependencies": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
"node_modules/css.escape": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
@@ -13881,9 +13914,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.37",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.37.tgz",
- "integrity": "sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ==",
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"funding": [
{
"type": "opencollective",
@@ -13907,6 +13940,11 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
"node_modules/postject": {
"version": "1.0.0-alpha.6",
"resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz",
@@ -14483,6 +14521,27 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
+ "node_modules/react-loader-spinner": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/react-loader-spinner/-/react-loader-spinner-6.1.6.tgz",
+ "integrity": "sha512-x5h1Jcit7Qn03MuKlrWcMG9o12cp9SNDVHVJTNRi9TgtGPKcjKiXkou4NRfLAtXaFB3+Z8yZsVzONmPzhv2ErA==",
+ "dependencies": {
+ "react-is": "^18.2.0",
+ "styled-components": "^6.1.2"
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-loader-spinner/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
+ },
"node_modules/react-qr-code": {
"version": "2.0.15",
"resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.15.tgz",
@@ -15373,6 +15432,11 @@
"node": ">= 0.4"
}
},
+ "node_modules/shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -15854,6 +15918,38 @@
"node": ">=0.10.0"
}
},
+ "node_modules/styled-components": {
+ "version": "6.1.13",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz",
+ "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==",
+ "dependencies": {
+ "@emotion/is-prop-valid": "1.2.2",
+ "@emotion/unitless": "0.8.1",
+ "@types/stylis": "4.2.5",
+ "css-to-react-native": "3.2.0",
+ "csstype": "3.1.3",
+ "postcss": "8.4.38",
+ "shallowequal": "1.1.0",
+ "stylis": "4.3.2",
+ "tslib": "2.6.2"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/styled-components"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0",
+ "react-dom": ">= 16.8.0"
+ }
+ },
+ "node_modules/styled-components/node_modules/stylis": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz",
+ "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg=="
+ },
"node_modules/stylis": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
@@ -16224,6 +16320,11 @@
"typescript": ">=4.2.0"
}
},
+ "node_modules/ts-key-enum": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.13.tgz",
+ "integrity": "sha512-zixs6j8+NhzazLUQ1SiFrlo1EFWG/DbqLuUGcWWZ5zhwjRT7kbi1hBlofxdqel+h28zrby2It5TrOyKp04kvqw=="
+ },
"node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
diff --git a/package.json b/package.json
index b42878b..dcf359a 100644
--- a/package.json
+++ b/package.json
@@ -76,6 +76,7 @@
"react-infinite-scroller": "^1.2.6",
"react-intersection-observer": "^9.13.0",
"react-json-view-lite": "^2.0.1",
+ "react-loader-spinner": "^6.1.6",
"react-qr-code": "^2.0.15",
"react-quill": "^2.0.0",
"react-redux": "^9.1.2",
@@ -87,6 +88,7 @@
"slate-react": "^0.109.0",
"tippy.js": "^6.3.7",
"tiptap-extension-resize-image": "^1.1.8",
+ "ts-key-enum": "^2.0.12",
"vite-plugin-top-level-await": "^1.4.4",
"vite-plugin-wasm": "^3.3.0"
},
diff --git a/src/App-styles.ts b/src/App-styles.ts
index bf3a146..08773ea 100644
--- a/src/App-styles.ts
+++ b/src/App-styles.ts
@@ -136,6 +136,47 @@ border-radius: 5px;
}
}
`;
+interface CustomButtonProps {
+ bgColor?: string;
+ color?: string;
+}
+export const CustomButtonAccept = styled(Box)(
+ ({ bgColor, color }) => ({
+ boxSizing: "border-box",
+ padding: "15px 20px",
+ gap: "10px",
+ border: "0.5px solid rgba(255, 255, 255, 0.5)",
+ filter: "drop-shadow(1px 4px 10.5px rgba(0,0,0,0.3))",
+ borderRadius: 5,
+ display: "inline-flex",
+ justifyContent: "center",
+ alignItems: "center",
+ width: "fit-content",
+ transition: "all 0.2s",
+ minWidth: 160,
+ cursor: "pointer",
+ fontWeight: 600,
+ fontFamily: "Inter",
+ textAlign: "center",
+ opacity: 0.7,
+ // Use the passed-in props or fallback defaults
+ backgroundColor: bgColor || "transparent",
+ color: color || "white",
+
+ "&:hover": {
+ opacity: 1,
+ backgroundColor: bgColor
+ ? bgColor
+ : "rgba(41, 41, 43, 1)", // fallback hover bg
+ color: color || "white",
+ svg: {
+ path: {
+ fill: color || "white",
+ },
+ },
+ },
+ })
+);
export const CustomInput = styled(TextField)({
diff --git a/src/App.tsx b/src/App.tsx
index 77d2585..9e14601 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -40,11 +40,12 @@ import { CopyToClipboard } from "react-copy-to-clipboard";
import Download from "./assets/svgs/Download.svg";
import Logout from "./assets/svgs/Logout.svg";
import Return from "./assets/svgs/Return.svg";
+import WarningIcon from '@mui/icons-material/Warning';
import Success from "./assets/svgs/Success.svg";
import Info from "./assets/svgs/Info.svg";
import CloseIcon from "@mui/icons-material/Close";
import './utils/seedPhrase/RandomSentenceGenerator';
-
+import EngineeringIcon from '@mui/icons-material/Engineering';
import {
createAccount,
generateRandomSentence,
@@ -62,6 +63,7 @@ import {
AuthenticatedContainerInnerLeft,
AuthenticatedContainerInnerRight,
CustomButton,
+ CustomButtonAccept,
CustomInput,
CustomLabel,
TextItalic,
@@ -79,6 +81,8 @@ import { LoadingButton } from "@mui/lab";
import { Label } from "./components/Group/AddGroup";
import { CustomizedSnackbars } from "./components/Snackbar/Snackbar";
import SettingsIcon from "@mui/icons-material/Settings";
+import HelpIcon from '@mui/icons-material/Help';
+
import {
cleanUrl,
getFee,
@@ -110,7 +114,11 @@ import {
enabledDevModeAtom,
fullScreenAtom,
hasSettingsChangedAtom,
+ isDisabledEditorEnterAtom,
+ isUsingImportExportSettingsAtom,
+ mailsAtom,
oldPinnedAppsAtom,
+ qMailLastEnteredTimestampAtom,
settingsLocalLastUpdatedAtom,
settingsQDNLastUpdatedAtom,
sortablePinnedAppsAtom,
@@ -127,6 +135,16 @@ import { CoreSyncStatus } from "./components/CoreSyncStatus";
import { Wallets } from "./Wallets";
import { RandomSentenceGenerator } from "./utils/seedPhrase/RandomSentenceGenerator";
import { useFetchResources } from "./common/useFetchResources";
+import { Tutorials } from "./components/Tutorials/Tutorials";
+import { useHandleTutorials } from "./components/Tutorials/useHandleTutorials";
+import BoundedNumericTextField from "./common/BoundedNumericTextField";
+import { useHandleUserInfo } from "./components/Group/useHandleUserInfo";
+import { Minting } from "./components/Minting/Minting";
+import { isRunningGateway } from "./qortalRequests";
+import { QMailStatus } from "./components/QMailStatus";
+import { GlobalActions } from "./components/GlobalActions/GlobalActions";
+import { useBlockedAddresses } from "./components/Group/useBlockUsers";
+import { WalletIcon } from "./assets/Icons/WalletIcon";
type extStates =
| "not-authenticated"
@@ -246,8 +264,12 @@ export const resumeAllQueues = () => {
};
-
+const defaultValuesGlobal = {
+ openTutorialModal: null,
+ setOpenTutorialModal: ()=> {}
+}
export const MyContext = createContext(defaultValues);
+export const GlobalContext = createContext(defaultValuesGlobal);
export let globalApiKey: string | null = null;
@@ -338,6 +360,7 @@ function App() {
const {downloadResource} = useFetchResources()
const holdRefExtState = useRef("not-authenticated");
const isFocusedRef = useRef(true);
+ const {showTutorial, openTutorialModal, shownTutorialsInitiated, setOpenTutorialModal, hasSeenGettingStarted} = useHandleTutorials()
const { isShow, onCancel, onOk, show, message } = useModal();
const {
isShow: isShowUnsavedChanges,
@@ -353,7 +376,7 @@ function App() {
show: showInfo,
message: messageInfo,
} = useModal();
-
+
const {
onCancel: onCancelQortalRequest,
onOk: onOkQortalRequest,
@@ -381,14 +404,26 @@ function App() {
const [isOpenSendQort, setIsOpenSendQort] = useState(false);
const [isOpenSendQortSuccess, setIsOpenSendQortSuccess] = useState(false);
const [rootHeight, setRootHeight] = useState("100%");
+ const {isUserBlocked,
+ addToBlockList,
+ removeBlockFromList, getAllBlockedUsers} = useBlockedAddresses()
+ const [currentNode, setCurrentNode] = useState({
+ url: "http://127.0.0.1:12391",
+ });
+ const [useLocalNode, setUseLocalNode] = useState(false);
+
const [isSettingsOpen, setIsSettingsOpen] = useState(false);
+ const [showSeed, setShowSeed] = useState(false)
+ const [creationStep, setCreationStep] = useState(1)
+ const {getIndividualUserInfo} = useHandleUserInfo()
const qortalRequestCheckbox1Ref = useRef(null);
useRetrieveDataLocalStorage();
- useQortalGetSaveSettings(userInfo?.name);
+ useQortalGetSaveSettings(userInfo?.name, extState === "authenticated");
const [fullScreen, setFullScreen] = useRecoilState(fullScreenAtom);
const [isEnabledDevMode, setIsEnabledDevMode] =
useRecoilState(enabledDevModeAtom);
-
+ const setIsDisabledEditorEnter = useSetRecoilState(isDisabledEditorEnterAtom)
+ const [isOpenMinting, setIsOpenMinting] = useState(false)
const { toggleFullScreen } = useAppFullScreen(setFullScreen);
const generatorRef = useRef(null)
const exportSeedphrase = ()=> {
@@ -408,6 +443,17 @@ function App() {
}
}, []);
+ useEffect(()=> {
+ if(!shownTutorialsInitiated) return
+ if(extState === 'not-authenticated'){
+ showTutorial('create-account')
+ } else if(extState === "create-wallet" && walletToBeDownloaded){
+ showTutorial('important-information')
+ } else if(extState === "authenticated"){
+ showTutorial('getting-started')
+ }
+ }, [extState, walletToBeDownloaded, shownTutorialsInitiated])
+
useEffect(() => {
// Attach a global event listener for double-click
const handleDoubleClick = () => {
@@ -429,6 +475,7 @@ function App() {
const resetAtomSortablePinnedAppsAtom = useResetRecoilState(
sortablePinnedAppsAtom
);
+ const resetAtomIsUsingImportExportSettingsAtom = useResetRecoilState(isUsingImportExportSettingsAtom)
const resetAtomCanSaveSettingToQdnAtom = useResetRecoilState(
canSaveSettingToQdnAtom
);
@@ -439,6 +486,8 @@ function App() {
settingsLocalLastUpdatedAtom
);
const resetAtomOldPinnedAppsAtom = useResetRecoilState(oldPinnedAppsAtom);
+ const resetAtomQMailLastEnteredTimestampAtom = useResetRecoilState(qMailLastEnteredTimestampAtom)
+ const resetAtomMailsAtom = useResetRecoilState(mailsAtom)
const resetAllRecoil = () => {
resetAtomSortablePinnedAppsAtom();
@@ -446,6 +495,9 @@ function App() {
resetAtomSettingsQDNLastUpdatedAtom();
resetAtomSettingsLocalLastUpdatedAtom();
resetAtomOldPinnedAppsAtom();
+ resetAtomIsUsingImportExportSettingsAtom()
+ resetAtomQMailLastEnteredTimestampAtom()
+ resetAtomMailsAtom()
};
useEffect(() => {
if (!isMobile) return;
@@ -476,7 +528,9 @@ function App() {
globalApiKey = key;
};
useEffect(() => {
- window
+ try {
+ setIsLoading(true);
+ window
.sendMessage("getApiKey")
.then((response) => {
if (response) {
@@ -489,7 +543,36 @@ function App() {
"Failed to get API key:",
error?.message || "An error occurred"
);
- });
+ }).finally(()=> {
+ window
+ .sendMessage("getWalletInfo")
+ .then((response) => {
+ if (response && response?.walletInfo) {
+ setRawWallet(response?.walletInfo);
+ if (
+ holdRefExtState.current === "web-app-request-payment" ||
+ holdRefExtState.current === "web-app-request-connection" ||
+ holdRefExtState.current === "web-app-request-buy-order"
+ )
+ return;
+ if (response?.hasKeyPair) {
+ setExtstate("authenticated");
+ } else {
+ setExtstate("wallet-dropped");
+ }
+ }
+ })
+ .catch((error) => {
+ console.error("Failed to get wallet info:", error);
+ });
+ })
+ } catch (error) {
+
+ } finally {
+ setIsLoading(false);
+
+ }
+
}, []);
useEffect(() => {
if (extState) {
@@ -497,6 +580,20 @@ function App() {
}
}, [extState]);
+ useEffect(()=> {
+ try {
+ const val = localStorage.getItem('settings-disable-editor-enter');
+ if(val){
+ const parsedVal = JSON.parse(val)
+ if(parsedVal === false || parsedVal === true){
+ setIsDisabledEditorEnter(parsedVal)
+ }
+ }
+ } catch (error) {
+
+ }
+ }, [])
+
useEffect(() => {
isFocusedRef.current = isFocused;
}, [isFocused]);
@@ -573,8 +670,6 @@ function App() {
setdecryptedWallet(null);
} catch (e) {
console.log(e);
-
- error = e;
}
},
});
@@ -583,7 +678,7 @@ function App() {
let wallet = structuredClone(rawWallet);
const res = await decryptStoredWallet(password, wallet);
- const wallet2 = new PhraseWallet(res, walletVersion);
+ const wallet2 = new PhraseWallet(res, wallet?.version || walletVersion);
wallet = await wallet2.generateSaveWalletData(
password,
crypto.kdfThreads,
@@ -630,7 +725,8 @@ function App() {
setLtcBalanceLoading(false);
});
};
- const sendCoinFunc = () => {
+ const sendCoinFunc = async() => {
+ try {
setSendPaymentError("");
setSendPaymentSuccess("");
if (!paymentTo) {
@@ -645,6 +741,12 @@ function App() {
setSendPaymentError("Please enter your wallet password");
return;
}
+ const fee = await getFee('PAYMENT')
+
+ await show({
+ message: `Would you like to transfer ${Number(paymentAmount)} QORT?` ,
+ paymentFee: fee.fee + ' QORT'
+ })
setIsLoading(true);
window
.sendMessage("sendCoin", {
@@ -665,6 +767,9 @@ function App() {
console.error("Failed to send coin:", error);
setIsLoading(false);
});
+ } catch (error) {
+ // error
+ }
};
const clearAllStates = () => {
@@ -784,36 +889,6 @@ function App() {
// REMOVED FOR MOBILE APP
};
- useEffect(() => {
- try {
- setIsLoading(true);
-
- window
- .sendMessage("getWalletInfo")
- .then((response) => {
- if (response && response?.walletInfo) {
- setRawWallet(response?.walletInfo);
- if (
- holdRefExtState.current === "web-app-request-payment" ||
- holdRefExtState.current === "web-app-request-connection" ||
- holdRefExtState.current === "web-app-request-buy-order"
- )
- return;
- if (response?.hasKeyPair) {
- setExtstate("authenticated");
- } else {
- setExtstate("wallet-dropped");
- }
- }
- })
- .catch((error) => {
- console.error("Failed to get wallet info:", error);
- });
- } catch (error) {
- } finally {
- setIsLoading(false);
- }
- }, []);
const getUserInfo = useCallback(async (useTimer?: boolean) => {
try {
@@ -970,6 +1045,11 @@ function App() {
message:
"Your settings have changed. If you logout you will lose your changes. Click on the save button in the header to keep your changed settings.",
});
+ } else if(extState === 'authenticated') {
+ await showUnsavedChanges({
+ message:
+ "Are you sure you would like to logout?",
+ });
}
window
.sendMessage("logout", {})
@@ -997,6 +1077,8 @@ function App() {
setCountdown(null);
setWalletToBeDownloaded(null);
setWalletToBeDownloadedPassword("");
+ setShowSeed(false)
+ setCreationStep(1)
setExtstate("authenticated");
setIsOpenSendQort(false);
setIsOpenSendQortSuccess(false);
@@ -1022,6 +1104,9 @@ function App() {
setCountdown(null);
setWalletToBeDownloaded(null);
setWalletToBeDownloadedPassword("");
+ setShowSeed(false)
+ setCreationStep(1)
+
setWalletToBeDownloadedPasswordConfirm("");
setWalletToBeDownloadedError("");
setSendqortState(null);
@@ -1186,6 +1271,7 @@ function App() {
const registerName = async () => {
try {
if (!userInfo?.address) throw new Error("Your address was not found");
+ if(!registerNameValue) throw new Error('Enter a name')
const fee = await getFee("REGISTER_NAME");
await show({
message: "Would you like to register this name?",
@@ -1249,6 +1335,244 @@ function App() {
}
};
+ const renderProfileLeft = ()=> {
+
+ return
+
+
+ {authenticatedMode === "qort" && (
+ LITECOIN WALLET}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+
{
+
+ setAuthenticatedMode("ltc");
+ }}
+ src={ltcLogo}
+ style={{
+ cursor: "pointer",
+ width: "20px",
+ height: "auto",
+ }}
+ />
+
+ )}
+ {authenticatedMode === "ltc" && (
+ QORTAL WALLET}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+
{
+ setAuthenticatedMode("qort");
+ }}
+ src={qortLogo}
+ style={{
+ cursor: "pointer",
+ width: "20px",
+ height: "auto",
+ }}
+ />
+
+ )}
+
+
+
+ {authenticatedMode === "ltc" ? (
+ <>
+
+
+
+
+ {rawWallet?.ltcAddress?.slice(0, 6)}...
+ {rawWallet?.ltcAddress?.slice(-4)}
+
+
+
+ {ltcBalanceLoading && (
+
+ )}
+ {!isNaN(+ltcBalance) && !ltcBalanceLoading && (
+
+
+ {ltcBalance} LTC
+
+
+
+ )}
+
+ >
+ ) : (
+ <>
+
+
+
+ {userInfo?.name}
+
+
+
+
+ {rawWallet?.address0?.slice(0, 6)}...
+ {rawWallet?.address0?.slice(-4)}
+
+
+
+ {qortBalanceLoading && (
+
+ )}
+ {!qortBalanceLoading && balance >= 0 && (
+
+
+ {balance?.toFixed(2)} QORT
+
+
+
+ )}
+
+
+ {userInfo && !userInfo?.name && (
+ {
+ setOpenRegisterName(true);
+ }}
+ >
+ REGISTER NAME
+
+ )}
+
+ {
+ setIsOpenSendQort(true);
+ // setExtstate("send-qort");
+ setIsOpenDrawerProfile(false);
+ }}
+ >
+ Transfer QORT
+
+
+ >
+ )}
+ {
+ executeEvent("addTab", {
+ data: { service: "APP", name: "q-trade" },
+ });
+ executeEvent("open-apps-mode", {});
+ }}
+ >
+ Get QORT at Q-Trade
+
+
+ }
+
const renderProfile = () => {
return (
-
-
- {authenticatedMode === "ltc" ? (
- <>
-
-
-
-
- {rawWallet?.ltcAddress?.slice(0, 6)}...
- {rawWallet?.ltcAddress?.slice(-4)}
-
-
-
- {ltcBalanceLoading && (
-
- )}
- {!isNaN(+ltcBalance) && !ltcBalanceLoading && (
-
-
- {ltcBalance} LTC
-
-
-
- )}
-
- >
- ) : (
- <>
-
-
-
- {userInfo?.name}
-
-
-
-
- {rawWallet?.address0?.slice(0, 6)}...
- {rawWallet?.address0?.slice(-4)}
-
-
-
- {qortBalanceLoading && (
-
- )}
- {!qortBalanceLoading && balance >= 0 && (
-
-
- {balance?.toFixed(2)} QORT
-
-
-
- )}
-
-
- {userInfo && !userInfo?.name && (
- {
- setOpenRegisterName(true);
- }}
- >
- REGISTER NAME
-
- )}
-
- {
- setIsOpenSendQort(true);
- // setExtstate("send-qort");
- setIsOpenDrawerProfile(false);
- }}
- >
- Transfer QORT
-
-
- >
- )}
- {
- executeEvent("addTab", {
- data: { service: "APP", name: "q-trade" },
- });
- executeEvent("open-apps-mode", {});
- }}
- >
- Get QORT at Q-Trade
-
-
+ <>
+ {renderProfileLeft()}
+ >
)}
-
{
- logoutFunc();
- setIsOpenDrawerProfile(false);
+ LOG OUT}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
}}
- style={{
- cursor: "pointer",
- width: '20px',
- height: 'auto'
- }}
- />
+ >
+
{
+ logoutFunc();
+ setIsOpenDrawerProfile(false);
+ }}
+ style={{
+ cursor: "pointer",
+ width: '20px',
+ height: 'auto'
+ }}
+ />
+
>
)}
@@ -1483,41 +1670,140 @@ function App() {
setIsSettingsOpen(true);
}}
>
- SETTINGS}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
}}
- />
+ >
+
+
-
- {authenticatedMode === "qort" && (
-
{
- setAuthenticatedMode("ltc");
+
+ {desktopViewMode !== 'home' && (
+ <>
+
+
+ WALLET}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+ {
+ setIsOpenDrawerProfile(true);
+ }}>
+
+
+
+
+
+ >
+ )}
+
+ {/* {authenticatedMode === "qort" && (
+ LITECOIN WALLET}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
}}
- src={ltcLogo}
- style={{
- cursor: "pointer",
- width: "20px",
- height: "auto",
- }}
- />
+ >
+
{
+ if(desktopViewMode !== 'home'){
+ setIsOpenDrawerProfile((prev)=> !prev)
+ }
+ setAuthenticatedMode("ltc");
+ }}
+ src={ltcLogo}
+ style={{
+ cursor: "pointer",
+ width: "20px",
+ height: "auto",
+ }}
+ />
+
)}
{authenticatedMode === "ltc" && (
-
{
- setAuthenticatedMode("qort");
+ QORTAL WALLET}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
}}
- src={qortLogo}
- style={{
- cursor: "pointer",
- width: "20px",
- height: "auto",
- }}
- />
- )}
+ >
+
{
+ setAuthenticatedMode("qort");
+ }}
+ src={qortLogo}
+ style={{
+ cursor: "pointer",
+ width: "20px",
+ height: "auto",
+ }}
+ />
+
+ )} */}
+
+
+ {extState === "authenticated" && isMainWindow && (
+
+
+
+
+
+ )}
+
+ {
+ try {
+ const res = await isRunningGateway()
+ if(res) throw new Error('Cannot view minting details on the gateway')
+ setIsOpenMinting(true)
+
+ } catch (error) {
+ setOpenSnack(true)
+ setInfoSnack({
+ type: 'error',
+ message: error?.message
+ })
+ }
+ }}>
+ MINTING STATUS}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+
+
+
+
+
+ {(desktopViewMode === "apps" || desktopViewMode === "home") && (
+ {
+ if(desktopViewMode === "apps"){
+ showTutorial('qapps', true)
+ } else {
+ showTutorial('getting-started', true)
+ }
+ }} >
+ TUTORIAL}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+
+
+
+ )}
+
+
+ BACKUP WALLET}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
{
setExtstate("download-wallet");
@@ -1538,6 +1947,7 @@ function App() {
width: '20px'
}}
/>
+
@@ -1555,6 +1965,14 @@ function App() {
// backgroundRepeat: desktopViewMode === "apps" && "no-repeat",
}}
>
+
+
{extState === "not-authenticated" && (
)}
{/* {extState !== "not-authenticated" && (
@@ -1588,7 +2010,12 @@ function App() {
setOpenSnackGlobal: setOpenSnack,
infoSnackCustom: infoSnack,
setInfoSnackCustom: setInfoSnack,
- downloadResource
+ downloadResource,
+ getIndividualUserInfo,
+ isUserBlocked,
+ addToBlockList,
+ removeBlockFromList,
+ getAllBlockedUsers
}}
>
-
-
-
+
)}
{isOpenSendQort && isMainWindow && (
@@ -1716,12 +2133,14 @@ function App() {
Amount
- setPaymentAmount(+e.target.value)}
- autoComplete="off"
+ minValue={0}
+ maxValue={+balance}
+ allowDecimals={true}
+ initialValue={'0'}
+ allowNegatives={false}
+ afterChange={(e: string) => setPaymentAmount(+e)}
/>
@@ -2124,8 +2543,7 @@ function App() {
height: "154px",
}}
>
-
-
+
-
-
+
-
-
+
-
+ {useLocalNode ? (
+ <>
+
+
+ {"Using node: "} {currentNode?.url}
+
+ >
+ ) : (
+ <>
+
+
+ {"Using gateway"}
+
+ >
+ )}
+
+
Authenticate
@@ -2362,8 +2802,7 @@ function App() {
height: "154px",
}}
>
-
-
+
setWalletToBeDownloadedPassword(e.target.value)
+
}
/>
@@ -2441,7 +2881,15 @@ function App() {
cursor: "pointer",
}}
onClick={() => {
+ if(creationStep === 2){
+ setCreationStep(1)
+ return
+ }
setExtstate("not-authenticated");
+ setShowSeed(false)
+ setCreationStep(1)
+ setWalletToBeDownloadedPasswordConfirm('')
+ setWalletToBeDownloadedPassword('')
}}
src={Return}
/>
@@ -2454,14 +2902,14 @@ function App() {
height: "154px",
}}
>
-
-
+
Set up your Qortal account
@@ -2473,33 +2921,110 @@ function App() {
justifyContent: 'center',
padding: '10px'
}}>
-
Your seedphrase
- Only shown once! Please copy and keep safe!
+ }}>
+ A ‘ {
+ setShowSeed(true)
+ }} style={{
+ fontSize: '14px',
+ color: 'steelblue',
+ cursor: 'pointer'
+ }}>SEEDPHRASE ’ has been randomly generated in the background.
-
+
+ If you wish to VIEW THE SEEDPHRASE, click the word 'SEEDPHRASE' in this text. Seedphrases are used to generate the private key for your Qortal account. For security by default, seedphrases are NOT displayed unless specifically chosen.
+
+
+ Create your Qortal account by clicking NEXT below.
+
+
+
+ {
+ setCreationStep(2)
+ }}>
+ Next
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Wallet Password
@@ -2524,11 +3049,14 @@ function App() {
setWalletToBeDownloadedPasswordConfirm(e.target.value)
}
/>
+
+ There is no minimum length requirement
Create Account
+
{walletToBeDownloadedError}
>
)}
@@ -2546,7 +3074,17 @@ function App() {
>
Congrats, you’re all set up!
-
+
+
+
+ Save your account in a place where you will remember it!
+
+
{
await saveFileToDiskFunc();
@@ -2673,21 +3211,49 @@ function App() {
aria-labelledby="alert-dialog-title"
aria-describedby="alert-dialog-description"
>
- {"Publish"}
+ {message.paymentFee ? "Payment" : "Publish"}
{message.message}
-
- publish fee: {message.publishFee}
-
+ {message?.paymentFee && (
+
+ payment fee: {message.paymentFee}
+
+ )}
+ {message?.publishFee && (
+
+ publish fee: {message.publishFee}
+
+ )}
-
@@ -2898,6 +3464,24 @@ function App() {
>
)}
+ {messageQortalRequestExtension?.appFee && (
+ <>
+
+ {"App Fee: "}
+ {messageQortalRequestExtension?.appFee}
+ {" QORT"}
+
+
+ >
+ )}
{messageQortalRequestExtension?.foreignFee && (
<>
@@ -2921,7 +3505,6 @@ function App() {
- onOkQortalRequestExtension("accepted")}
>
accept
-
-
+ onCancelQortalRequestExtension()}
>
decline
-
+
{sendPaymentError}
@@ -3046,8 +3633,26 @@ function App() {
open={isOpenDrawerProfile}
setOpen={setIsOpenDrawerProfile}
>
- {renderProfile()}
+ {renderProfileLeft()}
+
+
+ {extState === "create-wallet" && walletToBeDownloaded && (
+ {
+ showTutorial('important-information', true)
+ }} sx={{
+ position: 'fixed',
+ bottom: '25px',
+ right: '25px'
+ }}>
+
+
+ )}
+ {isOpenMinting && (
+
+ )}
);
}
diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx
index d560e7f..f693a38 100644
--- a/src/ExtStates/NotAuthenticated.tsx
+++ b/src/ExtStates/NotAuthenticated.tsx
@@ -1,9 +1,10 @@
-import React, { useCallback, useEffect, useRef, useState } from "react";
+import React, { useCallback, useContext, useEffect, useRef, useState } from "react";
import { Spacer } from "../common/Spacer";
import { CustomButton, TextItalic, TextP, TextSpan } from "../App-styles";
import {
Box,
Button,
+ ButtonBase,
Checkbox,
Dialog,
DialogActions,
@@ -11,21 +12,41 @@ import {
DialogTitle,
FormControlLabel,
Input,
+ styled,
Switch,
- Tooltip,
Typography,
} from "@mui/material";
import Logo1 from "../assets/svgs/Logo1.svg";
import Logo1Dark from "../assets/svgs/Logo1Dark.svg";
import Info from "../assets/svgs/Info.svg";
+import HelpIcon from '@mui/icons-material/Help';
import { CustomizedSnackbars } from "../components/Snackbar/Snackbar";
import { set } from "lodash";
-import { cleanUrl, isUsingLocal } from "../background";
+import { cleanUrl, gateways, isUsingLocal } from "../background";
+import { GlobalContext } from "../App";
+import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip';
const manifestData = {
- version: "0.3.7",
+ version: "0.5.2",
};
+
+export const HtmlTooltip = styled(({ className, ...props }: TooltipProps) => (
+
+))(({ theme }) => ({
+ [`& .${tooltipClasses.tooltip}`]: {
+ backgroundColor: '#232428',
+ color: 'white',
+ maxWidth: 320,
+ padding: '20px',
+ fontSize: theme.typography.pxToRem(12),
+ },
+}));
+function removeTrailingSlash(url) {
+ return url.replace(/\/+$/, '');
+}
+
+
export const NotAuthenticated = ({
getRootProps,
getInputProps,
@@ -35,24 +56,30 @@ export const NotAuthenticated = ({
setApiKey,
globalApiKey,
handleSetGlobalApikey,
+ currentNode,
+ setCurrentNode,
+ useLocalNode,
+ setUseLocalNode
}) => {
const [isValidApiKey, setIsValidApiKey] = useState(null);
const [hasLocalNode, setHasLocalNode] = useState(null);
- const [useLocalNode, setUseLocalNode] = useState(false);
+ // const [useLocalNode, setUseLocalNode] = useState(false);
const [openSnack, setOpenSnack] = React.useState(false);
const [infoSnack, setInfoSnack] = React.useState(null);
const [show, setShow] = React.useState(false);
const [mode, setMode] = React.useState("list");
const [customNodes, setCustomNodes] = React.useState(null);
- const [currentNode, setCurrentNode] = React.useState({
- url: "http://127.0.0.1:12391",
- });
+ // const [currentNode, setCurrentNode] = React.useState({
+ // url: "http://127.0.0.1:12391",
+ // });
const [importedApiKey, setImportedApiKey] = React.useState(null);
//add and edit states
- const [url, setUrl] = React.useState("http://");
+ const [url, setUrl] = React.useState("https://");
const [customApikey, setCustomApiKey] = React.useState("");
const [customNodeToSaveIndex, setCustomNodeToSaveIndex] =
React.useState(null);
+ const { showTutorial, hasSeenGettingStarted } = useContext(GlobalContext);
+
const importedApiKeyRef = useRef(null);
const currentNodeRef = useRef(null);
const hasLocalNodeRef = useRef(null);
@@ -65,6 +92,34 @@ export const NotAuthenticated = ({
const text = e.target.result; // Get the file content
setImportedApiKey(text); // Store the file content in the state
+ if(customNodes){
+ setCustomNodes((prev)=> {
+ const copyPrev = [...prev]
+ const findLocalIndex = copyPrev?.findIndex((item)=> item?.url === 'http://127.0.0.1:12391')
+ if(findLocalIndex === -1){
+ copyPrev.unshift({
+ url: "http://127.0.0.1:12391",
+ apikey: text
+ })
+ } else {
+ copyPrev[findLocalIndex] = {
+ url: "http://127.0.0.1:12391",
+ apikey: text
+ }
+ }
+ window
+ .sendMessage("setCustomNodes", copyPrev)
+ .catch((error) => {
+ console.error(
+ "Failed to set custom nodes:",
+ error.message || "An error occurred"
+ );
+ });
+ return copyPrev
+ })
+
+ }
+
};
reader.readAsText(file); // Read the file as text
}
@@ -82,8 +137,14 @@ export const NotAuthenticated = ({
const data = await response.json();
if (data?.height) {
setHasLocalNode(true);
+ return true
}
- } catch (error) {}
+ return false
+
+ } catch (error) {
+ return false
+
+ }
}, []);
useEffect(() => {
@@ -94,11 +155,18 @@ export const NotAuthenticated = ({
window
.sendMessage("getCustomNodesFromStorage")
.then((response) => {
- if (response) {
+
setCustomNodes(response || []);
- window.electronAPI.setAllowedDomains(response?.map((node)=> node.url))
-
- }
+ if(window?.electronAPI?.setAllowedDomains){
+ window.electronAPI.setAllowedDomains(response?.map((node)=> node.url))
+ }
+ if(Array.isArray(response)){
+ const findLocal = response?.find((item)=> item?.url === 'http://127.0.0.1:12391')
+ if(findLocal && findLocal?.apikey){
+ setImportedApiKey(findLocal?.apikey)
+ }
+ }
+
})
.catch((error) => {
console.error(
@@ -119,13 +187,54 @@ export const NotAuthenticated = ({
hasLocalNodeRef.current = hasLocalNode;
}, [hasLocalNode]);
+
+
const validateApiKey = useCallback(async (key, fromStartUp) => {
try {
- if (!currentNodeRef.current) return;
+ if(key === "isGateway") return
const isLocalKey = cleanUrl(key?.url) === "127.0.0.1:12391";
- if (isLocalKey && !hasLocalNodeRef.current && !fromStartUp) {
+ if (fromStartUp && key?.url && key?.apikey && !isLocalKey && !gateways.some(gateway => key?.url?.includes(gateway))) {
+ setCurrentNode({
+ url: key?.url,
+ apikey: key?.apikey,
+ });
+
+ let isValid = false
+
+
+ const url = `${key?.url}/admin/settings/localAuthBypassEnabled`;
+ const response = await fetch(url);
+
+ // Assuming the response is in plain text and will be 'true' or 'false'
+ const data = await response.text();
+ if(data && data === 'true'){
+ isValid = true
+ } else {
+ const url2 = `${key?.url}/admin/apikey/test?apiKey=${key?.apikey}`;
+ const response2 = await fetch(url2);
+
+ // Assuming the response is in plain text and will be 'true' or 'false'
+ const data2 = await response2.text();
+ if (data2 === "true") {
+ isValid = true
+ }
+ }
+
+ if (isValid) {
+ setIsValidApiKey(true);
+ setUseLocalNode(true);
+ return
+ }
+
+ }
+ if (!currentNodeRef.current) return;
+ const stillHasLocal = await checkIfUserHasLocalNode()
+
+ if (isLocalKey && !stillHasLocal && !fromStartUp) {
throw new Error("Please turn on your local node");
}
+ //check custom nodes
+ // !gateways.some(gateway => apiKey?.url?.includes(gateway))
const isCurrentNodeLocal =
cleanUrl(currentNodeRef.current?.url) === "127.0.0.1:12391";
if (isLocalKey && !isCurrentNodeLocal) {
@@ -143,18 +252,29 @@ export const NotAuthenticated = ({
} else if (currentNodeRef.current) {
payload = currentNodeRef.current;
}
- const url = `${payload?.url}/admin/apikey/test`;
- const response = await fetch(url, {
- method: "GET",
- headers: {
- accept: "text/plain",
- "X-API-KEY": payload?.apikey, // Include the API key here
- },
- });
+ let isValid = false
+
+
+ const url = `${payload?.url}/admin/settings/localAuthBypassEnabled`;
+ const response = await fetch(url);
// Assuming the response is in plain text and will be 'true' or 'false'
const data = await response.text();
- if (data === "true") {
+ if(data && data === 'true'){
+ isValid = true
+ } else {
+ const url2 = `${payload?.url}/admin/apikey/test?apiKey=${payload?.apikey}`;
+ const response2 = await fetch(url2);
+
+ // Assuming the response is in plain text and will be 'true' or 'false'
+ const data2 = await response2.text();
+ if (data2 === "true") {
+ isValid = true
+ }
+ }
+
+
+ if (isValid) {
window
.sendMessage("setApiKey", payload)
.then((response) => {
@@ -176,20 +296,45 @@ export const NotAuthenticated = ({
} else {
setIsValidApiKey(false);
setUseLocalNode(false);
- setInfoSnack({
- type: "error",
- message: "Select a valid apikey",
- });
- setOpenSnack(true);
+ if(!fromStartUp){
+ setInfoSnack({
+ type: "error",
+ message: "Select a valid apikey",
+ });
+ setOpenSnack(true);
+ }
+
}
} catch (error) {
setIsValidApiKey(false);
setUseLocalNode(false);
+ if (fromStartUp) {
+ setCurrentNode({
+ url: "http://127.0.0.1:12391",
+ });
+ window
+ .sendMessage("setApiKey", "isGateway")
+ .then((response) => {
+ if (response) {
+ setApiKey(null);
+ handleSetGlobalApikey(null);
+ }
+ })
+ .catch((error) => {
+ console.error(
+ "Failed to set API key:",
+ error.message || "An error occurred"
+ );
+ });
+ return
+ }
+ if(!fromStartUp){
setInfoSnack({
type: "error",
message: error?.message || "Select a valid apikey",
});
setOpenSnack(true);
+ }
console.error("Error validating API key:", error);
}
}, []);
@@ -203,24 +348,22 @@ export const NotAuthenticated = ({
const addCustomNode = () => {
setMode("add-node");
};
-
- const saveCustomNodes = (myNodes) => {
+ const saveCustomNodes = (myNodes, isFullListOfNodes) => {
let nodes = [...(myNodes || [])];
- if (customNodeToSaveIndex !== null) {
+ if (!isFullListOfNodes && customNodeToSaveIndex !== null) {
nodes.splice(customNodeToSaveIndex, 1, {
- url,
+ url: removeTrailingSlash(url),
apikey: customApikey,
});
- } else if (url && customApikey) {
+ } else if (!isFullListOfNodes && url) {
nodes.push({
- url,
+ url: removeTrailingSlash(url),
apikey: customApikey,
});
}
setCustomNodes(nodes);
- window.electronAPI.setAllowedDomains(nodes?.map((node)=> node.url))
-
+
setCustomNodeToSaveIndex(null);
if (!nodes) return;
window
@@ -228,8 +371,11 @@ export const NotAuthenticated = ({
.then((response) => {
if (response) {
setMode("list");
- setUrl("http://");
+ setUrl("https://");
setCustomApiKey("");
+ if(window?.electronAPI?.setAllowedDomains){
+ window.electronAPI.setAllowedDomains(nodes?.map((node) => node.url))
+ }
// add alert if needed
}
})
@@ -251,19 +397,24 @@ export const NotAuthenticated = ({
height: "154px",
}}
>
-
-
+
- WELCOME TO YOUR
- QORTAL WALLET
+ WELCOME TO YOUR
+ QORTAL WALLET
+
+
+ Your wallet is like your digital ID on Qortal, and is how you will login to the Qortal User Interface. It holds your public address and the Qortal name you will eventually choose. Every transaction you make is linked to your ID, and this is where you manage all your QORT and other tradeable cryptocurrencies on Qortal.
+
+ }
>
setExtstate('wallets')}>
{/* */}
Wallets
+
{/*
*/}
@@ -287,16 +450,41 @@ export const NotAuthenticated = ({
display: "flex",
gap: "10px",
alignItems: "center",
+
}}
+ >
+
+ New users start here!
+
+ Creating an account means creating a new wallet and digital ID to start using Qortal. Once you have made your account, you can start doing things like obtaining some QORT, buying a name and avatar, publishing videos and blogs, and much more.
+
+ }
>
{
setExtstate("create-wallet");
}}
+ sx={{
+ backgroundColor: hasSeenGettingStarted === false && 'var(--green)',
+ color: hasSeenGettingStarted === false && 'black',
+ "&:hover": {
+ backgroundColor: hasSeenGettingStarted === false && 'var(--green)',
+ color: hasSeenGettingStarted === false && 'black'
+ }
+ }}
>
- Create account
+ Create wallet
-
+
@@ -317,9 +505,15 @@ export const NotAuthenticated = ({
gap: "10px",
alignItems: "center",
flexDirection: "column",
+ outline: '0.5px solid rgba(255, 255, 255, 0.5)',
+ padding: '20px 30px',
+ borderRadius: '5px',
}}
>
<>
+ For advanced users
item?.url !== node?.url);
- saveCustomNodes(nodesToSave);
+ saveCustomNodes(nodesToSave, true);
}}
variant="contained"
>
@@ -648,7 +848,7 @@ export const NotAuthenticated = ({
saveCustomNodes(customNodes)}
autoFocus
>
@@ -659,6 +859,17 @@ export const NotAuthenticated = ({
)}
+ {
+ showTutorial('create-account', true)
+ }} sx={{
+ position: 'fixed',
+ bottom: '25px',
+ right: '25px'
+ }}>
+
+
>
);
};
diff --git a/src/MessageQueueContext.tsx b/src/MessageQueueContext.tsx
index 3727b03..7104520 100644
--- a/src/MessageQueueContext.tsx
+++ b/src/MessageQueueContext.tsx
@@ -92,21 +92,6 @@ export const MessageQueueProvider = ({ children }) => {
// Remove the message from the queue after successful sending
messageQueueRef.current.shift();
- // Remove the message from queueChats
- setQueueChats((prev) => {
- const updatedChats = { ...prev };
- if (updatedChats[groupDirectId]) {
- updatedChats[groupDirectId] = updatedChats[groupDirectId].filter(
- (item) => item.identifier !== identifier
- );
-
- // If no more chats for this group, delete the groupDirectId entry
- if (updatedChats[groupDirectId].length === 0) {
- delete updatedChats[groupDirectId];
- }
- }
- return updatedChats;
- });
} catch (error) {
console.error('Message sending failed', error);
@@ -142,15 +127,25 @@ export const MessageQueueProvider = ({ children }) => {
// Method to process with new messages and groupDirectId
const processWithNewMessages = (newMessages, groupDirectId) => {
+ let updatedNewMessages = newMessages
if (newMessages.length > 0) {
- messageQueueRef.current = messageQueueRef.current.filter((msg) => {
- return !newMessages.some(newMsg => newMsg?.specialId === msg?.specialId);
- });
-
// Remove corresponding entries in queueChats for the provided groupDirectId
setQueueChats((prev) => {
const updatedChats = { ...prev };
if (updatedChats[groupDirectId]) {
+
+ updatedNewMessages = newMessages?.map((msg)=> {
+ const findTempMsg = updatedChats[groupDirectId]?.find((msg2)=> msg2?.message?.specialId === msg?.specialId)
+ if(findTempMsg){
+ return {
+ ...msg,
+ tempSignature: findTempMsg?.signature
+ }
+ }
+ return msg
+ })
+
+
updatedChats[groupDirectId] = updatedChats[groupDirectId].filter((chat) => {
return !newMessages.some(newMsg => newMsg?.specialId === chat?.message?.specialId);
});
@@ -167,8 +162,23 @@ export const MessageQueueProvider = ({ children }) => {
}
return updatedChats;
});
+
}
-
+ setTimeout(() => {
+ if(!messageQueueRef.current.find((msg) => msg?.groupDirectId === groupDirectId)){
+ setQueueChats((prev) => {
+ const updatedChats = { ...prev };
+ if (updatedChats[groupDirectId]) {
+ delete updatedChats[groupDirectId]
+ }
+
+ return updatedChats
+ }
+ )
+ }
+ }, 300);
+
+ return updatedNewMessages
};
return (
diff --git a/src/Wallets.tsx b/src/Wallets.tsx
index 4ef1643..8641a34 100644
--- a/src/Wallets.tsx
+++ b/src/Wallets.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useRef, useState } from "react";
+import React, { useContext, useEffect, useRef, useState } from "react";
import List from "@mui/material/List";
import ListItem from "@mui/material/ListItem";
import Divider from "@mui/material/Divider";
@@ -19,6 +19,8 @@ import { decryptStoredWalletFromSeedPhrase } from "./utils/decryptWallet";
import { crypto } from "./constants/decryptWallet";
import { LoadingButton } from "@mui/lab";
import { PasswordField } from "./components";
+import { HtmlTooltip } from "./ExtStates/NotAuthenticated";
+import { GlobalContext } from "./App";
const parsefilenameQortal = (filename)=> {
return filename.startsWith("qortal_backup_") ? filename.slice(14) : filename;
@@ -30,6 +32,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
const [seedValue, setSeedValue] = useState("");
const [seedName, setSeedName] = useState("");
const [seedError, setSeedError] = useState("");
+ const { hasSeenGettingStarted } = useContext(GlobalContext);
const [password, setPassword] = useState("");
const [isOpenSeedModal, setIsOpenSeedModal] = useState(false);
@@ -197,9 +200,11 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
sx={{
width: "100%",
maxWidth: "500px",
- bgcolor: "background.paper",
maxHeight: "60vh",
- overflow: "auto",
+ overflowY: "auto",
+ overflowX: "hidden",
+ backgroundColor: "rgb(30 30 32 / 70%)",
+
}}
>
{wallets?.map((wallet, idx) => {
@@ -228,6 +233,17 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
bottom: wallets?.length === 0 ? 'unset' : '20px',
right: wallets?.length === 0 ? 'unset' : '20px'
}}
+ >
+
+ Already have a Qortal account? Enter your secret backup phrase here to access it. This phrase is one of the ways to recover your account.
+
+ }
>
{
Add seed-phrase
+
+
+ Use this option to connect additional Qortal wallets you've already made, in order to login with them afterwards. You will need access to your backup JSON file in order to do so.
+
+ }
+ >
Add wallets
+
"
- }
- />
-
-
+
+
);
})}
@@ -544,6 +507,7 @@ export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGr
const index = virtualRow.index;
let message = searchedList[index];
return (
+
-
+ Error loading content: Invalid Data
+
+ }
+ >
+
+
+
+
+ );
+ })}
+
+
+
+
+
+
+
+ );
+ }
+ return (
+
+
+ {
+ setMode("search")
+ }}>
+ SEARCH}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+
+
+
+ {
+ setMode("default")
+ setSearchValue('')
+ setSelectedMember(0)
+ openQManager()
+ }}>
+ Q-MANAGER}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+
+
+
+
+ {
+ setMode("mentions")
+ setSearchValue('')
+ setSelectedMember(0)
+ }}>
+ MENTIONED}
+ placement="left"
+ arrow
+ sx={{ fontSize: "24" }}
+ slotProps={{
+ tooltip: {
+ sx: {
+ color: "#ffffff",
+ backgroundColor: "#444444",
+ },
+ },
+ arrow: {
+ sx: {
+ color: "#444444",
+ },
+ },
+ }}
+ >
+ 0 && (!lastMentionTimestamp || lastMentionTimestamp < mentionList[0]?.timestamp) ? 'var(--unread)' : 'white'
+ }} />
+
+
+
+
+
+
+
+
+ );
+};
+
+
+const ShowMessage = ({message, goToMessage, messages})=> {
+
+ return (
+
- "
- }
- />
+ {message?.messageText && (
+
+ )}
+ {message?.decryptedData?.message && (
+ "
+ }
+ />
+ )}
+
-
- );
- })}
-
-
-
-
-
-
-
- );
- }
- return (
-
-
- {
- setMode("search")
- }}>
-
-
- {
- setMode("default")
- setSearchValue('')
- setSelectedMember(0)
- openQManager()
- }}>
-
-
-
- {
- setMode("mentions")
- setSearchValue('')
- setSelectedMember(0)
- }}>
- 0 && (!lastMentionTimestamp || lastMentionTimestamp < mentionList[0]?.timestamp) ? 'var(--unread)' : 'white'
- }} />
-
-
-
-
-
-
-
- );
-};
+ )
+}
\ No newline at end of file
diff --git a/src/components/Chat/CreateCommonSecret.tsx b/src/components/Chat/CreateCommonSecret.tsx
index c371c55..e729386 100644
--- a/src/components/Chat/CreateCommonSecret.tsx
+++ b/src/components/Chat/CreateCommonSecret.tsx
@@ -8,7 +8,7 @@ import { decryptResource, getGroupAdmins, validateSecretKey } from '../Group/Gro
import { base64ToUint8Array } from '../../qdn/encryption/group-encryption';
import { uint8ArrayToObject } from '../../backgroundFunctions/encryption';
-export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, secretKeyDetails, userInfo, noSecretKey, setHideCommonKeyPopup}) => {
+export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, secretKeyDetails, userInfo, noSecretKey, setHideCommonKeyPopup, setIsForceShowCreationKeyPopup, isForceShowCreationKeyPopup}) => {
const { show, setTxList } = useContext(MyContext);
const [openSnack, setOpenSnack] = React.useState(false);
@@ -131,6 +131,9 @@ export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, sec
]);
}
setIsLoading(false);
+ setTimeout(() => {
+ setIsForceShowCreationKeyPopup(false)
+ }, 1000);
})
.catch((error) => {
console.error("Failed to encrypt and publish symmetric key for group chat:", error.message || "An error occurred");
@@ -161,7 +164,7 @@ export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, sec
The latest group secret key was published by a non-owner. As the owner of the group please re-encrypt the key as a safeguard
- ): (
+ ): isForceShowCreationKeyPopup ? null : (
The group member list has changed. Please re-encrypt the secret key.
@@ -173,6 +176,7 @@ export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, sec
}}>
{
setHideCommonKeyPopup(true)
+ setIsForceShowCreationKeyPopup(false)
}} size='small'>Hide
diff --git a/src/components/Chat/GroupAnnouncements.tsx b/src/components/Chat/GroupAnnouncements.tsx
index a28f189..cdcd5db 100644
--- a/src/components/Chat/GroupAnnouncements.tsx
+++ b/src/components/Chat/GroupAnnouncements.tsx
@@ -94,18 +94,6 @@ export const decryptPublishes = async (encryptedMessages: any[], secretKey) => {
.then((response) => {
if (!response?.error) {
res(response);
- // if(hasInitialized.current){
- // setMessages((prev) => [...prev, ...formatted]);
- // } else {
- // const formatted = response.map((item) => ({
- // ...item,
- // id: item.signature,
- // text: item.text,
- // unread: false
- // }));
- // setMessages(formatted);
- // hasInitialized.current = true;
- // }
return;
}
rej(response.error);
@@ -117,6 +105,21 @@ export const decryptPublishes = async (encryptedMessages: any[], secretKey) => {
});
} catch (error) {}
};
+export const handleUnencryptedPublishes = (publishes) => {
+ let publishesData = []
+ publishes.forEach((pub)=> {
+ try {
+ const decryptToUnit8Array = base64ToUint8Array(pub);
+ const decodedData = uint8ArrayToObject(decryptToUnit8Array);
+ if(decodedData){
+ publishesData.push({decryptedData: decodedData})
+ }
+ } catch (error) {
+
+ }
+ })
+ return publishesData
+};
export const GroupAnnouncements = ({
selectedGroup,
secretKey,
@@ -127,6 +130,7 @@ export const GroupAnnouncements = ({
isAdmin,
hide,
myName,
+ isPrivate
}) => {
const [messages, setMessages] = useState([]);
const [isSending, setIsSending] = useState(false);
@@ -160,7 +164,7 @@ export const GroupAnnouncements = ({
})();
}, [selectedGroup]);
- const getAnnouncementData = async ({ identifier, name, resource }) => {
+ const getAnnouncementData = async ({ identifier, name, resource }, isPrivate) => {
try {
let data = dataPublishes.current[`${name}-${identifier}`];
if (
@@ -180,9 +184,9 @@ export const GroupAnnouncements = ({
data = data.data;
}
- const response = await decryptPublishes([{ data }], secretKey);
-
+ const response = isPrivate === false ? handleUnencryptedPublishes([data]) : await decryptPublishes([{ data }], secretKey);
const messageData = response[0];
+ if(!messageData) return
setAnnouncementData((prev) => {
return {
...prev,
@@ -195,11 +199,11 @@ export const GroupAnnouncements = ({
};
useEffect(() => {
- if (!secretKey || hasInitializedWebsocket.current) return;
+ if ((!secretKey && isPrivate) || hasInitializedWebsocket.current || isPrivate === null) return;
setIsLoading(true);
// initWebsocketMessageGroup()
hasInitializedWebsocket.current = true;
- }, [secretKey]);
+ }, [secretKey, isPrivate]);
const encryptChatMessage = async (data: string, secretKeyObject: any) => {
try {
@@ -257,12 +261,12 @@ export const GroupAnnouncements = ({
}
};
- const setTempData = async () => {
+ const setTempData = async (selectedGroup) => {
try {
const getTempAnnouncements = await getTempPublish();
if (getTempAnnouncements?.announcement) {
let tempData = [];
- Object.keys(getTempAnnouncements?.announcement || {}).map((key) => {
+ Object.keys(getTempAnnouncements?.announcement || {}).filter((annKey)=> annKey?.startsWith(`grp-${selectedGroup}-anc`)).map((key) => {
const value = getTempAnnouncements?.announcement[key];
tempData.push(value.data);
});
@@ -289,9 +293,9 @@ export const GroupAnnouncements = ({
extra: {},
message: htmlContent,
};
- const secretKeyObject = await getSecretKey(false, true);
- const message64: any = await objectToBase64(message);
- const encryptSingle = await encryptChatMessage(
+ const secretKeyObject = isPrivate === false ? null : await getSecretKey(false, true);
+ const message64: any = await objectToBase64(message);
+ const encryptSingle = isPrivate === false ? message64 : await encryptChatMessage(
message64,
secretKeyObject
);
@@ -313,7 +317,7 @@ export const GroupAnnouncements = ({
data: dataToSaveToStorage,
key: "announcement",
});
- setTempData();
+ setTempData(selectedGroup);
clearEditorContent();
}
// send chat message
@@ -331,7 +335,7 @@ export const GroupAnnouncements = ({
};
const getAnnouncements = React.useCallback(
- async (selectedGroup) => {
+ async (selectedGroup, isPrivate) => {
try {
const offset = 0;
@@ -346,7 +350,7 @@ export const GroupAnnouncements = ({
});
const responseData = await response.json();
- setTempData();
+ setTempData(selectedGroup);
setAnnouncements(responseData);
setIsLoading(false);
for (const data of responseData) {
@@ -354,7 +358,7 @@ export const GroupAnnouncements = ({
name: data.name,
identifier: data.identifier,
resource: data,
- });
+ }, isPrivate);
}
} catch (error) {
} finally {
@@ -365,11 +369,12 @@ export const GroupAnnouncements = ({
);
React.useEffect(() => {
- if (selectedGroup && secretKey && !hasInitialized.current && !hide) {
- getAnnouncements(selectedGroup);
+ if(!secretKey && isPrivate) return
+ if (selectedGroup && !hasInitialized.current && !hide && isPrivate !== null) {
+ getAnnouncements(selectedGroup, isPrivate);
hasInitialized.current = true;
}
- }, [selectedGroup, secretKey, hide]);
+ }, [selectedGroup, secretKey, hide, isPrivate]);
const loadMore = async () => {
try {
@@ -389,7 +394,7 @@ export const GroupAnnouncements = ({
setAnnouncements((prev) => [...prev, ...responseData]);
setIsLoading(false);
for (const data of responseData) {
- getAnnouncementData({ name: data.name, identifier: data.identifier });
+ getAnnouncementData({ name: data.name, identifier: data.identifier }, isPrivate);
}
} catch (error) {}
};
@@ -414,7 +419,7 @@ export const GroupAnnouncements = ({
getAnnouncementData({
name: data.name,
identifier: data.identifier,
- });
+ }, isPrivate);
} catch (error) {}
}
setAnnouncements(responseData);
@@ -429,7 +434,7 @@ export const GroupAnnouncements = ({
for (const data of newArray) {
try {
- getAnnouncementData({ name: data.name, identifier: data.identifier });
+ getAnnouncementData({ name: data.name, identifier: data.identifier }, isPrivate);
} catch (error) {}
}
setAnnouncements((prev) => [...newArray, ...prev]);
@@ -449,14 +454,14 @@ export const GroupAnnouncements = ({
}, [checkNewMessages]);
useEffect(() => {
- if (!secretKey || hide) return;
+ if ((!secretKey && isPrivate) || hide || isPrivate === null) return;
checkNewMessagesFunc();
return () => {
if (interval?.current) {
clearInterval(interval.current);
}
};
- }, [checkNewMessagesFunc, hide]);
+ }, [checkNewMessagesFunc, hide, isPrivate]);
const combinedListTempAndReal = useMemo(() => {
// Combine the two lists
@@ -498,11 +503,13 @@ export const GroupAnnouncements = ({
setSelectedAnnouncement={setSelectedAnnouncement}
encryptChatMessage={encryptChatMessage}
getSecretKey={getSecretKey}
+ isPrivate={isPrivate}
/>
);
}
+
return (
{
const { rootHeight } = useContext(MyContext);
const [isMoved, setIsMoved] = useState(false);
@@ -50,7 +51,7 @@ export const GroupForum = ({
left: hide && '-1000px'
}}
>
-
+
);
diff --git a/src/components/Chat/MessageDisplay.tsx b/src/components/Chat/MessageDisplay.tsx
index edda7d8..a686a00 100644
--- a/src/components/Chat/MessageDisplay.tsx
+++ b/src/components/Chat/MessageDisplay.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, useMemo } from 'react';
import DOMPurify from 'dompurify';
import './styles.css';
import { executeEvent } from '../../utils/events';
@@ -63,30 +63,34 @@ function processText(input) {
return wrapper.innerHTML;
}
-export const MessageDisplay = ({ htmlContent, isReply }) => {
- const linkify = (text) => {
- if (!text) return ""; // Return an empty string if text is null or undefined
-
- let textFormatted = text;
- const urlPattern = /(\bhttps?:\/\/[^\s<]+|\bwww\.[^\s<]+)/g;
- textFormatted = text.replace(urlPattern, (url) => {
- const href = url.startsWith('http') ? url : `https://${url}`;
- return `${DOMPurify.sanitize(url)}`;
- });
- return processText(textFormatted);
- };
-
+const linkify = (text) => {
+ if (!text) return ""; // Return an empty string if text is null or undefined
- const sanitizedContent = DOMPurify.sanitize(linkify(htmlContent), {
- ALLOWED_TAGS: [
- 'a', 'b', 'i', 'em', 'strong', 'p', 'br', 'div', 'span', 'img',
- 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'code', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td'
- ],
- ALLOWED_ATTR: [
- 'href', 'target', 'rel', 'class', 'src', 'alt', 'title',
- 'width', 'height', 'style', 'align', 'valign', 'colspan', 'rowspan', 'border', 'cellpadding', 'cellspacing', 'data-url'
- ],
- }).replace(/]*data-url="qortal:\/\/use-embed\/[^"]*"[^>]*>.*?<\/span>/g, '');;
+ let textFormatted = text;
+ const urlPattern = /(\bhttps?:\/\/[^\s<]+|\bwww\.[^\s<]+)/g;
+ textFormatted = text.replace(urlPattern, (url) => {
+ const href = url.startsWith('http') ? url : `https://${url}`;
+ return `${DOMPurify.sanitize(url)}`;
+ });
+ return processText(textFormatted);
+};
+
+
+export const MessageDisplay = ({ htmlContent, isReply }) => {
+
+
+ const sanitizedContent = useMemo(()=> {
+ return DOMPurify.sanitize(linkify(htmlContent), {
+ ALLOWED_TAGS: [
+ 'a', 'b', 'i', 'em', 'strong', 'p', 'br', 'div', 'span', 'img',
+ 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'code', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 's', 'hr'
+ ],
+ ALLOWED_ATTR: [
+ 'href', 'target', 'rel', 'class', 'src', 'alt', 'title',
+ 'width', 'height', 'style', 'align', 'valign', 'colspan', 'rowspan', 'border', 'cellpadding', 'cellspacing', 'data-url'
+ ],
+ }).replace(/]*data-url="qortal:\/\/use-embed\/[^"]*"[^>]*>.*?<\/span>/g, '');
+ }, [htmlContent])
const handleClick = async (e) => {
e.preventDefault();
@@ -97,6 +101,28 @@ export const MessageDisplay = ({ htmlContent, isReply }) => {
window.electronAPI.openExternal(href);
} else if (target.getAttribute('data-url')) {
const url = target.getAttribute('data-url');
+
+ let copyUrl = url
+
+ try {
+ copyUrl = copyUrl.replace(/^(qortal:\/\/)/, '')
+ if (copyUrl.startsWith('use-')) {
+ // Handle the new 'use' format
+ const parts = copyUrl.split('/')
+ const type = parts[0].split('-')[1] // e.g., 'group' from 'use-group'
+ parts.shift()
+ const action = parts.length > 0 ? parts[0].split('-')[1] : null // e.g., 'invite' from 'action-invite'
+ parts.shift()
+ const idPrefix = parts.length > 0 ? parts[0].split('-')[0] : null // e.g., 'groupid' from 'groupid-321'
+ const id = parts.length > 0 ? parts[0].split('-')[1] : null // e.g., '321' from 'groupid-321'
+ if(action === 'join'){
+ executeEvent("globalActionJoinGroup", { groupId: id});
+ return
+ }
+ }
+ } catch (error) {
+ //error
+ }
const res = extractComponents(url);
if (res) {
const { service, name, identifier, path } = res;
@@ -106,7 +132,7 @@ export const MessageDisplay = ({ htmlContent, isReply }) => {
}
};
- const embedLink = htmlContent.match(/qortal:\/\/use-embed\/[^\s<>]+/);
+ const embedLink = htmlContent?.match(/qortal:\/\/use-embed\/[^\s<>]+/);
let embedData = null;
diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx
index bd2d86c..5123ee2 100644
--- a/src/components/Chat/MessageItem.tsx
+++ b/src/components/Chat/MessageItem.tsx
@@ -1,13 +1,14 @@
import { Message } from "@chatscope/chat-ui-kit-react";
-import React, { useEffect, useState } from "react";
+import React, { useCallback, useContext, useEffect, useMemo, useState } from "react";
import { useInView } from "react-intersection-observer";
import { MessageDisplay } from "./MessageDisplay";
-import { Avatar, Box, Button, ButtonBase, List, ListItem, ListItemText, Popover, Typography } from "@mui/material";
+import { Avatar, Box, Button, ButtonBase, List, ListItem, ListItemText, Popover, Tooltip, Typography } from "@mui/material";
import { formatTimestamp } from "../../utils/time";
import { getBaseApi } from "../../background";
-import { getBaseApiReact } from "../../App";
+import { MyContext, getBaseApiReact } from "../../App";
import { generateHTML } from "@tiptap/react";
import Highlight from "@tiptap/extension-highlight";
+import Mention from "@tiptap/extension-mention";
import StarterKit from "@tiptap/starter-kit";
import Underline from "@tiptap/extension-underline";
import { executeEvent } from "../../utils/events";
@@ -17,8 +18,39 @@ import { Spacer } from "../../common/Spacer";
import { ReactionPicker } from "../ReactionPicker";
import KeyOffIcon from '@mui/icons-material/KeyOff';
import EditIcon from '@mui/icons-material/Edit';
+import TextStyle from '@tiptap/extension-text-style';
+import { addressInfoKeySelector } from "../../atoms/global";
+import { useRecoilValue } from "recoil";
+import level0Img from "../../assets/badges/level-0.png"
+import level1Img from "../../assets/badges/level-1.png"
+import level2Img from "../../assets/badges/level-2.png"
+import level3Img from "../../assets/badges/level-3.png"
+import level4Img from "../../assets/badges/level-4.png"
+import level5Img from "../../assets/badges/level-5.png"
+import level6Img from "../../assets/badges/level-6.png"
+import level7Img from "../../assets/badges/level-7.png"
+import level8Img from "../../assets/badges/level-8.png"
+import level9Img from "../../assets/badges/level-9.png"
+import level10Img from "../../assets/badges/level-10.png"
-export const MessageItem = ({
+const getBadgeImg = (level)=> {
+ switch(level?.toString()){
+
+ case '0': return level0Img
+ case '1': return level1Img
+ case '2': return level2Img
+ case '3': return level3Img
+ case '4': return level4Img
+ case '5': return level5Img
+ case '6': return level6Img
+ case '7': return level7Img
+ case '8': return level8Img
+ case '9': return level9Img
+ case '10': return level10Img
+ default: return level0Img
+ }
+}
+export const MessageItem = React.memo(({
message,
onSeen,
isLast,
@@ -33,34 +65,84 @@ export const MessageItem = ({
reactions,
isUpdating,
lastSignature,
- onEdit
+ onEdit,
+ isPrivate
}) => {
- const { ref, inView } = useInView({
- threshold: 0.7, // Fully visible
- triggerOnce: false, // Only trigger once when it becomes visible
- });
+const {getIndividualUserInfo} = useContext(MyContext)
const [anchorEl, setAnchorEl] = useState(null);
const [selectedReaction, setSelectedReaction] = useState(null);
+ const [userInfo, setUserInfo] = useState(null)
- useEffect(() => {
- if (inView && isLast && onSeen) {
- onSeen(message.id);
+useEffect(()=> {
+ const getInfo = async ()=> {
+ if(!message?.sender) return
+ try {
+ const res = await getIndividualUserInfo(message?.sender)
+ if(!res) return null
+ setUserInfo(res)
+ } catch (error) {
+ //
}
- }, [inView, message.id, isLast]);
+ }
+ getInfo()
+}, [message?.sender, getIndividualUserInfo])
+
+const htmlText = useMemo(()=> {
+
+ if(message?.messageText){
+ return generateHTML(message?.messageText, [
+ StarterKit,
+ Underline,
+ Highlight,
+ Mention,
+ TextStyle
+ ])
+ }
+
+}, [])
+
+
+
+const htmlReply = useMemo(()=> {
+
+ if(reply?.messageText){
+ return generateHTML(reply?.messageText, [
+ StarterKit,
+ Underline,
+ Highlight,
+ Mention,
+ TextStyle
+ ])
+ }
+
+}, [])
+
+const userAvatarUrl = useMemo(()=> {
+ return message?.senderName ? `${getBaseApiReact()}/arbitrary/THUMBNAIL/${
+ message?.senderName
+ }/qortal_avatar?async=true` : ''
+}, [])
+
+const onSeenFunc = useCallback(()=> {
+ onSeen(message.id);
+}, [message?.id])
return (
<>
- {message?.divide && (
+ {message?.divide && (
Unread messages below
)}
+
+
+
+
) : (
+
+
{message?.senderName?.charAt(0)}
+
+
+
+
+
+
+
+
)}
- {message?.sender === myAddress && !message?.isNotEncrypted && (
+ {message?.sender === myAddress && (!message?.isNotEncrypted || isPrivate === false) && (
{
onEdit(message);
@@ -201,11 +302,7 @@ export const MessageItem = ({
}}>Replied to {reply?.senderName || reply?.senderAddress}
{reply?.messageText && (
)}
{reply?.decryptedData?.type === "notification" ? (
@@ -217,15 +314,13 @@ export const MessageItem = ({
>
)}
- {message?.messageText && (
+ {htmlText && (
+ htmlContent={htmlText}
+ />
)}
+
+
{message?.decryptedData?.type === "notification" ? (
) : (
@@ -341,7 +436,7 @@ export const MessageItem = ({
alignItems: 'center',
gap: '15px'
}}>
- {message?.isNotEncrypted && (
+ {message?.isNotEncrypted && isPrivate && (
- {/* */}
- {/* {!message.unread && Seen} */}
+
+
>
);
-};
+});
export const ReplyPreview = ({message, isEdit})=> {
@@ -456,6 +542,8 @@ export const ReplyPreview = ({message, isEdit})=> {
StarterKit,
Underline,
Highlight,
+ Mention,
+ TextStyle
])}
/>
)}
@@ -468,4 +556,36 @@ export const ReplyPreview = ({message, isEdit})=> {
)
+}
+
+const MessageWragger = ({lastMessage, onSeen, isLast, children})=> {
+
+ if(lastMessage){
+ return (
+ {children}
+ )
+ }
+ return children
+}
+
+const WatchComponent = ({onSeen, isLast, children})=> {
+ const { ref, inView } = useInView({
+ threshold: 0.7, // Fully visible
+ triggerOnce: true, // Only trigger once when it becomes visible
+ });
+
+ useEffect(() => {
+ if (inView && isLast && onSeen) {
+ onSeen();
+ }
+ }, [inView, isLast, onSeen]);
+
+ return
+ {children}
+
+
}
\ No newline at end of file
diff --git a/src/components/Chat/TipTap.tsx b/src/components/Chat/TipTap.tsx
index 234d66e..929ab41 100644
--- a/src/components/Chat/TipTap.tsx
+++ b/src/components/Chat/TipTap.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useMemo, useRef, useState } from "react";
+import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { EditorProvider, useCurrentEditor, useEditor } from "@tiptap/react";
import StarterKit from "@tiptap/starter-kit";
import { Color } from "@tiptap/extension-color";
@@ -34,6 +34,9 @@ import ListItemButton from '@mui/material/ListItemButton';
import ListItemText from '@mui/material/ListItemText';
import { ReactRenderer } from '@tiptap/react'
import MentionList from './MentionList.jsx'
+import { useRecoilState } from "recoil";
+import { isDisabledEditorEnterAtom } from "../../atoms/global.js";
+import { Box, Checkbox, Typography } from "@mui/material";
function textMatcher(doc, from) {
const textBeforeCursor = doc.textBetween(0, from, ' ', ' ');
@@ -44,7 +47,7 @@ function textMatcher(doc, from) {
const query = match[0];
return { start, query };
}
-const MenuBar = ({ setEditorRef, isChat }) => {
+const MenuBar = ({ setEditorRef, isChat, isDisabledEditorEnter, setIsDisabledEditorEnter }) => {
const { editor } = useCurrentEditor();
const fileInputRef = useRef(null);
@@ -120,7 +123,9 @@ const MenuBar = ({ setEditorRef, isChat }) => {
return (
-
+
editor.chain().focus().toggleBold().run()}
disabled={!editor.can().chain().focus().toggleBold().run()}
@@ -244,6 +249,43 @@ const MenuBar = ({ setEditorRef, isChat }) => {
>
+ {isChat && (
+
{
+ setIsDisabledEditorEnter(!isDisabledEditorEnter)
+ }}
+ >
+
+
+ disable enter
+
+
+ )}
{!isChat && (
<>
{
+ const [isDisabledEditorEnter, setIsDisabledEditorEnter] = useRecoilState(isDisabledEditorEnterAtom)
const extensionsFiltered = isChat
? extensions.filter((item) => item?.name !== "image")
@@ -421,12 +464,24 @@ export default ({
]
}, [enableMentions])
+ const handleSetIsDisabledEditorEnter = useCallback((val)=> {
+ setIsDisabledEditorEnter(val)
+ localStorage.setItem('settings-disable-editor-enter', JSON.stringify(val));
+
+ }, [])
+
+
return (
-
+
+
)
}
extensions={[...extensionsFiltered, ...additionalExtensions
@@ -450,7 +505,7 @@ export default ({
}; max-height:calc(100svh - ${customEditorHeight || "140px"})`: `overflow: auto; max-height: 250px`,
},
handleKeyDown(view, event) {
- if (!disableEnter && event.key === "Enter") {
+ if (!disableEnter && !isDisabledEditorEnter && event.key === "Enter") {
if (event.shiftKey) {
view.dispatch(
view.state.tr.replaceSelectionWith(
diff --git a/src/components/Chat/styles.css b/src/components/Chat/styles.css
index 7f3f66e..3c7c570 100644
--- a/src/components/Chat/styles.css
+++ b/src/components/Chat/styles.css
@@ -93,7 +93,7 @@
.tiptap hr {
border: none;
border-top: 1px solid var(--gray-2);
- margin: 2rem 0;
+ margin: 1rem 0;
}
.ProseMirror:focus-visible {
@@ -103,6 +103,7 @@
.tiptap p {
font-size: 16px;
color: white; /* Ensure paragraph text color is white */
+ margin: 0px;
}
.tiptap p.is-editor-empty:first-child::before {
color: #adb5bd;
@@ -112,6 +113,11 @@
pointer-events: none;
}
+ .tiptap p:empty::before {
+ content: '';
+ display: inline-block;
+ }
+
.tiptap a {
color: cadetblue
}
@@ -125,7 +131,7 @@
font-size: 12px !important;
}
-.tiptap .mention {
+.tiptap [data-type="mention"] {
box-decoration-break: clone;
color: lightblue;
padding: 0.1rem 0.3rem;
diff --git a/src/components/ContextMenuPinnedApps.tsx b/src/components/ContextMenuPinnedApps.tsx
index be0ae46..bb64a4c 100644
--- a/src/components/ContextMenuPinnedApps.tsx
+++ b/src/components/ContextMenuPinnedApps.tsx
@@ -124,11 +124,19 @@ export const ContextMenuPinnedApps = ({ children, app, isMine }) => {