From 2dc09c988126911f2617f2ba96ce8d10df2d8c40 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 3 Jun 2025 15:29:02 +0530 Subject: [PATCH 01/17] Add auto-update feature for pgAdmin 4 desktop (macOS only). #5766 --- Makefile | 3 +- docs/en_US/desktop_deployment.rst | 137 + pkg/mac/README.md | 8 +- pkg/mac/build-functions.sh | 69 +- pkg/mac/build.sh | 42 +- runtime/package-lock.json | 2208 +++++++++++++++++ runtime/src/js/menu.js | 59 +- runtime/src/js/pgadmin.js | 187 +- runtime/src/js/pgadmin_preload.js | 5 + .../browser/static/js/UpdateCheckNotify.jsx | 119 + web/pgadmin/browser/static/js/browser.js | 35 +- web/pgadmin/misc/__init__.py | 82 +- web/pgadmin/settings/__init__.py | 2 +- web/pgadmin/static/js/BrowserComponent.jsx | 32 +- web/pgadmin/static/js/Theme/light.js | 2 + .../static/js/components/FormComponents.jsx | 1 + 16 files changed, 2920 insertions(+), 71 deletions(-) create mode 100644 runtime/package-lock.json create mode 100644 web/pgadmin/browser/static/js/UpdateCheckNotify.jsx diff --git a/Makefile b/Makefile index 59a88596b0e..a85e8b85205 100644 --- a/Makefile +++ b/Makefile @@ -20,8 +20,9 @@ APP_REVISION := $(shell grep ^APP_REVISION web/version.py | awk -F"=" '{print $$ # Include only platform-independent builds in all all: docs pip src +# Add BUILD_OPTS variable to pass arguments appbundle: - ./pkg/mac/build.sh + ./pkg/mac/build.sh $(BUILD_OPTS) install-node: cd web && yarn install diff --git a/docs/en_US/desktop_deployment.rst b/docs/en_US/desktop_deployment.rst index cdc11678cff..0e4b64939a7 100644 --- a/docs/en_US/desktop_deployment.rst +++ b/docs/en_US/desktop_deployment.rst @@ -128,3 +128,140 @@ The configuration settings are stored in *runtime_config.json* file, which will be available on Unix systems (~/.local/share/pgadmin/), on Mac OS X (~/Library/Preferences/pgadmin), and on Windows (%APPDATA%/pgadmin). + + +Auto-Update Feature for pgAdmin 4 Desktop +***************************************** + +pgAdmin 4's desktop application includes an automated update system built using Electron's ``autoUpdater`` module. This feature enables users to receive and install updates seamlessly, ensuring they always have access to the latest features and security fixes. + +Supported Platforms +=================== + +- **macOS:** Fully supported with automatic updates enabled by default +- **Windows:** Not supported +- **Linux:** Not supported + +Update Process Overview +======================= + +1. **Check for Updates:** + + - Automatic check on application startup + - Manual check available via pgAdmin 4 menu > Check for Updates + - Uses Electron's ``autoUpdater`` API to query update server + +2. **Download Process:** + + - Updates download automatically when detected + - Progress shown via notifications + - Background download prevents interruption of work + +3. **Installation Flow:** + + - User prompted to restart when update ready + - Update applied during application restart + +Technical Architecture +====================== + +1. **Main Process (runtime/src/js/pgadmin.js)** + + Handles core update functionality: + + .. code-block:: javascript + + autoUpdater.on('checking-for-update', () => { + misc.writeServerLog('checking for updates...'); + }); + + autoUpdater.on('update-available', () => { + setConfigAndRefreshMenu('update-available'); + misc.writeServerLog('Update downloading...'); + pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_downloading: true}); + }); + +2. **Renderer Process (web/pgadmin/static/js/BrowserComponent.jsx)** + + Manages user interface updates: + + .. code-block:: javascript + + if (window.electronUI?.appUpdateNotifier) { + window.electronUI.appUpdateNotifier((data) => { + if (data.update_downloading) { + appUpdateNotifier('Update downloading...', 'info', 10000); + } else if (data.update_downloaded) { + appUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', null, + 'Update downloaded', installUpdate, 'update_downloaded'); + } + }); + } + +3. **Update Server Communication** + + - Configures update feed URL based on version information + - Handles server response validation + - Manages error conditions + +User Interface Components +========================= + +1. **Notification Types:** + + - Update available + - Download progress + - Update ready to install + - Error notifications + +2. **Menu Integration:** + + - Check for Updates option in pgAdmin 4 menu + - Update status indicators + - Restart to Update option when available + +Error Handling +============== + +The system includes comprehensive error handling: + +1. **Network Errors:** + + - Connection timeouts + - Download failures + - Server unavailability + +2. **Installation Errors:** + + - Insufficient disk space + - Permission issues + - Corrupted downloads + +3. **Recovery Mechanisms:** + + - Fallback to manual update + - Error reporting to logs + +Security Considerations +======================= + +The update system implements several security measures: + +1. **Secure Communication:** + + - HTTPS for update checks + - Encrypted download process + - Protected update metadata + +Platform-Specific Notes +======================= + +1. **macOS:** + + - Uses native update mechanisms + - Requires signed packages + +References +========== + +- `Electron autoUpdater API Documentation `_ \ No newline at end of file diff --git a/pkg/mac/README.md b/pkg/mac/README.md index 97781d287fa..d95631abdc9 100644 --- a/pkg/mac/README.md +++ b/pkg/mac/README.md @@ -31,11 +31,15 @@ Either build the sources or get them from macports or similar: *notarization.conf* and set the values accordingly. Note that notarization will fail if the code isn't signed. -4. To build, go to pgAdmin4 source root directory and execute: +4. To build only DMG file, go to pgAdmin4 source root directory and execute: make appbundle + + To build both DMG and ZIP files, go to pgAdmin4 source root directory and execute: + + make appbundle BUILD_OPTS="--zip" This will create the python virtual environment and install all the required python modules mentioned in the requirements file using pip, build the - runtime code and finally create the app bundle and the DMG in *./dist* + runtime code and finally create the app bundle and the DMG and/or ZIP in *./dist* directory. diff --git a/pkg/mac/build-functions.sh b/pkg/mac/build-functions.sh index 8c6c8d6423b..72e21dc3866 100644 --- a/pkg/mac/build-functions.sh +++ b/pkg/mac/build-functions.sh @@ -385,6 +385,24 @@ _codesign_bundle() { -i org.pgadmin.pgadmin4 \ --sign "${DEVELOPER_ID}" \ "${BUNDLE_DIR}" + + echo "Verifying the signature from bundle dir..." + codesign --verify --deep --verbose=4 "${BUNDLE_DIR}" +} + +_create_zip() { + ZIP_NAME="${DMG_NAME%.dmg}.zip" + echo "ZIP_NAME: ${ZIP_NAME}" + + echo "Compressing pgAdmin 4.app in bundle dir into ${ZIP_NAME}..." + ditto -c -k --sequesterRsrc --keepParent "${BUNDLE_DIR}" "${ZIP_NAME}" + + if [ $? -ne 0 ]; then + echo "Failed to create the ZIP file. Exiting." + exit 1 + fi + + echo "Successfully created ZIP file: ${ZIP_NAME}" } _create_dmg() { @@ -426,8 +444,57 @@ _codesign_dmg() { "${DMG_NAME}" } +_notarize_zip() { + if [ "${CODESIGN}" -eq 0 ]; then + return + fi + + echo "Uploading ZIP for Notarization ..." + STATUS=$(xcrun notarytool submit "${ZIP_NAME}" \ + --team-id "${DEVELOPER_TEAM_ID}" \ + --apple-id "${DEVELOPER_USER}" \ + --password "${DEVELOPER_ASP}" 2>&1) + + echo "${STATUS}" + + # Get the submission ID + SUBMISSION_ID=$(echo "${STATUS}" | awk -F ': ' '/id:/ { print $2; exit; }') + echo "Notarization submission ID: ${SUBMISSION_ID}" + + echo "Waiting for Notarization to be completed ..." + xcrun notarytool wait "${SUBMISSION_ID}" \ + --team-id "${DEVELOPER_TEAM_ID}" \ + --apple-id "${DEVELOPER_USER}" \ + --password "${DEVELOPER_ASP}" + + # Print status information + REQUEST_STATUS=$(xcrun notarytool info "${SUBMISSION_ID}" \ + --team-id "${DEVELOPER_TEAM_ID}" \ + --apple-id "${DEVELOPER_USER}" \ + --password "${DEVELOPER_ASP}" 2>&1 | \ + awk -F ': ' '/status:/ { print $2; }') + + if [[ "${REQUEST_STATUS}" != "Accepted" ]]; then + echo "Notarization failed." + exit 1 + fi + + # Staple the notarization + echo "Stapling the notarization to the pgAdmin 4 app..." + if [[ "${ZIP_NAME##*.}" == "zip" ]]; then + xcrun stapler staple ${BUNDLE_DIR} + ditto -c -k --keepParent ${BUNDLE_DIR} ${ZIP_NAME} + fi + + if [ $? != 0 ]; then + echo "ERROR: could not staple ${ZIP_NAME}" + exit 1 + fi + + echo "Notarization completed successfully." +} -_notarize_pkg() { +_notarize_dmg() { if [ "${CODESIGN}" -eq 0 ]; then return fi diff --git a/pkg/mac/build.sh b/pkg/mac/build.sh index 5f29636a497..45b483890a1 100755 --- a/pkg/mac/build.sh +++ b/pkg/mac/build.sh @@ -57,6 +57,32 @@ if [ "${PGADMIN_PYTHON_VERSION}" == "" ]; then export PGADMIN_PYTHON_VERSION=3.13.1 fi +# Initialize variables +CREATE_ZIP=0 +CREATE_DMG=1 + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + --zip) + CREATE_ZIP=1 + shift + ;; + --help) + echo "Usage: $0 [OPTIONS]" + echo "Options:" + echo " --zip Create both ZIP and DMG files" + echo " --help Display this help message" + exit 0 + ;; + *) + echo "Unknown option: $1" + echo "Use --help for usage information" + exit 1 + ;; + esac +done + # shellcheck disable=SC1091 source "${SCRIPT_DIR}/build-functions.sh" @@ -69,6 +95,16 @@ _complete_bundle _generate_sbom _codesign_binaries _codesign_bundle -_create_dmg -_codesign_dmg -_notarize_pkg + +# Handle ZIP creation if requested +if [ "${CREATE_ZIP}" -eq 1 ]; then + _create_zip + _notarize_zip +fi + +# Handle DMG creation if not disabled +if [ "${CREATE_DMG}" -eq 1 ]; then + _create_dmg + _codesign_dmg + _notarize_dmg +fi diff --git a/runtime/package-lock.json b/runtime/package-lock.json new file mode 100644 index 00000000000..ce7c9131d68 --- /dev/null +++ b/runtime/package-lock.json @@ -0,0 +1,2208 @@ +{ + "name": "pgadmin4", + "version": "8.14", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pgadmin4", + "version": "8.14", + "license": "PostgreSQL", + "dependencies": { + "axios": "^1.7.9", + "electron-context-menu": "^4.0.4", + "electron-store": "^10.0.0" + }, + "devDependencies": { + "electron": "latest", + "eslint": "^9.17.0" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.10.1", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/atomically": { + "version": "2.0.3", + "dependencies": { + "stubborn-fs": "^1.2.5", + "when-exit": "^2.1.1" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/boolean": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/conf": { + "version": "13.0.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.16.0", + "ajv-formats": "^3.0.1", + "atomically": "^2.0.3", + "debounce-fn": "^6.0.0", + "dot-prop": "^9.0.0", + "env-paths": "^3.0.0", + "json-schema-typed": "^8.0.1", + "semver": "^7.6.2", + "uint8array-extras": "^1.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debounce-fn": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dot-prop": { + "version": "9.0.0", + "license": "MIT", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron": { + "version": "33.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-33.2.1.tgz", + "integrity": "sha512-SG/nmSsK9Qg1p6wAW+ZfqU+AV8cmXMTIklUL18NnOKfZLlum4ZsDoVdmmmlL39ZmeCaq27dr7CgslRPahfoVJg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^20.9.0", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-context-menu": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "electron-dl": "^4.0.0", + "electron-is-dev": "^3.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-dl": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "ext-name": "^5.0.0", + "pupa": "^3.1.0", + "unused-filename": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-is-dev": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-store": { + "version": "10.0.0", + "license": "MIT", + "dependencies": { + "conf": "^13.0.0", + "type-fest": "^4.20.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "20.17.9", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/electron/node_modules/undici-types": { + "version": "6.19.8", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/escape-goat": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/espree": { + "version": "10.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-list": { + "version": "2.2.2", + "license": "MIT", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-list/node_modules/mime-db": { + "version": "1.53.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/string-width": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stubborn-fs": { + "version": "1.2.5" + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.30.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unused-filename": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unused-filename/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/when-exit": { + "version": "2.1.3" + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/runtime/src/js/menu.js b/runtime/src/js/menu.js index df9f89876dd..1d12c023c40 100644 --- a/runtime/src/js/menu.js +++ b/runtime/src/js/menu.js @@ -12,6 +12,7 @@ import { app, Menu, ipcMain, BrowserWindow, globalShortcut } from 'electron'; const isMac = process.platform == 'darwin'; const isLinux = process.platform == 'linux'; let mainMenu; +let cachedMenus; // Use to convert shortcut to accelerator for electron. function convertShortcutToAccelerator({ control, meta, shift, alt, key } = {}) { @@ -29,7 +30,7 @@ function convertShortcutToAccelerator({ control, meta, shift, alt, key } = {}) { return [...mods, k].join('+'); } -function buildMenu(pgadminMenus, pgAdminMainScreen, callbacks) { +function buildMenu(pgadminMenus, pgAdminMainScreen, configStore, callbacks) { const template = []; // bind all menus click event. @@ -73,14 +74,43 @@ function buildMenu(pgadminMenus, pgAdminMainScreen, callbacks) { let menuFile = pgadminMenus.shift(); if (isMac) { - // Remove About pgAdmin 4 from help menu and add it to the top of menuFile submenu. + if (configStore.get('update_downloaded')) { + //Add Restart to update menu item in the app menu if update is downloaded. + menuFile.submenu.unshift({ + name:'mnu_restart_to_update', + id: 'mnu_restart_to_update', + label: 'Restart to Update...', + enabled: true, + priority: 998, + click: callbacks['restart_to_update'], + }); + } else { + // Add Check for Updates menu item in the app menu. + menuFile.submenu.unshift({ + name:'mnu_check_updates', + id: 'mnu_check_updates', + label: 'Check for Updates...', + enabled: true, + priority: 998, + click: callbacks['check_for_updates'], + }); + } + + // Disable the Check for updates menu item if update is downloading. + if(configStore.get('update_downloading')) { + menuFile.submenu.forEach((item)=> { + if (item.id == 'mnu_check_updates') item.enabled=false; + }); + } + + // Remove About pgAdmin 4 from help menu and add it to the top of menuFile submenu. const helpMenu = pgadminMenus.find((menu) => menu.name == 'help'); if (helpMenu) { const aboutItem = helpMenu.submenu.find((item) => item.name === 'mnu_about'); if (aboutItem) { helpMenu.submenu = helpMenu.submenu.filter((item) => item.name !== 'mnu_about'); menuFile.submenu.unshift(aboutItem); - menuFile.submenu.splice(1, 0, { type: 'separator' }); + menuFile.submenu.splice(2, 0, { type: 'separator' }); } } } @@ -136,17 +166,26 @@ function buildMenu(pgadminMenus, pgAdminMainScreen, callbacks) { return Menu.buildFromTemplate(template); } -export function setupMenu(pgAdminMainScreen, callbacks={}) { +function buildAndSetMenus(menus, pgAdminMainScreen, configStore, callbacks={}) { + mainMenu = buildMenu(menus, pgAdminMainScreen, configStore, callbacks); + if(isMac) { + Menu.setApplicationMenu(mainMenu); + } else { + pgAdminMainScreen.setMenu(mainMenu); + } +} + +export function refreshMenus(pgAdminMainScreen, configStore, callbacks={}) { + buildAndSetMenus(cachedMenus, pgAdminMainScreen, configStore, callbacks); +} + +export function setupMenu(pgAdminMainScreen, configStore, callbacks={}) { ipcMain.on('setMenus', (event, menus)=>{ - mainMenu = buildMenu(menus, pgAdminMainScreen, callbacks); // this is important because the shortcuts are registered multiple times // when the menu is set multiple times using accelerators. globalShortcut.unregisterAll(); - if(isMac) { - Menu.setApplicationMenu(mainMenu); - } else { - pgAdminMainScreen.setMenu(mainMenu); - } + cachedMenus = menus; //It will be used later for refreshing the menus + buildAndSetMenus(menus, pgAdminMainScreen, configStore, callbacks); ipcMain.on('enable-disable-menu-items', (event, menu, menuItem)=>{ const menuItemObj = mainMenu.getMenuItemById(menuItem?.id); diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index c1b855d6168..f0a107175b2 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -6,7 +6,7 @@ // This software is released under the PostgreSQL Licence // ////////////////////////////////////////////////////////////// -import { app, BrowserWindow, dialog, ipcMain, Menu, shell, screen } from 'electron'; +import { app, BrowserWindow, dialog, ipcMain, Menu, shell, screen, autoUpdater } from 'electron'; import axios from 'axios'; import Store from 'electron-store'; import fs from 'fs'; @@ -14,7 +14,7 @@ import path from 'path'; import * as misc from './misc.js'; import { spawn } from 'child_process'; import { fileURLToPath } from 'url'; -import { setupMenu } from './menu.js'; +import { setupMenu, refreshMenus } from './menu.js'; import contextMenu from 'electron-context-menu'; import { setupDownloader } from './downloader.js'; @@ -35,6 +35,8 @@ let configureWindow = null, viewLogWindow = null; let serverPort = 5050; +let UUID = crypto.randomUUID(); + let appStartTime = (new Date()).getTime(); const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -45,6 +47,40 @@ process.env['ELECTRON_ENABLE_SECURITY_WARNINGS'] = false; // Paths to the rest of the app let [pythonPath, pgadminFile] = misc.getAppPaths(__dirname); +const menuCallbacks = { + 'check_for_updates': ()=>{ + pgAdminMainScreen.webContents.send('appUpdateNotifier', {check_version_update: true}); + }, + 'restart_to_update': ()=>{ + forceQuitAndInstallUpdate(); + }, + 'view_logs': ()=>{ + if(viewLogWindow === null || viewLogWindow?.isDestroyed()) { + viewLogWindow = new BrowserWindow({ + show: false, + width: 800, + height: 460, + position: 'center', + resizable: false, + parent: pgAdminMainScreen, + icon: '../../assets/pgAdmin4.png', + webPreferences: { + preload: path.join(__dirname, 'other_preload.js'), + }, + }); + viewLogWindow.loadFile('./src/html/view_log.html'); + viewLogWindow.once('ready-to-show', ()=>{ + viewLogWindow.show(); + }); + } else { + viewLogWindow.hide(); + viewLogWindow.show(); + } + }, + 'configure': openConfigure, + 'reloadApp': reloadApp, +}; + // Do not allow a second instance of pgAdmin to run. const gotTheLock = app.requestSingleInstanceLock(); if (!gotTheLock) { @@ -153,6 +189,39 @@ function reloadApp() { currWin.webContents.reload(); } +// This function stores the flags in configStore that are needed +// for auto-update and refreshes menu +function setConfigAndRefreshMenu(event) { + if (event == 'update-available') { + configStore.set('update_downloading', true); + refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); + } else if (event == 'update-not-available') { + configStore.set('update_downloading', false); + refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); + } else if (event == 'update-downloaded') { + configStore.set('update_downloading', false); + configStore.set('update_downloaded', true); + refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); + } else if (event == 'error-close') { + configStore.set('update_downloading', false); + configStore.set('update_downloaded', false); + refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); + } +} + +// This function will force quit and install update and restart the app +function forceQuitAndInstallUpdate() { + // Disable beforeunload handlers + const preventUnload = (event) => { + event.preventDefault(); + pgAdminMainScreen.webContents.off('will-prevent-unload', preventUnload); + }; + pgAdminMainScreen.webContents.on('will-prevent-unload', preventUnload); + // Set flag to show notification after restart + configStore.set('update_installed', true); + autoUpdater.quitAndInstall(); +} + // This functions is used to start the pgAdmin4 server by spawning a // separate process. function startDesktopMode() { @@ -162,7 +231,6 @@ function startDesktopMode() { return; let pingIntervalID; - let UUID = crypto.randomUUID(); // Set the environment variables so that pgAdmin 4 server // starts listening on the appropriate port. process.env.PGADMIN_INT_PORT = serverPort; @@ -307,36 +375,10 @@ function launchPgAdminWindow() { splashWindow.close(); pgAdminMainScreen.webContents.session.clearCache(); - setupMenu(pgAdminMainScreen, { - 'view_logs': ()=>{ - if(viewLogWindow === null || viewLogWindow?.isDestroyed()) { - viewLogWindow = new BrowserWindow({ - show: false, - width: 800, - height: 460, - position: 'center', - resizable: false, - parent: pgAdminMainScreen, - icon: '../../assets/pgAdmin4.png', - webPreferences: { - preload: path.join(__dirname, 'other_preload.js'), - }, - }); - viewLogWindow.loadFile('./src/html/view_log.html'); - viewLogWindow.once('ready-to-show', ()=>{ - viewLogWindow.show(); - }); - } else { - viewLogWindow.hide(); - viewLogWindow.show(); - } - }, - 'configure': openConfigure, - 'reloadApp': reloadApp, - }); - - setupDownloader(); - + setupMenu(pgAdminMainScreen, configStore, menuCallbacks); + + setupDownloader() + pgAdminMainScreen.loadURL(startPageUrl); const bounds = configStore.get('bounds'); @@ -382,13 +424,34 @@ function launchPgAdminWindow() { pgAdminMainScreen.on('close', () => { configStore.set('bounds', pgAdminMainScreen.getBounds()); + setConfigAndRefreshMenu('error-close'); pgAdminMainScreen.removeAllListeners('close'); pgAdminMainScreen.close(); }); + + // Notify if update was installed (fix: always check after main window is ready) + notifyUpdateInstalled(); } let splashWindow; +// Helper to notify update installed after restart +function notifyUpdateInstalled() { + if (configStore.get('update_installed')) { + // Reset the flag + configStore.set('update_installed', false); + // Notify renderer + if (pgAdminMainScreen) { + pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_installed: true}); + } else { + // If main screen not ready, wait and send after it's created + app.once('browser-window-created', (event, window) => { + window.webContents.send('appUpdateNotifier', {update_installed: true}); + }); + } + } +} + // setup preload events. ipcMain.handle('showOpenDialog', (e, options) => dialog.showOpenDialog(BrowserWindow.fromWebContents(e.sender), options)); ipcMain.handle('showSaveDialog', (e, options) => dialog.showSaveDialog(BrowserWindow.fromWebContents(e.sender), options)); @@ -406,7 +469,7 @@ ipcMain.on('restartApp', ()=>{ app.relaunch(); app.exit(0); }); -ipcMain.on('log', (_e, text) => ()=>{ +ipcMain.on('log', (text) => { misc.writeServerLog(text); }); ipcMain.on('focus', (e) => { @@ -428,6 +491,62 @@ ipcMain.handle('checkPortAvailable', async (_e, fixedPort)=>{ }); ipcMain.handle('openConfigure', openConfigure); +// Register autoUpdater event listeners ONCE +// For now only macOS is supported for electron auto-update +if (process.platform === 'darwin') { + autoUpdater.on('checking-for-update', () => { + misc.writeServerLog('[Auto-Updater]: Checking for update...'); + }); + + autoUpdater.on('update-available', () => { + setConfigAndRefreshMenu('update-available'); + misc.writeServerLog('[Auto-Updater]: Update downloading...'); + pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_downloading: true}); + }); + + autoUpdater.on('update-not-available', () => { + setConfigAndRefreshMenu('update-not-available'); + misc.writeServerLog('[Auto-Updater]: No update available...'); + pgAdminMainScreen.webContents.send('appUpdateNotifier', {no_update_available: true}); + }); + + autoUpdater.on('update-downloaded', () => { + setConfigAndRefreshMenu('update-downloaded'); + misc.writeServerLog('[Auto-Updater]: Update downloaded...'); + pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_downloaded: true}); + }); + + autoUpdater.on('error', (message) => { + setConfigAndRefreshMenu('error-close'); + misc.writeServerLog(`[Auto-Updater]: ${message}`); + pgAdminMainScreen.webContents.send('appUpdateNotifier', {error: true, errMsg: message}); + }); + + ipcMain.handle('sendDataForAppUpdate', (_, data) => { + if (data.check_for_updates) { + const ftpUrl = encodeURIComponent(`${data.auto_update_url}/pgadmin4-${data.upgrade_version}-${process.arch}.zip`); + let serverUrl = `http://127.0.0.1:${serverPort}/misc/auto_update/${data.current_version_int}/${data.upgrade_version}/${data.upgrade_version_int}/${data.product_name}/${ftpUrl}/?key=${UUID}`; + + try { + autoUpdater.setFeedURL({ url: serverUrl }); + misc.writeServerLog('[Auto-Updater]: Initiating update check...'); + autoUpdater.checkForUpdates(); + } catch (err) { + misc.writeServerLog('[Auto-Updater]: Error setting autoUpdater feed URL: ' + err.message); + if (pgAdminMainScreen) { + pgAdminMainScreen.webContents.send('appUpdateNotifier', {error: true, errMsg: 'Failed to check for updates. Please try again later.'}); + } + return; + } + } + + if (data.install_update_now) { + /* Needed for force quit and install update and restart app*/ + forceQuitAndInstallUpdate(); + } + }); +} + app.whenReady().then(() => { splashWindow = new BrowserWindow({ transparent: true, diff --git a/runtime/src/js/pgadmin_preload.js b/runtime/src/js/pgadmin_preload.js index 2e3575dc947..5be1cdb8273 100644 --- a/runtime/src/js/pgadmin_preload.js +++ b/runtime/src/js/pgadmin_preload.js @@ -32,4 +32,9 @@ contextBridge.exposeInMainWorld('electronUI', { downloadStreamSaveEnd: (...args) => ipcRenderer.send('download-stream-save-end', ...args), downloadBase64UrlData: (...args) => ipcRenderer.invoke('download-base64-url-data', ...args), downloadTextData: (...args) => ipcRenderer.invoke('download-text-data', ...args), + sendDataForAppUpdate: (data) => ipcRenderer.invoke('sendDataForAppUpdate', data), + appUpdateNotifier: (callback) => { + ipcRenderer.removeAllListeners('appUpdateNotifier'); // Clean up previous listeners + ipcRenderer.on('appUpdateNotifier', (_, data) => callback(data)); + }, }); \ No newline at end of file diff --git a/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx b/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx new file mode 100644 index 00000000000..dcfec326570 --- /dev/null +++ b/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx @@ -0,0 +1,119 @@ +import { Box } from '@mui/material'; +import { styled } from '@mui/material/styles'; +import React from 'react'; +import CloseIcon from '@mui/icons-material/CloseRounded'; +import { DefaultButton, PgIconButton } from '../../../static/js/components/Buttons'; +import PropTypes from 'prop-types'; +import pgAdmin from 'sources/pgadmin'; + +const StyledBox = styled(Box)(({theme}) => ({ + borderRadius: theme.shape.borderRadius, + padding: '0.25rem 1rem 1rem', + minWidth: '325px', + maxWidth: '400px', + ...theme.mixins.panelBorder.all, + '&.UpdateCheckNotify-containerWarning': { + borderColor: theme.palette.warning.main, + backgroundColor: theme.palette.warning.light, + }, + '& .UpdateCheckNotify-containerHeader': { + height: '32px', + display: 'flex', + justifyContent: 'space-between', + fontWeight: 'bold', + alignItems: 'center', + borderTopLeftRadius: 'inherit', + borderTopRightRadius: 'inherit', + '& .UpdateCheckNotify-iconWarning': { + color: theme.palette.warning.main, + }, + }, + '&.UpdateCheckNotify-containerBody': { + marginTop: '1rem', + overflowWrap: 'break-word', + }, +})); + +const activeWarningKeys = new Set(); + +function UpdateWarningNotifier({desc, title, onClose, onClick, status, uniqueKey}) { + const handleClose = () => { + if (onClose) onClose(); + if (uniqueKey) { + activeWarningKeys.delete(uniqueKey); + } + }; + return ( + + + {title} + } onClick={handleClose} title={'Close'} className={'UpdateCheckNotify-iconWarning'} /> + + + {desc && {desc}} + + {onClick && + { + onClick(); + handleClose(); + }}>{status == 'download_update' ? 'Download Update' : 'Install and Restart'} + } + {status == 'update_downloaded' && + { + handleClose(); + }}>Install Later + } + + + + ); +} +UpdateWarningNotifier.propTypes = { + desc: PropTypes.string, + title: PropTypes.string, + onClose: PropTypes.func, + onClick: PropTypes.func, + status: PropTypes.string, + uniqueKey: PropTypes.string, +}; + +export function appUpdateNotifier(desc, type, onClick, hideDuration=null, title='', status='download_update') { + const uniqueKey = `${title}::${desc}`; + + // Check if this warning is already active except error type + if (activeWarningKeys.has(uniqueKey) && type !== 'error') { + // Already showing, do not show again + return; + } + + // Mark this warning as active + activeWarningKeys.add(uniqueKey); + + if (type == 'warning') { + pgAdmin.Browser.notifier.notify( + { + // Remove from active keys when closed + activeWarningKeys.delete(uniqueKey); + }} + />, null + ); + } else if(type == 'success') { + pgAdmin.Browser.notifier.success(desc, hideDuration); + } else if(type == 'info') { + pgAdmin.Browser.notifier.info(desc, hideDuration); + } else if(type == 'error') { + console.warn('desc',desc); + pgAdmin.Browser.notifier.error(desc, hideDuration); + } + + // Remove from active keys for valid hideDuration passed in args + setTimeout(()=>{ + hideDuration && activeWarningKeys.delete(uniqueKey); + }); +} diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 3510524a132..66ee711bc53 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -15,6 +15,7 @@ import { send_heartbeat, stop_heartbeat } from './heartbeat'; import getApiInstance from '../../../static/js/api_instance'; import usePreferences, { setupPreferenceBroadcast } from '../../../preferences/static/js/store'; import checkNodeVisibility from '../../../static/js/check_node_visibility'; +import {appUpdateNotifier} from './UpdateCheckNotify'; define('pgadmin.browser', [ 'sources/gettext', 'sources/url_for', 'sources/pgadmin', @@ -272,12 +273,29 @@ define('pgadmin.browser', [ checkMasterPassword(data, self.masterpass_callback_queue, cancel_callback); }, - check_version_update: function() { + check_version_update: async function(trigger_update_check=false) { getApiInstance().get( - url_for('misc.upgrade_check') + url_for('misc.upgrade_check') + '?trigger_update_check=' + trigger_update_check ).then((res)=> { const data = res.data.data; - if(data.outdated) { + if (pgAdmin.server_mode == 'False' && (data.check_for_auto_updates && data.auto_update_url!=='')) { + // This is for desktop installers whose auto_update_url is mentioned in https://www.pgadmin.org/versions.json + const message = `${gettext('You are currently running version %s of %s, however the current version is %s.', data.current_version, data.product_name, data.upgrade_version)}`; + function downloadUpdate() { + window.electronUI?.sendDataForAppUpdate({ + 'check_for_updates': data.check_for_auto_updates, + 'current_version':data.current_version, + 'upgrade_version': data.upgrade_version, + 'current_version_int':data.current_version_int, + 'upgrade_version_int': data.upgrade_version_int, + 'auto_update_url': data.auto_update_url, + 'product_name': data.product_name, + 'platform':data.platform, + }); + } + appUpdateNotifier(message, 'warning', downloadUpdate, null, 'Update available', 'download_update'); + } else if(data.outdated) { + //This is for server mode or auto-update not supported desktop installer or not mentioned auto_update_url pgAdmin.Browser.notifier.warning( ` ${gettext('You are currently running version %s of %s,
however the current version is %s.', data.current_version, data.product_name, data.upgrade_version)} @@ -287,9 +305,14 @@ define('pgadmin.browser', [ null ); } - - }).catch(function() { - // Suppress any errors + // If the user manually triggered a check for updates (trigger_update_check is true) + // and no update is available (data.outdated is false), show an info notification. + if (!data.outdated && trigger_update_check){ + appUpdateNotifier('No update available.....', 'info', null, 10000); + } + }).catch((error)=>{ + console.error('Error during version check', error); + pgAdmin.Browser.notifier.error(gettext(`${error.response?.data?.errormsg || error?.message}`)); }); }, diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index eda2a380ce2..1de47f4dd20 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -21,7 +21,7 @@ from pgadmin.utils.session import cleanup_session_files from pgadmin.misc.themes import get_all_themes from pgadmin.utils.ajax import precondition_required, make_json_response, \ - internal_server_error + internal_server_error, make_response from pgadmin.utils.heartbeat import log_server_heartbeat, \ get_server_heartbeat, stop_server_heartbeat import config @@ -32,6 +32,7 @@ import sys import ssl from urllib.request import urlopen +from urllib.parse import unquote from pgadmin.settings import get_setting, store_setting MODULE_NAME = 'misc' @@ -171,7 +172,7 @@ def get_exposed_url_endpoints(self): return ['misc.ping', 'misc.index', 'misc.cleanup', 'misc.validate_binary_path', 'misc.log_heartbeat', 'misc.stop_heartbeat', 'misc.get_heartbeat', - 'misc.upgrade_check'] + 'misc.upgrade_check', 'misc.auto_update'] def register(self, app, options): """ @@ -343,15 +344,21 @@ def validate_binary_path(): methods=['GET']) @pga_login_required def upgrade_check(): + trigger_update_check = (request.args.get('trigger_update_check', 'false') + .lower() == 'true') # Get the current version info from the website, and flash a message if # the user is out of date, and the check is enabled. + global platform ret = { "outdated": False, } if config.UPGRADE_CHECK_ENABLED: last_check = get_setting('LastUpdateCheck', default='0') today = time.strftime('%Y%m%d') - if int(last_check) < int(today): + # Check for updates if either: + # - The last check was before today (daily check), or + # - The user manually triggered an update check + if int(last_check) < int(today) or trigger_update_check: data = None url = '%s?version=%s' % ( config.UPGRADE_CHECK_URL, config.APP_VERSION) @@ -387,15 +394,66 @@ def upgrade_check(): if data is not None and \ data[config.UPGRADE_CHECK_KEY]['version_int'] > \ config.APP_VERSION_INT: - ret = { - "outdated": True, - "current_version": config.APP_VERSION, - "upgrade_version": data[config.UPGRADE_CHECK_KEY][ - 'version'], - "product_name": config.APP_NAME, - "download_url": data[config.UPGRADE_CHECK_KEY][ - 'download_url'] - } + if sys.platform == 'darwin': + platform = 'macos' + elif sys.platform == 'win32': + platform = 'windows' + if not config.SERVER_MODE: + ret = { + "outdated": True, + "check_for_auto_updates": + data[config.UPGRADE_CHECK_KEY] + .get('auto_update_url') is not None, + "auto_update_url": data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform] + if data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'] is not None else '', + "platform":platform, + "installer_type": config.UPGRADE_CHECK_KEY, + "current_version": config.APP_VERSION, + "upgrade_version": data[config.UPGRADE_CHECK_KEY][ + 'version'], + "current_version_int": config.APP_VERSION_INT, + "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ + 'version_int'], + "product_name": config.APP_NAME, + "download_url": data[config.UPGRADE_CHECK_KEY][ + 'download_url'] + } + else: + ret = { + "outdated": True, + "current_version": config.APP_VERSION, + "upgrade_version": data[config.UPGRADE_CHECK_KEY][ + 'version'], + "product_name": config.APP_NAME, + "download_url": data[config.UPGRADE_CHECK_KEY][ + 'download_url'] + } store_setting('LastUpdateCheck', today) return make_json_response(data=ret) + + +@blueprint.route("/auto_update//" + "////", + methods=['GET']) +@pgCSRFProtect.exempt +def auto_update(current_version_int, latest_version, latest_version_int, + product_name, ftp_url): + """ + Endpoint to provide auto-update information for the desktop app. + + Returns update metadata (download URL and version name) + if a newer version is available. Responds with HTTP 204 + if the current version is up to date. + """ + if latest_version_int > current_version_int: + update_info = { + 'url': unquote(ftp_url), + 'name': f'{product_name} v{latest_version}', + } + current_app.logger.debug(update_info) + return make_response(response=update_info, status=200) + else: + return make_response(status=204) diff --git a/web/pgadmin/settings/__init__.py b/web/pgadmin/settings/__init__.py index 3cb5922563b..fcc18f348bc 100644 --- a/web/pgadmin/settings/__init__.py +++ b/web/pgadmin/settings/__init__.py @@ -35,7 +35,7 @@ def get_own_menuitems(self): 'file_items': [ MenuItem( name='mnu_resetlayout', - priority=998, + priority=997, module="pgAdmin.Settings", callback='show', label=gettext('Reset Layout') diff --git a/web/pgadmin/static/js/BrowserComponent.jsx b/web/pgadmin/static/js/BrowserComponent.jsx index c0a6a9f3ce8..cd763aa6e3a 100644 --- a/web/pgadmin/static/js/BrowserComponent.jsx +++ b/web/pgadmin/static/js/BrowserComponent.jsx @@ -35,7 +35,7 @@ import { useWorkspace, WorkspaceProvider } from '../../misc/workspaces/static/js import { PgAdminProvider, usePgAdmin } from './PgAdminProvider'; import PreferencesComponent from '../../preferences/static/js/components/PreferencesComponent'; import { ApplicationStateProvider } from '../../settings/static/ApplicationStateProvider'; - +import { appUpdateNotifier } from '../../browser/static/js/UpdateCheckNotify'; const objectExplorerGroup = { tabLocked: true, @@ -181,6 +181,36 @@ export default function BrowserComponent({pgAdmin}) { isNewTab: true, }); + // Called when Install and Restart btn called for auto-update install + function installUpdate() { + if (window.electronUI) { + window.electronUI.sendDataForAppUpdate({ + 'install_update_now': true + }); + }} + + // Listen for auto-update events from the Electron main process and display notifications + // to the user based on the update status (e.g., update available, downloading, downloaded, installed, or error). + if (window.electronUI && typeof window.electronUI.appUpdateNotifier === 'function') { + window.electronUI.appUpdateNotifier((data)=>{ + if (data?.check_version_update) { + pgAdmin.Browser.check_version_update(true); + } else if (data.update_downloading) { + appUpdateNotifier('Update downloading...', 'info', null, 10000); + } else if (data.no_update_available) { + appUpdateNotifier('No update available.....', 'info', null, 10000); + } else if (data.update_downloaded) { + const UPDATE_DOWNLOADED_MESSAGE = gettext('An update is ready. Restart the app now to install it, or later to keep using the current version.'); + appUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', installUpdate, null, 'Update downloaded', 'update_downloaded'); + } else if (data.error) { + appUpdateNotifier(`${data.errMsg}`, 'error'); + } else if (data.update_installed) { + const UPDATE_INSTALLED_MESSAGE = gettext('Update installed successfully!'); + appUpdateNotifier(UPDATE_INSTALLED_MESSAGE, 'success'); + } + }); + } + useEffect(()=>{ if(uiReady) { pgAdmin?.Browser?.uiloaded?.(); diff --git a/web/pgadmin/static/js/Theme/light.js b/web/pgadmin/static/js/Theme/light.js index 68a28abce7b..f507289868d 100644 --- a/web/pgadmin/static/js/Theme/light.js +++ b/web/pgadmin/static/js/Theme/light.js @@ -49,6 +49,8 @@ export default function(basicSettings) { main: '#eea236', light: '#fce5c5', contrastText: '#000', + hoverMain: darken('#eea236', 0.1), + hoverBorderColor: darken('#eea236', 0.1), }, info: { main: '#fde74c', diff --git a/web/pgadmin/static/js/components/FormComponents.jsx b/web/pgadmin/static/js/components/FormComponents.jsx index a40ccbe52b5..2e74c47fb8b 100644 --- a/web/pgadmin/static/js/components/FormComponents.jsx +++ b/web/pgadmin/static/js/components/FormComponents.jsx @@ -1289,6 +1289,7 @@ const StyledNotifierMessageBox = styled(Box)(({theme}) => ({ backgroundColor: theme.palette.warning.light, '& .FormFooter-iconWarning': { color: theme.palette.warning.main, + marginBottom: theme.spacing(8), }, }, '& .FormFooter-message': { From 92a43ff48517de26146c87c77980f6eeb97360a1 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 3 Jun 2025 17:30:46 +0530 Subject: [PATCH 02/17] 1. Add copyright header to UpdateCheckNotify.jsx file 2. Remove package-lock.json from /runtime folder --- runtime/package-lock.json | 2208 ----------------- .../browser/static/js/UpdateCheckNotify.jsx | 10 +- 2 files changed, 9 insertions(+), 2209 deletions(-) delete mode 100644 runtime/package-lock.json diff --git a/runtime/package-lock.json b/runtime/package-lock.json deleted file mode 100644 index ce7c9131d68..00000000000 --- a/runtime/package-lock.json +++ /dev/null @@ -1,2208 +0,0 @@ -{ - "name": "pgadmin4", - "version": "8.14", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "pgadmin4", - "version": "8.14", - "license": "PostgreSQL", - "dependencies": { - "axios": "^1.7.9", - "electron-context-menu": "^4.0.4", - "electron-store": "^10.0.0" - }, - "devDependencies": { - "electron": "latest", - "eslint": "^9.17.0" - } - }, - "node_modules/@electron/get": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/@electron/get/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@electron/get/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.19.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.4", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/js": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", - "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "22.10.1", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/atomically": { - "version": "2.0.3", - "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" - } - }, - "node_modules/axios": { - "version": "1.7.9", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/boolean": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/conf": { - "version": "13.0.1", - "license": "MIT", - "dependencies": { - "ajv": "^8.16.0", - "ajv-formats": "^3.0.1", - "atomically": "^2.0.3", - "debounce-fn": "^6.0.0", - "dot-prop": "^9.0.0", - "env-paths": "^3.0.0", - "json-schema-typed": "^8.0.1", - "semver": "^7.6.2", - "uint8array-extras": "^1.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debounce-fn": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/dot-prop": { - "version": "9.0.0", - "license": "MIT", - "dependencies": { - "type-fest": "^4.18.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron": { - "version": "33.2.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-33.2.1.tgz", - "integrity": "sha512-SG/nmSsK9Qg1p6wAW+ZfqU+AV8cmXMTIklUL18NnOKfZLlum4ZsDoVdmmmlL39ZmeCaq27dr7CgslRPahfoVJg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, - "node_modules/electron-context-menu": { - "version": "4.0.4", - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "electron-dl": "^4.0.0", - "electron-is-dev": "^3.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-dl": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "ext-name": "^5.0.0", - "pupa": "^3.1.0", - "unused-filename": "^4.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-is-dev": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-store": { - "version": "10.0.0", - "license": "MIT", - "dependencies": { - "conf": "^13.0.0", - "type-fest": "^4.20.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron/node_modules/@types/node": { - "version": "20.17.9", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/electron/node_modules/undici-types": { - "version": "6.19.8", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "license": "MIT" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", - "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.9.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.17.0", - "@eslint/plugin-kit": "^0.2.3", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "8.2.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/espree": { - "version": "10.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-list": { - "version": "2.2.2", - "license": "MIT", - "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-list/node_modules/mime-db": { - "version": "1.53.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ext-name": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/global-agent": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "11.8.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/json-schema-typed": { - "version": "8.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/matcher": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/string-width": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stubborn-fs": { - "version": "1.2.5" - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "4.30.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uint8array-extras": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unused-filename": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unused-filename/node_modules/escape-string-regexp": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/when-exit": { - "version": "2.1.3" - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/yauzl": { - "version": "2.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx b/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx index dcfec326570..ad4f0871c79 100644 --- a/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx +++ b/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx @@ -1,6 +1,14 @@ +///////////////////////////////////////////////////////////// +// +// pgAdmin 4 - PostgreSQL Tools +// +// Copyright (C) 2013 - 2025, The pgAdmin Development Team +// This software is released under the PostgreSQL Licence +// +////////////////////////////////////////////////////////////// + import { Box } from '@mui/material'; import { styled } from '@mui/material/styles'; -import React from 'react'; import CloseIcon from '@mui/icons-material/CloseRounded'; import { DefaultButton, PgIconButton } from '../../../static/js/components/Buttons'; import PropTypes from 'prop-types'; From 3879ce3d85458f9e6391c74caa949d4b6d23ddb0 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Wed, 4 Jun 2025 11:05:54 +0530 Subject: [PATCH 03/17] 1. SonarQube code complexity issue fixed for menu.js 2. If auto_update_url is not present in versions.json then show classic update notifier and hide auto-update menus in app menu 3. IPC event sendDataForAppUpdate changed from invoke to send type --- runtime/src/js/menu.js | 192 ++++++++++-------- runtime/src/js/pgadmin.js | 22 +- runtime/src/js/pgadmin_preload.js | 2 +- .../browser/static/js/UpdateCheckNotify.jsx | 3 +- web/pgadmin/browser/static/js/browser.js | 4 +- web/pgadmin/misc/__init__.py | 23 ++- 6 files changed, 143 insertions(+), 103 deletions(-) diff --git a/runtime/src/js/menu.js b/runtime/src/js/menu.js index 1d12c023c40..c349cca210d 100644 --- a/runtime/src/js/menu.js +++ b/runtime/src/js/menu.js @@ -30,18 +30,27 @@ function convertShortcutToAccelerator({ control, meta, shift, alt, key } = {}) { return [...mods, k].join('+'); } -function buildMenu(pgadminMenus, pgAdminMainScreen, configStore, callbacks) { - const template = []; - - // bind all menus click event. - pgadminMenus = pgadminMenus.map((menuItem)=>{ - return { - ...menuItem, - submenu: menuItem.submenu?.map((subMenuItem)=>{ - const smName = `${menuItem.name}_${subMenuItem.name}`; - return { - ...subMenuItem, - accelerator: convertShortcutToAccelerator(subMenuItem.shortcut), +// Binds click events to all menu and submenu items recursively. +function bindMenuClicks(pgadminMenus, pgAdminMainScreen) { + return pgadminMenus.map((menuItem) => ({ + ...menuItem, + submenu: menuItem.submenu?.map((subMenuItem) => { + const smName = `${menuItem.name}_${subMenuItem.name}`; + return { + ...subMenuItem, + accelerator: convertShortcutToAccelerator(subMenuItem.shortcut), + click: (_menuItem, _browserWindow, event)=>{ + if(event?.triggeredByAccelerator) { + // We will ignore the click event if it is triggered by an accelerator. + // We use accelerator to only show the shortcut title in the menu. + // The actual shortcut is already handled by pgAdmin. + return; + } + pgAdminMainScreen.webContents.send('menu-click', smName); + }, + submenu: subMenuItem.submenu?.map((deeperSubMenuItem) => ({ + ...deeperSubMenuItem, + accelerator: convertShortcutToAccelerator(deeperSubMenuItem.shortcut), click: (_menuItem, _browserWindow, event)=>{ if(event?.triggeredByAccelerator) { // We will ignore the click event if it is triggered by an accelerator. @@ -49,95 +58,94 @@ function buildMenu(pgadminMenus, pgAdminMainScreen, configStore, callbacks) { // The actual shortcut is already handled by pgAdmin. return; } - pgAdminMainScreen.webContents.send('menu-click', smName); + pgAdminMainScreen.webContents.send('menu-click', `${smName}_${deeperSubMenuItem.name}`); }, - submenu: subMenuItem.submenu?.map((deeperSubMenuItem)=>{ - return { - ...deeperSubMenuItem, - accelerator: convertShortcutToAccelerator(deeperSubMenuItem.shortcut), - click: (_menuItem, _browserWindow, event)=>{ - if(event?.triggeredByAccelerator) { - // We will ignore the click event if it is triggered by an accelerator. - // We use accelerator to only show the shortcut title in the menu. - // The actual shortcut is already handled by pgAdmin. - return; - } - pgAdminMainScreen.webContents.send('menu-click', `${smName}_${deeperSubMenuItem.name}`); - }, - }; - }), - }; - }), - }; - }); + })), + }; + }), + })); +} + +// Handles auto-update related menu items for macOS. +// Adds or disables update menu items based on config state. +function handleAutoUpdateMenu(menuFile, configStore, callbacks) { + if (!configStore.get('auto_update_enabled')) return; + if (configStore.get('update_downloaded')) { + // Add "Restart to Update" if update is downloaded + menuFile.submenu.unshift({ + name: 'mnu_restart_to_update', + id: 'mnu_restart_to_update', + label: 'Restart to Update...', + enabled: true, + priority: 998, + click: callbacks['restart_to_update'], + }); + } else { + // Add "Check for Updates" if update is not downloaded + menuFile.submenu.unshift({ + name: 'mnu_check_updates', + id: 'mnu_check_updates', + label: 'Check for Updates...', + enabled: true, + priority: 998, + click: callbacks['check_for_updates'], + }); + } + // Disable "Check for Updates" if update is downloading + if (configStore.get('update_downloading')) { + menuFile.submenu.forEach((item) => { + if (item.id == 'mnu_check_updates') item.enabled = false; + }); + } +} + +// Remove About pgAdmin 4 from help menu and add it to the top of menuFile submenu. +function moveAboutMenuToTop(pgadminMenus, menuFile) { + const helpMenu = pgadminMenus.find((menu) => menu.name == 'help'); + if (!helpMenu) return; + const aboutItem = helpMenu.submenu.find((item) => item.name === 'mnu_about'); + if (!aboutItem) return; + helpMenu.submenu = helpMenu.submenu.filter((item) => item.name !== 'mnu_about'); + menuFile.submenu.unshift(aboutItem); + menuFile.submenu.splice(2, 0, { type: 'separator' }); +} + +// Builds the application menu template and binds menu click events. +// Handles platform-specific menu structure and dynamic menu items. +function buildMenu(pgadminMenus, pgAdminMainScreen, configStore, callbacks) { + const template = []; + + pgadminMenus = bindMenuClicks(pgadminMenus, pgAdminMainScreen); let menuFile = pgadminMenus.shift(); + // macOS-specific menu modifications if (isMac) { - if (configStore.get('update_downloaded')) { - //Add Restart to update menu item in the app menu if update is downloaded. - menuFile.submenu.unshift({ - name:'mnu_restart_to_update', - id: 'mnu_restart_to_update', - label: 'Restart to Update...', - enabled: true, - priority: 998, - click: callbacks['restart_to_update'], - }); - } else { - // Add Check for Updates menu item in the app menu. - menuFile.submenu.unshift({ - name:'mnu_check_updates', - id: 'mnu_check_updates', - label: 'Check for Updates...', - enabled: true, - priority: 998, - click: callbacks['check_for_updates'], - }); - } - - // Disable the Check for updates menu item if update is downloading. - if(configStore.get('update_downloading')) { - menuFile.submenu.forEach((item)=> { - if (item.id == 'mnu_check_updates') item.enabled=false; - }); - } - - // Remove About pgAdmin 4 from help menu and add it to the top of menuFile submenu. - const helpMenu = pgadminMenus.find((menu) => menu.name == 'help'); - if (helpMenu) { - const aboutItem = helpMenu.submenu.find((item) => item.name === 'mnu_about'); - if (aboutItem) { - helpMenu.submenu = helpMenu.submenu.filter((item) => item.name !== 'mnu_about'); - menuFile.submenu.unshift(aboutItem); - menuFile.submenu.splice(2, 0, { type: 'separator' }); - } - } + handleAutoUpdateMenu(menuFile, configStore, callbacks); + moveAboutMenuToTop(pgadminMenus, menuFile); } - + template.push({ ...menuFile, submenu: [ ...menuFile.submenu, { type: 'separator' }, - { - label: 'View Logs...', click: callbacks['view_logs'], - }, - { - label: 'Configure runtime...', click: callbacks['configure'], - }, + { label: 'View Logs...', click: callbacks['view_logs'] }, + { label: 'Configure runtime...', click: callbacks['configure'] }, { type: 'separator' }, - ...(isMac ? [ - { role: 'hide' }, - { role: 'hideOthers' }, - { role: 'unhide' }, - { type: 'separator' }, - ] : []), + ...(isMac + ? [ + { role: 'hide' }, + { role: 'hideOthers' }, + { role: 'unhide' }, + { type: 'separator' }, + ] + : []), { role: 'quit' }, ], }); - if(isMac) { + if (isMac) { template[0].label = app.name; } @@ -149,8 +157,14 @@ function buildMenu(pgadminMenus, pgAdminMainScreen, configStore, callbacks) { { label: 'View', submenu: [ - { label: 'Reload', click: callbacks['reloadApp']}, - { label: 'Toggle Developer Tools', click: ()=>BrowserWindow.getFocusedWindow().webContents.openDevTools({ mode: 'bottom' })}, + { label: 'Reload', click: callbacks['reloadApp'] }, + { + label: 'Toggle Developer Tools', + click: () => + BrowserWindow.getFocusedWindow().webContents.openDevTools({ + mode: 'bottom', + }), + }, { type: 'separator' }, { role: 'resetZoom' }, { role: 'zoomIn' }, @@ -158,10 +172,10 @@ function buildMenu(pgadminMenus, pgAdminMainScreen, configStore, callbacks) { { type: 'separator' }, ].concat(isLinux ? [] : [{ role: 'togglefullscreen' }]), }, - { role: 'windowMenu' }, + { role: 'windowMenu' } ); - template.push(pgadminMenus[pgadminMenus.length-1]); + template.push(pgadminMenus[pgadminMenus.length - 1]); return Menu.buildFromTemplate(template); } diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index f0a107175b2..216e36e01a3 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -209,6 +209,13 @@ function setConfigAndRefreshMenu(event) { } } +// Remove auto_update_enabled from configStore on app close or quit +function cleanupAutoUpdateFlag() { + if (configStore.has('auto_update_enabled')) { + configStore.delete('auto_update_enabled'); + } +} + // This function will force quit and install update and restart the app function forceQuitAndInstallUpdate() { // Disable beforeunload handlers @@ -219,6 +226,7 @@ function forceQuitAndInstallUpdate() { pgAdminMainScreen.webContents.on('will-prevent-unload', preventUnload); // Set flag to show notification after restart configStore.set('update_installed', true); + cleanupAutoUpdateFlag(); autoUpdater.quitAndInstall(); } @@ -419,6 +427,7 @@ function launchPgAdminWindow() { }); pgAdminMainScreen.on('closed', ()=>{ + cleanupAutoUpdateFlag(); misc.cleanupAndQuitApp(); }); @@ -522,8 +531,17 @@ if (process.platform === 'darwin') { pgAdminMainScreen.webContents.send('appUpdateNotifier', {error: true, errMsg: message}); }); - ipcMain.handle('sendDataForAppUpdate', (_, data) => { - if (data.check_for_updates) { + ipcMain.on('sendDataForAppUpdate', (_, data) => { + // Update auto-update enabled flag and refresh menus only if the setting is changed or not set + if (typeof data.check_for_updates !== 'undefined') { + const currentFlag = configStore.get('auto_update_enabled'); + if (typeof currentFlag === 'undefined' || currentFlag !== data.check_for_updates) { + configStore.set('auto_update_enabled', data.check_for_updates); + refreshMenus(pgAdminMainScreen, configStore, menuCallbacks); + } + } + + if (data.auto_update_url && data.upgrade_version && data.upgrade_version_int && data.current_version_int && data.product_name) { const ftpUrl = encodeURIComponent(`${data.auto_update_url}/pgadmin4-${data.upgrade_version}-${process.arch}.zip`); let serverUrl = `http://127.0.0.1:${serverPort}/misc/auto_update/${data.current_version_int}/${data.upgrade_version}/${data.upgrade_version_int}/${data.product_name}/${ftpUrl}/?key=${UUID}`; diff --git a/runtime/src/js/pgadmin_preload.js b/runtime/src/js/pgadmin_preload.js index 5be1cdb8273..6791bddf717 100644 --- a/runtime/src/js/pgadmin_preload.js +++ b/runtime/src/js/pgadmin_preload.js @@ -32,7 +32,7 @@ contextBridge.exposeInMainWorld('electronUI', { downloadStreamSaveEnd: (...args) => ipcRenderer.send('download-stream-save-end', ...args), downloadBase64UrlData: (...args) => ipcRenderer.invoke('download-base64-url-data', ...args), downloadTextData: (...args) => ipcRenderer.invoke('download-text-data', ...args), - sendDataForAppUpdate: (data) => ipcRenderer.invoke('sendDataForAppUpdate', data), + sendDataForAppUpdate: (data) => ipcRenderer.send('sendDataForAppUpdate', data), appUpdateNotifier: (callback) => { ipcRenderer.removeAllListeners('appUpdateNotifier'); // Clean up previous listeners ipcRenderer.on('appUpdateNotifier', (_, data) => callback(data)); diff --git a/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx b/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx index ad4f0871c79..c36f3c2d1e8 100644 --- a/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx +++ b/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx @@ -7,11 +7,12 @@ // ////////////////////////////////////////////////////////////// +import React from 'react'; import { Box } from '@mui/material'; import { styled } from '@mui/material/styles'; import CloseIcon from '@mui/icons-material/CloseRounded'; -import { DefaultButton, PgIconButton } from '../../../static/js/components/Buttons'; import PropTypes from 'prop-types'; +import { DefaultButton, PgIconButton } from '../../../static/js/components/Buttons'; import pgAdmin from 'sources/pgadmin'; const StyledBox = styled(Box)(({theme}) => ({ diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 66ee711bc53..2045018a355 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -278,12 +278,14 @@ define('pgadmin.browser', [ url_for('misc.upgrade_check') + '?trigger_update_check=' + trigger_update_check ).then((res)=> { const data = res.data.data; + window.electronUI?.sendDataForAppUpdate({ + 'check_for_updates': data.check_for_auto_updates, + }); if (pgAdmin.server_mode == 'False' && (data.check_for_auto_updates && data.auto_update_url!=='')) { // This is for desktop installers whose auto_update_url is mentioned in https://www.pgadmin.org/versions.json const message = `${gettext('You are currently running version %s of %s, however the current version is %s.', data.current_version, data.product_name, data.upgrade_version)}`; function downloadUpdate() { window.electronUI?.sendDataForAppUpdate({ - 'check_for_updates': data.check_for_auto_updates, 'current_version':data.current_version, 'upgrade_version': data.upgrade_version, 'current_version_int':data.current_version_int, diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index 1de47f4dd20..03c212c42df 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -398,17 +398,21 @@ def upgrade_check(): platform = 'macos' elif sys.platform == 'win32': platform = 'windows' - if not config.SERVER_MODE: + # Determine if auto-update is available and construct the + # response accordingly. If running in desktop mode + # (not SERVER_MODE) and an auto-update URL is provided for the + # platform, return a response indicating that auto-update is + # available, including relevant update details. + # Otherwise, return a response indicating that auto-update is + # not available, but an update exists. + if not config.SERVER_MODE and data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform] != '': ret = { "outdated": True, - "check_for_auto_updates": - data[config.UPGRADE_CHECK_KEY] - .get('auto_update_url') is not None, + "check_for_auto_updates": True, "auto_update_url": data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'][platform] - if data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'] is not None else '', - "platform":platform, + 'auto_update_url'][platform], + "platform": platform, "installer_type": config.UPGRADE_CHECK_KEY, "current_version": config.APP_VERSION, "upgrade_version": data[config.UPGRADE_CHECK_KEY][ @@ -423,6 +427,7 @@ def upgrade_check(): else: ret = { "outdated": True, + "check_for_auto_updates": False, "current_version": config.APP_VERSION, "upgrade_version": data[config.UPGRADE_CHECK_KEY][ 'version'], @@ -442,7 +447,7 @@ def upgrade_check(): def auto_update(current_version_int, latest_version, latest_version_int, product_name, ftp_url): """ - Endpoint to provide auto-update information for the desktop app. + Get auto-update information for the desktop app. Returns update metadata (download URL and version name) if a newer version is available. Responds with HTTP 204 From 8880feb984c0c0606a5cac863b8414595b3a1f62 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Thu, 12 Jun 2025 12:02:12 +0530 Subject: [PATCH 04/17] IPC event and some functions and UpdateCheckNotify.jsx file renamed --- runtime/src/js/pgadmin.js | 16 +++++++-------- runtime/src/js/pgadmin_preload.js | 6 +++--- web/pgadmin/browser/static/js/browser.js | 6 +++--- web/pgadmin/static/js/BrowserComponent.jsx | 16 +++++++-------- .../js/helpers/appAutoUpdateNotifier.jsx} | 20 +++++++++---------- 5 files changed, 32 insertions(+), 32 deletions(-) rename web/pgadmin/{browser/static/js/UpdateCheckNotify.jsx => static/js/helpers/appAutoUpdateNotifier.jsx} (84%) diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index 216e36e01a3..1d1943735f4 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -49,7 +49,7 @@ let [pythonPath, pgadminFile] = misc.getAppPaths(__dirname); const menuCallbacks = { 'check_for_updates': ()=>{ - pgAdminMainScreen.webContents.send('appUpdateNotifier', {check_version_update: true}); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {check_version_update: true}); }, 'restart_to_update': ()=>{ forceQuitAndInstallUpdate(); @@ -451,11 +451,11 @@ function notifyUpdateInstalled() { configStore.set('update_installed', false); // Notify renderer if (pgAdminMainScreen) { - pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_installed: true}); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_installed: true}); } else { // If main screen not ready, wait and send after it's created app.once('browser-window-created', (event, window) => { - window.webContents.send('appUpdateNotifier', {update_installed: true}); + window.webContents.send('notifyAppAutoUpdate', {update_installed: true}); }); } } @@ -510,25 +510,25 @@ if (process.platform === 'darwin') { autoUpdater.on('update-available', () => { setConfigAndRefreshMenu('update-available'); misc.writeServerLog('[Auto-Updater]: Update downloading...'); - pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_downloading: true}); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_downloading: true}); }); autoUpdater.on('update-not-available', () => { setConfigAndRefreshMenu('update-not-available'); misc.writeServerLog('[Auto-Updater]: No update available...'); - pgAdminMainScreen.webContents.send('appUpdateNotifier', {no_update_available: true}); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {no_update_available: true}); }); autoUpdater.on('update-downloaded', () => { setConfigAndRefreshMenu('update-downloaded'); misc.writeServerLog('[Auto-Updater]: Update downloaded...'); - pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_downloaded: true}); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_downloaded: true}); }); autoUpdater.on('error', (message) => { setConfigAndRefreshMenu('error-close'); misc.writeServerLog(`[Auto-Updater]: ${message}`); - pgAdminMainScreen.webContents.send('appUpdateNotifier', {error: true, errMsg: message}); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {error: true, errMsg: message}); }); ipcMain.on('sendDataForAppUpdate', (_, data) => { @@ -552,7 +552,7 @@ if (process.platform === 'darwin') { } catch (err) { misc.writeServerLog('[Auto-Updater]: Error setting autoUpdater feed URL: ' + err.message); if (pgAdminMainScreen) { - pgAdminMainScreen.webContents.send('appUpdateNotifier', {error: true, errMsg: 'Failed to check for updates. Please try again later.'}); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {error: true, errMsg: 'Failed to check for updates. Please try again later.'}); } return; } diff --git a/runtime/src/js/pgadmin_preload.js b/runtime/src/js/pgadmin_preload.js index 6791bddf717..b63384f6cf0 100644 --- a/runtime/src/js/pgadmin_preload.js +++ b/runtime/src/js/pgadmin_preload.js @@ -33,8 +33,8 @@ contextBridge.exposeInMainWorld('electronUI', { downloadBase64UrlData: (...args) => ipcRenderer.invoke('download-base64-url-data', ...args), downloadTextData: (...args) => ipcRenderer.invoke('download-text-data', ...args), sendDataForAppUpdate: (data) => ipcRenderer.send('sendDataForAppUpdate', data), - appUpdateNotifier: (callback) => { - ipcRenderer.removeAllListeners('appUpdateNotifier'); // Clean up previous listeners - ipcRenderer.on('appUpdateNotifier', (_, data) => callback(data)); + notifyAppAutoUpdate: (callback) => { + ipcRenderer.removeAllListeners('notifyAppAutoUpdate'); // Clean up previous listeners + ipcRenderer.on('notifyAppAutoUpdate', (_, data) => callback(data)); }, }); \ No newline at end of file diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 2045018a355..94a1f69934b 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -15,7 +15,7 @@ import { send_heartbeat, stop_heartbeat } from './heartbeat'; import getApiInstance from '../../../static/js/api_instance'; import usePreferences, { setupPreferenceBroadcast } from '../../../preferences/static/js/store'; import checkNodeVisibility from '../../../static/js/check_node_visibility'; -import {appUpdateNotifier} from './UpdateCheckNotify'; +import {appAutoUpdateNotifier} from '../../../static/js/helpers/appAutoUpdateNotifier'; define('pgadmin.browser', [ 'sources/gettext', 'sources/url_for', 'sources/pgadmin', @@ -295,7 +295,7 @@ define('pgadmin.browser', [ 'platform':data.platform, }); } - appUpdateNotifier(message, 'warning', downloadUpdate, null, 'Update available', 'download_update'); + appAutoUpdateNotifier(message, 'warning', downloadUpdate, null, 'Update available', 'download_update'); } else if(data.outdated) { //This is for server mode or auto-update not supported desktop installer or not mentioned auto_update_url pgAdmin.Browser.notifier.warning( @@ -310,7 +310,7 @@ define('pgadmin.browser', [ // If the user manually triggered a check for updates (trigger_update_check is true) // and no update is available (data.outdated is false), show an info notification. if (!data.outdated && trigger_update_check){ - appUpdateNotifier('No update available.....', 'info', null, 10000); + appAutoUpdateNotifier('No update available.....', 'info', null, 10000); } }).catch((error)=>{ console.error('Error during version check', error); diff --git a/web/pgadmin/static/js/BrowserComponent.jsx b/web/pgadmin/static/js/BrowserComponent.jsx index cd763aa6e3a..a88007fae89 100644 --- a/web/pgadmin/static/js/BrowserComponent.jsx +++ b/web/pgadmin/static/js/BrowserComponent.jsx @@ -35,7 +35,7 @@ import { useWorkspace, WorkspaceProvider } from '../../misc/workspaces/static/js import { PgAdminProvider, usePgAdmin } from './PgAdminProvider'; import PreferencesComponent from '../../preferences/static/js/components/PreferencesComponent'; import { ApplicationStateProvider } from '../../settings/static/ApplicationStateProvider'; -import { appUpdateNotifier } from '../../browser/static/js/UpdateCheckNotify'; +import { appAutoUpdateNotifier } from './helpers/appAutoUpdateNotifier'; const objectExplorerGroup = { tabLocked: true, @@ -191,22 +191,22 @@ export default function BrowserComponent({pgAdmin}) { // Listen for auto-update events from the Electron main process and display notifications // to the user based on the update status (e.g., update available, downloading, downloaded, installed, or error). - if (window.electronUI && typeof window.electronUI.appUpdateNotifier === 'function') { - window.electronUI.appUpdateNotifier((data)=>{ + if (window.electronUI && typeof window.electronUI.notifyAppAutoUpdate === 'function') { + window.electronUI.notifyAppAutoUpdate((data)=>{ if (data?.check_version_update) { pgAdmin.Browser.check_version_update(true); } else if (data.update_downloading) { - appUpdateNotifier('Update downloading...', 'info', null, 10000); + appAutoUpdateNotifier('Update downloading...', 'info', null, 10000); } else if (data.no_update_available) { - appUpdateNotifier('No update available.....', 'info', null, 10000); + appAutoUpdateNotifier('No update available.....', 'info', null, 10000); } else if (data.update_downloaded) { const UPDATE_DOWNLOADED_MESSAGE = gettext('An update is ready. Restart the app now to install it, or later to keep using the current version.'); - appUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', installUpdate, null, 'Update downloaded', 'update_downloaded'); + appAutoUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', installUpdate, null, 'Update downloaded', 'update_downloaded'); } else if (data.error) { - appUpdateNotifier(`${data.errMsg}`, 'error'); + appAutoUpdateNotifier(`${data.errMsg}`, 'error'); } else if (data.update_installed) { const UPDATE_INSTALLED_MESSAGE = gettext('Update installed successfully!'); - appUpdateNotifier(UPDATE_INSTALLED_MESSAGE, 'success'); + appAutoUpdateNotifier(UPDATE_INSTALLED_MESSAGE, 'success'); } }); } diff --git a/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx b/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx similarity index 84% rename from web/pgadmin/browser/static/js/UpdateCheckNotify.jsx rename to web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx index c36f3c2d1e8..940008547c5 100644 --- a/web/pgadmin/browser/static/js/UpdateCheckNotify.jsx +++ b/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx @@ -12,7 +12,7 @@ import { Box } from '@mui/material'; import { styled } from '@mui/material/styles'; import CloseIcon from '@mui/icons-material/CloseRounded'; import PropTypes from 'prop-types'; -import { DefaultButton, PgIconButton } from '../../../static/js/components/Buttons'; +import { DefaultButton, PgIconButton } from '../components/Buttons'; import pgAdmin from 'sources/pgadmin'; const StyledBox = styled(Box)(({theme}) => ({ @@ -21,11 +21,11 @@ const StyledBox = styled(Box)(({theme}) => ({ minWidth: '325px', maxWidth: '400px', ...theme.mixins.panelBorder.all, - '&.UpdateCheckNotify-containerWarning': { + '&.UpdateWarningNotifier-containerWarning': { borderColor: theme.palette.warning.main, backgroundColor: theme.palette.warning.light, }, - '& .UpdateCheckNotify-containerHeader': { + '& .UpdateWarningNotifier-containerHeader': { height: '32px', display: 'flex', justifyContent: 'space-between', @@ -33,11 +33,11 @@ const StyledBox = styled(Box)(({theme}) => ({ alignItems: 'center', borderTopLeftRadius: 'inherit', borderTopRightRadius: 'inherit', - '& .UpdateCheckNotify-iconWarning': { + '& .UpdateWarningNotifier-iconWarning': { color: theme.palette.warning.main, }, }, - '&.UpdateCheckNotify-containerBody': { + '&.UpdateWarningNotifier-containerBody': { marginTop: '1rem', overflowWrap: 'break-word', }, @@ -53,12 +53,12 @@ function UpdateWarningNotifier({desc, title, onClose, onClick, status, uniqueKey } }; return ( - - + + {title} - } onClick={handleClose} title={'Close'} className={'UpdateCheckNotify-iconWarning'} /> + } onClick={handleClose} title={'Close'} className={'UpdateWarningNotifier-iconWarning'} /> - + {desc && {desc}} {onClick && @@ -86,7 +86,7 @@ UpdateWarningNotifier.propTypes = { uniqueKey: PropTypes.string, }; -export function appUpdateNotifier(desc, type, onClick, hideDuration=null, title='', status='download_update') { +export function appAutoUpdateNotifier(desc, type, onClick, hideDuration=null, title='', status='download_update') { const uniqueKey = `${title}::${desc}`; // Check if this warning is already active except error type From 3f57c5f2eaeb3f19a4b473a57121aaefa4588357 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Fri, 4 Jul 2025 10:34:59 +0530 Subject: [PATCH 05/17] Docs updated --- docs/en_US/desktop_deployment.rst | 70 +++++++++++------- docs/en_US/images/auto_update_desktop_app.png | Bin 0 -> 197075 bytes 2 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 docs/en_US/images/auto_update_desktop_app.png diff --git a/docs/en_US/desktop_deployment.rst b/docs/en_US/desktop_deployment.rst index 0e4b64939a7..6cd7f7396ab 100644 --- a/docs/en_US/desktop_deployment.rst +++ b/docs/en_US/desktop_deployment.rst @@ -130,10 +130,12 @@ on Mac OS X (~/Library/Preferences/pgadmin), and on Windows (%APPDATA%/pgadmin). -Auto-Update Feature for pgAdmin 4 Desktop -***************************************** +Auto-Update of pgAdmin 4 Desktop Application +******************************************** -pgAdmin 4's desktop application includes an automated update system built using Electron's ``autoUpdater`` module. This feature enables users to receive and install updates seamlessly, ensuring they always have access to the latest features and security fixes. +pgAdmin 4's desktop application includes an automated update system built using +Electron's ``autoUpdater`` module. This feature enables users to receive and install +updates seamlessly, ensuring they always have access to the latest features and security fixes. Supported Platforms =================== @@ -159,43 +161,62 @@ Update Process Overview 3. **Installation Flow:** - - User prompted to restart when update ready + - User prompted to Install & Restart or Restart Later when update ready - Update applied during application restart + The flow chart for the update process is as follows: + + .. image:: images/auto_update_desktop_app.png + :alt: Runtime View Log + :align: center + Technical Architecture ====================== -1. **Main Process (runtime/src/js/pgadmin.js)** +1. **Main Process** Handles core update functionality: + File: runtime/src/js/pgadmin.js + .. code-block:: javascript autoUpdater.on('checking-for-update', () => { - misc.writeServerLog('checking for updates...'); + misc.writeServerLog('[Auto-Updater]: Checking for update...'); }); autoUpdater.on('update-available', () => { - setConfigAndRefreshMenu('update-available'); - misc.writeServerLog('Update downloading...'); - pgAdminMainScreen.webContents.send('appUpdateNotifier', {update_downloading: true}); + setConfigAndRefreshMenu('update-available'); + misc.writeServerLog('[Auto-Updater]: Update downloading...'); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_downloading: true}); }); -2. **Renderer Process (web/pgadmin/static/js/BrowserComponent.jsx)** +2. **Renderer Process** Manages user interface updates: + File: web/pgadmin/static/js/BrowserComponent.jsx + .. code-block:: javascript - if (window.electronUI?.appUpdateNotifier) { - window.electronUI.appUpdateNotifier((data) => { - if (data.update_downloading) { - appUpdateNotifier('Update downloading...', 'info', 10000); - } else if (data.update_downloaded) { - appUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', null, - 'Update downloaded', installUpdate, 'update_downloaded'); - } - }); + if (window.electronUI && typeof window.electronUI.notifyAppAutoUpdate === 'function') { + window.electronUI.notifyAppAutoUpdate((data)=>{ + if (data?.check_version_update) { + pgAdmin.Browser.check_version_update(true); + } else if (data.update_downloading) { + appAutoUpdateNotifier('Update downloading...', 'info', null, 10000); + } else if (data.no_update_available) { + appAutoUpdateNotifier('No update available.....', 'info', null, 10000); + } else if (data.update_downloaded) { + const UPDATE_DOWNLOADED_MESSAGE = gettext('An update is ready. Restart the app now to install it, or later to keep using the current version.'); + appAutoUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', installUpdate, null, 'Update downloaded', 'update_downloaded'); + } else if (data.error) { + appAutoUpdateNotifier(`${data.errMsg}`, 'error'); + } else if (data.update_installed) { + const UPDATE_INSTALLED_MESSAGE = gettext('Update installed successfully!'); + appAutoUpdateNotifier(UPDATE_INSTALLED_MESSAGE, 'success'); + } + }); } 3. **Update Server Communication** @@ -217,8 +238,7 @@ User Interface Components 2. **Menu Integration:** - Check for Updates option in pgAdmin 4 menu - - Update status indicators - - Restart to Update option when available + - Restart to Update option when update available Error Handling ============== @@ -233,8 +253,6 @@ The system includes comprehensive error handling: 2. **Installation Errors:** - - Insufficient disk space - - Permission issues - Corrupted downloads 3. **Recovery Mechanisms:** @@ -245,12 +263,10 @@ The system includes comprehensive error handling: Security Considerations ======================= -The update system implements several security measures: +The update system implements below security measures: 1. **Secure Communication:** - - - HTTPS for update checks - - Encrypted download process + - Protected update metadata Platform-Specific Notes diff --git a/docs/en_US/images/auto_update_desktop_app.png b/docs/en_US/images/auto_update_desktop_app.png new file mode 100644 index 0000000000000000000000000000000000000000..3c8b0207f356a7cfd131057b81490f5179c43b2d GIT binary patch literal 197075 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
    E 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

    ^!)xRj6{4CTYs>g?HQ~4L7?re6B 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 d0 Date: Wed, 30 Jul 2025 17:51:45 +0530 Subject: [PATCH 17/17] Moved auto_update_desktop_app.excalidraw file to docs/en_US folder --- docs/en_US/{images => }/auto_update_desktop_app.excalidraw | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/en_US/{images => }/auto_update_desktop_app.excalidraw (100%) diff --git a/docs/en_US/images/auto_update_desktop_app.excalidraw b/docs/en_US/auto_update_desktop_app.excalidraw similarity index 100% rename from docs/en_US/images/auto_update_desktop_app.excalidraw rename to docs/en_US/auto_update_desktop_app.excalidraw

^!)xRj6{4CTYs>g?HQ~4L7?re6B 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 d0 Date: Tue, 8 Jul 2025 14:48:49 +0530 Subject: [PATCH 06/17] Fixed review comments --- pkg/mac/build-functions.sh | 89 ++++++---------- runtime/src/js/autoUpdaterHandler.js | 128 +++++++++++++++++++++++ runtime/src/js/pgadmin.js | 100 +++--------------- web/config.py | 3 +- web/pgadmin/browser/static/js/browser.js | 22 ++-- web/pgadmin/misc/__init__.py | 2 +- 6 files changed, 186 insertions(+), 158 deletions(-) create mode 100644 runtime/src/js/autoUpdaterHandler.js diff --git a/pkg/mac/build-functions.sh b/pkg/mac/build-functions.sh index 72e21dc3866..590c6f86104 100644 --- a/pkg/mac/build-functions.sh +++ b/pkg/mac/build-functions.sh @@ -444,16 +444,20 @@ _codesign_dmg() { "${DMG_NAME}" } -_notarize_zip() { +_notarize_pkg() { + local FILE_NAME="$1" + local STAPLE_TARGET="$2" + local FILE_LABEL="$3" + if [ "${CODESIGN}" -eq 0 ]; then return fi - echo "Uploading ZIP for Notarization ..." - STATUS=$(xcrun notarytool submit "${ZIP_NAME}" \ - --team-id "${DEVELOPER_TEAM_ID}" \ - --apple-id "${DEVELOPER_USER}" \ - --password "${DEVELOPER_ASP}" 2>&1) + echo "Uploading ${FILE_LABEL} for Notarization ..." + STATUS=$(xcrun notarytool submit "${FILE_NAME}" \ + --team-id "${DEVELOPER_TEAM_ID}" \ + --apple-id "${DEVELOPER_USER}" \ + --password "${DEVELOPER_ASP}" 2>&1) echo "${STATUS}" @@ -463,16 +467,16 @@ _notarize_zip() { echo "Waiting for Notarization to be completed ..." xcrun notarytool wait "${SUBMISSION_ID}" \ - --team-id "${DEVELOPER_TEAM_ID}" \ - --apple-id "${DEVELOPER_USER}" \ - --password "${DEVELOPER_ASP}" + --team-id "${DEVELOPER_TEAM_ID}" \ + --apple-id "${DEVELOPER_USER}" \ + --password "${DEVELOPER_ASP}" # Print status information REQUEST_STATUS=$(xcrun notarytool info "${SUBMISSION_ID}" \ - --team-id "${DEVELOPER_TEAM_ID}" \ - --apple-id "${DEVELOPER_USER}" \ - --password "${DEVELOPER_ASP}" 2>&1 | \ - awk -F ': ' '/status:/ { print $2; }') + --team-id "${DEVELOPER_TEAM_ID}" \ + --apple-id "${DEVELOPER_USER}" \ + --password "${DEVELOPER_ASP}" 2>&1 | \ + awk -F ': ' '/status:/ { print $2; }') if [[ "${REQUEST_STATUS}" != "Accepted" ]]; then echo "Notarization failed." @@ -480,59 +484,28 @@ _notarize_zip() { fi # Staple the notarization - echo "Stapling the notarization to the pgAdmin 4 app..." - if [[ "${ZIP_NAME##*.}" == "zip" ]]; then - xcrun stapler staple ${BUNDLE_DIR} - ditto -c -k --keepParent ${BUNDLE_DIR} ${ZIP_NAME} + echo "Stapling the notarization to the ${FILE_LABEL}..." + if ! xcrun stapler staple "${STAPLE_TARGET}"; then + echo "Stapling failed." + exit 1 fi - if [ $? != 0 ]; then + # For ZIP, recreate the zip after stapling + if [[ "${FILE_LABEL}" == "ZIP" ]]; then + ditto -c -k --keepParent "${BUNDLE_DIR}" "${ZIP_NAME}" + if [ $? != 0 ]; then echo "ERROR: could not staple ${ZIP_NAME}" exit 1 + fi fi echo "Notarization completed successfully." } -_notarize_dmg() { - if [ "${CODESIGN}" -eq 0 ]; then - return - fi - - echo "Uploading DMG for Notarization ..." - STATUS=$(xcrun notarytool submit "${DMG_NAME}" \ - --team-id "${DEVELOPER_TEAM_ID}" \ - --apple-id "${DEVELOPER_USER}" \ - --password "${DEVELOPER_ASP}" 2>&1) - - # Get the submission ID - SUBMISSION_ID=$(echo "${STATUS}" | awk -F ': ' '/id:/ { print $2; exit; }') - echo "Notarization submission ID: ${SUBMISSION_ID}" - - echo "Waiting for Notarization to be completed ..." - xcrun notarytool wait "${SUBMISSION_ID}" \ - --team-id "${DEVELOPER_TEAM_ID}" \ - --apple-id "${DEVELOPER_USER}" \ - --password "${DEVELOPER_ASP}" - - # Print status information - REQUEST_STATUS=$(xcrun notarytool info "${SUBMISSION_ID}" \ - --team-id "${DEVELOPER_TEAM_ID}" \ - --apple-id "${DEVELOPER_USER}" \ - --password "${DEVELOPER_ASP}" 2>&1 | \ - awk -F ': ' '/status:/ { print $2; }') - - if [[ "${REQUEST_STATUS}" != "Accepted" ]]; then - echo "Notarization failed." - exit 1 - fi - - # Staple the notarization - echo "Stapling the notarization to the pgAdmin DMG..." - if ! xcrun stapler staple "${DMG_NAME}"; then - echo "Stapling failed." - exit 1 - fi +_notarize_zip() { + _notarize_pkg "${ZIP_NAME}" "${BUNDLE_DIR}" "ZIP" +} - echo "Notarization completed successfully." +_notarize_dmg() { + _notarize_pkg "${DMG_NAME}" "${DMG_NAME}" "DMG" } diff --git a/runtime/src/js/autoUpdaterHandler.js b/runtime/src/js/autoUpdaterHandler.js new file mode 100644 index 00000000000..5e2f0774aef --- /dev/null +++ b/runtime/src/js/autoUpdaterHandler.js @@ -0,0 +1,128 @@ +import { autoUpdater, ipcMain } from 'electron'; +import { refreshMenus } from './menu.js'; +import * as misc from './misc.js'; + +// This function stores the flags in configStore that are needed +// for auto-update and refreshes menus +export function updateConfigAndMenus(event, configStore, pgAdminMainScreen, menuCallbacks) { + const flags = { + 'update-available': { update_downloading: true }, + 'update-not-available': { update_downloading: false }, + 'update-downloaded': { update_downloading: false, update_downloaded: true }, + 'error-close': { update_downloading: false, update_downloaded: false }, + }; + const flag = flags[event]; + if (flag) { + Object.entries(flag).forEach(([k, v]) => configStore.set(k, v)); + refreshMenus(pgAdminMainScreen, configStore, menuCallbacks); + } +} + +// This function registers autoUpdater event listeners ONCE +function registerAutoUpdaterEvents({ pgAdminMainScreen, configStore, menuCallbacks }) { + autoUpdater.on('checking-for-update', () => { + misc.writeServerLog('[Auto-Updater]: Checking for update...'); + }); + + autoUpdater.on('update-available', () => { + updateConfigAndMenus('update-available', configStore, pgAdminMainScreen, menuCallbacks); + misc.writeServerLog('[Auto-Updater]: Update downloading...'); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', { update_downloading: true }); + }); + + autoUpdater.on('update-not-available', () => { + updateConfigAndMenus('update-not-available', configStore, pgAdminMainScreen, menuCallbacks); + misc.writeServerLog('[Auto-Updater]: No update available...'); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', { no_update_available: true }); + }); + + autoUpdater.on('update-downloaded', () => { + updateConfigAndMenus('update-downloaded', configStore, pgAdminMainScreen, menuCallbacks); + misc.writeServerLog('[Auto-Updater]: Update downloaded...'); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', { update_downloaded: true }); + }); + + autoUpdater.on('error', (message) => { + updateConfigAndMenus('error-close', configStore, pgAdminMainScreen, menuCallbacks); + misc.writeServerLog(`[Auto-Updater]: ${message}`); + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', { error: true, errMsg: message }); + }); +} + +// Handles 'sendDataForAppUpdate' IPC event: updates config, refreshes menus, triggers update check, or installs update if requested. +function handleSendDataForAppUpdate({ + pgAdminMainScreen, + configStore, + menuCallbacks, + baseUrl, + UUID, + forceQuitAndInstallUpdate, +}) { + return (_, data) => { + // Only update the auto-update enabled flag and refresh menus if the value has changed or is not set + if (typeof data.check_for_updates !== 'undefined') { + const currentFlag = configStore.get('auto_update_enabled'); + if (typeof currentFlag === 'undefined' || currentFlag !== data.check_for_updates) { + configStore.set('auto_update_enabled', data.check_for_updates); + refreshMenus(pgAdminMainScreen, configStore, menuCallbacks); + } + } + // If auto-update is enabled, proceed with the update check + if ( + data.auto_update_url && + data.upgrade_version && + data.upgrade_version_int && + data.current_version_int && + data.product_name + ) { + const ftpUrl = encodeURIComponent( + `${data.auto_update_url}/pgadmin4-${data.upgrade_version}-${process.arch}.zip` + ); + let serverUrl = `${baseUrl}/misc/auto_update/${data.current_version_int}/${data.upgrade_version}/${data.upgrade_version_int}/${data.product_name}/${ftpUrl}/?key=${UUID}`; + + try { + autoUpdater.setFeedURL({ url: serverUrl }); + misc.writeServerLog('[Auto-Updater]: Initiating update check...'); + autoUpdater.checkForUpdates(); + } catch (err) { + misc.writeServerLog('[Auto-Updater]: Error setting autoUpdater feed URL: ' + err.message); + if (pgAdminMainScreen) { + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', { + error: true, + errMsg: 'Failed to check for updates. Please try again later.', + }); + } + return; + } + } + // If the user has requested to install the update immediately + if (data.install_update_now) { + forceQuitAndInstallUpdate(); + } + }; +} + +export function setupAutoUpdater({ + pgAdminMainScreen, + configStore, + menuCallbacks, + baseUrl, + UUID, + forceQuitAndInstallUpdate, +}) { + // For now only macOS is supported for electron auto-update + if (process.platform === 'darwin') { + registerAutoUpdaterEvents({ pgAdminMainScreen, configStore, menuCallbacks }); + ipcMain.on( + 'sendDataForAppUpdate', + handleSendDataForAppUpdate({ + pgAdminMainScreen, + configStore, + menuCallbacks, + baseUrl, + UUID, + forceQuitAndInstallUpdate, + }) + ); + } +} \ No newline at end of file diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index 1d1943735f4..3bcb16147ba 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -17,6 +17,7 @@ import { fileURLToPath } from 'url'; import { setupMenu, refreshMenus } from './menu.js'; import contextMenu from 'electron-context-menu'; import { setupDownloader } from './downloader.js'; +import { setupAutoUpdater, updateConfigAndMenus } from './autoUpdaterHandler.js'; const configStore = new Store({ defaults: { @@ -40,6 +41,8 @@ let UUID = crypto.randomUUID(); let appStartTime = (new Date()).getTime(); const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const baseUrl = `http://127.0.0.1:${serverPort}`; + let docsURLSubStrings = ['www.enterprisedb.com', 'www.postgresql.org', 'www.pgadmin.org', 'help/help']; process.env['ELECTRON_ENABLE_SECURITY_WARNINGS'] = false; @@ -189,25 +192,6 @@ function reloadApp() { currWin.webContents.reload(); } -// This function stores the flags in configStore that are needed -// for auto-update and refreshes menu -function setConfigAndRefreshMenu(event) { - if (event == 'update-available') { - configStore.set('update_downloading', true); - refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); - } else if (event == 'update-not-available') { - configStore.set('update_downloading', false); - refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); - } else if (event == 'update-downloaded') { - configStore.set('update_downloading', false); - configStore.set('update_downloaded', true); - refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); - } else if (event == 'error-close') { - configStore.set('update_downloading', false); - configStore.set('update_downloaded', false); - refreshMenus(pgAdminMainScreen,configStore,menuCallbacks); - } -} // Remove auto_update_enabled from configStore on app close or quit function cleanupAutoUpdateFlag() { @@ -246,7 +230,6 @@ function startDesktopMode() { process.env.PGADMIN_SERVER_MODE = 'OFF'; // Start Page URL - const baseUrl = `http://127.0.0.1:${serverPort}`; startPageUrl = `${baseUrl}/?key=${UUID}`; serverCheckUrl = `${baseUrl}/misc/ping?key=${UUID}`; @@ -396,6 +379,15 @@ function launchPgAdminWindow() { pgAdminMainScreen.show(); + setupAutoUpdater({ + pgAdminMainScreen, + configStore, + menuCallbacks, + baseUrl, + UUID, + forceQuitAndInstallUpdate, + }); + pgAdminMainScreen.webContents.setWindowOpenHandler(({url})=>{ let openDocsInBrowser = configStore.get('openDocsInBrowser', true); let isDocURL = false; @@ -433,7 +425,7 @@ function launchPgAdminWindow() { pgAdminMainScreen.on('close', () => { configStore.set('bounds', pgAdminMainScreen.getBounds()); - setConfigAndRefreshMenu('error-close'); + updateConfigAndMenus('error-close', configStore, pgAdminMainScreen, menuCallbacks); pgAdminMainScreen.removeAllListeners('close'); pgAdminMainScreen.close(); }); @@ -478,7 +470,7 @@ ipcMain.on('restartApp', ()=>{ app.relaunch(); app.exit(0); }); -ipcMain.on('log', (text) => { +ipcMain.on('log', (_e, text) => { misc.writeServerLog(text); }); ipcMain.on('focus', (e) => { @@ -500,70 +492,6 @@ ipcMain.handle('checkPortAvailable', async (_e, fixedPort)=>{ }); ipcMain.handle('openConfigure', openConfigure); -// Register autoUpdater event listeners ONCE -// For now only macOS is supported for electron auto-update -if (process.platform === 'darwin') { - autoUpdater.on('checking-for-update', () => { - misc.writeServerLog('[Auto-Updater]: Checking for update...'); - }); - - autoUpdater.on('update-available', () => { - setConfigAndRefreshMenu('update-available'); - misc.writeServerLog('[Auto-Updater]: Update downloading...'); - pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_downloading: true}); - }); - - autoUpdater.on('update-not-available', () => { - setConfigAndRefreshMenu('update-not-available'); - misc.writeServerLog('[Auto-Updater]: No update available...'); - pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {no_update_available: true}); - }); - - autoUpdater.on('update-downloaded', () => { - setConfigAndRefreshMenu('update-downloaded'); - misc.writeServerLog('[Auto-Updater]: Update downloaded...'); - pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_downloaded: true}); - }); - - autoUpdater.on('error', (message) => { - setConfigAndRefreshMenu('error-close'); - misc.writeServerLog(`[Auto-Updater]: ${message}`); - pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {error: true, errMsg: message}); - }); - - ipcMain.on('sendDataForAppUpdate', (_, data) => { - // Update auto-update enabled flag and refresh menus only if the setting is changed or not set - if (typeof data.check_for_updates !== 'undefined') { - const currentFlag = configStore.get('auto_update_enabled'); - if (typeof currentFlag === 'undefined' || currentFlag !== data.check_for_updates) { - configStore.set('auto_update_enabled', data.check_for_updates); - refreshMenus(pgAdminMainScreen, configStore, menuCallbacks); - } - } - - if (data.auto_update_url && data.upgrade_version && data.upgrade_version_int && data.current_version_int && data.product_name) { - const ftpUrl = encodeURIComponent(`${data.auto_update_url}/pgadmin4-${data.upgrade_version}-${process.arch}.zip`); - let serverUrl = `http://127.0.0.1:${serverPort}/misc/auto_update/${data.current_version_int}/${data.upgrade_version}/${data.upgrade_version_int}/${data.product_name}/${ftpUrl}/?key=${UUID}`; - - try { - autoUpdater.setFeedURL({ url: serverUrl }); - misc.writeServerLog('[Auto-Updater]: Initiating update check...'); - autoUpdater.checkForUpdates(); - } catch (err) { - misc.writeServerLog('[Auto-Updater]: Error setting autoUpdater feed URL: ' + err.message); - if (pgAdminMainScreen) { - pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {error: true, errMsg: 'Failed to check for updates. Please try again later.'}); - } - return; - } - } - - if (data.install_update_now) { - /* Needed for force quit and install update and restart app*/ - forceQuitAndInstallUpdate(); - } - }); -} app.whenReady().then(() => { splashWindow = new BrowserWindow({ diff --git a/web/config.py b/web/config.py index 9cd24cbfac1..549439cd1ca 100644 --- a/web/config.py +++ b/web/config.py @@ -416,7 +416,8 @@ UPGRADE_CHECK_ENABLED = True # Where should we get the data from? -UPGRADE_CHECK_URL = 'https://www.pgadmin.org/versions.json' +# UPGRADE_CHECK_URL = 'https://www.pgadmin.org/versions.json' +UPGRADE_CHECK_URL = 'http://127.0.0.1:8000/versions.json' # What key should we look at in the upgrade data file? UPGRADE_CHECK_KEY = 'pgadmin4' diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 94a1f69934b..015f8aafc86 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -284,18 +284,16 @@ define('pgadmin.browser', [ if (pgAdmin.server_mode == 'False' && (data.check_for_auto_updates && data.auto_update_url!=='')) { // This is for desktop installers whose auto_update_url is mentioned in https://www.pgadmin.org/versions.json const message = `${gettext('You are currently running version %s of %s, however the current version is %s.', data.current_version, data.product_name, data.upgrade_version)}`; - function downloadUpdate() { - window.electronUI?.sendDataForAppUpdate({ - 'current_version':data.current_version, - 'upgrade_version': data.upgrade_version, - 'current_version_int':data.current_version_int, - 'upgrade_version_int': data.upgrade_version_int, - 'auto_update_url': data.auto_update_url, - 'product_name': data.product_name, - 'platform':data.platform, - }); - } - appAutoUpdateNotifier(message, 'warning', downloadUpdate, null, 'Update available', 'download_update'); + appAutoUpdateNotifier( + message, + 'warning', + () => { + window.electronUI?.sendDataForAppUpdate(data); + }, + null, + 'Update available', + 'download_update' + ); } else if(data.outdated) { //This is for server mode or auto-update not supported desktop installer or not mentioned auto_update_url pgAdmin.Browser.notifier.warning( diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index 03c212c42df..f900229a8af 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -348,7 +348,7 @@ def upgrade_check(): .lower() == 'true') # Get the current version info from the website, and flash a message if # the user is out of date, and the check is enabled. - global platform + platform = None ret = { "outdated": False, } From 46944ed33da4226399bb4b57bed35bd0866e1824 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 8 Jul 2025 17:36:28 +0530 Subject: [PATCH 07/17] version set to 9.4 --- web/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/version.py b/web/version.py index 96206d5d831..8ab24f976c7 100644 --- a/web/version.py +++ b/web/version.py @@ -18,7 +18,7 @@ # Application version number components APP_RELEASE = 9 -APP_REVISION = 6 +APP_REVISION = 4 # Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string # for GA releases. @@ -27,7 +27,7 @@ # Numeric application version for upgrade checks. Should be in the format: # [X]XYYZZ, where X is the release version, Y is the revision, with a leading # zero if needed, and Z represents the suffix, with a leading zero if needed -APP_VERSION_INT = 90600 +APP_VERSION_INT = 90400 # DO NOT CHANGE! # The application version string, constructed from the components From d03f1a1a63c364849a24e75634f8426ebaa955d3 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Wed, 9 Jul 2025 13:56:55 +0530 Subject: [PATCH 08/17] Fix pgAdmin Python server startup issue and version set to 9.5 --- runtime/src/js/pgadmin.js | 3 ++- web/version.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index 3bcb16147ba..89f3783fce3 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -41,7 +41,7 @@ let UUID = crypto.randomUUID(); let appStartTime = (new Date()).getTime(); const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const baseUrl = `http://127.0.0.1:${serverPort}`; +let baseUrl = `http://127.0.0.1:${serverPort}`; let docsURLSubStrings = ['www.enterprisedb.com', 'www.postgresql.org', 'www.pgadmin.org', 'help/help']; @@ -230,6 +230,7 @@ function startDesktopMode() { process.env.PGADMIN_SERVER_MODE = 'OFF'; // Start Page URL + baseUrl = `http://127.0.0.1:${serverPort}`; startPageUrl = `${baseUrl}/?key=${UUID}`; serverCheckUrl = `${baseUrl}/misc/ping?key=${UUID}`; diff --git a/web/version.py b/web/version.py index 8ab24f976c7..d59a9651cc7 100644 --- a/web/version.py +++ b/web/version.py @@ -18,7 +18,7 @@ # Application version number components APP_RELEASE = 9 -APP_REVISION = 4 +APP_REVISION = 5 # Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string # for GA releases. @@ -27,7 +27,7 @@ # Numeric application version for upgrade checks. Should be in the format: # [X]XYYZZ, where X is the release version, Y is the revision, with a leading # zero if needed, and Z represents the suffix, with a leading zero if needed -APP_VERSION_INT = 90400 +APP_VERSION_INT = 90500 # DO NOT CHANGE! # The application version string, constructed from the components From d50de8aedb92c918aaaacd6ec548350d8ac6a804 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Wed, 9 Jul 2025 15:36:52 +0530 Subject: [PATCH 09/17] version set to 9.6 --- web/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/version.py b/web/version.py index d59a9651cc7..96206d5d831 100644 --- a/web/version.py +++ b/web/version.py @@ -18,7 +18,7 @@ # Application version number components APP_RELEASE = 9 -APP_REVISION = 5 +APP_REVISION = 6 # Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string # for GA releases. @@ -27,7 +27,7 @@ # Numeric application version for upgrade checks. Should be in the format: # [X]XYYZZ, where X is the release version, Y is the revision, with a leading # zero if needed, and Z represents the suffix, with a leading zero if needed -APP_VERSION_INT = 90500 +APP_VERSION_INT = 90600 # DO NOT CHANGE! # The application version string, constructed from the components From 857bb26b96c1bc273cb15030a1ea015d57e3080d Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 15 Jul 2025 01:51:31 +0530 Subject: [PATCH 10/17] Fixed an issue where if current version is same as released version and auto update compatible then show check for updates button. --- docs/en_US/desktop_deployment.rst | 2 +- runtime/src/js/pgadmin.js | 2 + web/pgadmin/browser/static/js/browser.js | 33 ++++++++------ web/pgadmin/misc/__init__.py | 50 +++++++++++++++++----- web/pgadmin/static/js/BrowserComponent.jsx | 2 +- 5 files changed, 62 insertions(+), 27 deletions(-) diff --git a/docs/en_US/desktop_deployment.rst b/docs/en_US/desktop_deployment.rst index 6cd7f7396ab..af8d488c147 100644 --- a/docs/en_US/desktop_deployment.rst +++ b/docs/en_US/desktop_deployment.rst @@ -206,7 +206,7 @@ Technical Architecture } else if (data.update_downloading) { appAutoUpdateNotifier('Update downloading...', 'info', null, 10000); } else if (data.no_update_available) { - appAutoUpdateNotifier('No update available.....', 'info', null, 10000); + appAutoUpdateNotifier('No update available...', 'info', null, 10000); } else if (data.update_downloaded) { const UPDATE_DOWNLOADED_MESSAGE = gettext('An update is ready. Restart the app now to install it, or later to keep using the current version.'); appAutoUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', installUpdate, null, 'Update downloaded', 'update_downloaded'); diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index 89f3783fce3..25b4078c9a3 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -444,10 +444,12 @@ function notifyUpdateInstalled() { configStore.set('update_installed', false); // Notify renderer if (pgAdminMainScreen) { + misc.writeServerLog('[Auto-Updater]: Update installed successfully...'); pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_installed: true}); } else { // If main screen not ready, wait and send after it's created app.once('browser-window-created', (event, window) => { + misc.writeServerLog('[Auto-Updater]: Update installed successfully...'); window.webContents.send('notifyAppAutoUpdate', {update_installed: true}); }); } diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 015f8aafc86..9e10ad70dde 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -281,19 +281,24 @@ define('pgadmin.browser', [ window.electronUI?.sendDataForAppUpdate({ 'check_for_updates': data.check_for_auto_updates, }); - if (pgAdmin.server_mode == 'False' && (data.check_for_auto_updates && data.auto_update_url!=='')) { - // This is for desktop installers whose auto_update_url is mentioned in https://www.pgadmin.org/versions.json - const message = `${gettext('You are currently running version %s of %s, however the current version is %s.', data.current_version, data.product_name, data.upgrade_version)}`; - appAutoUpdateNotifier( - message, - 'warning', - () => { - window.electronUI?.sendDataForAppUpdate(data); - }, - null, - 'Update available', - 'download_update' - ); + const isDesktopWithAutoUpdate = pgAdmin.server_mode == 'False' && data.check_for_auto_updates && data.auto_update_url !== ''; + const isUpdateAvailable = data.upgrade_version_int > data.current_version_int; + const noUpdateMessage = 'No update available...'; + // This is for desktop installers whose auto_update_url is mentioned in https://www.pgadmin.org/versions.json + if (isDesktopWithAutoUpdate) { + if (isUpdateAvailable) { + const message = `${gettext('You are currently running version %s of %s, however the current version is %s.', data.current_version, data.product_name, data.upgrade_version)}`; + appAutoUpdateNotifier( + message, + 'warning', + () => { + window.electronUI?.sendDataForAppUpdate(data); + }, + null, + 'Update available', + 'download_update' + ); + } } else if(data.outdated) { //This is for server mode or auto-update not supported desktop installer or not mentioned auto_update_url pgAdmin.Browser.notifier.warning( @@ -308,7 +313,7 @@ define('pgadmin.browser', [ // If the user manually triggered a check for updates (trigger_update_check is true) // and no update is available (data.outdated is false), show an info notification. if (!data.outdated && trigger_update_check){ - appAutoUpdateNotifier('No update available.....', 'info', null, 10000); + appAutoUpdateNotifier(noUpdateMessage, 'info', null, 10000); } }).catch((error)=>{ console.error('Error during version check', error); diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index f900229a8af..0ff79f5ed2f 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -391,20 +391,19 @@ def upgrade_check(): 'Exception when checking for update') return internal_server_error('Failed to check for update') + if sys.platform == 'darwin': + platform = 'macos' + elif sys.platform == 'win32': + platform = 'windows' + + # Check if the fetched data is valid and if the latest + # version is newer than the current version. if data is not None and \ data[config.UPGRADE_CHECK_KEY]['version_int'] > \ config.APP_VERSION_INT: - if sys.platform == 'darwin': - platform = 'macos' - elif sys.platform == 'win32': - platform = 'windows' - # Determine if auto-update is available and construct the - # response accordingly. If running in desktop mode - # (not SERVER_MODE) and an auto-update URL is provided for the - # platform, return a response indicating that auto-update is - # available, including relevant update details. - # Otherwise, return a response indicating that auto-update is - # not available, but an update exists. + # If running in desktop mode with a valid auto-update + # URL for the current platform, prepare a response that + # enables the auto-update feature in the client. if not config.SERVER_MODE and data[config.UPGRADE_CHECK_KEY][ 'auto_update_url'][platform] != '': ret = { @@ -425,6 +424,10 @@ def upgrade_check(): 'download_url'] } else: + # For server mode or if auto-update is not supported, + # indicate an update is available but disable + # the auto-update feature. The user will be + # directed to the download URL. ret = { "outdated": True, "check_for_auto_updates": False, @@ -435,6 +438,31 @@ def upgrade_check(): "download_url": data[config.UPGRADE_CHECK_KEY][ 'download_url'] } + # This handles a specific desktop mode case: the current version + # is up-to-date, but we still need to inform the client + # about the auto-update capability. + elif (data[config.UPGRADE_CHECK_KEY]['version_int'] == + config.APP_VERSION_INT and + not config.SERVER_MODE and + data[config.UPGRADE_CHECK_KEY]['auto_update_url'][ + platform] != ''): + ret = { + "outdated": False, + "check_for_auto_updates": True, + "auto_update_url": data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform], + "platform": platform, + "installer_type": config.UPGRADE_CHECK_KEY, + "current_version": config.APP_VERSION, + "upgrade_version": data[config.UPGRADE_CHECK_KEY][ + 'version'], + "current_version_int": config.APP_VERSION_INT, + "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ + 'version_int'], + "product_name": config.APP_NAME, + "download_url": data[config.UPGRADE_CHECK_KEY][ + 'download_url'] + } store_setting('LastUpdateCheck', today) return make_json_response(data=ret) diff --git a/web/pgadmin/static/js/BrowserComponent.jsx b/web/pgadmin/static/js/BrowserComponent.jsx index a88007fae89..5240e857875 100644 --- a/web/pgadmin/static/js/BrowserComponent.jsx +++ b/web/pgadmin/static/js/BrowserComponent.jsx @@ -198,7 +198,7 @@ export default function BrowserComponent({pgAdmin}) { } else if (data.update_downloading) { appAutoUpdateNotifier('Update downloading...', 'info', null, 10000); } else if (data.no_update_available) { - appAutoUpdateNotifier('No update available.....', 'info', null, 10000); + appAutoUpdateNotifier('No update available...', 'info', null, 10000); } else if (data.update_downloaded) { const UPDATE_DOWNLOADED_MESSAGE = gettext('An update is ready. Restart the app now to install it, or later to keep using the current version.'); appAutoUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', installUpdate, null, 'Update downloaded', 'update_downloaded'); From 4027fb183007606cddbfc0f6f2427912e918ec55 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 15 Jul 2025 02:17:43 +0530 Subject: [PATCH 11/17] version set to 9.5 --- web/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/version.py b/web/version.py index 96206d5d831..d59a9651cc7 100644 --- a/web/version.py +++ b/web/version.py @@ -18,7 +18,7 @@ # Application version number components APP_RELEASE = 9 -APP_REVISION = 6 +APP_REVISION = 5 # Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string # for GA releases. @@ -27,7 +27,7 @@ # Numeric application version for upgrade checks. Should be in the format: # [X]XYYZZ, where X is the release version, Y is the revision, with a leading # zero if needed, and Z represents the suffix, with a leading zero if needed -APP_VERSION_INT = 90600 +APP_VERSION_INT = 90500 # DO NOT CHANGE! # The application version string, constructed from the components From 9aabe9429c7bc624c84d505123099f534577d4b9 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 15 Jul 2025 10:09:37 +0530 Subject: [PATCH 12/17] Fixed an issue where the 'Check for Updates' button did not appear after application restart if the /upgrade_check API had already been called earlier that day. --- runtime/src/js/pgadmin.js | 30 ++- web/pgadmin/browser/static/js/browser.js | 2 +- web/pgadmin/misc/__init__.py | 211 +++++++++--------- web/pgadmin/static/js/BrowserComponent.jsx | 1 + .../js/helpers/appAutoUpdateNotifier.jsx | 3 +- web/version.py | 4 +- 6 files changed, 136 insertions(+), 115 deletions(-) diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index 25b4078c9a3..055d2c9cc2b 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -440,18 +440,26 @@ let splashWindow; // Helper to notify update installed after restart function notifyUpdateInstalled() { if (configStore.get('update_installed')) { - // Reset the flag - configStore.set('update_installed', false); - // Notify renderer - if (pgAdminMainScreen) { - misc.writeServerLog('[Auto-Updater]: Update installed successfully...'); - pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_installed: true}); - } else { - // If main screen not ready, wait and send after it's created - app.once('browser-window-created', (event, window) => { + try { + // Notify renderer + if (pgAdminMainScreen) { misc.writeServerLog('[Auto-Updater]: Update installed successfully...'); - window.webContents.send('notifyAppAutoUpdate', {update_installed: true}); - }); + setTimeout(() => { + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_installed: true}); + }, 10000); + } else { + // If main screen not ready, wait and send after it's created + app.once('browser-window-created', (event, window) => { + misc.writeServerLog('[Auto-Updater]: Update installed successfully...'); + setTimeout(() => { + pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_installed: true}); + }, 10000); + }); + } + // Reset the flag + configStore.set('update_installed', false); + } catch (err) { + misc.writeServerLog(`[Auto-Updater]: ${err}`); } } } diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 9e10ad70dde..5f0d14c0c0f 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -282,7 +282,7 @@ define('pgadmin.browser', [ 'check_for_updates': data.check_for_auto_updates, }); const isDesktopWithAutoUpdate = pgAdmin.server_mode == 'False' && data.check_for_auto_updates && data.auto_update_url !== ''; - const isUpdateAvailable = data.upgrade_version_int > data.current_version_int; + const isUpdateAvailable = data.outdated && data.upgrade_version_int > data.current_version_int; const noUpdateMessage = 'No update available...'; // This is for desktop installers whose auto_update_url is mentioned in https://www.pgadmin.org/versions.json if (isDesktopWithAutoUpdate) { diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index 0ff79f5ed2f..c4f55ea5dc3 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -355,114 +355,125 @@ def upgrade_check(): if config.UPGRADE_CHECK_ENABLED: last_check = get_setting('LastUpdateCheck', default='0') today = time.strftime('%Y%m%d') - # Check for updates if either: - # - The last check was before today (daily check), or - # - The user manually triggered an update check - if int(last_check) < int(today) or trigger_update_check: - data = None - url = '%s?version=%s' % ( - config.UPGRADE_CHECK_URL, config.APP_VERSION) - current_app.logger.debug('Checking version data at: %s' % url) - try: - # Do not wait for more than 5 seconds. - # It stuck on rendering the browser.html, while working in the - # broken network. - if os.path.exists(config.CA_FILE) and sys.version_info >= ( - 3, 13): - # Use SSL context for Python 3.13+ - context = ssl.create_default_context(cafile=config.CA_FILE) - response = urlopen(url, data=data, timeout=5, - context=context) - elif os.path.exists(config.CA_FILE): - # Use cafile parameter for older versions - response = urlopen(url, data=data, timeout=5, - cafile=config.CA_FILE) - else: - response = urlopen(url, data, 5) - current_app.logger.debug( - 'Version check HTTP response code: %d' % response.getcode() - ) - if response.getcode() == 200: - data = json.loads(response.read().decode('utf-8')) - current_app.logger.debug('Response data: %s' % data) - except Exception: - current_app.logger.exception( - 'Exception when checking for update') - return internal_server_error('Failed to check for update') + data = None + url = '%s?version=%s' % ( + config.UPGRADE_CHECK_URL, config.APP_VERSION) + current_app.logger.debug('Checking version data at: %s' % url) + try: + # Do not wait for more than 5 seconds. + # It stuck on rendering the browser.html, while working in the + # broken network. + if os.path.exists(config.CA_FILE) and sys.version_info >= ( + 3, 13): + # Use SSL context for Python 3.13+ + context = ssl.create_default_context(cafile=config.CA_FILE) + response = urlopen(url, data=data, timeout=5, + context=context) + elif os.path.exists(config.CA_FILE): + # Use cafile parameter for older versions + response = urlopen(url, data=data, timeout=5, + cafile=config.CA_FILE) + else: + response = urlopen(url, data, 5) + current_app.logger.debug( + 'Version check HTTP response code: %d' % response.getcode() + ) + if response.getcode() == 200: + data = json.loads(response.read().decode('utf-8')) + current_app.logger.debug('Response data: %s' % data) + except Exception: + current_app.logger.exception( + 'Exception when checking for update') + return internal_server_error('Failed to check for update') + + if data is not None: if sys.platform == 'darwin': platform = 'macos' elif sys.platform == 'win32': platform = 'windows' - # Check if the fetched data is valid and if the latest - # version is newer than the current version. - if data is not None and \ - data[config.UPGRADE_CHECK_KEY]['version_int'] > \ - config.APP_VERSION_INT: - # If running in desktop mode with a valid auto-update - # URL for the current platform, prepare a response that - # enables the auto-update feature in the client. - if not config.SERVER_MODE and data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'][platform] != '': - ret = { - "outdated": True, - "check_for_auto_updates": True, - "auto_update_url": data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'][platform], - "platform": platform, - "installer_type": config.UPGRADE_CHECK_KEY, - "current_version": config.APP_VERSION, - "upgrade_version": data[config.UPGRADE_CHECK_KEY][ - 'version'], - "current_version_int": config.APP_VERSION_INT, - "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ - 'version_int'], - "product_name": config.APP_NAME, - "download_url": data[config.UPGRADE_CHECK_KEY][ - 'download_url'] - } + auto_update_supported_update_res = { + "outdated": True, + "check_for_auto_updates": True, + "auto_update_url": data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform], + "platform": platform, + "installer_type": config.UPGRADE_CHECK_KEY, + "current_version": config.APP_VERSION, + "upgrade_version": data[config.UPGRADE_CHECK_KEY][ + 'version'], + "current_version_int": config.APP_VERSION_INT, + "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ + 'version_int'], + "product_name": config.APP_NAME, + "download_url": data[config.UPGRADE_CHECK_KEY][ + 'download_url'] + } + auto_update_supported_no_update_res = { + "outdated": False, + "check_for_auto_updates": True, + "auto_update_url": data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform], + "platform": platform, + "installer_type": config.UPGRADE_CHECK_KEY, + "current_version": config.APP_VERSION, + "upgrade_version": data[config.UPGRADE_CHECK_KEY][ + 'version'], + "current_version_int": config.APP_VERSION_INT, + "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ + 'version_int'], + "product_name": config.APP_NAME, + "download_url": data[config.UPGRADE_CHECK_KEY][ + 'download_url'] + } + # Check for updates if the last check was before today(daily check) + if int(last_check) < int(today): + # Check if the fetched data is valid and if the latest + # version is newer than the current version. + if data[config.UPGRADE_CHECK_KEY]['version_int'] > \ + config.APP_VERSION_INT: + # In desktop mode with a valid URL, enable + # auto-update in the client response. + if (not config.SERVER_MODE and + data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform] != ''): + ret = auto_update_supported_update_res + else: + # For server mode or unsupported auto-update, + # show update but disable auto-update and + # provide download link. + ret = { + "outdated": True, + "check_for_auto_updates": False, + "current_version": config.APP_VERSION, + "upgrade_version": data[config.UPGRADE_CHECK_KEY][ + 'version'], + "product_name": config.APP_NAME, + "download_url": data[config.UPGRADE_CHECK_KEY][ + 'download_url'] + } + # In desktop mode, app is up-to-date but inform client + # about auto-update support. + elif (data[config.UPGRADE_CHECK_KEY]['version_int'] == + config.APP_VERSION_INT and + not config.SERVER_MODE and + data[config.UPGRADE_CHECK_KEY]['auto_update_url'][ + platform] != ''): + ret = auto_update_supported_no_update_res + # If checked today, in desktop mode, and auto-update URL exists, + # inform client about auto-update support. + elif (int(last_check) == int(today) and not config.SERVER_MODE and + data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform] != ''): + # Check for updates when triggered by user + # and new version is available + if data[config.UPGRADE_CHECK_KEY]['version_int'] > \ + config.APP_VERSION_INT and trigger_update_check: + ret = auto_update_supported_update_res else: - # For server mode or if auto-update is not supported, - # indicate an update is available but disable - # the auto-update feature. The user will be - # directed to the download URL. - ret = { - "outdated": True, - "check_for_auto_updates": False, - "current_version": config.APP_VERSION, - "upgrade_version": data[config.UPGRADE_CHECK_KEY][ - 'version'], - "product_name": config.APP_NAME, - "download_url": data[config.UPGRADE_CHECK_KEY][ - 'download_url'] - } - # This handles a specific desktop mode case: the current version - # is up-to-date, but we still need to inform the client - # about the auto-update capability. - elif (data[config.UPGRADE_CHECK_KEY]['version_int'] == - config.APP_VERSION_INT and - not config.SERVER_MODE and - data[config.UPGRADE_CHECK_KEY]['auto_update_url'][ - platform] != ''): - ret = { - "outdated": False, - "check_for_auto_updates": True, - "auto_update_url": data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'][platform], - "platform": platform, - "installer_type": config.UPGRADE_CHECK_KEY, - "current_version": config.APP_VERSION, - "upgrade_version": data[config.UPGRADE_CHECK_KEY][ - 'version'], - "current_version_int": config.APP_VERSION_INT, - "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ - 'version_int'], - "product_name": config.APP_NAME, - "download_url": data[config.UPGRADE_CHECK_KEY][ - 'download_url'] - } + ret = auto_update_supported_no_update_res store_setting('LastUpdateCheck', today) return make_json_response(data=ret) diff --git a/web/pgadmin/static/js/BrowserComponent.jsx b/web/pgadmin/static/js/BrowserComponent.jsx index 5240e857875..88162dca161 100644 --- a/web/pgadmin/static/js/BrowserComponent.jsx +++ b/web/pgadmin/static/js/BrowserComponent.jsx @@ -205,6 +205,7 @@ export default function BrowserComponent({pgAdmin}) { } else if (data.error) { appAutoUpdateNotifier(`${data.errMsg}`, 'error'); } else if (data.update_installed) { + console.warn('in browsercomp------','Update installed'); const UPDATE_INSTALLED_MESSAGE = gettext('Update installed successfully!'); appAutoUpdateNotifier(UPDATE_INSTALLED_MESSAGE, 'success'); } diff --git a/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx b/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx index 940008547c5..1e68371d143 100644 --- a/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx +++ b/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx @@ -97,7 +97,7 @@ export function appAutoUpdateNotifier(desc, type, onClick, hideDuration=null, ti // Mark this warning as active activeWarningKeys.add(uniqueKey); - + console.warn('before if',desc,type); if (type == 'warning') { pgAdmin.Browser.notifier.notify( , null ); } else if(type == 'success') { + console.warn('inside if',desc,type); pgAdmin.Browser.notifier.success(desc, hideDuration); } else if(type == 'info') { pgAdmin.Browser.notifier.info(desc, hideDuration); diff --git a/web/version.py b/web/version.py index d59a9651cc7..96206d5d831 100644 --- a/web/version.py +++ b/web/version.py @@ -18,7 +18,7 @@ # Application version number components APP_RELEASE = 9 -APP_REVISION = 5 +APP_REVISION = 6 # Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string # for GA releases. @@ -27,7 +27,7 @@ # Numeric application version for upgrade checks. Should be in the format: # [X]XYYZZ, where X is the release version, Y is the revision, with a leading # zero if needed, and Z represents the suffix, with a leading zero if needed -APP_VERSION_INT = 90500 +APP_VERSION_INT = 90600 # DO NOT CHANGE! # The application version string, constructed from the components From a33a6b559efbad3cc4baadb2da9996c8b8d3add7 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 15 Jul 2025 14:06:04 +0530 Subject: [PATCH 13/17] Code cleaned, removed consoles --- docs/en_US/desktop_deployment.rst | 2 +- runtime/src/js/pgadmin.js | 2 +- runtime/src/js/pgadmin_preload.js | 1 + web/pgadmin/misc/__init__.py | 100 +++++++----------- web/pgadmin/static/js/BrowserComponent.jsx | 1 - .../js/helpers/appAutoUpdateNotifier.jsx | 3 - 6 files changed, 42 insertions(+), 67 deletions(-) diff --git a/docs/en_US/desktop_deployment.rst b/docs/en_US/desktop_deployment.rst index af8d488c147..74492baaa3d 100644 --- a/docs/en_US/desktop_deployment.rst +++ b/docs/en_US/desktop_deployment.rst @@ -177,7 +177,7 @@ Technical Architecture Handles core update functionality: - File: runtime/src/js/pgadmin.js + File: runtime/src/js/autoUpdaterHandler.js .. code-block:: javascript diff --git a/runtime/src/js/pgadmin.js b/runtime/src/js/pgadmin.js index 055d2c9cc2b..d074936074d 100644 --- a/runtime/src/js/pgadmin.js +++ b/runtime/src/js/pgadmin.js @@ -14,7 +14,7 @@ import path from 'path'; import * as misc from './misc.js'; import { spawn } from 'child_process'; import { fileURLToPath } from 'url'; -import { setupMenu, refreshMenus } from './menu.js'; +import { setupMenu } from './menu.js'; import contextMenu from 'electron-context-menu'; import { setupDownloader } from './downloader.js'; import { setupAutoUpdater, updateConfigAndMenus } from './autoUpdaterHandler.js'; diff --git a/runtime/src/js/pgadmin_preload.js b/runtime/src/js/pgadmin_preload.js index b63384f6cf0..9a570ed31e7 100644 --- a/runtime/src/js/pgadmin_preload.js +++ b/runtime/src/js/pgadmin_preload.js @@ -32,6 +32,7 @@ contextBridge.exposeInMainWorld('electronUI', { downloadStreamSaveEnd: (...args) => ipcRenderer.send('download-stream-save-end', ...args), downloadBase64UrlData: (...args) => ipcRenderer.invoke('download-base64-url-data', ...args), downloadTextData: (...args) => ipcRenderer.invoke('download-text-data', ...args), + //Auto-updater related functions sendDataForAppUpdate: (data) => ipcRenderer.send('sendDataForAppUpdate', data), notifyAppAutoUpdate: (callback) => { ipcRenderer.removeAllListeners('notifyAppAutoUpdate'); // Clean up previous listeners diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index c4f55ea5dc3..5b619e04039 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -344,14 +344,18 @@ def validate_binary_path(): methods=['GET']) @pga_login_required def upgrade_check(): + """ + Check for application updates and return update metadata to the client. + - Compares current version with remote version data. + - Supports auto-update in desktop mode. + """ + # Determine if this check was manually triggered by the user trigger_update_check = (request.args.get('trigger_update_check', 'false') .lower() == 'true') - # Get the current version info from the website, and flash a message if - # the user is out of date, and the check is enabled. + platform = None - ret = { - "outdated": False, - } + ret = {"outdated": False} + if config.UPGRADE_CHECK_ENABLED: last_check = get_setting('LastUpdateCheck', default='0') today = time.strftime('%Y%m%d') @@ -360,6 +364,8 @@ def upgrade_check(): url = '%s?version=%s' % ( config.UPGRADE_CHECK_URL, config.APP_VERSION) current_app.logger.debug('Checking version data at: %s' % url) + + # Attempt to fetch upgrade data from remote URL try: # Do not wait for more than 5 seconds. # It stuck on rendering the browser.html, while working in the @@ -388,62 +394,39 @@ def upgrade_check(): 'Exception when checking for update') return internal_server_error('Failed to check for update') - if data is not None: + if data: + # Determine platform if sys.platform == 'darwin': platform = 'macos' elif sys.platform == 'win32': platform = 'windows' - auto_update_supported_update_res = { - "outdated": True, - "check_for_auto_updates": True, - "auto_update_url": data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'][platform], - "platform": platform, - "installer_type": config.UPGRADE_CHECK_KEY, - "current_version": config.APP_VERSION, - "upgrade_version": data[config.UPGRADE_CHECK_KEY][ - 'version'], - "current_version_int": config.APP_VERSION_INT, - "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ - 'version_int'], - "product_name": config.APP_NAME, - "download_url": data[config.UPGRADE_CHECK_KEY][ - 'download_url'] - } - auto_update_supported_no_update_res = { - "outdated": False, + upgrade_version_int = data[config.UPGRADE_CHECK_KEY]['version_int'] + auto_update_url_exists = data[config.UPGRADE_CHECK_KEY][ + 'auto_update_url'][platform] != '' + + # Construct common response dicts for auto-update support + auto_update_common_res = { "check_for_auto_updates": True, "auto_update_url": data[config.UPGRADE_CHECK_KEY][ 'auto_update_url'][platform], "platform": platform, "installer_type": config.UPGRADE_CHECK_KEY, "current_version": config.APP_VERSION, - "upgrade_version": data[config.UPGRADE_CHECK_KEY][ - 'version'], + "upgrade_version": data[config.UPGRADE_CHECK_KEY]['version'], "current_version_int": config.APP_VERSION_INT, - "upgrade_version_int": data[config.UPGRADE_CHECK_KEY][ - 'version_int'], + "upgrade_version_int": upgrade_version_int, "product_name": config.APP_NAME, - "download_url": data[config.UPGRADE_CHECK_KEY][ - 'download_url'] } + # Check for updates if the last check was before today(daily check) if int(last_check) < int(today): - # Check if the fetched data is valid and if the latest - # version is newer than the current version. - if data[config.UPGRADE_CHECK_KEY]['version_int'] > \ - config.APP_VERSION_INT: - # In desktop mode with a valid URL, enable - # auto-update in the client response. - if (not config.SERVER_MODE and - data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'][platform] != ''): - ret = auto_update_supported_update_res + # App is outdated + if upgrade_version_int > config.APP_VERSION_INT: + if not config.SERVER_MODE and auto_update_url_exists: + ret = {**auto_update_common_res, "outdated": True} else: - # For server mode or unsupported auto-update, - # show update but disable auto-update and - # provide download link. + # Auto-update unsupported ret = { "outdated": True, "check_for_auto_updates": False, @@ -454,26 +437,21 @@ def upgrade_check(): "download_url": data[config.UPGRADE_CHECK_KEY][ 'download_url'] } - # In desktop mode, app is up-to-date but inform client - # about auto-update support. - elif (data[config.UPGRADE_CHECK_KEY]['version_int'] == - config.APP_VERSION_INT and - not config.SERVER_MODE and - data[config.UPGRADE_CHECK_KEY]['auto_update_url'][ - platform] != ''): - ret = auto_update_supported_no_update_res - # If checked today, in desktop mode, and auto-update URL exists, - # inform client about auto-update support. - elif (int(last_check) == int(today) and not config.SERVER_MODE and - data[config.UPGRADE_CHECK_KEY][ - 'auto_update_url'][platform] != ''): + # App is up-to-date, but auto-update should be enabled + elif (upgrade_version_int == config.APP_VERSION_INT and + not config.SERVER_MODE and auto_update_url_exists): + ret = {**auto_update_common_res, "outdated": False} + # If already checked today, + # return auto-update info only if supported + elif (int(last_check) == int(today) and + not config.SERVER_MODE and auto_update_url_exists): # Check for updates when triggered by user # and new version is available - if data[config.UPGRADE_CHECK_KEY]['version_int'] > \ - config.APP_VERSION_INT and trigger_update_check: - ret = auto_update_supported_update_res + if (upgrade_version_int > config.APP_VERSION_INT and + trigger_update_check): + ret = {**auto_update_common_res, "outdated": True} else: - ret = auto_update_supported_no_update_res + ret = {**auto_update_common_res, "outdated": False} store_setting('LastUpdateCheck', today) return make_json_response(data=ret) diff --git a/web/pgadmin/static/js/BrowserComponent.jsx b/web/pgadmin/static/js/BrowserComponent.jsx index 88162dca161..5240e857875 100644 --- a/web/pgadmin/static/js/BrowserComponent.jsx +++ b/web/pgadmin/static/js/BrowserComponent.jsx @@ -205,7 +205,6 @@ export default function BrowserComponent({pgAdmin}) { } else if (data.error) { appAutoUpdateNotifier(`${data.errMsg}`, 'error'); } else if (data.update_installed) { - console.warn('in browsercomp------','Update installed'); const UPDATE_INSTALLED_MESSAGE = gettext('Update installed successfully!'); appAutoUpdateNotifier(UPDATE_INSTALLED_MESSAGE, 'success'); } diff --git a/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx b/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx index 1e68371d143..d69713c159f 100644 --- a/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx +++ b/web/pgadmin/static/js/helpers/appAutoUpdateNotifier.jsx @@ -97,7 +97,6 @@ export function appAutoUpdateNotifier(desc, type, onClick, hideDuration=null, ti // Mark this warning as active activeWarningKeys.add(uniqueKey); - console.warn('before if',desc,type); if (type == 'warning') { pgAdmin.Browser.notifier.notify( , null ); } else if(type == 'success') { - console.warn('inside if',desc,type); pgAdmin.Browser.notifier.success(desc, hideDuration); } else if(type == 'info') { pgAdmin.Browser.notifier.info(desc, hideDuration); } else if(type == 'error') { - console.warn('desc',desc); pgAdmin.Browser.notifier.error(desc, hideDuration); } From 584b453bd73b4c1ff7a23d080e9b7dc4fc9c0aac Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 15 Jul 2025 14:29:09 +0530 Subject: [PATCH 14/17] version set to 9.5 --- web/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/version.py b/web/version.py index 96206d5d831..d59a9651cc7 100644 --- a/web/version.py +++ b/web/version.py @@ -18,7 +18,7 @@ # Application version number components APP_RELEASE = 9 -APP_REVISION = 6 +APP_REVISION = 5 # Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string # for GA releases. @@ -27,7 +27,7 @@ # Numeric application version for upgrade checks. Should be in the format: # [X]XYYZZ, where X is the release version, Y is the revision, with a leading # zero if needed, and Z represents the suffix, with a leading zero if needed -APP_VERSION_INT = 90600 +APP_VERSION_INT = 90500 # DO NOT CHANGE! # The application version string, constructed from the components From 236e54367caf9e90f25f22408a2ec5226726fbd8 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Tue, 15 Jul 2025 15:25:12 +0530 Subject: [PATCH 15/17] config.py's UPGRADE_CHECK_URL reverted --- web/config.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/config.py b/web/config.py index 549439cd1ca..9cd24cbfac1 100644 --- a/web/config.py +++ b/web/config.py @@ -416,8 +416,7 @@ UPGRADE_CHECK_ENABLED = True # Where should we get the data from? -# UPGRADE_CHECK_URL = 'https://www.pgadmin.org/versions.json' -UPGRADE_CHECK_URL = 'http://127.0.0.1:8000/versions.json' +UPGRADE_CHECK_URL = 'https://www.pgadmin.org/versions.json' # What key should we look at in the upgrade data file? UPGRADE_CHECK_KEY = 'pgadmin4' From 089fed142b759ce2a65c062eef889c798082b467 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Wed, 30 Jul 2025 17:35:18 +0530 Subject: [PATCH 16/17] Fixed review comments on documentation --- docs/en_US/auto_update_desktop_app.rst | 96 + docs/en_US/desktop_deployment.rst | 154 +- .../images/auto_update_desktop_app.excalidraw | 4842 +++++++++++++++++ docs/en_US/images/auto_update_desktop_app.png | Bin 197075 -> 156038 bytes web/version.py | 4 +- 5 files changed, 4944 insertions(+), 152 deletions(-) create mode 100644 docs/en_US/auto_update_desktop_app.rst create mode 100644 docs/en_US/images/auto_update_desktop_app.excalidraw diff --git a/docs/en_US/auto_update_desktop_app.rst b/docs/en_US/auto_update_desktop_app.rst new file mode 100644 index 00000000000..5f01b3b4500 --- /dev/null +++ b/docs/en_US/auto_update_desktop_app.rst @@ -0,0 +1,96 @@ +Auto-Update of pgAdmin 4 Desktop Application +******************************************** + +pgAdmin 4's desktop application includes an automated update system built using +Electron's ``autoUpdater`` module. This feature enables users to receive and install +updates seamlessly, ensuring they always have access to the latest features and security fixes. + +Supported Platforms +=================== + +- **macOS:** Fully supported with automatic updates enabled by default +- **Windows:** Not supported +- **Linux:** Not supported + +Update Process Overview +======================= + +1. **Check for Updates:** + + - Automatic check on application startup + - Manual check available via pgAdmin 4 menu > Check for Updates + - Uses Electron's ``autoUpdater`` API to query update server + +2. **Download Process:** + + - Updates download automatically when detected + - Progress shown via notifications + - Background download prevents interruption of work + +3. **Installation Flow:** + + - User prompted to Install & Restart or Restart Later when update ready + - Update applied during application restart + + The flow chart for the update process is as follows: + + .. image:: images/auto_update_desktop_app.png + :alt: Auto-update Desktop App + :align: center + +User Interface Components +========================= + +1. **Notification Types:** + + - Update available + - Download progress + - Update ready to install + - Error notifications + +2. **Menu Integration:** + + - Check for Updates option in pgAdmin 4 menu + - Restart to Update option when update available + +Error Handling +============== + +The system includes comprehensive error handling: + +1. **Network Errors:** + + - Connection timeouts + - Download failures + - Server unavailability + +2. **Installation Errors:** + + - Corrupted downloads + +3. **Recovery Mechanisms:** + + - Fallback to manual update + - Error reporting to logs + +Security Considerations +======================= + +The update system implements below security measures: + +1. **Secure Communication:** + + - Protected update metadata + +Platform-Specific Notes +======================= + +1. **macOS:** + + - Uses native update mechanisms + - Requires signed packages + +References +========== + +- `Electron autoUpdater API Documentation `_ \ No newline at end of file diff --git a/docs/en_US/desktop_deployment.rst b/docs/en_US/desktop_deployment.rst index 74492baaa3d..19ea83077ed 100644 --- a/docs/en_US/desktop_deployment.rst +++ b/docs/en_US/desktop_deployment.rst @@ -129,155 +129,9 @@ will be available on Unix systems (~/.local/share/pgadmin/), on Mac OS X (~/Library/Preferences/pgadmin), and on Windows (%APPDATA%/pgadmin). +For details on the auto-update system for the desktop application, see -Auto-Update of pgAdmin 4 Desktop Application -******************************************** +.. toctree:: + :maxdepth: 1 -pgAdmin 4's desktop application includes an automated update system built using -Electron's ``autoUpdater`` module. This feature enables users to receive and install -updates seamlessly, ensuring they always have access to the latest features and security fixes. - -Supported Platforms -=================== - -- **macOS:** Fully supported with automatic updates enabled by default -- **Windows:** Not supported -- **Linux:** Not supported - -Update Process Overview -======================= - -1. **Check for Updates:** - - - Automatic check on application startup - - Manual check available via pgAdmin 4 menu > Check for Updates - - Uses Electron's ``autoUpdater`` API to query update server - -2. **Download Process:** - - - Updates download automatically when detected - - Progress shown via notifications - - Background download prevents interruption of work - -3. **Installation Flow:** - - - User prompted to Install & Restart or Restart Later when update ready - - Update applied during application restart - - The flow chart for the update process is as follows: - - .. image:: images/auto_update_desktop_app.png - :alt: Runtime View Log - :align: center - -Technical Architecture -====================== - -1. **Main Process** - - Handles core update functionality: - - File: runtime/src/js/autoUpdaterHandler.js - - .. code-block:: javascript - - autoUpdater.on('checking-for-update', () => { - misc.writeServerLog('[Auto-Updater]: Checking for update...'); - }); - - autoUpdater.on('update-available', () => { - setConfigAndRefreshMenu('update-available'); - misc.writeServerLog('[Auto-Updater]: Update downloading...'); - pgAdminMainScreen.webContents.send('notifyAppAutoUpdate', {update_downloading: true}); - }); - -2. **Renderer Process** - - Manages user interface updates: - - File: web/pgadmin/static/js/BrowserComponent.jsx - - .. code-block:: javascript - - if (window.electronUI && typeof window.electronUI.notifyAppAutoUpdate === 'function') { - window.electronUI.notifyAppAutoUpdate((data)=>{ - if (data?.check_version_update) { - pgAdmin.Browser.check_version_update(true); - } else if (data.update_downloading) { - appAutoUpdateNotifier('Update downloading...', 'info', null, 10000); - } else if (data.no_update_available) { - appAutoUpdateNotifier('No update available...', 'info', null, 10000); - } else if (data.update_downloaded) { - const UPDATE_DOWNLOADED_MESSAGE = gettext('An update is ready. Restart the app now to install it, or later to keep using the current version.'); - appAutoUpdateNotifier(UPDATE_DOWNLOADED_MESSAGE, 'warning', installUpdate, null, 'Update downloaded', 'update_downloaded'); - } else if (data.error) { - appAutoUpdateNotifier(`${data.errMsg}`, 'error'); - } else if (data.update_installed) { - const UPDATE_INSTALLED_MESSAGE = gettext('Update installed successfully!'); - appAutoUpdateNotifier(UPDATE_INSTALLED_MESSAGE, 'success'); - } - }); - } - -3. **Update Server Communication** - - - Configures update feed URL based on version information - - Handles server response validation - - Manages error conditions - -User Interface Components -========================= - -1. **Notification Types:** - - - Update available - - Download progress - - Update ready to install - - Error notifications - -2. **Menu Integration:** - - - Check for Updates option in pgAdmin 4 menu - - Restart to Update option when update available - -Error Handling -============== - -The system includes comprehensive error handling: - -1. **Network Errors:** - - - Connection timeouts - - Download failures - - Server unavailability - -2. **Installation Errors:** - - - Corrupted downloads - -3. **Recovery Mechanisms:** - - - Fallback to manual update - - Error reporting to logs - -Security Considerations -======================= - -The update system implements below security measures: - -1. **Secure Communication:** - - - Protected update metadata - -Platform-Specific Notes -======================= - -1. **macOS:** - - - Uses native update mechanisms - - Requires signed packages - -References -========== - -- `Electron autoUpdater API Documentation `_ \ No newline at end of file + auto_update_desktop_app diff --git a/docs/en_US/images/auto_update_desktop_app.excalidraw b/docs/en_US/images/auto_update_desktop_app.excalidraw new file mode 100644 index 00000000000..bad341c3c4b --- /dev/null +++ b/docs/en_US/images/auto_update_desktop_app.excalidraw @@ -0,0 +1,4842 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "ZcDIl6NxRdcqhQ0DATvzR", + "type": "rectangle", + "x": 513.76171875, + "y": -450.5111083984375, + "width": 123.87890625, + "height": 63.91796875, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a3", + "roundness": null, + "seed": 328366763, + "version": 115, + "versionNonce": 1379512075, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "c1KM-DcnNu4BEaCFo52xO" + }, + { + "id": "6BR24v9ffZn-d2krsnhCP", + "type": "arrow" + } + ], + "updated": 1753866098821, + "link": null, + "locked": false + }, + { + "id": "c1KM-DcnNu4BEaCFo52xO", + "type": "text", + "x": 526.631233215332, + "y": -431.0521240234375, + "width": 98.13987731933594, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a4", + "roundness": null, + "seed": 1840935365, + "version": 99, + "versionNonce": 1677807947, + "isDeleted": false, + "boundElements": null, + "updated": 1753866035337, + "link": null, + "locked": false, + "text": "App Starts", + "fontSize": 20, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ZcDIl6NxRdcqhQ0DATvzR", + "originalText": "App Starts", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "nemD4_eGT3ia3jmjiudSQ", + "type": "diamond", + "x": 497.57186981722714, + "y": -316.0813937211613, + "width": 152.27280757113897, + "height": 196.18402220846536, + "angle": 6.2819756370320565, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a5", + "roundness": null, + "seed": 768034725, + "version": 992, + "versionNonce": 1919453291, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "RvMObgoUHGzeebQICcdHR" + }, + { + "id": "6BR24v9ffZn-d2krsnhCP", + "type": "arrow" + }, + { + "id": "o_2AHU1ZNdpUQ5bXtaq1u", + "type": "arrow" + }, + { + "id": "HAZqnUwrLIcfJDqdoah7m", + "type": "arrow" + } + ], + "updated": 1753871829027, + "link": null, + "locked": false + }, + { + "id": "RvMObgoUHGzeebQICcdHR", + "type": "text", + "x": 542.104099114797, + "y": -248.03538816904495, + "width": 63.07194519042969, + "height": 60, + "angle": 6.2819756370320565, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a6", + "roundness": null, + "seed": 1961322059, + "version": 874, + "versionNonce": 816988939, + "isDeleted": false, + "boundElements": null, + "updated": 1753871829027, + "link": null, + "locked": false, + "text": "Platform\nis\nmacOS?", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nemD4_eGT3ia3jmjiudSQ", + "originalText": "Platform is macOS?", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "6BR24v9ffZn-d2krsnhCP", + "type": "arrow", + "x": 575.601171875, + "y": -381.5931396484375, + "width": 0.7134787782808871, + "height": 61.080779385168626, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a7", + "roundness": null, + "seed": 1876906443, + "version": 616, + "versionNonce": 2133567915, + "isDeleted": false, + "boundElements": null, + "updated": 1753871829027, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.7134787782808871, + 61.080779385168626 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ZcDIl6NxRdcqhQ0DATvzR", + "focus": 0.001614479866301253, + "gap": 5, + "fixedPoint": [ + 0.4991927600668494, + 1.0782252643158345 + ] + }, + "endBinding": { + "elementId": "nemD4_eGT3ia3jmjiudSQ", + "focus": 0.027935018896361748, + "gap": 1, + "fixedPoint": [ + 0.508558888076079, + -0.02193901519973458 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "o_2AHU1ZNdpUQ5bXtaq1u", + "type": "arrow", + "x": 493.35116498459155, + "y": -217.99226279776076, + "width": 182.61242427145345, + "height": 181.29945293908588, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aB", + "roundness": null, + "seed": 1405651851, + "version": 783, + "versionNonce": 1427973989, + "isDeleted": false, + "boundElements": null, + "updated": 1753874821639, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -182.61242427145345, + 0 + ], + [ + -182.61242427145345, + 181.29945293908588 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "nemD4_eGT3ia3jmjiudSQ", + "focus": 0.00020297796895842805, + "gap": 5.100497520929622, + "fixedPoint": [ + -0.021668025624253507, + 0.49949551746880505 + ] + }, + "endBinding": { + "elementId": "_RdirWM_88LuMIj8g_8ap", + "focus": -0.0028982015095925517, + "gap": 5, + "fixedPoint": [ + 0.4985508992452043, + -0.13555165176836387 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "HAZqnUwrLIcfJDqdoah7m", + "type": "arrow", + "x": 654.0733777548297, + "y": -218.18674489314512, + "width": 273.28951287017026, + "height": 176.49555816911516, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aC", + "roundness": null, + "seed": 1866536011, + "version": 1120, + "versionNonce": 403143403, + "isDeleted": false, + "boundElements": null, + "updated": 1753871829027, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 273.28951287017026, + 0 + ], + [ + 273.28951287017026, + 176.49555816911516 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "nemD4_eGT3ia3jmjiudSQ", + "focus": 0.0022347366945723915, + "gap": 5.100734825886996, + "fixedPoint": [ + 1.0216555359524222, + 0.49948378318015113 + ] + }, + "endBinding": { + "elementId": "TtjEts5MptwocPvMUTQUn", + "focus": -0.0030945905107288636, + "gap": 5, + "fixedPoint": [ + 0.4984527047446355, + -0.13827373879226532 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "8BaIn1qAUCZBTVtO2ADjL", + "type": "rectangle", + "x": 833.47265625, + "y": 72.9592310044064, + "width": 187.31640624999994, + "height": 51.7543920424686, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aD", + "roundness": null, + "seed": 657187205, + "version": 754, + "versionNonce": 475262187, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "UknptXxljuZW3SEAc6uK9" + }, + { + "id": "j3kAEd4AJKnkHsS2GXoih", + "type": "arrow" + }, + { + "id": "YK59exLA9Fc670EbqyjA6", + "type": "arrow" + } + ], + "updated": 1753871868538, + "link": null, + "locked": false + }, + { + "id": "UknptXxljuZW3SEAc6uK9", + "type": "text", + "x": 847.3309173583984, + "y": 78.8364270256407, + "width": 159.59988403320312, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aDG", + "roundness": null, + "seed": 131685125, + "version": 4, + "versionNonce": 624242821, + "isDeleted": false, + "boundElements": null, + "updated": 1753871844616, + "link": null, + "locked": false, + "text": "Register autoUpdater \nEvent Listeners", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "8BaIn1qAUCZBTVtO2ADjL", + "originalText": "Register autoUpdater \nEvent Listeners", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "kf20K7r-0NzpgxWNmh6Hd", + "type": "rectangle", + "x": 817.9656129677483, + "y": 214.0507485130281, + "width": 218.3359375, + "height": 59.28496225689722, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aE", + "roundness": null, + "seed": 1890460299, + "version": 726, + "versionNonce": 963466123, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "HqWQeIuQXxELnqGGc5hhl" + }, + { + "id": "j3kAEd4AJKnkHsS2GXoih", + "type": "arrow" + }, + { + "id": "Imd4mgC7suUpsFjsvoDXb", + "type": "arrow" + } + ], + "updated": 1753871900318, + "link": null, + "locked": false + }, + { + "id": "HqWQeIuQXxELnqGGc5hhl", + "type": "text", + "x": 826.6936631996819, + "y": 223.6932296414767, + "width": 200.8798370361328, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aEG", + "roundness": null, + "seed": 2083444907, + "version": 4, + "versionNonce": 688106283, + "isDeleted": false, + "boundElements": null, + "updated": 1753871854347, + "link": null, + "locked": false, + "text": "Automatic or User-initiated \nCheck for Updates", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kf20K7r-0NzpgxWNmh6Hd", + "originalText": "Automatic or User-initiated \nCheck for Updates", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "k5XhtHx7umAbzrDzVTCll", + "type": "rectangle", + "x": 820.886002336563, + "y": 348.5774945542638, + "width": 211.71484375000006, + "height": 61.6953125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aF", + "roundness": null, + "seed": 1356225861, + "version": 450, + "versionNonce": 1812131269, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "fBZIMUsQ-uVBzSC5LJCeb" + }, + { + "id": "Imd4mgC7suUpsFjsvoDXb", + "type": "arrow" + }, + { + "id": "gTD6adf-FaA6fSS8_RuJm", + "type": "arrow" + } + ], + "updated": 1753872135264, + "link": null, + "locked": false + }, + { + "id": "fBZIMUsQ-uVBzSC5LJCeb", + "type": "text", + "x": 831.5035179005279, + "y": 359.4251508042638, + "width": 190.4798126220703, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aFV", + "roundness": null, + "seed": 2117701035, + "version": 4, + "versionNonce": 428597291, + "isDeleted": false, + "boundElements": null, + "updated": 1753871888680, + "link": null, + "locked": false, + "text": "Call /upgrade_check API - \npgAdmin Python Server", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "k5XhtHx7umAbzrDzVTCll", + "originalText": "Call /upgrade_check API - \npgAdmin Python Server", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "GkVd6V3eJ-Qv5HLo_g3Gc", + "type": "diamond", + "x": 840.9962550768253, + "y": 510.63449004093536, + "width": 172.23437499999997, + "height": 144.515625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aQ", + "roundness": null, + "seed": 270883403, + "version": 767, + "versionNonce": 1852262053, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "NKrwHPHOjDw17CwH0dHO-" + }, + { + "id": "08Tbt_3pF247ja4y7sxbE", + "type": "arrow" + }, + { + "id": "gTD6adf-FaA6fSS8_RuJm", + "type": "arrow" + }, + { + "id": "eGluSjv1kFlTqRfkgSHxo", + "type": "arrow" + } + ], + "updated": 1753875224316, + "link": null, + "locked": false + }, + { + "id": "NKrwHPHOjDw17CwH0dHO-", + "type": "text", + "x": 889.6788798937198, + "y": 562.7633962909354, + "width": 74.75193786621094, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aQV", + "roundness": null, + "seed": 1768786469, + "version": 462, + "versionNonce": 604241573, + "isDeleted": false, + "boundElements": null, + "updated": 1753872151827, + "link": null, + "locked": false, + "text": "Update\nAvailable?", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "GkVd6V3eJ-Qv5HLo_g3Gc", + "originalText": "Update Available?", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "08Tbt_3pF247ja4y7sxbE", + "type": "arrow", + "x": 1017.2472968549716, + "y": 582.7923025409353, + "width": 96.03020822185363, + "height": 153.21787715306334, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aS", + "roundness": null, + "seed": 474030341, + "version": 687, + "versionNonce": 286254277, + "isDeleted": false, + "boundElements": null, + "updated": 1753872151828, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 96.03020822185363, + 0 + ], + [ + 96.03020822185363, + 153.21787715306334 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "GkVd6V3eJ-Qv5HLo_g3Gc", + "focus": -0.001383933398205526, + "gap": 5.070431913077651, + "fixedPoint": [ + 1.0233209356619224, + 0.49930803330089724 + ] + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "TtjEts5MptwocPvMUTQUn", + "type": "rectangle", + "x": 895.1484375, + "y": -36.691186724029976, + "width": 64.62890625, + "height": 35.577417192779976, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aU", + "roundness": null, + "seed": 2066399371, + "version": 292, + "versionNonce": 1972149163, + "isDeleted": false, + "boundElements": [ + { + "id": "HAZqnUwrLIcfJDqdoah7m", + "type": "arrow" + }, + { + "type": "text", + "id": "ouNfBCeIbeRtG8dGhQUKD" + }, + { + "id": "YK59exLA9Fc670EbqyjA6", + "type": "arrow" + } + ], + "updated": 1753871868538, + "link": null, + "locked": false + }, + { + "id": "ouNfBCeIbeRtG8dGhQUKD", + "type": "text", + "x": 915.1588973999023, + "y": -28.902478127639988, + "width": 24.607986450195312, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aV", + "roundness": null, + "seed": 757854379, + "version": 41, + "versionNonce": 881032171, + "isDeleted": false, + "boundElements": null, + "updated": 1753871639971, + "link": null, + "locked": false, + "text": "Yes", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "TtjEts5MptwocPvMUTQUn", + "originalText": "Yes", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "j3kAEd4AJKnkHsS2GXoih", + "type": "arrow", + "x": 927.030859375, + "y": 129.713623046875, + "width": 0.0027223427482567786, + "height": 79.33712546615314, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ao", + "roundness": null, + "seed": 1374493803, + "version": 61, + "versionNonce": 908177515, + "isDeleted": false, + "boundElements": null, + "updated": 1753871861497, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0.0027223427482567786, + 79.33712546615314 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "8BaIn1qAUCZBTVtO2ADjL", + "focus": 0.0010790143993978847, + "gap": 5, + "fixedPoint": [ + 0.4994661439326007, + 1.096610158146522 + ] + }, + "endBinding": { + "elementId": "kf20K7r-0NzpgxWNmh6Hd", + "focus": -0.0009051223733235234, + "gap": 5, + "fixedPoint": [ + 0.49954199019572754, + -0.08433841921554519 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "YK59exLA9Fc670EbqyjA6", + "type": "arrow", + "x": 927.362890625, + "y": 3.88623046875, + "width": 0.33203125, + "height": 64.0730005356564, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ap", + "roundness": null, + "seed": 1956291749, + "version": 24, + "versionNonce": 879881803, + "isDeleted": false, + "boundElements": null, + "updated": 1753871868538, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.33203125, + 64.0730005356564 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "TtjEts5MptwocPvMUTQUn", + "focus": -0.0005583070307976282, + "gap": 5, + "fixedPoint": [ + 0.4984527047446355, + 1.1405385886475956 + ] + }, + "endBinding": { + "elementId": "8BaIn1qAUCZBTVtO2ADjL", + "focus": -0.0027721680620452476, + "gap": 5, + "fixedPoint": [ + 0.4994661439326007, + -0.09661015814652217 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "Imd4mgC7suUpsFjsvoDXb", + "type": "arrow", + "x": 927.0335817177482, + "y": 278.3357107699253, + "width": 0.3901575061852327, + "height": 65.24178378433851, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aq", + "roundness": null, + "seed": 732696939, + "version": 25, + "versionNonce": 1328589355, + "isDeleted": false, + "boundElements": null, + "updated": 1753871900318, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.3901575061852327, + 65.24178378433851 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "kf20K7r-0NzpgxWNmh6Hd", + "focus": -0.0009800904111071558, + "gap": 5, + "fixedPoint": [ + 0.49954199019572754, + 1.0843384192155452 + ] + }, + "endBinding": { + "elementId": "k5XhtHx7umAbzrDzVTCll", + "focus": -0.0029646337003742355, + "gap": 5, + "fixedPoint": [ + 0.49952766656211345, + -0.08104343421552489 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "gTD6adf-FaA6fSS8_RuJm", + "type": "arrow", + "x": 926.643424211563, + "y": 415.2728070542638, + "width": 0.37001836526223997, + "height": 91.18634175103949, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "as", + "roundness": null, + "seed": 1139637221, + "version": 192, + "versionNonce": 66476389, + "isDeleted": false, + "boundElements": null, + "updated": 1753872151828, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0.37001836526223997, + 91.18634175103949 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "k5XhtHx7umAbzrDzVTCll", + "focus": 0.0009446668757728226, + "gap": 5, + "fixedPoint": [ + 0.49952766656211345, + 1.0810434342155248 + ] + }, + "endBinding": { + "elementId": "GkVd6V3eJ-Qv5HLo_g3Gc", + "focus": -0.001383933398205526, + "gap": 5.095676639088895, + "fixedPoint": [ + 0.49941939580876343, + -0.028891970924473907 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "pmSzX4zveyzcXuBxnbx9I", + "type": "rectangle", + "x": 1091.6444216048951, + "y": 740.1855175165927, + "width": 43.92813960522358, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "at", + "roundness": null, + "seed": 793548939, + "version": 396, + "versionNonce": 594502795, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "9vp9N8Cyll1pVlrK2Uk0l" + }, + { + "id": "aDBNcrycy4Kv_TPi3QWOP", + "type": "arrow" + } + ], + "updated": 1753875356738, + "link": null, + "locked": false + }, + { + "id": "9vp9N8Cyll1pVlrK2Uk0l", + "type": "text", + "x": 1101.3044981824091, + "y": 745.1855175165927, + "width": 24.607986450195312, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "au", + "roundness": null, + "seed": 103863435, + "version": 251, + "versionNonce": 302137605, + "isDeleted": false, + "boundElements": null, + "updated": 1753875356738, + "link": null, + "locked": false, + "text": "Yes", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "pmSzX4zveyzcXuBxnbx9I", + "originalText": "Yes", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "nYx5V9oKuJcKhQgh9_ufg", + "type": "rectangle", + "x": 998.7308757628043, + "y": 849.3638273256971, + "width": 234.22017212272468, + "height": 108.31261315815222, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "av", + "roundness": null, + "seed": 1747523749, + "version": 357, + "versionNonce": 420429221, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "OxpudsMkmFEJuH90GI8F8" + }, + { + "id": "gEUYk9gwdR7qCanNtpn7K", + "type": "arrow" + }, + { + "id": "aDBNcrycy4Kv_TPi3QWOP", + "type": "arrow" + } + ], + "updated": 1753875356738, + "link": null, + "locked": false + }, + { + "id": "OxpudsMkmFEJuH90GI8F8", + "type": "text", + "x": 1009.1930507523894, + "y": 863.5201339047733, + "width": 213.2958221435547, + "height": 80, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aw", + "roundness": null, + "seed": 2107050341, + "version": 419, + "versionNonce": 813553765, + "isDeleted": false, + "boundElements": null, + "updated": 1753875356738, + "link": null, + "locked": false, + "text": "Fetch update info like ftpUrl,\nlatest version, etc from\npgadmin.org/versions.json via\n/upgrade_check API ", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nYx5V9oKuJcKhQgh9_ufg", + "originalText": "Fetch update info like ftpUrl, latest version, etc from pgadmin.org/versions.json via /upgrade_check API ", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "gtiAKSDG05vccFa-3lXcH", + "type": "rectangle", + "x": 994.2380096266904, + "y": 1017.7776774273118, + "width": 247.2658543746329, + "height": 37.35740391241222, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ax", + "roundness": null, + "seed": 1920903819, + "version": 354, + "versionNonce": 58707621, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "oPfJ6RFjAyKODyI9niVTb" + }, + { + "id": "gEUYk9gwdR7qCanNtpn7K", + "type": "arrow" + }, + { + "id": "2fKtyjsgykdME-_AxWKeO", + "type": "arrow" + } + ], + "updated": 1753875380085, + "link": null, + "locked": false + }, + { + "id": "oPfJ6RFjAyKODyI9niVTb", + "type": "text", + "x": 1006.4470171362725, + "y": 1026.456379383518, + "width": 222.84783935546875, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ay", + "roundness": null, + "seed": 1376976709, + "version": 310, + "versionNonce": 171173227, + "isDeleted": false, + "boundElements": null, + "updated": 1753874880278, + "link": null, + "locked": false, + "text": "Build feed URL for autoUpdate", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "gtiAKSDG05vccFa-3lXcH", + "originalText": "Build feed URL for autoUpdate", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "eGlp6_BmLYYXjhITsAwtL", + "type": "rectangle", + "x": 992.1928245457041, + "y": 1110.3781326633664, + "width": 254.83043862546492, + "height": 35.58460763648441, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "az", + "roundness": null, + "seed": 853780363, + "version": 522, + "versionNonce": 188576389, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "RjMIeT2F9PGsQplTtG-CV" + }, + { + "id": "2fKtyjsgykdME-_AxWKeO", + "type": "arrow" + }, + { + "id": "tldYOw-XmZ3ZmXb99kpNW", + "type": "arrow" + } + ], + "updated": 1753875385090, + "link": null, + "locked": false + }, + { + "id": "RjMIeT2F9PGsQplTtG-CV", + "type": "text", + "x": 1012.104129979042, + "y": 1118.1704364816087, + "width": 215.00782775878906, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b00", + "roundness": null, + "seed": 730053515, + "version": 491, + "versionNonce": 2047921579, + "isDeleted": false, + "boundElements": null, + "updated": 1753874875092, + "link": null, + "locked": false, + "text": "Set feed URL for autoUpdater", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "eGlp6_BmLYYXjhITsAwtL", + "originalText": "Set feed URL for autoUpdater", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "96D3OfhDs90JtMCsx2-JQ", + "type": "diamond", + "x": 1002.3706657181706, + "y": 1204.9451506930684, + "width": 219.69789067087484, + "height": 180, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b03", + "roundness": null, + "seed": 1268134149, + "version": 420, + "versionNonce": 821991339, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "HF2IiJ7cd0yrRWsMbGQFn" + }, + { + "id": "tldYOw-XmZ3ZmXb99kpNW", + "type": "arrow" + }, + { + "id": "B4BF9A7_L5qpNEq3g9d0h", + "type": "arrow" + }, + { + "id": "Z7ZJzVYSaQPWXtCQpzm4_", + "type": "arrow" + } + ], + "updated": 1753875398899, + "link": null, + "locked": false + }, + { + "id": "HF2IiJ7cd0yrRWsMbGQFn", + "type": "text", + "x": 1079.8391599923345, + "y": 1254.9451506930684, + "width": 64.91195678710938, + "height": 80, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b04", + "roundness": null, + "seed": 460299563, + "version": 183, + "versionNonce": 1640831685, + "isDeleted": false, + "boundElements": null, + "updated": 1753874889665, + "link": null, + "locked": false, + "text": "Show\nNotifier:\nUpdate\navailable", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "96D3OfhDs90JtMCsx2-JQ", + "originalText": "Show Notifier: Update available", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "XpCfi4pS3pREDb8uMpzt7", + "type": "rectangle", + "x": 1260.7857497234963, + "y": 1538.9494230894195, + "width": 91.05217202485832, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b05", + "roundness": null, + "seed": 412357547, + "version": 418, + "versionNonce": 282933899, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "MHzOYb5drBoYJmvCye59h" + }, + { + "id": "B4BF9A7_L5qpNEq3g9d0h", + "type": "arrow" + }, + { + "id": "vur7TNn6TCkBEDMJUFZxI", + "type": "arrow" + } + ], + "updated": 1753875503732, + "link": null, + "locked": false + }, + { + "id": "MHzOYb5drBoYJmvCye59h", + "type": "text", + "x": 1268.7838587461795, + "y": 1543.9494230894195, + "width": 75.05595397949219, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b06", + "roundness": null, + "seed": 980569035, + "version": 315, + "versionNonce": 30530725, + "isDeleted": false, + "boundElements": null, + "updated": 1753874917537, + "link": null, + "locked": false, + "text": "Download", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "XpCfi4pS3pREDb8uMpzt7", + "originalText": "Download", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "NBm5sqguv8PpxQU20WkR0", + "type": "diamond", + "x": 1375.8353846833124, + "y": 2040.0447848489407, + "width": 203.28804713495796, + "height": 180, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b07", + "roundness": null, + "seed": 870223403, + "version": 687, + "versionNonce": 1137045253, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "fhduvkn1f2r0FTFVCJdF-" + }, + { + "id": "juxzuCisiZpqa8dgvh842", + "type": "arrow" + }, + { + "id": "pmNl_ulsPA1kY4Nr_bz6R", + "type": "arrow" + }, + { + "id": "mEjXydzY8qFO1xZnOp49N", + "type": "arrow" + } + ], + "updated": 1753875565716, + "link": null, + "locked": false + }, + { + "id": "fhduvkn1f2r0FTFVCJdF-", + "type": "text", + "x": 1432.4414235666613, + "y": 2090.0447848489407, + "width": 90.43194580078125, + "height": 80, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b08", + "roundness": null, + "seed": 90874693, + "version": 519, + "versionNonce": 593971947, + "isDeleted": false, + "boundElements": null, + "updated": 1753874967972, + "link": null, + "locked": false, + "text": "Show\nNotifier:\nUpdate\ndownloaded", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "NBm5sqguv8PpxQU20WkR0", + "originalText": "Show Notifier: Update downloaded", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "kdsVG_4iF2Wd07odvwLQ2", + "type": "rectangle", + "x": 1514.8936069800056, + "y": 2293.962180267157, + "width": 163.10447861616763, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b09", + "roundness": null, + "seed": 766019339, + "version": 653, + "versionNonce": 1669912133, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "8eL25mKAKc6OL6iC1wxFn" + }, + { + "id": "mEjXydzY8qFO1xZnOp49N", + "type": "arrow" + }, + { + "id": "XpyHTnop9Vi3FEcyiCxdV", + "type": "arrow" + } + ], + "updated": 1753875587911, + "link": null, + "locked": false + }, + { + "id": "8eL25mKAKc6OL6iC1wxFn", + "type": "text", + "x": 1553.2538830922886, + "y": 2298.962180267157, + "width": 86.38392639160156, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0A", + "roundness": null, + "seed": 1889335275, + "version": 584, + "versionNonce": 221450315, + "isDeleted": false, + "boundElements": null, + "updated": 1753875000148, + "link": null, + "locked": false, + "text": "Install Later", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kdsVG_4iF2Wd07odvwLQ2", + "originalText": "Install Later", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "aZYFW39uE-ddOrIJg4Q1w", + "type": "rectangle", + "x": 1272.874004277781, + "y": 2296.111214309475, + "width": 173.88986500538272, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0B", + "roundness": null, + "seed": 1947257995, + "version": 569, + "versionNonce": 950741061, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "DyCvDlXWPUlpsuCnSo2eq" + }, + { + "id": "pmNl_ulsPA1kY4Nr_bz6R", + "type": "arrow" + }, + { + "id": "EbrkkG2J9ExV_-oeOaj01", + "type": "arrow" + } + ], + "updated": 1753875572956, + "link": null, + "locked": false + }, + { + "id": "DyCvDlXWPUlpsuCnSo2eq", + "type": "text", + "x": 1301.0829824958046, + "y": 2301.111214309475, + "width": 117.47190856933594, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0C", + "roundness": null, + "seed": 1622735115, + "version": 426, + "versionNonce": 1289801797, + "isDeleted": false, + "boundElements": null, + "updated": 1753874984664, + "link": null, + "locked": false, + "text": "Install & Restart", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "aZYFW39uE-ddOrIJg4Q1w", + "originalText": "Install & Restart", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "4gSOAtuIfBbIk34dTyZZI", + "type": "rectangle", + "x": 1521.1444438135218, + "y": 2401.4954082449117, + "width": 165.38866766979845, + "height": 58.538870040836926, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0D", + "roundness": null, + "seed": 300268587, + "version": 488, + "versionNonce": 1143190917, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "5Dla40CUZUuSe_SABBY0o" + }, + { + "id": "XpyHTnop9Vi3FEcyiCxdV", + "type": "arrow" + }, + { + "id": "NUm6llHNMUlzhyloFTuEy", + "type": "arrow" + } + ], + "updated": 1753875592749, + "link": null, + "locked": false + }, + { + "id": "5Dla40CUZUuSe_SABBY0o", + "type": "text", + "x": 1549.8068257441241, + "y": 2410.76484326533, + "width": 108.06390380859375, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0E", + "roundness": null, + "seed": 130729899, + "version": 433, + "versionNonce": 1734093477, + "isDeleted": false, + "boundElements": null, + "updated": 1753875007808, + "link": null, + "locked": false, + "text": "Continue using\ncurrent verion", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "4gSOAtuIfBbIk34dTyZZI", + "originalText": "Continue using current verion", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "9NYyjoEsTlsEjfndiC-Lp", + "type": "rectangle", + "x": 1274.5066510469514, + "y": 2402.692378710723, + "width": 173.14439744813103, + "height": 57.42092651559188, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0F", + "roundness": null, + "seed": 815377643, + "version": 658, + "versionNonce": 1897365867, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "Sg3xQd515Sh-S_JPmjTJw" + }, + { + "id": "EbrkkG2J9ExV_-oeOaj01", + "type": "arrow" + }, + { + "id": "fDeHTNVlKErRUFgnQQLja", + "type": "arrow" + } + ], + "updated": 1753875580036, + "link": null, + "locked": false + }, + { + "id": "Sg3xQd515Sh-S_JPmjTJw", + "type": "text", + "x": 1299.7428893828333, + "y": 2411.402841968519, + "width": 122.67192077636719, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0FV", + "roundness": null, + "seed": 1961377707, + "version": 488, + "versionNonce": 934978219, + "isDeleted": false, + "boundElements": null, + "updated": 1753875033948, + "link": null, + "locked": false, + "text": "App quits, install\nupdate, restarts", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "9NYyjoEsTlsEjfndiC-Lp", + "originalText": "App quits, install update, restarts", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "71Ht_PTyAdrkBMvqGR4sk", + "type": "rectangle", + "x": 1276.3090083965758, + "y": 2523.3676060734765, + "width": 169.4112529913666, + "height": 57.78543046603136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0H", + "roundness": null, + "seed": 886912357, + "version": 630, + "versionNonce": 896825131, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "xp0I3hBMK5xAjbxx2SLHB" + }, + { + "id": "fDeHTNVlKErRUFgnQQLja", + "type": "arrow" + }, + { + "id": "AwM8iRmy30ryZdlgPkdp7", + "type": "arrow" + } + ], + "updated": 1753875624542, + "link": null, + "locked": false + }, + { + "id": "xp0I3hBMK5xAjbxx2SLHB", + "type": "text", + "x": 1301.1586702316145, + "y": 2532.260321306492, + "width": 119.71192932128906, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0I", + "roundness": null, + "seed": 213295653, + "version": 566, + "versionNonce": 1258776011, + "isDeleted": false, + "boundElements": null, + "updated": 1753875064591, + "link": null, + "locked": false, + "text": "Show Notifier:\nUpdate installed", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "71Ht_PTyAdrkBMvqGR4sk", + "originalText": "Show Notifier: Update installed", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "SAo0hlL718Cvs6_59hYaz", + "type": "rectangle", + "x": 1520.8159453191113, + "y": 2521.732477312148, + "width": 166.8848931752991, + "height": 57.941818047218476, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0J", + "roundness": null, + "seed": 45819179, + "version": 618, + "versionNonce": 2015056555, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "HAxulJluzpfHqm57v6HWS" + }, + { + "id": "NUm6llHNMUlzhyloFTuEy", + "type": "arrow" + }, + { + "id": "AbENH2oeFS_TbvTMA0n0p", + "type": "arrow" + } + ], + "updated": 1753875636886, + "link": null, + "locked": false + }, + { + "id": "HAxulJluzpfHqm57v6HWS", + "type": "text", + "x": 1548.4104304809796, + "y": 2530.7033863357574, + "width": 111.6959228515625, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0JV", + "roundness": null, + "seed": 1583443915, + "version": 537, + "versionNonce": 2060238309, + "isDeleted": false, + "boundElements": null, + "updated": 1753875058775, + "link": null, + "locked": false, + "text": "User can install\nupdate later", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "SAo0hlL718Cvs6_59hYaz", + "originalText": "User can install update later", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "hEqTDCFsECE4DchYxofsz", + "type": "rectangle", + "x": 889.887136268163, + "y": 1539.7630121157667, + "width": 75.82743075944403, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0L", + "roundness": null, + "seed": 1767132427, + "version": 575, + "versionNonce": 548630437, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "VdGIF64X6qozS_vjyZd48" + }, + { + "id": "Z7ZJzVYSaQPWXtCQpzm4_", + "type": "arrow" + }, + { + "id": "AzuJ9VE1bO72Ah9VWJQar", + "type": "arrow" + } + ], + "updated": 1753875475541, + "link": null, + "locked": false + }, + { + "id": "VdGIF64X6qozS_vjyZd48", + "type": "text", + "x": 903.3768785643889, + "y": 1544.7630121157667, + "width": 48.84794616699219, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0M", + "roundness": null, + "seed": 1597882315, + "version": 460, + "versionNonce": 92032389, + "isDeleted": false, + "boundElements": null, + "updated": 1753874909158, + "link": null, + "locked": false, + "text": "Cancel", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "hEqTDCFsECE4DchYxofsz", + "originalText": "Cancel", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "jejtjwhdjPRu_pRWNDEq1", + "type": "rectangle", + "x": 1194.6980234803186, + "y": 1645.6967400932317, + "width": 227.12389441426876, + "height": 92.5956721594248, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0N", + "roundness": null, + "seed": 1635235333, + "version": 105, + "versionNonce": 397073259, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "1fFYN8qR4hG0l3LaTLrSK" + }, + { + "id": "vur7TNn6TCkBEDMJUFZxI", + "type": "arrow" + }, + { + "id": "hvtIq0lBb40XiRBJKvH48", + "type": "arrow" + } + ], + "updated": 1753875515304, + "link": null, + "locked": false + }, + { + "id": "1fFYN8qR4hG0l3LaTLrSK", + "type": "text", + "x": 1221.2520513759296, + "y": 1671.994576172944, + "width": 174.01583862304688, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0O", + "roundness": null, + "seed": 1019452267, + "version": 88, + "versionNonce": 458305029, + "isDeleted": false, + "boundElements": null, + "updated": 1753874919861, + "link": null, + "locked": false, + "text": "Call /auto_update API -\npgAdmin Python Server", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "jejtjwhdjPRu_pRWNDEq1", + "originalText": "Call /auto_update API - pgAdmin Python Server", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "M5k2TyXDFSTbcONR3_oYn", + "type": "diamond", + "x": 1222.4053667998874, + "y": 1799.9530642178686, + "width": 173.37377208113168, + "height": 100, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0P", + "roundness": null, + "seed": 1428371845, + "version": 440, + "versionNonce": 469116843, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "qk8HL86q_2VJqXkjRKGyV" + }, + { + "id": "hvtIq0lBb40XiRBJKvH48", + "type": "arrow" + }, + { + "id": "vtxm6bsLhm7UXCALX0CKj", + "type": "arrow" + }, + { + "id": "haHIW-q7n6QVdHXZotrIs", + "type": "arrow" + } + ], + "updated": 1753875530231, + "link": null, + "locked": false + }, + { + "id": "qk8HL86q_2VJqXkjRKGyV", + "type": "text", + "x": 1271.7208328304241, + "y": 1829.9530642178686, + "width": 75.05595397949219, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0Q", + "roundness": null, + "seed": 1554797867, + "version": 285, + "versionNonce": 1000247525, + "isDeleted": false, + "boundElements": null, + "updated": 1753874924385, + "link": null, + "locked": false, + "text": "Download\nSuccess?", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "M5k2TyXDFSTbcONR3_oYn", + "originalText": "Download Success?", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "sI_O_IQsYDQV1bTLL-FtU", + "type": "rectangle", + "x": 1444.112776521688, + "y": 1957.15500689495, + "width": 65.63642338266664, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0R", + "roundness": null, + "seed": 1213121189, + "version": 208, + "versionNonce": 936224907, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "kW_26hyedn3sO_ZkYFy37" + }, + { + "id": "vtxm6bsLhm7UXCALX0CKj", + "type": "arrow" + }, + { + "id": "juxzuCisiZpqa8dgvh842", + "type": "arrow" + } + ], + "updated": 1753875550023, + "link": null, + "locked": false + }, + { + "id": "kW_26hyedn3sO_ZkYFy37", + "type": "text", + "x": 1464.6269949879236, + "y": 1962.15500689495, + "width": 24.607986450195312, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0S", + "roundness": null, + "seed": 1964052043, + "version": 91, + "versionNonce": 1656580421, + "isDeleted": false, + "boundElements": null, + "updated": 1753874963160, + "link": null, + "locked": false, + "text": "Yes", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "sI_O_IQsYDQV1bTLL-FtU", + "originalText": "Yes", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "M7k_Z5kYu3t1FnavHFJGL", + "type": "rectangle", + "x": 1124.5200783191547, + "y": 1961.0744002477734, + "width": 72.56839951556071, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0T", + "roundness": null, + "seed": 732504235, + "version": 367, + "versionNonce": 360112555, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "w4WcNX3fokhM4-HGTEOIc" + }, + { + "id": "haHIW-q7n6QVdHXZotrIs", + "type": "arrow" + }, + { + "id": "PVEkjge-uUsoky8quLmjf", + "type": "arrow" + } + ], + "updated": 1753875615913, + "link": null, + "locked": false + }, + { + "id": "w4WcNX3fokhM4-HGTEOIc", + "type": "text", + "x": 1150.3962885749818, + "y": 1966.0744002477734, + "width": 20.81597900390625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0U", + "roundness": null, + "seed": 463755205, + "version": 298, + "versionNonce": 497151301, + "isDeleted": false, + "boundElements": null, + "updated": 1753874946403, + "link": null, + "locked": false, + "text": "No", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "M7k_Z5kYu3t1FnavHFJGL", + "originalText": "No", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Q_dA-geezaoTYyr7ZrKDN", + "type": "rectangle", + "x": 1074.8788536827108, + "y": 2525.766931166849, + "width": 144.65044454679264, + "height": 54.75073072934718, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0V", + "roundness": null, + "seed": 2086742309, + "version": 365, + "versionNonce": 249869035, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "MHWC0w1Q52wP-IX0LfzzM" + }, + { + "id": "Q9gd7jlE1ypzvtttPMliX", + "type": "arrow" + }, + { + "id": "PVEkjge-uUsoky8quLmjf", + "type": "arrow" + } + ], + "updated": 1753875615913, + "link": null, + "locked": false + }, + { + "id": "MHWC0w1Q52wP-IX0LfzzM", + "type": "text", + "x": 1090.1321155068883, + "y": 2533.142296531523, + "width": 114.1439208984375, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0W", + "roundness": null, + "seed": 1338422027, + "version": 269, + "versionNonce": 807240517, + "isDeleted": false, + "boundElements": null, + "updated": 1753875605489, + "link": null, + "locked": false, + "text": "Show Notifier:\nDownload error", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Q_dA-geezaoTYyr7ZrKDN", + "originalText": "Show Notifier: Download error", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Si_MJSNd35lzcJmCKJA02", + "type": "rectangle", + "x": 1014.7757145603994, + "y": 2695.680848065389, + "width": 67.07009427419553, + "height": 31.960463243745835, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0X", + "roundness": null, + "seed": 1185383755, + "version": 288, + "versionNonce": 1977672683, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "FPjCdGmpmXY2EdabwLcg7" + }, + { + "id": "NQGWcdgkHsHxX_MK1ToFC", + "type": "arrow" + }, + { + "id": "xMlL6-loKJ8-b1jldUlqX", + "type": "arrow" + }, + { + "id": "Q9gd7jlE1ypzvtttPMliX", + "type": "arrow" + }, + { + "id": "AzuJ9VE1bO72Ah9VWJQar", + "type": "arrow" + }, + { + "id": "AwM8iRmy30ryZdlgPkdp7", + "type": "arrow" + }, + { + "id": "AbENH2oeFS_TbvTMA0n0p", + "type": "arrow" + } + ], + "updated": 1753875636886, + "link": null, + "locked": false + }, + { + "id": "FPjCdGmpmXY2EdabwLcg7", + "type": "text", + "x": 1034.350770242419, + "y": 2701.661079687262, + "width": 27.91998291015625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0Y", + "roundness": null, + "seed": 2060082763, + "version": 210, + "versionNonce": 410853221, + "isDeleted": false, + "boundElements": null, + "updated": 1753875091857, + "link": null, + "locked": false, + "text": "End", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Si_MJSNd35lzcJmCKJA02", + "originalText": "End", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Jr3eOk_lmd-Ir8qbNVMZN", + "type": "rectangle", + "x": 837.8204293465787, + "y": 2531.658636359348, + "width": 149.89568587857605, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0Z", + "roundness": null, + "seed": 1845260459, + "version": 417, + "versionNonce": 1614901131, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "043eBC-aZins033rN6Aq7" + }, + { + "id": "uJM3AEzsTpYPqTUTZdacC", + "type": "arrow" + }, + { + "id": "xMlL6-loKJ8-b1jldUlqX", + "type": "arrow" + } + ], + "updated": 1753875459038, + "link": null, + "locked": false + }, + { + "id": "043eBC-aZins033rN6Aq7", + "type": "text", + "x": 848.5843352131129, + "y": 2536.658636359348, + "width": 128.3678741455078, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0a", + "roundness": null, + "seed": 1742618091, + "version": 271, + "versionNonce": 2053613861, + "isDeleted": false, + "boundElements": null, + "updated": 1753875116369, + "link": null, + "locked": false, + "text": "Show Notifier: No\nupdate available", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Jr3eOk_lmd-Ir8qbNVMZN", + "originalText": "Show Notifier: No update available", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "N2Ffmu5mtvVOljStGAsF2", + "type": "rectangle", + "x": 622.1866275938726, + "y": 2532.5601769750174, + "width": 143.9201620032899, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0b", + "roundness": null, + "seed": 997406795, + "version": 329, + "versionNonce": 1605309925, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "qRWqegQczKYuDanw8AwkC" + }, + { + "id": "u0iKELG_kf5al-r928f4P", + "type": "arrow" + }, + { + "id": "NQGWcdgkHsHxX_MK1ToFC", + "type": "arrow" + } + ], + "updated": 1753875453483, + "link": null, + "locked": false + }, + { + "id": "qRWqegQczKYuDanw8AwkC", + "type": "text", + "x": 631.5627547380957, + "y": 2547.5601769750174, + "width": 125.16790771484375, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0c", + "roundness": null, + "seed": 1071502571, + "version": 269, + "versionNonce": 309269483, + "isDeleted": false, + "boundElements": null, + "updated": 1753875128653, + "link": null, + "locked": false, + "text": "Skip auto-update", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "N2Ffmu5mtvVOljStGAsF2", + "originalText": "Skip auto-update", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "_RdirWM_88LuMIj8g_8ap", + "type": "rectangle", + "x": 276.33458368020604, + "y": -31.692809858674877, + "width": 69.00831406586417, + "height": 36.8863081694069, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0d", + "roundness": null, + "seed": 544485771, + "version": 126, + "versionNonce": 2102987493, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "cSJM-s-mNeF94yjQ0WRC5" + }, + { + "id": "o_2AHU1ZNdpUQ5bXtaq1u", + "type": "arrow" + }, + { + "id": "u0iKELG_kf5al-r928f4P", + "type": "arrow" + } + ], + "updated": 1753875168098, + "link": null, + "locked": false + }, + { + "id": "cSJM-s-mNeF94yjQ0WRC5", + "type": "text", + "x": 300.430751211185, + "y": -23.249655773971426, + "width": 20.81597900390625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0e", + "roundness": null, + "seed": 385440203, + "version": 79, + "versionNonce": 1948217349, + "isDeleted": false, + "boundElements": null, + "updated": 1753874821639, + "link": null, + "locked": false, + "text": "No", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_RdirWM_88LuMIj8g_8ap", + "originalText": "No", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "u0iKELG_kf5al-r928f4P", + "type": "arrow", + "x": 304.4892875644887, + "y": 10.193498310732025, + "width": 389.55742103102887, + "height": 2517.3666786642852, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0f", + "roundness": null, + "seed": 681923883, + "version": 445, + "versionNonce": 745280837, + "isDeleted": false, + "boundElements": null, + "updated": 1753875184656, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1258.6833393321426 + ], + [ + 389.55742103102887, + 1258.6833393321426 + ], + [ + 389.55742103102887, + 2517.3666786642852 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "_RdirWM_88LuMIj8g_8ap", + "focus": 0.18401994700491678, + "gap": 5.000000000000114, + "fixedPoint": [ + 0.40799002649754224, + 1.135551651768364 + ] + }, + "endBinding": { + "elementId": "N2Ffmu5mtvVOljStGAsF2", + "focus": -0.0013896593584653643, + "gap": 5, + "fixedPoint": [ + 0.4993051703207665, + -0.1 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "jr1GsJE4snhGuj_JqaILM", + "type": "rectangle", + "x": 736.0382099189425, + "y": 741.5432351931912, + "width": 53.0668411685358, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0g", + "roundness": null, + "seed": 989939717, + "version": 214, + "versionNonce": 1713269925, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "jhfB9M-3qGIDs1Beh8MD3" + }, + { + "id": "eGluSjv1kFlTqRfkgSHxo", + "type": "arrow" + }, + { + "id": "uJM3AEzsTpYPqTUTZdacC", + "type": "arrow" + } + ], + "updated": 1753875417706, + "link": null, + "locked": false + }, + { + "id": "jhfB9M-3qGIDs1Beh8MD3", + "type": "text", + "x": 752.1636410012572, + "y": 746.5432351931912, + "width": 20.81597900390625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0h", + "roundness": null, + "seed": 497322629, + "version": 100, + "versionNonce": 864974187, + "isDeleted": false, + "boundElements": null, + "updated": 1753875217099, + "link": null, + "locked": false, + "text": "No", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "jr1GsJE4snhGuj_JqaILM", + "originalText": "No", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "eGluSjv1kFlTqRfkgSHxo", + "type": "arrow", + "x": 836.9999579877845, + "y": 582.7923025409353, + "width": 80.54797895454737, + "height": 153.75093265225576, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0i", + "roundness": null, + "seed": 2004506283, + "version": 85, + "versionNonce": 1903241733, + "isDeleted": false, + "boundElements": null, + "updated": 1753875224316, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -80.54797895454737, + 0 + ], + [ + -80.54797895454737, + 153.75093265225576 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "GkVd6V3eJ-Qv5HLo_g3Gc", + "focus": 0.001383933398205526, + "gap": 5.070431913077651, + "fixedPoint": [ + -0.023202668393233403, + 0.49930803330089724 + ] + }, + "endBinding": { + "elementId": "jr1GsJE4snhGuj_JqaILM", + "focus": -0.2306393723544903, + "gap": 5.000000000000114, + "fixedPoint": [ + 0.3846803138227543, + -0.16666666666667046 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "aDBNcrycy4Kv_TPi3QWOP", + "type": "arrow", + "x": 1113.5084914075069, + "y": 775.1855175165927, + "width": 10.51864504005107, + "height": 69.17830980910446, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0k", + "roundness": null, + "seed": 77788805, + "version": 526, + "versionNonce": 690191979, + "isDeleted": false, + "boundElements": null, + "updated": 1753875366854, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 34.58915490455229 + ], + [ + -10.51864504005107, + 34.58915490455229 + ], + [ + -10.51864504005107, + 69.17830980910446 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "pmSzX4zveyzcXuBxnbx9I", + "focus": 0.004552890283932782, + "gap": 5, + "fixedPoint": [ + 0.49772355485803155, + 1.1666666666666667 + ] + }, + "endBinding": { + "elementId": "nYx5V9oKuJcKhQgh9_ufg", + "focus": -0.10973534294883405, + "gap": 5, + "fixedPoint": [ + 0.44513232852558393, + -0.046162675372805106 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "gEUYk9gwdR7qCanNtpn7K", + "type": "arrow", + "x": 1115.7409618241668, + "y": 962.6764404838493, + "width": 11.6002312051844, + "height": 50.10123694346248, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0l", + "roundness": null, + "seed": 2114887371, + "version": 122, + "versionNonce": 1047204389, + "isDeleted": false, + "boundElements": null, + "updated": 1753875372210, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 25.05061847173124 + ], + [ + -11.6002312051844, + 25.05061847173124 + ], + [ + -11.6002312051844, + 50.10123694346248 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "nYx5V9oKuJcKhQgh9_ufg", + "focus": 0.000853897417063207, + "gap": 5, + "fixedPoint": [ + 0.49957305129146834, + 1.046162675372805 + ] + }, + "endBinding": { + "elementId": "gtiAKSDG05vccFa-3lXcH", + "focus": -0.1110562251286166, + "gap": 5, + "fixedPoint": [ + 0.44447188743569166, + -0.13384227693452544 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "2fKtyjsgykdME-_AxWKeO", + "type": "arrow", + "x": 1117.770936814007, + "y": 1060.135081339724, + "width": 13.882170965384148, + "height": 45.243051323642476, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0n", + "roundness": null, + "seed": 114901323, + "version": 84, + "versionNonce": 1647882757, + "isDeleted": false, + "boundElements": null, + "updated": 1753875380085, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 22.621525661821124 + ], + [ + -13.882170965384148, + 22.621525661821124 + ], + [ + -13.882170965384148, + 45.243051323642476 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "gtiAKSDG05vccFa-3lXcH", + "focus": 0.000808846011130908, + "gap": 5, + "fixedPoint": [ + 0.4995955769944345, + 1.1338422769345227 + ] + }, + "endBinding": { + "elementId": "eGlp6_BmLYYXjhITsAwtL", + "focus": -0.12337048976254524, + "gap": 5, + "fixedPoint": [ + 0.4383147551187282, + -0.1405101905598523 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "tldYOw-XmZ3ZmXb99kpNW", + "type": "arrow", + "x": 1119.5080438584366, + "y": 1150.9627402998508, + "width": 7.388432804828426, + "height": 49.19010107026497, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0o", + "roundness": null, + "seed": 147696811, + "version": 16, + "versionNonce": 240572901, + "isDeleted": false, + "boundElements": null, + "updated": 1753875385090, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 24.491205196608917 + ], + [ + -7.388432804828426, + 24.491205196608917 + ], + [ + -7.388432804828426, + 49.19010107026497 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "eGlp6_BmLYYXjhITsAwtL", + "focus": 0.0007848355992265639, + "gap": 5, + "fixedPoint": [ + 0.49960758220038665, + 1.1405101905598523 + ] + }, + "endBinding": { + "elementId": "96D3OfhDs90JtMCsx2-JQ", + "focus": -0.0011111111111101006, + "gap": 5.006298876874864, + "fixedPoint": [ + 0.49954482949429124, + -0.026623940683070182 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "B4BF9A7_L5qpNEq3g9d0h", + "type": "arrow", + "x": 1225.7425379303866, + "y": 1294.8451506930685, + "width": 80.4692978055391, + "height": 239.104272396351, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0p", + "roundness": null, + "seed": 1236182731, + "version": 100, + "versionNonce": 742065995, + "isDeleted": false, + "boundElements": null, + "updated": 1753875392722, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 80.4692978055391, + 0 + ], + [ + 80.4692978055391, + 239.104272396351 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "96D3OfhDs90JtMCsx2-JQ", + "focus": -0.0011111111111101006, + "gap": 5.119570294468062, + "fixedPoint": [ + 1.0167228803614008, + 0.49944444444444497 + ] + }, + "endBinding": { + "elementId": "XpCfi4pS3pREDb8uMpzt7", + "focus": -0.002196542878127829, + "gap": 5, + "fixedPoint": [ + 0.49890172856093384, + -0.16666666666666666 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "Z7ZJzVYSaQPWXtCQpzm4_", + "type": "arrow", + "x": 998.7003360478409, + "y": 1294.8451506930685, + "width": 70.99948439995592, + "height": 239.91786142269825, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0q", + "roundness": null, + "seed": 1107915173, + "version": 104, + "versionNonce": 2017733579, + "isDeleted": false, + "boundElements": null, + "updated": 1753875475543, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -70.99948439995592, + 0 + ], + [ + -70.99948439995592, + 239.91786142269825 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "96D3OfhDs90JtMCsx2-JQ", + "focus": 0.0011111111111101006, + "gap": 5.119570294468062, + "fixedPoint": [ + -0.016706258121650074, + 0.49944444444444497 + ] + }, + "endBinding": { + "elementId": "hEqTDCFsECE4DchYxofsz", + "focus": -0.0026375679354665974, + "gap": 5, + "fixedPoint": [ + 0.498681216032266, + -0.16666666666666666 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "uJM3AEzsTpYPqTUTZdacC", + "type": "arrow", + "x": 762.4716305032103, + "y": 776.5432351931912, + "width": 150.19664178265634, + "height": 1750.1154011661565, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0r", + "roundness": null, + "seed": 1737260709, + "version": 251, + "versionNonce": 1583913003, + "isDeleted": false, + "boundElements": null, + "updated": 1753875425636, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 875.0577005830784 + ], + [ + 75.57025556465123, + 875.0577005830784 + ], + [ + 75.57025556465123, + 1710.1154011661565 + ], + [ + 150.19664178265634, + 1710.1154011661565 + ], + [ + 150.19664178265634, + 1750.1154011661565 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "jr1GsJE4snhGuj_JqaILM", + "focus": 0.0037688318278616016, + "gap": 5, + "fixedPoint": [ + 0.49811558408606926, + 1.1666666666666667 + ] + }, + "endBinding": { + "elementId": "Jr3eOk_lmd-Ir8qbNVMZN", + "focus": -0.0013342612152407863, + "gap": 5, + "fixedPoint": [ + 0.4993328693923781, + -0.1 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": [ + { + "index": 3, + "start": [ + 75.57025556465123, + 875.0577005830784 + ], + "end": [ + 75.57025556465123, + 1710.1154011661565 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "AzuJ9VE1bO72Ah9VWJQar", + "type": "arrow", + "x": 927.700851647885, + "y": 1574.7630121157667, + "width": 120.50991004961224, + "height": 1115.9178359496223, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0s", + "roundness": null, + "seed": 2059061611, + "version": 170, + "versionNonce": 1847094507, + "isDeleted": false, + "boundElements": null, + "updated": 1753875475543, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 557.9589179748114 + ], + [ + 120.50991004961224, + 557.9589179748114 + ], + [ + 120.50991004961224, + 1115.9178359496223 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "hEqTDCFsECE4DchYxofsz", + "focus": 0.0026375679354665974, + "gap": 5, + "fixedPoint": [ + 0.498681216032266, + 1.1666666666666667 + ] + }, + "endBinding": { + "elementId": "Si_MJSNd35lzcJmCKJA02", + "focus": -0.002981954955694517, + "gap": 5, + "fixedPoint": [ + 0.4985090225221529, + -0.15644328938124583 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "NQGWcdgkHsHxX_MK1ToFC", + "type": "arrow", + "x": 694.0467085955175, + "y": 2587.5601769750174, + "width": 315.7290059648817, + "height": 124.00090271224462, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0t", + "roundness": null, + "seed": 1977130155, + "version": 82, + "versionNonce": 1346237707, + "isDeleted": false, + "boundElements": null, + "updated": 1753875475543, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 124.00090271224462 + ], + [ + 315.7290059648817, + 124.00090271224462 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "N2Ffmu5mtvVOljStGAsF2", + "focus": 0.0013896593584653643, + "gap": 5, + "fixedPoint": [ + 0.4993051703207665, + 1.1 + ] + }, + "endBinding": { + "elementId": "Si_MJSNd35lzcJmCKJA02", + "focus": 0.006257731575258419, + "gap": 5, + "fixedPoint": [ + -0.07454887389242583, + 0.49687113421237794 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "xMlL6-loKJ8-b1jldUlqX", + "type": "arrow", + "x": 912.6682722858667, + "y": 2586.658636359348, + "width": 108.4273010181746, + "height": 104.02221170604116, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0u", + "roundness": null, + "seed": 885435083, + "version": 91, + "versionNonce": 1450253227, + "isDeleted": false, + "boundElements": null, + "updated": 1753875475543, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 52.01110585302058 + ], + [ + 108.4273010181746, + 52.01110585302058 + ], + [ + 108.4273010181746, + 104.02221170604116 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "Jr3eOk_lmd-Ir8qbNVMZN", + "focus": 0.0013342612152407863, + "gap": 5, + "fixedPoint": [ + 0.4993328693923781, + 1.1 + ] + }, + "endBinding": { + "elementId": "Si_MJSNd35lzcJmCKJA02", + "focus": 1.3128865787625115, + "gap": 5, + "fixedPoint": [ + 0.09422767049953926, + -0.15644328938124583 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "Q9gd7jlE1ypzvtttPMliX", + "type": "arrow", + "x": 1147.1040759561072, + "y": 2585.5176618961964, + "width": 77.15216784577319, + "height": 105.16318616919261, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0v", + "roundness": null, + "seed": 757322251, + "version": 106, + "versionNonce": 690183435, + "isDeleted": false, + "boundElements": null, + "updated": 1753875602937, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 52.58159308459608 + ], + [ + -77.15216784577319, + 52.58159308459608 + ], + [ + -77.15216784577319, + 105.16318616919261 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "Q_dA-geezaoTYyr7ZrKDN", + "focus": 0.001382643521257596, + "gap": 5, + "fixedPoint": [ + 0.49930867823937064, + 1.0913229820569306 + ] + }, + "endBinding": { + "elementId": "Si_MJSNd35lzcJmCKJA02", + "focus": 0.6453292379272269, + "gap": 5, + "fixedPoint": [ + 0.8226646189636124, + -0.15644328938124583 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "vur7TNn6TCkBEDMJUFZxI", + "type": "arrow", + "x": 1306.2118357359257, + "y": 1573.9494230894195, + "width": 11.319549127339315, + "height": 66.74731700381221, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0w", + "roundness": null, + "seed": 1261833931, + "version": 38, + "versionNonce": 2003914379, + "isDeleted": false, + "boundElements": null, + "updated": 1753875509924, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 33.37365850190622 + ], + [ + -11.319549127339315, + 33.37365850190622 + ], + [ + -11.319549127339315, + 66.74731700381221 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "XpCfi4pS3pREDb8uMpzt7", + "focus": 0.002196542878127829, + "gap": 5, + "fixedPoint": [ + 0.49890172856093384, + 1.1666666666666667 + ] + }, + "endBinding": { + "elementId": "jejtjwhdjPRu_pRWNDEq1", + "focus": -0.11771270577532676, + "gap": 5, + "fixedPoint": [ + 0.44114364711233633, + -0.05399820405635533 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "hvtIq0lBb40XiRBJKvH48", + "type": "arrow", + "x": 1308.159970687453, + "y": 1743.2924122526563, + "width": 0.8322821530002784, + "height": 51.90282221729399, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0x", + "roundness": null, + "seed": 1090340139, + "version": 18, + "versionNonce": 1077032459, + "isDeleted": false, + "boundElements": null, + "updated": 1753875515304, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0.8322821530002784, + 51.90282221729399 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "jejtjwhdjPRu_pRWNDEq1", + "focus": 0.0081047551499913, + "gap": 5, + "fixedPoint": [ + 0.49955971167076985, + 1.053998204056353 + ] + }, + "endBinding": { + "elementId": "M5k2TyXDFSTbcONR3_oYn", + "focus": 0.009068048969443574, + "gap": 5.01703728743162, + "fixedPoint": [ + 0.49942321148810775, + -0.04757829747918322 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "vtxm6bsLhm7UXCALX0CKj", + "type": "arrow", + "x": 1398.9161751694649, + "y": 1849.8530642178687, + "width": 77.91481304355648, + "height": 102.30194267708134, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0y", + "roundness": null, + "seed": 461061861, + "version": 125, + "versionNonce": 1993058245, + "isDeleted": false, + "boundElements": null, + "updated": 1753875524054, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 77.91481304355648, + 0 + ], + [ + 77.91481304355648, + 102.30194267708134 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "M5k2TyXDFSTbcONR3_oYn", + "focus": -0.001999999999998181, + "gap": 3.3243039384247104, + "fixedPoint": [ + 1.0180940649256787, + 0.4990000000000009 + ] + }, + "endBinding": { + "elementId": "sI_O_IQsYDQV1bTLL-FtU", + "focus": -0.0030470886390909224, + "gap": 5, + "fixedPoint": [ + 0.49847645568045507, + -0.16666666666666666 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "haHIW-q7n6QVdHXZotrIs", + "type": "arrow", + "x": 1219.281837388122, + "y": 1849.8530642178687, + "width": 63.64917348932386, + "height": 106.22133602990425, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0z", + "roundness": null, + "seed": 1942800811, + "version": 94, + "versionNonce": 1841953355, + "isDeleted": false, + "boundElements": null, + "updated": 1753875530231, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -63.64917348932386, + 0 + ], + [ + -63.64917348932386, + 106.22133602990425 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "M5k2TyXDFSTbcONR3_oYn", + "focus": 0.001999999999998181, + "gap": 5.119570294468062, + "fixedPoint": [ + -0.01801615881266974, + 0.4990000000000009 + ] + }, + "endBinding": { + "elementId": "M7k_Z5kYu3t1FnavHFJGL", + "focus": -0.14253074926994055, + "gap": 5.000000000000455, + "fixedPoint": [ + 0.4287346253650275, + -0.1666666666666818 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "juxzuCisiZpqa8dgvh842", + "type": "arrow", + "x": 1476.8309882130213, + "y": 1992.1550068949502, + "width": 0.5484200377702564, + "height": 43.29658045751421, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b10", + "roundness": null, + "seed": 791378475, + "version": 12, + "versionNonce": 683564843, + "isDeleted": false, + "boundElements": null, + "updated": 1753875550023, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0.5484200377702564, + 43.29658045751421 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "sI_O_IQsYDQV1bTLL-FtU", + "focus": 0.010776566991911271, + "gap": 5, + "fixedPoint": [ + 0.49847645568045507, + 1.1666666666666743 + ] + }, + "endBinding": { + "elementId": "NBm5sqguv8PpxQU20WkR0", + "focus": 0.01096709251928693, + "gap": 5.02074840108668, + "fixedPoint": [ + 0.499508087162973, + -0.025517763869312503 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "pmNl_ulsPA1kY4Nr_bz6R", + "type": "arrow", + "x": 1372.0683517162795, + "y": 2129.944784848941, + "width": 36.23296703296705, + "height": 161.16642946053435, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b11", + "roundness": null, + "seed": 1301872581, + "version": 179, + "versionNonce": 861821419, + "isDeleted": false, + "boundElements": null, + "updated": 1753875558707, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -36.23296703296705, + 0 + ], + [ + -35.99320323937832, + 161.16642946053435 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "NBm5sqguv8PpxQU20WkR0", + "focus": 0.0011111111111101006, + "gap": 5.119570294468062, + "fixedPoint": [ + -0.018530518739904592, + 0.49944444444444497 + ] + }, + "endBinding": { + "elementId": "aZYFW39uE-ddOrIJg4Q1w", + "focus": -0.272677765157316, + "gap": 5, + "fixedPoint": [ + 0.3634550190556749, + -0.16666666666666666 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "mEjXydzY8qFO1xZnOp49N", + "type": "arrow", + "x": 1582.8990708089468, + "y": 2129.944784848941, + "width": 36.2243610093235, + "height": 159.01739541821644, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b12", + "roundness": null, + "seed": 1983365381, + "version": 158, + "versionNonce": 161203813, + "isDeleted": false, + "boundElements": null, + "updated": 1753875565717, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 36.2243610093235, + 0 + ], + [ + 35.72495909301324, + 159.01739541821644 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "NBm5sqguv8PpxQU20WkR0", + "focus": -0.0011111111111101006, + "gap": 5.119570294468062, + "fixedPoint": [ + 1.0185728528749645, + 0.49944444444444497 + ] + }, + "endBinding": { + "elementId": "kdsVG_4iF2Wd07odvwLQ2", + "focus": 0.27102389051677084, + "gap": 4.999999999999545, + "fixedPoint": [ + 0.6359753196358411, + -0.1666666666666515 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "EbrkkG2J9ExV_-oeOaj01", + "type": "arrow", + "x": 1359.7189367804726, + "y": 2331.111214309475, + "width": 11.234999179153874, + "height": 66.58116440124786, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b13", + "roundness": null, + "seed": 672374699, + "version": 51, + "versionNonce": 940038053, + "isDeleted": false, + "boundElements": null, + "updated": 1753875572956, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 33.29058220062416 + ], + [ + -11.234999179153874, + 33.29058220062416 + ], + [ + -11.234999179153874, + 66.58116440124786 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "aZYFW39uE-ddOrIJg4Q1w", + "focus": 0.0011501532880770307, + "gap": 5, + "fixedPoint": [ + 0.4994249233559604, + 1.1666666666666667 + ] + }, + "endBinding": { + "elementId": "9NYyjoEsTlsEjfndiC-Lp", + "focus": -0.1454844898862068, + "gap": 5, + "fixedPoint": [ + 0.4272577550568954, + -0.0870762682424206 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "fDeHTNVlKErRUFgnQQLja", + "type": "arrow", + "x": 1360.978849771017, + "y": 2465.113305226315, + "width": 10.83538653943765, + "height": 53.25430084716163, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b14", + "roundness": null, + "seed": 1910674027, + "version": 46, + "versionNonce": 1360665611, + "isDeleted": false, + "boundElements": null, + "updated": 1753875580036, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 26.627150423581043 + ], + [ + -10.83538653943765, + 26.627150423581043 + ], + [ + -10.83538653943765, + 53.25430084716163 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "9NYyjoEsTlsEjfndiC-Lp", + "focus": 0.0011551052355574468, + "gap": 5, + "fixedPoint": [ + 0.4994224473822205, + 1.0870762682424204 + ] + }, + "endBinding": { + "elementId": "71Ht_PTyAdrkBMvqGR4sk", + "focus": -0.1283406086517011, + "gap": 5, + "fixedPoint": [ + 0.43582969567414853, + -0.08652700100485027 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "XpyHTnop9Vi3FEcyiCxdV", + "type": "arrow", + "x": 1596.3458462880894, + "y": 2328.962180267157, + "width": 8.84559202995797, + "height": 67.5332279777549, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b15", + "roundness": null, + "seed": 1935030501, + "version": 96, + "versionNonce": 1459602853, + "isDeleted": false, + "boundElements": null, + "updated": 1753875587911, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 33.76661398887745 + ], + [ + -8.84559202995797, + 33.76661398887745 + ], + [ + -8.84559202995797, + 67.5332279777549 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "kdsVG_4iF2Wd07odvwLQ2", + "focus": 0.0012262078987447058, + "gap": 5, + "fixedPoint": [ + 0.49938689605062686, + 1.1666666666666667 + ] + }, + "endBinding": { + "elementId": "4gSOAtuIfBbIk34dTyZZI", + "focus": -0.19757730224793554, + "gap": 5, + "fixedPoint": [ + 0.4012113488760324, + -0.08541333299587064 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "NUm6llHNMUlzhyloFTuEy", + "type": "arrow", + "x": 1603.738777648421, + "y": 2465.0342782857488, + "width": 12.74933588868248, + "height": 51.69819902639938, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b16", + "roundness": null, + "seed": 701760619, + "version": 83, + "versionNonce": 2004663525, + "isDeleted": false, + "boundElements": null, + "updated": 1753875592749, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 25.84909951319969 + ], + [ + -12.74933588868248, + 25.84909951319969 + ], + [ + -12.74933588868248, + 51.69819902639938 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4gSOAtuIfBbIk34dTyZZI", + "focus": 0.0012092726957541053, + "gap": 5, + "fixedPoint": [ + 0.4993953636521242, + 1.0854133329958733 + ] + }, + "endBinding": { + "elementId": "SAo0hlL718Cvs6_59hYaz", + "focus": -0.15901918855032848, + "gap": 5, + "fixedPoint": [ + 0.42049040572483537, + -0.08629346072512524 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "PVEkjge-uUsoky8quLmjf", + "type": "arrow", + "x": 1160.7042780769352, + "y": 1996.0744002477734, + "width": 0.970497882453401, + "height": 524.6925309190758, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b17", + "roundness": null, + "seed": 1471100421, + "version": 85, + "versionNonce": 723743819, + "isDeleted": false, + "boundElements": null, + "updated": 1753875615913, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0.970497882453401, + 524.6925309190758 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "M7k_Z5kYu3t1FnavHFJGL", + "focus": 0.0037726708079201597, + "gap": 5, + "fixedPoint": [ + 0.4986219897273833, + 1.1666666666666667 + ] + }, + "endBinding": { + "elementId": "Q_dA-geezaoTYyr7ZrKDN", + "focus": 0.20076561016337954, + "gap": 5, + "fixedPoint": [ + 0.6000390980381705, + -0.09132298205693039 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "AwM8iRmy30ryZdlgPkdp7", + "type": "arrow", + "x": 1360.914634892259, + "y": 2586.1530365395074, + "width": 274.0688260576642, + "height": 115.14284154298366, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b18", + "roundness": null, + "seed": 226440235, + "version": 110, + "versionNonce": 1909610955, + "isDeleted": false, + "boundElements": null, + "updated": 1753875624542, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 115.14284154298366 + ], + [ + -274.0688260576642, + 115.14284154298366 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "71Ht_PTyAdrkBMvqGR4sk", + "focus": 0.0011805591214758162, + "gap": 5, + "fixedPoint": [ + 0.4994097204392608, + 1.0865270010048425 + ] + }, + "endBinding": { + "elementId": "Si_MJSNd35lzcJmCKJA02", + "focus": -0.6486264936600363, + "gap": 5, + "fixedPoint": [ + 1.074548873892424, + 0.1756867531699762 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "AbENH2oeFS_TbvTMA0n0p", + "type": "arrow", + "x": 1594.6232627737957, + "y": 2584.6742953593666, + "width": 507.77745393920077, + "height": 137.8568995786727, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b19", + "roundness": null, + "seed": 1215978539, + "version": 326, + "versionNonce": 34719051, + "isDeleted": false, + "boundElements": null, + "updated": 1753875636886, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 137.8568995786727 + ], + [ + -507.77745393920077, + 137.8568995786727 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "SAo0hlL718Cvs6_59hYaz", + "focus": -1.570633445767352, + "gap": 14, + "fixedPoint": [ + 0.44226482128107153, + 1.0862934607251253 + ] + }, + "endBinding": { + "elementId": "Si_MJSNd35lzcJmCKJA02", + "focus": 0.6802226343139283, + "gap": 14, + "fixedPoint": [ + 1.074548873892424, + 0.840111317156973 + ] + }, + "startArrowhead": null, + "endArrowhead": "triangle", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff", + "lockedMultiSelections": {} + }, + "files": {} +} \ No newline at end of file diff --git a/docs/en_US/images/auto_update_desktop_app.png b/docs/en_US/images/auto_update_desktop_app.png index 3c8b0207f356a7cfd131057b81490f5179c43b2d..4579d5b3edae0462aea98ab8d02347d2669b6366 100644 GIT binary patch literal 156038 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